一、规格化设计的发展历史
20世纪60年代,软件出现严重的危机Dijkstra提出了goto语句的危害,由此引发了软件界长达数年的论战,并产生了结构化的程序设计方法。随着计算机
技术的发展,结构设计化语言和结构化分析已经无法满足用户的需求,OOP由此应运而生,即面向对象的程序设计。面向对象程序设计的诞生是程序设计方法学的一场革命,大大提高了开发效率,减少了软件开发的复杂度,提高了软件的可维护性,可扩展性。1990年以来,面向对象分析、测试、度量和管理研究都得到长足的发展。规格化设计随其而生,为了提高程序的规范性,对类。方法等进行规范化设计,有利于模块化的划分。
二、三、列举并分析规格的bug
佛系测试法,若是bug和我有缘,那么他会自己跑出来的,测试者可能是抱着这种心态,很幸运,他们没有给我报JSF的bug,好人一身平安!!!
四、 列举5个前置条件和5个后置条件的不好写法,并给出改进写法
1.
1 public int hanging(boolean[] d) { 2 /**@REQUIRES:d.contain(true) 3 * @MODIFIES:point_x,point_y 4 * @EFFECTS: Based on flow, decide next step; 5 */ 6 int minT=101; 7 ArrayList<Integer> index = new ArrayList<Integer>(); 8 for(int i=0;i<4;i++) { 9 if(d[i] && map.getTarfic((i==0)?point_x-1:point_x,(i==3)?point_y-1:point_y,(i<2)?false:true)<=minT) {//UP 10 if(map.getTarfic((i==0)?point_x-1:point_x, (i==3)?point_y-1:point_y,(i<2)?false:true)==minT) { 11 index.add(i); 12 } 13 else { 14 minT=map.getTarfic((i==0)?point_x-1:point_x,(i==3)?point_y-1:point_y,(i<2)?false:true); 15 for(int j=0;j<index.size();j++) index.remove(j); 16 index.add(i); 17 } 18 } 19 } 20 return index.get(new Random().nextInt(index.size())); 21 22 }
像这个方法,主要作用的控制出租车的闲逛状态的运动,传入的是一个数组,表示上下左右的方向是否可走,require是要求传入数组至少包含一个true,effect则是判断闲逛状态的下一步位置。这个难写的主要原因是因为实现的逻辑太过于复杂,包括了很多的判断,循环,导致很难用形式化的语言来描述。
解决办法应该就是分解程序,将每一部分的逻辑更加简单。
2.
1 public void writeFile(boolean a) { 2 /**@REQUIRES:NONE; 3 * @MODIFIES:file; 4 * @EFFECTS: write into file; 5 */ 6 try { 7 FileWriter fw=new FileWriter(r.getName()+".txt",true); 8 String s = a?" 派单":" 车辆"; 9 fw.write("车辆编号:"+id +s+"位置:("+point_x+","+point_y+") 时刻:"+System.currentTimeMillis()+"\r\n"); 10 fw.close(); 11 System.out.println("车辆编号:"+id+s+"位置:("+point_x+","+point_y+") 时刻:"+System.currentTimeMillis()+"\r\n"); 12 } catch (IOException e) {} 13 }
这个方法的作用是为了向文件写入信息和向控制台输出信息。这个实在是不知道如何表示写文件和向控制台输出。
五、 第十一次作业被报了一个未实现迭代器,第九次作业被报了一个未能实现模拟接单,前者的问题是因为没有很好的理解迭代器的定义,后者的问题是因为不知道应该如何模拟接单。。。。:(
六、 在设计规格和撰写规格时的思路和体会
写规格的时候还是按照先把方法实现再来写规格,因为我觉得规格更难写XD,体会就是规格化设计确实能够帮助他人,其他程序猿更好地理解方法,或者是类的作用,除此之外,还有就是要简化你的每一个类,每一个方法,控制代码的复杂度,这样也更方便进行单元测试,同时这也会对以后我们写工程化代码的时候,和别人合作的时候提供更多的便利,好看工整的代码在哪都会受欢迎呢。
浙公网安备 33010602011771号