一、规格化设计的大致发展历史及受到重视的原因
1968年秋季,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程(software engineering)这个概念。软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。通过不断努力,人们逐渐解决了软件危机,并认识到规格化设计的重要性,在此期间,一些重要的文档格式的标准被确定下来,包括变量、符号的命名规则以及源代码的规范式。后来随着发展,这些规范逐渐形成了软件开发中的规格化设计,并且由于其高效性与高可靠性,越来越受到软件开发人员的重视。
规格化设计之所以能够受到软件开发人员的重视,主要是因为它能大幅度提高软件工程的质量。例如在大型软件开发中,随着时间的推移可能有越来越多的新功能被要求添加,但是随意修改代码会造成代码的不可靠,只有用抽象与规格的方法设计程序,才能保证代码的高可靠性与易维护性。规格实际上是一种契约化编程手段,将代码的功能进行抽象,使设计人员无需关注代码实现的细节,从而提高设计效率与正确性。
二、bug
第七次作业有效,第九次,第十次无效。
第七次作业未加可视化,导致测试者难以判断,提出许多bug。其实只需将可视化操作加上即可。
由于未能及时发现bug和多线程问题的复杂性,延误了后两次作业。
前置条件的不好的写法有,随意使用null,none等,使用自然语言时有可能一时疏忽导致产生二义性。
三、规格bug五个不好的后置条件写法:
1.简单函数的的功能,即便很短也要写。
this.state ==> this.state = i
2.自然语言 ==> 改成用数据变现的对应关系
3.写方法内涵的算法 ==> 只关注最后需要获得的数据的限制
4.对于多线程需要加入多线程的后置条件
更改前
/** @ EFFECTS:randomly driving refer to flowmap @ */
更改后
/** @ EFFECTS:randomly driving refer to flowmap @ THREAD_EFFECTS:\locked(guigv.flowmap) ;\locked(guigv.m.graph) @ */
如果能在写代码之前做好规格设计,那么在实现时只要关注函数实现符合规格即可.但是前提是规格设计是正确的,在自己写的时候会出现因为设计上的问题,要改动实现,增加或者减少些属性,那么应该先改变好规格,然后根据规格来实现代码.不要改了代码再去修改规格.
规格应该帮助阅读者理解代码,同时要保持严谨,严格用布尔表达式可以保证规格的正确性,但是有时比代码还不好看懂.用一点自然语言加上布尔表达式好像更好理解一些.