代码/模型指标和测试覆盖度指标的疑问举例

发布于 2023-7-24 16:02
浏览
0收藏

代码/模型指标的疑问举例

软件详细设计(包括模型设计)时,需要:

  • 满足软件需求规约 & 软件架构设计:详细设计(模型设计)是“对的”。
  • 满足相关的设计原则,如:可维护性、模块化、低耦合、高内聚等:详细设计(模型设计)质量是“好的”。


评价【详细设计(模型设计)质量】时,常常会应用一些指标(如:模型复杂度、源代码圈复杂度等)。

关于源代码指标,可参考本公众号文章:


问:杨老师,我想请教一个模型复杂度的问题,我测试一个模型单元的模型复杂度,逻辑是这样的,一个输入信号维度是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%时,确定了必要的措施后,接受就好了)


欢迎读者把工作中的疑惑和问题,通过邮件来进行交流。



文章转载自公众号:仨人谈起

分类
收藏
回复
举报
回复
相关推荐