当程序员讨论测试时,经常出现的一个问题是多少才足够?我需要获得100%的保险吗?让我们首先解决房间里的大象:完全测试一个软件是不可能的。不相信我?一书中描述的100行程序有多达1018条独特的路径。实际上,当您意识到当代软件通常超过数十万甚至数百万行代码时,您很快就会意识到完全测试一个软件是多么不切实际。
一次正在度假,接到一个来自世界偏远地区的卫星电话,告诉我我正在执行的任务是“在饮料中”——一种委婉的说法,表明预计飞行的飞行器在水下。最后,它被证明是由于生锈的螺母而导致的故障,但在调查该故障的过程中,我们通过安全关键代码发现了许多路径,这些路径未被我们的测试制度所涵盖。虽然在接下来的几个月里解决了所有问题,但我的假期很难享受,因为我不知道发生了什么。
那么多少软件测试才足够呢?这是任务和安全关键型软件项目解决的问题,可以从中吸取一些宝贵的经验教训。最基本的方法是测试,测量,重复。这里提到的测量是结构覆盖分析,或代码覆盖率。许多行业标准(例如,航空航天的DO-178和汽车的ISO 26262)要求使用代码覆盖率作为证明测试完整性的唯一手段。
结构覆盖率分析是对给定测试或一组测试执行的代码结构的度量。最基本的指标之一,语句覆盖率 (SC),衡量通过测试执行的代码语句。更严格的度量是决策覆盖率 (DC),它包括 SC 的目标以及测量从代码中的每个决策点获取的决策路径。更严格的是修改条件/决策覆盖率(MC / DC),其中包括DC的目标以及测量决策点中每个条件的值。所有这三种测量都是由DO-178标准强制要求的。
代码覆盖率通常以百分比表示,软件测试越彻底,代码覆盖率越高,软件包含缺陷的可能性就越小。
安全关键型软件标准高度关注如何有效地测试软件。他们指出,有效的软件测试需要一种规范的方法,其中代码覆盖率用于提供有关迄今为止测试有效性的反馈。应用于系统的测试严格程度必须由系统故障的影响决定。后果越严重,测试必须越严格。
然而,需要注意的是;100%的覆盖率并不一定转化为有效的测试。以最大化代码覆盖率为目标的测试可能会遗漏代码中的重要问题,而严格测试有助于识别这些问题,例如:
• 与需求相关的错误• 缺少代码
• 与数据流相关的错误
• 争用条件
• 硬件兼容性/配置
尽管如此,作为测试完整性和严谨性的衡量标准,代码覆盖率是无与伦比的,每个软件开发项目都应该采用。
审核编辑:郭婷
-
飞行器
+关注
关注
13文章
722浏览量
45497 -
代码
+关注
关注
30文章
4779浏览量
68514
发布评论请先 登录
相关推荐
评论