测试与正确性论证
通过实际的测试样例来测试代码是检查代码正确性最常见的方法。通过实际的运行,可以检验程序的基本功能,还能发现一些只看代码难以发现的问题,运行效率和使用体验也难以仅从代码检验。但是例子是无穷多的,枚举所有实际情况是不现实的,能做的仅是测试到所有类别。
正确性论证从理论层面证明了工程的正确性。但是论证是有难度的,比样例测试更加耗费时间和精力。而且也人可能出错,保证论证准确又要花更多精力。
OCL语言与JSF
OCL(object constraint language)对象约束语言,用来进行约束定义的,形式化的无二义的语言。主要是在建模时说明建模元素的有关细节,例如:约束,前置条件,后置条件等。
用OCL包含四种基本语言要素:类型(基本类型,高级类型),操作,表达式,语句。
相同点:
相似性:
OCL与JSF都是形式化的约束语言,消除了二义性。
OCL主要包括不变量,前置条件,后置条件以及监护规则,
JSF对应有repOK(),REQUIRES,EFFECTS以及MODIFIES。
不同点:
OCL是统一建模语言(UML) 模型的规则,作为对图形符号的补充。
OCL规定更详细复杂。
UML
UML类图
UML顺序图
UML状态图
学期总结
四个模块的知识
java面向对象基础:基础。学习java语法,继承,正则表达式。大致了解工程的标准与理念。
多线程:多线程程序设计,考虑多线程之间的同步互斥问题。
规格化设计:通过规格来约束程序,提高工程质量。定义标准,便于合作。
测试与论证:通过覆盖性测试和正确性论证来测试和保证程序的正确性。
程序梳理
前几次的作业主要都在学习新的东西:java,正则,继承,多线程,文件操作等。
从开始检查程序设计原则时我才开始注意功能以外的地方,程序的风格(变量名,方法名的格式,空行等),方法规模和类规模的合适大小,类的数量,更方便继承的写法,异常处理的习惯等。
很多写法都是从阅读别人代码中学到的(当然前提是代码好读),有时直到发现我的bug别人以这种方式应对才会认为这种写法合理。课上讲的虽然增进了了解,但难以直接体现在代码上(我好菜啊)。
工程化开发
个人感觉对工程化开发的理解还是很浅显。
就是要明确地区分模块功能,确定统一合理的代码风格,利用工程方法(或者叫相应工具吧)进行分析和测试。而这几点都需要锻炼才能做得更好。
期望和建议
只是一些胡乱的设想
期末公开相关人名单。
先有一次规格设计,下一次再程序设计。