单元测试 总结
1.1单元测试的目标: 功能逻辑正确
1 正确编码
2 流入流出
3 内部数据完整性
4 边界值 正确
5 特定逻辑覆盖
4 边界值 正确
5 特定逻辑覆盖
1.2 代码如何测试
1.如何测
评价标准: 代码覆盖率
覆盖步骤 : (1)转化为流程图 (2)分析流程图 选择需覆盖的代码 (3)确定测试数据生成测试用例
测试用例: 输入 执行条件 预期结果
2.白盒测试(结构化测试) (基于代码)
语句覆盖(最弱)
分支/判定覆盖
条件覆盖
判定/条件覆盖
条件组合覆盖
分支/判定覆盖
条件覆盖
判定/条件覆盖
条件组合覆盖
等
3 语句覆盖 = (被执行的语句数量/总的语句数量)×100%
达到100%的语句覆盖可能很困难,因为
• 不可达代码;
• 处理错误代码(处理异常);
• 小概率事件
• 不可达代码;
• 处理错误代码(处理异常);
• 小概率事件
4 分支/判定覆盖 = (被执行的分支数量/总的分支数量)×100%
要确保每个判定得到了TRUE和FALSE的结果,即保证每个判定条件取TRUE和取FALSE各至少一次
(每一个if语句都执行了 if的结构体 和 else的结构体)
100%的判定覆盖能保证100%的语句覆盖
缺点: 可能会忽略表达式内的条件 不能发现所有错误
如 x=4 || y>5 写成了 x=4 || y<5 但由于x=4 true时 不再判断 y
5 条件覆盖
要确保每个原子条件取TRUE和取FALSE各至少一次,可检查每个原子条件,不能保证所有判断分支都覆盖
原子条件: 如 x=4 || y>5 两个原子条件 x=4 和 y>5
条件覆盖 < 语句覆盖< 判定覆盖
可能会造成程序逻辑错误被遗漏。
6 判定/条件覆盖
判定条件 和 原子条件取TRUE和取FALSE各至少一次。判定覆盖与条件覆盖的结合。
判定条件 和 原子条件取TRUE和取FALSE各至少一次。判定覆盖与条件覆盖的结合。
7 条件组合覆盖
使得每个判定的所有可能的条件取值组合至少执行一次。
可满足分支覆盖,也同时满足语句
使得每个判定的所有可能的条件取值组合至少执行一次。
可满足分支覆盖,也同时满足语句
1.4 动态测试和静态测试
1 静态测试
定义: 不运行被测试程序,对代码或其它项目文档通过检查、阅读进行分析。
三步曲:
互查(Peer Review)
走查 (Walk Through)
评审 ( Inspection )
走查 (Walk Through)
评审 ( Inspection )
评审的角色 :经理 主持人 作者 记录员 评审员 (3-4个)
代码评审:通过阅读代码来检查源代码与编码标准的符合性以及代码质量的活动
评审内容:
编码规范问题:命名不规范、magic number、 System.out……
代码结构问题:重复代码、巨大的方法和类、分层不当
工具、框架使用不当:Spring、Hibernate、AJAX
实现问题:错误验证、异常处理、事务划分、线程、性能、安全、
实现过于复杂、代码可读性不佳、扩展性不好
测试问题:测试覆盖度不够、可测试性不好
编码规范问题:命名不规范、magic number、 System.out……
代码结构问题:重复代码、巨大的方法和类、分层不当
工具、框架使用不当:Spring、Hibernate、AJAX
实现问题:错误验证、异常处理、事务划分、线程、性能、安全、
实现过于复杂、代码可读性不佳、扩展性不好
测试问题:测试覆盖度不够、可测试性不好
编码的标准和规范 :
标准:建立起来必须遵守的规则
规范:建议最佳做法,推荐更好方式