软件测试——进程调度(短作业优先调度算法+先来先服务算法)测试
生活随笔
收集整理的這篇文章主要介紹了
软件测试——进程调度(短作业优先调度算法+先来先服务算法)测试
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
源代碼
被測代碼
Schedule
package net.mooctest;import java.util.ArrayList; import java.util.List;public class Schedule {public List<Double> FCFS(List<Work> works) {double avgCircleTime = 0;double avgCircleTimeWP = 0;List<Double> lst = new ArrayList<Double>();for (int i = 0; i < works.size(); i++) {// works.get(i).getArrivalTime();// works.get(i).getServiceTime();if (i != 0) {works.get(i).setBeginTime(works.get(i - 1).getEndTime());} else {works.get(i).setBeginTime(works.get(i).getArrivalTime());}works.get(i).setEndTime(works.get(i).getBeginTime()+ works.get(i).getServiceTime());avgCircleTime += works.get(i).getCircleTime();avgCircleTimeWP += works.get(i).getCircleWPTime();}avgCircleTime /= works.size();avgCircleTimeWP /= works.size();lst.add(avgCircleTime);lst.add(avgCircleTimeWP);return lst;}/*** 改后的短作業(yè)優(yōu)先調度算法* * @param works* @return*/public List<Double> SJF(List<Work> works) {List<Double> lst = new ArrayList<Double>();double avgCircleTime = 0;double avgCircleTimeWP = 0;List<Work> ins = new ArrayList<Work>();int i = 0;int counter = 0; // 已完成作業(yè)的計數(shù)器// 判斷是否已經(jīng)把所有的作業(yè)都處理完畢while (counter < works.size()) {// 找到所有未執(zhí)行,且到達時間小于i的作業(yè)for (int j = 0; j < works.size(); j++) {if (works.get(j).isIn())continue;if (works.get(j).getArrivalTime() <= i) {ins.add(works.get(j));}}if (ins.isEmpty()) {i++;} else {ins = sortByServiceTime(ins);// 將當前已到達的作業(yè)中,服務時間最短的作業(yè)加入到CPU執(zhí)行Work now = ins.get(0);now.setBeginTime(i);now.setEndTime(now.getBeginTime() + now.getServiceTime());now.setIn(); // 標記作業(yè)已調度counter++;i = now.getEndTime(); // 更新當前時間ins.clear(); // 清空臨時數(shù)組ins}}for (int m = 0; m < works.size(); m++) {avgCircleTime += works.get(m).getCircleTime();avgCircleTimeWP += works.get(m).getCircleWPTime();}avgCircleTime = avgCircleTime / works.size();avgCircleTimeWP = avgCircleTimeWP / works.size();lst.add(avgCircleTime);lst.add(avgCircleTimeWP);return lst;}/*** 對加入到系統(tǒng)中的作業(yè)依據(jù)服務時間多少進行排序<BR>* 然后直接返回* * @param ins* @return ins*/public static List<Work> sortByServiceTime(List<Work> ins) {for (int i = 0; i < ins.size(); i++) {for (int j = i + 1; j < ins.size(); j++) {Work aw = ins.get(i);int a = aw.getServiceTime();Work bw = ins.get(j);int b = bw.getServiceTime();if (a > b) {ins.remove(j);ins.add(i, bw);}}}return ins;} }Work
package net.mooctest; public class Work {/** 作業(yè)名*/private String name;/** 作業(yè)到達時間*/private int arrivalTime;/** 作業(yè)服務時間*/private int serviceTime;/** 開始執(zhí)行時間*/private int beginTime;/** 完成時間*/private int endTime;/** 作業(yè)是否調入系統(tǒng)*/private boolean in=false;/*** 作業(yè)已調入*/public void setIn(){this.in=true;}/*** 判斷作業(yè)是否已調入系統(tǒng)* @return*/public boolean isIn(){return this.in;}/*** Constructor* @param name* @param t1* @param t2*/public Work(String name,int t1,int t2){this.name=name;this.arrivalTime=t1;this.serviceTime=t2;}/*** 設置開始執(zhí)行時間* @param t*/public void setBeginTime(int t){this.beginTime=t;}/*** 獲取開始時間* @return*/public int getBeginTime(){return this.beginTime;}/*** 設置完成時間* @param t*/public void setEndTime(int t){this.endTime=t;}/*** 獲取結束時間* @return*/public int getEndTime(){return this.endTime;}/*** 計算“周轉時間”=完成時間-到達時間* @return int*/public int getCircleTime(){return this.endTime-this.arrivalTime;}/*** 計算“帶權周轉時間”=周轉時間/服務時間* @return*/public double getCircleWPTime(){return ((double)getCircleTime())/this.serviceTime;}/*** 計算"響應比"=(等待時間+要求服務時間)/要求服務時間=響應時間/要求服務時間* @return*/public int getPriority(){//TODOreturn 0;}/***獲取到達時間* @return*/public int getArrivalTime(){return this.arrivalTime;}/*** 獲取服務時間* @return*/public int getServiceTime(){return this.serviceTime;} }測試代碼
ScheduleTest
package net.mooctest;import static org.junit.Assert.*;import org.junit.Test;import java.util.ArrayList; import java.util.List;public class ScheduleTest {@Testpublic void testFCFS() {Schedule s = new Schedule();List<Work> l = new ArrayList<>();l.add(new Work("P1",0,7));l.add(new Work("P2",2,4));l.add(new Work("P3",4,1));l.add(new Work("P4",5,4));List<Double> outcome = s.FCFS(l);assertEquals(8.75,outcome.get(0),0.001);assertEquals(3.5,outcome.get(1),0.001);}@Testpublic void testSJF01(){Schedule s = new Schedule();List<Work> l = new ArrayList<>();l.add(new Work("P1",1,7));l.add(new Work("P2",2,4));l.add(new Work("P3",4,1));l.add(new Work("P4",5,4));l.add(new Work("P5",1,5));l.add(new Work("P6",2,4));l.add(new Work("P7",4,1));l.add(new Work("P8",5,6));l.add(new Work("P9",3,3));List<Double> outcome = s.SJF(l);assertEquals(14.111,outcome.get(0),0.001);assertEquals(3.518,outcome.get(1),0.001);}@Testpublic void testWork(){assertEquals(0,new Work("P1",0,5).getPriority());}}測試結果
參考文章
幕測平臺_使用Junit測試Schedule_進程_短作業(yè)優(yōu)先調度算法_先來先服務算法
總結
以上是生活随笔為你收集整理的软件测试——进程调度(短作业优先调度算法+先来先服务算法)测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《数据库系统实训》实验报告——函数的应用
- 下一篇: 《数据库系统实训》实验报告——事务的应用