OO尾声

测试与正确性论证的效果差异

  测试只能是根据规格对所有可能的情况的子集多次试验,而正确性论证是对指定的描述的所有可能的情况进行逻辑验证,更加严密。

  二者的优缺点:二者各有优势,互为补充

  测试是一种基于数据的验证方法,通过大量不同数据试图查出缺陷,需要花大量时间穷尽所有组合的可能,很难达到完整。

  正确性论证则是关注于设计规格本身,通过代码运行逻辑论证,将逻辑和规格直接进行比较,验证时间短,而且更有正确性的保证。

 


 

OCL语言

  对象约束语言(Object Constraint Language),简称OCL,是一种指示用户建模系统中的限制方式。它是UML可选的附加内容,可以用来更好地定义对象的行为,并为任何类元指定约束。在对象约束语言中,对象代表了系统的组件,它定义了完善的项目,约束代表限制,而语言并非是指一种正式的计算机语言。

  OCL是一种形式语言,可以应用于任何实现方式的非正规语言。对象约束语言对UML中图形或其他组件都没有控制权,它只是在使用时返回值。OCL并不能修改对象的状态,而是用来指示对状态的修改何时发生。OCL表达式以附加在模型元素上的条件和限制来表现对该对象的约束,其中包括附加在模型元素上的不变量或约束的表达式、附加在操作和方法上的前置条件和后置条件等。

  与JSF比较

  相似之处:①都是精确的,不具二义性的语言

          ②是一种形式语言,对OCL的表达式的计算不会影响系统状态,这一点与repOK类似。

          ③都有前置条件和后值条件。

  不同之处:JSF更注重于类的数据规格和方法规格。OCL更注重于对类的约束,永泰指示类的状态何时发生。

 


 

UML类图

 

UML顺序图

 

 

UML状态图

Elevator

 

Queue

 

 

 


 

学期总结

知识点

  第一单元主要是一些设计思想,类的抽象,属性私有化,接口,继承等等,第二单元是多线程的共享数据管理和冲突解决,只有掌握了第一单元的内容,封装好每个类,才能实现更好多线程的程序。第三单元是规格化设计。第四单元是单元测试和正确性论证,根据规格对每个方法进行测试和覆盖率检查,对每个类进行正确性论证。

设计的程序

①多项式加减

②傻瓜单电梯

③可捎带单电梯

④可捎带多线程电梯

⑤文件变更扫描器

⑥出租车调度

⑦可开关道路的出租车调度

⑧可开关道路和带有红绿灯的出租车调度

⑨可开关道路和带有可追踪出租车和红绿灯的出租车调度

  写多项式作业时,初次接触面向对象,写得很面向过程,测试时尽量穷尽组合。在之后的系列作业中,由于本身功能实现具有难度,虽然对各个类进行了封装,但是仍然没有很好的实现功能的划分,于是每次作业都对之前的作业进行了功能的完善和划分的小范围重构。从电梯到出租车的系列作业,从简单的两三个类到二十个类,在设计上已经能够更好地遵循SOLID设计原则。

  在测试上,开始学会对照测试树构造测试数据,学会写脚本生成测试数据。学习第四单元后学会了单元性测试,覆盖率更加广。

  而程序的质量是仍然有很大的进步空间的,尽管学习了正确性论证,但正确性论证仍然是根据代码规格论证的,而代码规格是根据已写好的代码完成的,故正确性论证依旧难以保证程序的正确性。

工程化开发

  工程化开发源于程序的不确定性、不断膨胀的代码规模,不断庞大的开发队伍。从开发角度,要解决的问题包括:提高开发生产效率;降低维护难度。

  要解决这样的问题,就需要制定开发规范,开发规范的目的是统一团队成员的编码规范,便于团队协作和代码维护。开发规范没有统一的标准,每个团队可以建立自己的一套规范体系。一个人做一件东西通常是随心所欲的,但是如果在生产线上批量生产,就要有人事先设计生产的各个环节,并在各个环节中实施管理。

  工程化开发则是需要实现这样一个过程,使得代码产生过程中满足隐含的原则、方法和技巧,来实现顺序、控制和检查机制,并很好的组织了人和工具面向工程开发。

对课程的期望和建议

   1.  总结每次作业指导书模棱两可的地方,将既定的新需求加入新作业指导书

   2.  助教们对同一问题应该有统一的回答,避免互测时信息冲突

   3.  对于作业问题,应该有统一答复和提醒的地方,避免不同群里信息不对称

   4.  课程设置上,特别是第三单元的JSF,希望能有更好的方式让同学们体会到规格化设计的思路。

   5.  能够关注一下学生的心理问题

posted @ 2018-06-18 15:45  橙好黄  阅读(265)  评论(2编辑  收藏  举报