oo第三次博客作业
一.规格化设计对的发展历史
20世纪60年代以前,计算机刚刚投入实际使用,软件设计往往只是为了一个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模比较小,很少使用系统化的开发方式,此时的代码更多的是私人性质的,满足个人要求的程序。
20世纪50年代后期,当时出现了各种语法分析程序自动生成器以及语法制导的编译方法,使编译系统的开发从“手工艺制作方式”发展成具有牢固理论基础的系统方法。
20世纪60年代后期,针对当时所谓的“软件危机”,人们提出种种解决方法,如采用工程方法来组织、管理开发过程和通过钻研规律建立严密的理论以指导开发实践。
经过30多年的研究和应用,如今人们在规格化设计取得了大量、重要的成果,从早期最简单的一阶谓词演算到现在应用于不同领域、不同阶段的基于逻辑、状态机、网络、进程、代数等众多规格形式化方法,它的发展趋势是逐渐融入设计开发的各个阶段,从需求分析、功能描述、算法设计、编程、测试直到维护。
规格化设计对代码的创作者和使用者都有重要的作用。对于编程者,规范的设计有助于架构的建立和调整,有助于完善修正细节,有助于未来的维护和扩展;对于使用者,规格化的呈现有助于理解剖析,避免不必要的误解和分歧,同时也利于高效的阅读和学习。
通过规格化设计也可以同步多人的设计方法,避免产生设计上的漏洞。规格化的程序不仅更易于调试,也更容易被维护,有利于程序的长远生存和发展。这些都是规格化设计的优势所在。
二. 规格bug统计
功能Bug | 规格bug | |
oo9 | 0 | 0 |
oo10 | 0 | 0 |
oo11 | 2 | 2 |
oo11次作业的bug分析
bug类别 | bug内容 | 出现位置 | 代码行数 |
规格bug | MODIFIES为空,啥都没写 | Task里的pick | 132 |
规格Bug | REQUIRE没有写对 | taxi里的reOK | 161 |
功能bug | 判断连通的代码,两种出租车都选择的是同一处: | taxi里的run | 707 |
功能bug | 可追踪出租车服务时运行最短路径时是可以通过存在但被关闭的道路的,但是该程序无法通过,在遇到被关闭道路时会重新选择其他道路运行。 | taxi里的getpath | 443 |
三.原因
首先,要认真对待jsf的书写。jsf对我们编写方法起到了规范和约束的重要作用,因此必须对其给出足够的重视,一个端正的态度是写好JSF的第一步。
其次,要增加复查环节,当依照相应的jsf编写完方法代码后,需要带入规格进行验证,以保证其正确性。
四.jsf的修改
1.
原来:
REQUIRES为None
修改:
2.
原来:
REQUIRES为None
修改:
3.
原来:
REQUIRES为None
修改:
4.
原来:
REQUIRES为None
修改:
5.
原来:
REQUIRES为None
修改:
五.聚焦关系
第九次和第十次无
第十一次,功能bug2个,规格Bug2个
由上表看出,功能Bug和规格Bug的聚集关系并不大。原因也许是,功能Bug的测试较为困难,但许多规格Bug是显而易见的,因此测试者偏向于更多地去报规格Bug,而只能在边角处挑一些功能Bug;这些边角功能所在的方法都比较简短,通常不存在规格Bug。
六. 感想与体会
教会同学认真对待规格,模块化编程本是好事,这是从学生代码走向工程性代码的必经之路