规格设计的发展历史
软件工程发展始于1950年左右,目的在于使用工程化的方法来组织,管理软件的开发。而所谓规格,正式一种形式, 工程化的设计方式。包括:需求分析,功能描述,算法设计,编程,测试和维护。软件的规格化是提高软件可靠性的重要方式之一,当软件的规模随着软件行业的成熟与发展,软件系统的复杂性使得错误出现几率大幅度提升,这个问题的解决也日益困难。
规格化设计是随着面向对象程序设计的火热而发展起来的,可以有效提高程序的规范性以及程序的模块化划分,使得程序数据更加安全,软件的可维护性得到提高。
规格 bug
前两次作业,查看我代码的同学很体贴,没有在规格上给我扣分。
Requires不完整 | Modifies不完整 | Effects不完整 | Requires逻辑错误 | Modifies逻辑错误 | Effects逻辑错误 | Effects为实现算法 | JSF不符合规范 | 总规格bug数量 | ||
第9次 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
第10次 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
第11次 | 0 | 0 | 0 | 1(22) | 0 | 0 | 1(36) | 2 |
规格改进
改进前:
public Request(double t, Point s, Point d)
{
/**@REQUIRES: t>=0; 0<=s.x<80; 0<=s.y<80; 0<=d.x<80; 0<=d.y<80;
* @MODIFIES: this.time; this.src; this.dst; this.start; this.end; this.str;
* @EFFECTS:
* init the Request's properties;
*/
改进后:
public Request(double t, Point s, Point d)
{
/**@REQUIRES: t>=0; 0<=s.x<80; 0<=s.y<80; 0<=d.x<80; 0<=d.y<80; s.equals(d) == false;
* @MODIFIES: this.time; this.src; this.dst; this.start; this.end; this.str;
* @EFFECTS:
* init the Request's properties;
*/
改进前:
public Light(TaxiGUI gui) {
/**
* @REQUIRES: None;
* @MODIFIES: this;
* @EFFECTS: this.gui == gui;
*/
改进后:
public Light(TaxiGUI gui) {
/**
* @REQUIRES: gui != null;
* @MODIFIES: this;
* @EFFECTS: this.gui == gui;
*/
改进前:
private void go(int dstx,int dsty){
/**@ REQUIRES: 0<=dstx<80; 0<=dsty<80;
@ MODIFIES: None
@ EFFECTS: pre_x==\old(x) && pre_y==\old(y) && x==dstx && y==dsty;
@ */
改进后:
private void go(int dstx,int dsty){
/**@ REQUIRES: 0<=dstx<80 && 0<=dsty<80 && ((dsx==this.x && (dsty==this.y+1||dsty==this.y-1))||(dsy==this.y && dstx==this.x+1||dstx==this.x-1)));
@ MODIFIES: None
@ EFFECTS: pre_x==\old(x) && pre_y==\old(y) && x==dstx && y==dsty;
@ */
改进前:
lightControl(long timeGap)
{
/**
* @REQUIRES : None;
* @MODIFIES : this.timeGap;
* @EFFECTS : this.timeGap==timeGap;
*/
改进后:
lightControl(long timeGap)
{
/**
* @REQUIRES : timeGap>0;
* @MODIFIES : this.timeGap;
* @EFFECTS : this.timeGap==timeGap;
*/
改进前:
public static void fileWriter(String file,String str)
{
/**
* @REQUIRES:
* file!=null;
* File(file).exist;
* @MODIFIED: File(file);
* @EFFECTS: write str to end of File(file);
*/
改进后:
public static void fileIn(String fileName,String str)
{
/**
* @REQUIRES:
* File(fileName).exist==true;
* @MODIFIED: File(fileName);
* @EFFECTS: File(fileName)!=\old(File(fileName));
*/
体会心得
REQUIRES需要我们看传到方法里的参数有哪些限制条件;MODIFIES要查看这个方法里需要改变的变量;EFFECTS:对于需要修改的变量,观察它是如何变化的,从而得到它的布尔表达式。
通过这几次写出租车系统的作业,不仅仅提高我编写代码的水平以及对加深我对面向对象这中思维的理解,也通过了这几次作业让我对规格化设计有了新的理解与认识。