301
社区成员
发帖
与我相关
我的任务
分享单元测试:针对软件中最小的可测试单元,如函数或方法的测试,旨在保证每个单元的实现的正确性
功能测试:验证程序的每个功能是否能实现规格所要求的功能
集成测试:将多个单元或模块集成在一起进行测试,以检查各单元的交互是否正常
我采用与规格书说的道理类似的方式存储图的结构:
// MyNetwork.java
private final HashMap<Integer, MyPerson> personMap = new HashMap<>();
// MyPerson.java
private final HashMap<Person, Integer> acquaintance = new HashMap<>();
三次作业中均有需要优化性能的指令
qci/qbs
采用并查集维护连通子图
qts
在添加/删除关系时维护qts的缓存
qtvs
添加/删除关系时更新受影响的tag
qsp 采用BFS
得益于JML的强大约束力,本单元的bug主要体现在性能问题导致的CPU超时,而不是实现错误。只需根据flamegraph找到耗时较多的方法并进行针对性优化即可解决。
测试主体根据JML的约束一一翻译即可:保证不变量不变,保证改变的量符合规格。
我认为难点在于测试用例的生成,要采用人工编写和随机生成相结合的方法才能覆盖更多的情况。
三次作业的内容大同小异,学习体验大同小异,“读JML->写代码->优化性能”的流程也大同小异。
通过三次作业的学习,我“深刻”地认识到了JML和契约式编程的重要意义,太好了。