
代码/模型指标和测试覆盖度指标的疑问举例
代码/模型指标的疑问举例
软件详细设计(包括模型设计)时,需要:
- 满足软件需求规约 & 软件架构设计:详细设计(模型设计)是“对的”。
- 满足相关的设计原则,如:可维护性、模块化、低耦合、高内聚等:详细设计(模型设计)质量是“好的”。
评价【详细设计(模型设计)质量】时,常常会应用一些指标(如:模型复杂度、源代码圈复杂度等)。
关于源代码指标,可参考本公众号文章:
- 谈代码指标
问:杨老师,我想请教一个模型复杂度的问题,我测试一个模型单元的模型复杂度,逻辑是这样的,一个输入信号维度是100,对这个信号做上下限限幅输出,模型复杂度就有200
了,不满足模型复杂度要求,但这个逻辑其实很简单,这种情况是否合理?
老杨的回答:
使用复杂度的目的,是帮助设计开发人员识别“模型/代码”中的风险。高的复杂度,可能会破坏“模型/代码”的可读性、可测试性、可维护性。
1)定义复杂度目标
2)参考复杂度指标,进行“模型/代码”的设计/实现
3)使用工具检查“模型/代码”的复杂度,识别出“超出目标的点”(这些点是潜在的风险点)
4)分析这些“超出目标的点”,分析其原因/影响
你所举的例子,复杂度高的原因是“维度太高”。那么这会破坏“模型/代码”的可读性、可测试性、可维护性吗?
- 如果会破坏可读性、可测试性、可维护性的话,那么就需要想办法更改模型(如拆分),来降低复杂度。
- 如果不会破坏可读性、可测试性、可维护性的话,那么虽然复杂度比较高,又有什么关系呢?接受就好了。
测试覆盖度指标的疑问举例:
测试的关键是测试充分性(没有遗漏的测试点),测试覆盖度指标是常用的衡量测试充分性的方法之一。
问:杨老师,测试覆盖度指标(比如:单元测试的分支覆盖度指标)一定是100%吗?我的程序中有一些代码,是XXX个情况,实在是无法测试到。达不到100%的覆盖度指标啊。
老杨的回答:
我举一个例子,如下图所示:源代码中包括A, B, C三个部分,由于某种原因,A部分的覆盖度只能达到90%,B/C两个部分的覆盖度均能达到100%。因此考虑到A的实际情况,定义的整体的测试覆盖度指标是95%。
可能会发生如下图所示的情况:
A部分的测试覆盖度的实际值是90%,B部分的测试覆盖度的实际值是99%,C部分的测试覆盖度的实际值是100%。整体的测试覆盖度是96%(达标!)
由于整体上测试覆盖度指标是达标的,则“B部分的测试覆盖度没有达到100%”的风险,可能会被忽略。
因此,不是100%的测试覆盖度指标,可能会隐藏“测试覆盖度不足的风险”。
工作中可按照如下步骤执行:
1)定义测试覆盖度指标100%
2)基于测试覆盖度指标,设计测试用例/测试代码
3)衡量实际的测试覆盖度,测试覆盖度不是100%的场合,分析/处理每一个未达标的点。(分析之后,发现有些点的确是无法达到100%时,确定了必要的措施后,接受就好了)
欢迎读者把工作中的疑惑和问题,通过邮件来进行交流。
文章转载自公众号:仨人谈起
