分析本单元的测试过程
测试类型
黑箱测试
- 测试者不了解程序的内部情况,不需具备应用程序的代码、内部结构和编程语言的专门知识。只知道程序的输入、输出和系统的功能,这是从用户的角度针对软件界面、功能及外部结构进行测试,而不考虑程序内部逻辑结构。测试案例是依应用系统应该做的功能,照规范、规格或要求等设计。
- 在本单元的课程中就是根据 JML 规范来制定相应的测试用例,比如调用的 OKTest 方法便是黑箱测试的一种
白箱测试
- 测试应用程序的内部结构或运作,而不是测试应用程序的功能(即黑盒测试)。在白盒测试时,以编程语言的角度来设计测试案例。测试者输入资料验证资料流在程序中的流动路径,并确定适当的输出,类似测试电路中的节点。测试者了解待测试程序的内部结构、算法等信息,这是从程序设计者的角度对程序进行的测试。
- 我们在编写代码并进行调试的时候,无意识的大量使用了白箱测试,来检查程序是否按照我们期望的方式运行
单元测试
- 又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
功能测试
- 将软件分解为不同功能的组件,分别进行测试
集成测试
- 又称组装测试,即对程序模块采用一次性或增值方式组装起来,对系统的接口进行正确性检验的测试工作。整合测试一般在单元测试之后、系统测试之前进行。实践表明,有时模块虽然可以单独工作,但是并不能保证组装起来也可以同时工作。
单元测试,功能测试,集成测试主要是在测试粒度上的区分,从前往后从小粒度(函数)到大粒度(整体),全面多层次的完成对系统的测试
一般来说在编写代码时是从单元测试到功能测试到集成测试,在最后对拍环节则反之
压力测试
- 針對特定系統或是組件,為要確認其穩定性而特意進行的嚴格測試。會讓系統在超過正常使用條件下運作,然後再確認其結果。
回归测试
- 重复执行以前的全部或部分相同的测试工作
- 旨在检验软件原有功能在修改后是否保持完整
测试工具
教程推荐了 JUnit 工具,但由于其使用的复杂性,本人未使用测试工具
数据构造方法
主要是针对边界数据的构造和针对 JML 不同情况的测试
图模型构建和维护策略
第九单元
并查集维护相邻关系,动态维护三元环
第十单元
并查集维护相邻关系,删边则重建并查集,动态维护三元环
第十一单元
并查集维护相邻关系,删边则重建并查集,最短路算法在线计算包含特定节点的最小环
性能
第九单元第一次提交中没有采取动态维护的方法,而是根据规格每次询问单独查询,这导致几个强测点超时。在 BUG 修复中采取了动态维护的形式,通过了所有点
事实上规格只是用类似 Java 的语言描述了要求,而并不是限定了我们实现这个要求的方式。甚至如果直接使用规格的翻译,可能引起性能问题。对于同一个规格,可以有很多不同的实现,满足规格的要求即可。
OKTest
OKTest 是对于方法的黑盒测试。我们对于方法的前置条件,后置条件,以及调用方法所得到的结果都进行了检测,以保证方法的完整意义上的正确性,也相应检查了方法是否满足对应的规格。
学习体会
总体来说 JML 是一个令人又爱又恨的东西。爱的是它能够准确有效的描述需求,恨的是它的表述实在是有些复杂,不管是撰写 JML 还是阅读 JML 都是一件难事。
从这个小小的单元中我理解到了人与人之间合作沟通的难度:想要准确简约地描述需求并非易事。相信我们在以后的课程中能多一些准备和理解,从而更好的合作共赢!