1. 规格化设计
随着软件开发项目的工程量的逐步提升,为了保证良好的可移植性和传递性,便开始通过规格来降低程序交接的难度,使得每一个接手非本人程序的程序员也可以轻松读懂工程的目的以及各个类的概述,甚至每一个方法的实现过程和功能。在这一过程中,逐渐产生了规格的特性。就过程规格而言,有以下几个方面:1、独立性:针对一个规格抽象的实现与针对其他规格抽象的实现无关,相互之间不会产生影响。2、可修改性:当修改一个规格抽象的实现时,不需要对使用该抽象的其他任何规格抽象及其实现进行调整。3、平易近人性:不去阅读具体代码就可以了解方法功能和类的设计目标及行为。
2.规格类bug
缺少effects (对应方法行数:8)
3.产生原因:忘写了
4.规格写法改进
(1)确保time的正确性:
//修改前
public int waittime() {
/**
* @MODIFIES: NONE;
* @EFFECTS:
* \result == (700 - (System.currentTimeMillis() - time))
*/
}
//修改后
public int waittime() {
/**
* @Requires: this.time > 0
* @MODIFIES: NONE;
* @EFFECTS:
* \result == (700 - (System.currentTimeMillis() - time))
*/
}
(2)确保打印内容有意义
//修改前
public void print() {
/** @MODIFIES:this.file;
* @EFFECTS:
*/
}
//修改后
public void print() {
/** @Requires:this.reoOK() == true
* @MODIFIES:this.file;
* @EFFECTS:
*/
}
5.bug表格
方法名 | 功能bug数 | 规格bug数 |
BFS(taxi.java) | 2 | 0 |
run(scheduler.java) | 1 | 0 |
honorpuls(taxi.java) | 0 | 1 |
main(main.java) | 2 | 0 |
6.体会
由于我们并不是按照正确的类构造过程以及方法构造过程来写的程序,因此在写方法规格、数据规格的时候难免会陷入看着程序写规格的陷阱,这就导致了不能再规格书写的时候会有过多的细节展示,甚至是数据表示格式的暴露,这是很不安全的,因为自己永远不知道程序被用户拿到之后会有什么样的后果。另一方面,过程规格可以作为自己实现函数的一个纲领,有了纲领做起来事情才能有条有理,才不拆了东墙补西墙,最后产生连自己都无法把控的bug。