• oo第十二次作业


    一、规格化设计的大致发展历史

    规格是扎根于形式化的设计方法而产生的。

    最初的软件形式化方法源于二十世纪五十年代,及软件工程这一概念刚刚开始兴起的时代,对于工程间的协调管理,人们提出采用工程方法来组织、管理软件的开发过程并深入探讨程序和程序开发过程的规律,建立严密的理论。这一结构发展至今,规格已经形成一套完整的逻辑体系并融入软件开发的各个步骤,,从需求分析、功能描述(规约)、(体系结构/算法)设计、编程、测试直至维护。

    在二十世纪七十年代,规格产生了第二次分离,这一分离主要是针对于说明和体的分离,并开始出现前后置协调的雏形。这一次的分离使得规格可以更好的区分置换条件,以适应新兴的跨时代面向对象技术。

    二十一世纪初期开始,规格基本完善成如今的形式,并更加侧重于基于构件的对象使用和对象实现。应用现有的规格规范,软件可以轻松的实现分布式,跨平台,松耦合的开发需求。

    形式化方法的研究和应用已经有40多年的历史了,其产生是Dijkstra和Hoare在程序验证方面的工作和Scott,Stratchey以及其他学者在程序语义方面的工作基础上发展起来的,从最简单的形式化方法到80年代较为复杂的Z语言,直至形成具有代表性的形式规范语言——面向实时及分布式的LOTOS语言和面向对象的Z++语言等。形式化方法已经形成了较为完整的体系。

    早期的形式化方法主要局限于程序的形式化验证,早期的规范语言中,有两种有代表性的,由工具支持的语言是AFFIRM语言和OBJ语言,主要功能也是进行程序验证。80年代产生了Z语言和VDM语言这两种形式语言,它们都是基于模型的形式规范语言,它们有一个共同的弱点是较难确定该语言描述的软件总体结构和范围。80年代末期,形式化方法发展中的另一个有代表性的方向是对代数方法和软件技术结合的AMAST研究,HartmutEhrig领导研究并创造了ACT方法,开发了相应的使用环境。此外,使用代数方法的规范与语言还有一些较有影响的语言,比如PLUSS和FOOPS等。

    二、规格BUG

    作业次数

    规格bug

    名称

    9(无效)

    10

    1

    Effects不完整

    11

    0

    第十一次作业中JSF依然有不规范的地方,不过给我测试的同学放了我一马,十分感谢。不规范的列在下面。

    1.Effects不完整:

     /**
        * Requires:none;
        * Modifies:timelis;
        * Effects:timelis. add(request.time);
        **/ 
    改正后:
     /**
        * Requires:none;
        * Modifies:timelis,request;
        * Effects:timelis.conclude(request.time) == true && timelis.size()++;
        **/ 

    2.没有对变量进行限制:

     /**
      * Requires:none;
      * Modifies:guigv.taxilist.get(taxi).x,guigv.taxilist.get(taxi).y;
      * Effects:x = x1 ; y = y1 ;
      **/
    
    改正后:
    
     /**
      * Requires:x1 != null && y1 != null;
      * Modifies:guigv.taxilist.get(taxi).x,guigv.taxilist.get(taxi).y;
      * Effects:x = x1 ; y = y1 ;
      **/

    3.使用自然语言:

    /**
         * Requires:txt.nextline() != null;
         * Modifies:Line;
         * Effects:read txt;
        **/
    
    改正后:
    /**
         * Requires:txt.nextline() != null;
         * Modifies:Line;
         * Effects:Line.add(txt.nextline()) && Line.size()++;
        **/

    4.没有将异常处理写入Efficts

     /**
        * Requires:none
        * Modifies:Main.gui.SetLightStatus()
        * Effects:taxi.status = status;
        **/
    
    改正后:
     
    /**
        * Requires:none
        * Modifies:Main.gui.SetLightStatus(new Point(i,j), 2)
        * Effects:taxi.status = status || exceptional_behavior(xxx);
        **/

    三、规格bug分析:

    由于没有透彻理解规格的正确写法和作用,导致规格的写法很简陋,而且不能清楚表达自己的意思。经常使用自然语言,同时经常会有各种遗漏。主要原因是还不够熟练,代码水平也不够高,不能完全实现自己想要的功能。

    四、心得体会:

    相比于之前的作业,我认为自己还是有了进步的,但是仍然还和其他同学有很大的差距。我认为首先还得在设计阶段就不断完善自己的想法,不能埋头就开始写。还需要再加以勤奋的练习,希望勤能补拙,向优秀的同学靠拢。

  • 相关阅读:
    POJ2406【KMP-next数组】
    POJ2752【KMP-next数组含义】
    POJ3696【欧拉函数+欧拉定理】
    POJ3692【二分匹配】
    POJ3697【BFS】
    CodeForces599D【数学】
    CodeForces599C【贪心】
    HDU1829【种类并查集】
    HDU3038【种类并查集】
    POJ1182【种类并查集】
  • 原文地址:https://www.cnblogs.com/zhanghao16061096/p/9109929.html
Copyright © 2020-2023  润新知