定义软件质量的含义

软件库,供应商或团队声称他们开发高质量软件的情况并不少见。此声明的问题在于,质量的定义在不同的开发人员和团队之间可能有完全不同的解释。一个团队可能会认为符合MISRA-C的任何代码库都是高质量的代码库,而另一团队则可能只在乎每个函数的循环复杂度都不超过10。其他人可能只是运行一些测试用例,并声称他们的软件没有错误,因此是优质的软件。由于每个人都有自己的质量定义,因此,团队必须以一种不仅可以记录而且可以衡量的方式来定义质量。在本文中,我们将探讨几种可用于定义软件质量的可衡量软件指标。

遵守行业最佳实践(标准)

嵌入式系统行业充满了旨在帮助开发人员避免出现在开发人员面前的陷阱和痛苦的标准。从简单的风格标准到像MISRA-C这样的标准,这些标准为开发人员提供了C语言的子集,这些标准的重点可能有所不同。按照标准开发软件可确保避免常见的陷阱,并提高软件的质量。

在验证编码标准时,通常需要两个组成部分:自动工具分析和代码审查。例如,MISRA-C是开发人员遵循的非常常见的编码标准。静态代码分析器可用于验证标准中90%的指令,但是有些指令无法通过工具进行验证。为了确保符合标准,开发人员需要执行定期代码审查并手动检查其余指令。满足标准可能是确保在软件内达到最低质量要求的好方法。

最小化环复杂性

我相信每个开发团队都应监视并增加其质量定义的我最喜欢的质量度量之一是McCabe Cyclomatic Complexity度量。这是一种简单的测量,可以在确定通过该功能的路径数的任何功能上执行。值小于10的函数被认为是易于测试和维护的简单函数。但是,超过十个时,测试所需的路径数量开始变得更加复杂,困难且易于开发和维护,并且可以用来表明代码质量较低。实际上,随着复杂度数接近大于20的数,几乎不可能正确地测试功能。如果您无法正确测试某个功能,如何证明它正常工作?

测量复杂度也可以是自动化过程。有可用的免费工具,例如CCCC和Eclipse矩阵计算器插件,可用于测量圈复杂度。还有诸如“理解”之类的IDE,可用于收集有关代码库的度量信息。衡量此指标成功的关键是首先确定要进行的测量,其次要执行的测量,然后再将新代码检入代码库。它也应该在连续集成服务器上执行。

编译时没有警告

我遇到了太多的软件库和代码库,这些库和代码库都是在没有警告的情况下编译的。警告是编译器告诉开发人员他们做的事情看起来不太正确的方法。鉴于大多数编译器都会让开发人员在代码中做一些可怕的事情,因此,编译器将开发人员调出警告的事实意味着开发人员应引起注意!可以在不产生任何警告的情况下进行编译的代码是易于衡量的指标,它表明该软件达到了其他软件可能无法满足的质量水平。仍然可能存在错误或其他质量问题,但至少代码本身在语义上是正确的。

代码测试范围

我认为,在我们的行业发展周期中,我看到的最大缺陷之一就是开发的测试具有100%的代码覆盖率。实际上,问题不是100%的代码覆盖率,而是了解测试实际上覆盖了多少代码!如果一个团队知道他们的测试用例涵盖了他们软件的85%,但是大多数团队甚至都不知道,那将是一回事。代码覆盖率可以作为衡量软件质量水平的重要指标。显然,经过测试达到85%的某些东西将比仅经过测试50%的那些东西更健壮,质量更高。开发人员可以测量此值,并将其用作代码质量的内部指标。我们将在以后的文章中介绍如何执行此操作。

代码验证

代码验证类似于测试覆盖率,不同之处在于,我们不是在测量覆盖多少代码,而是在测量实际通过或失败的测试百分比。例如,我们可以基于以下因素生成数值:

  • 正在执行测试
  • 通过测试
  • 需求范围

使用这些度量,我们可以根据测试执行的成功程度生成一个介于0到10之间的数值。然后,这为我们提供了一个度量标准来进行审查,如果我们还没有达到所需的代码验证级别,则可以返回并改进测试过程,直到达到所需的级别,该级别也对应于所需的代码质量级别。

结论

为了拥有高质量的软件,质量一词需要由开发团队定义。该定义应包括可衡量的指标,可以在整个开发过程中轻松对其进行跟踪和监视。在本文中,我们探讨了一些高级定义,这些定义应该是创建质量代码库所遵循的最少指标和过程。实施这些指标将不仅帮助您提高常规代码质量,而且还可以消除和防止软件缺陷。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.