301
社区成员
发帖
与我相关
我的任务
分享黑箱测试不需要了解软件内部结构、实现细节和代码。黑箱测试关注的是输入数据和输出结果是否符合预期。测试无需编程知识,可以从用户的角度来进行,覆盖面广。但可能无法覆盖到所有的代码路径,无法发现代码内部的某些缺陷。
白箱测试需要了解软件的内部结构和代码实现,通过测试代码的各个路径、分支和逻辑流来验证软件的正确性。白箱测试可以覆盖到所有的代码路径,有助于发现代码中的隐藏错误和边界条件错误。但需要对代码有深入了解,编写和维护测试用例的成本较高。
单元测试是对软件系统的最小可测试部件进行测试,通常是对函数、方法或类进行独立验证。单元测试可以确保每个单元的功能正确性,并能快速定位和修复错误,保证代码的稳定性和质量。
功能测试是根据软件需求说明书,验证软件系统每个功能是否都能按预期正确工作。功能测试可以验证软件的功能是否符合预期需求,一般采用黑箱测试方法。
集成测试是将各个单独的模块按照设计要求组装成一个系统或子系统后进行测试,检测模块之间的接口和交互。集成测试可以发现模块之间的接口错误和集成问题,可以采用白箱测试或黑箱测试方法。
压力测试是通过超负荷的测试条件来验证系统的稳定性和性能,例如高并发、大数据量等。压力测试可以评估系统在极端条件下的表现,找出系统的瓶颈和最大承受能力,通常采用模拟大量用户请求、数据处理等场景。
回归测试是对软件进行修改后,重新进行测试,验证修改未引入新的错误。回归测试可以确保新代码没有破坏现有功能,软件质量得到保持,可以通过自动化测试工具实现。
数据构造要考虑到normal_behavior也要有exceptional_behavior情况,将各种情况都考虑进去,进行充分测试。同时也可以构造一些临界数据测试。如id数据类型是int,那么就可以用int类型的最大值和最小值进行测试,判断数据是否会溢出。
架构则基本上与JML保持一致,采用邻接图的方式来构件图,为了保证性能大多数存储结构采用Hashmap。每次加入Person/Tag/Message时维护相关值以便查询。
在第二次作业寻找最短路径时我使用了迪杰斯特拉算法,但错误估计了时间复杂度导致bug,最后使用bfs寻找最短路径来优化性能。规格只是说明了必须保证的内容,但实现完全可以灵活多样,像为了优化性能维护了valueSum等值来避免重复运算。这种实现既保证了规格要有,又提高了性能。
通过JML规格构建Junit测试比较清晰,只需将JML规格保证不变的内容全部检查一遍,并检验结果是否正确即可。在先导课Junit测试中,我时常遇到不知道检查什么的问题,所以经常漏检查内容。但通过JML规格测试就可以保证全面检查。
JML规格确实保证了程序准确性,但有时JML过于繁琐,将简单的问题复杂化,好不容易读懂了又不按照规格实现了,所以我觉得JML规格还是应当在一些对程序准确性要求较高的场合使用。