基于前置条件和后置条件对输入划分并产生抽样测试数据,检查方法执行输出是否满足后置条件。
优点:实现相对容易,只需要不断构造测试样例进行测试即可。
缺点:1.覆盖性较差,某些bug可能很难通过测试查出来。
2.利用测试对于多线程程序来说,一些bug无法复现,致使调试困难。
针对格式化的规格和代码实现,人工方式对代码逻辑进行分析,确认是否所有满足前置条件的输入都能产生满足后置条件的结果。
优点:正确性论证是一种折中的方法,是形式验证与自然语言层次逻辑推理相结合的结果。
缺点:1.由于正确性论证覆盖性较强,论证过程会非常繁琐复杂。
1.无法保证自然语言层次逻辑推理的严谨性。
二者都对对象进行约束,说明建模元素的有关细节比如:前置条件,后置条件。OCL语言作为一种形式化语言,比JSF规格成熟很多,描述起来方便许多。JSF规格的书写规范不够明确,造成了规格作业完成的各种问题。
第一单元主要是为了给我们熟悉java编程,以及初步理解面向对象程序设计的特点,第二单元就开始了多线程的设计,在此基础上第三单元增加了规格化设计的要求,第四单元又进行了正确性论证。继承/抽象设计和SOLID设计原则一直贯穿四个单元的练习。
虽然做了多次代码作业,但我一直以为自己没多大提高(因为没用心完成),不过当从第十三次作业开始对第三次作业加规格的时候,我才意识到这门课训练了什么,对于我来说就是设计的思想。前几次作业由于对java不熟,对面向对象思想没什么理解,再加之时间紧,所以作业的设计基本都是在想算法,没去认真规划类和方法,debug的时候就想是在打补丁,东一块西一块的。毕竟能完成,不被报无效是底限,结果代码写得又臭又长,可维护性相当差。后面的几次作业就相对好了一点,因为担心可扩展性差,我在设计的时候就多考虑了些类之间的交互,缩短的单个方法的代码长度,降低方法的复杂程度。但我目前的水平离课程训练的目标相距甚远,还需要加紧多进行一些练习。
如今,团结协作成为了程序开发不可或缺的条件,工程化开发能尽可能多地发挥合作优势,提高团队效率。其实从上学期计组开始,我就已经初步地感受到工程化开发的各种特点和优势,这学期的体会深刻了许多。为了更高的适应行业和时代发展的潮流,我们需要遵循各种工程化开发的规定。不仅如此,对工程化开发的学习和实践也能规范自身的编程习惯,让自己始终能保持一个清晰的思路,使开发变得更加高效。
在这门课中,我确实学到了许多,但从第一次代码作业开始就一直让我痛苦的是,我一直不知道我写的代码在规范方面到底处于怎样的水平。在互测中,由于我一直处于中间层次,风格方面我没有看到过真正值得我学习的。因此我希望课程组能够在一些没有连续性的作业结束以后,给出在设计思路、代码书写规范方面俱佳的作业以供参考。这样,有了一个标准,我就能向着对的方向不断前进。
原文:https://www.cnblogs.com/cinyinei/p/9194103.html