第三次博客作业

本文介绍了软件规格化设计的发展历程及其重要性,分享了作者在出租车系统项目中的实践经验,包括对REQUIRES、MODIFIES和EFFECTS注释的改进,并总结了规格化设计的心得体会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

规格设计的发展历史

       软件工程发展始于1950年左右,目的在于使用工程化的方法来组织,管理软件的开发。而所谓规格,正式一种形式, 工程化的设计方式。包括:需求分析,功能描述,算法设计,编程,测试和维护。软件的规格化是提高软件可靠性的重要方式之一,当软件的规模随着软件行业的成熟与发展,软件系统的复杂性使得错误出现几率大幅度提升,这个问题的解决也日益困难。

      规格化设计是随着面向对象程序设计的火热而发展起来的,可以有效提高程序的规范性以及程序的模块化划分,使得程序数据更加安全,软件的可维护性得到提高。

 

规格 bug

      前两次作业,查看我代码的同学很体贴,没有在规格上给我扣分。

 

 Requires不完整Modifies不完整Effects不完整Requires逻辑错误Modifies逻辑错误Effects逻辑错误Effects为实现算法JSF不符合规范总规格bug数量 
第9次000000000 
第10次000000000 
第11次0 001(22)001(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:对于需要修改的变量,观察它是如何变化的,从而得到它的布尔表达式。

       通过这几次写出租车系统的作业,不仅仅提高我编写代码的水平以及对加深我对面向对象这中思维的理解,也通过了这几次作业让我对规格化设计有了新的理解与认识。

转载于:https://www.cnblogs.com/cttss/p/9112781.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值