软件质量指标自动器量方式

欧博客户端

欢迎进入欧博客户端(www.aLLbetgame.us),欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

,

通过设定权衡代码质量的八个器量项来对软件的质量举行量化打分,其设定器量项的尺度参考了界说软件质量的ISO25010尺度。这篇文章连系鸿渐科技团队多年的实践,将给人人先容一下若何通过ISO25010尺度来制订以下的质量指标。


30年多年前,软件工程师Barry Boehm已经发现,若是在软件宣布后发现缺陷,修复缺陷的成本会成倍增添。因此,若是能够在软件宣布前有一种方式来权衡软件的代码质量,它将潜在地节约大量的成本。一个界说软件代码质量的ISO25010应运而生,这个尺度界说了八个主要质量指标和许多子指标。八个主要质量指标为:

Ø  功效适用性 (Functional suitability):软件所实现的功效到达其设计规范和知足用户需求的水平,强调准确性、完整性、适合性等。

Ø  可靠性 (Reliability):在划定的时间和条件下,软件所能维持其正常的功效操作、性能水平的水平/概率,如成熟性越高,可靠性就越高;用MTTF (mean time to failure,平均失效前时间) 或MTBF(mean time Between failures,平均故障距离时间)来权衡可靠性。

Ø  效率 (Performance efficiency):在指定条件下,软件对操作所显示出的时间特征(如响应速率)以及实现某种功效有用行使盘算机资源(包罗内存巨细、CPU占用时间等)的水平,局部资源占用高通常是性能瓶颈存在;系统可遭受的并发用户数、毗邻数目等,需要思量系统的可伸缩性。

Ø  可操作性 (Operability):对于一个软件,用户学习、操作、准备输入和明白输出所作起劲的水平,如安装简朴利便、容易使用、界面友好,并能适用于差异特点的用户,包罗对残疾人、有缺陷的人能提 *** 物使用的有用途径或手段(即可达性)。

Ø  平安性 (Security):要求其数据传输和存储等方面能确保其平安,包罗对用户身份的认证、对数据举行加密和完整性校验,所有要害性的操作都有纪录(log),能够审查差异用户角色所做的操作。它涉及保密性、完整性、抗狡辩性、可核查性、真实性。

Ø  兼容性 (Compatibility):涉及共存和互操作性,共存要求软件能给与系统平台、子系统、第三方软件等兼容,同时针对国际化和内陆化举行了合适的处置。

Ø  可维护性 (Maintainability):当一个软件投入运行应用后,需求发生转变、环境改变或软件发生错误时,举行响应修改所做起劲的水平。它涉及模块化、复用性、易剖析性、易修改性、易测试性等。

Ø  可移植性 (Transferability):软件从一个盘算机系统或环境移植到另一个系统或环境的容易水平,或者是一个系统和外部条件配合事情的容易水平。它涉及顺应性、易安装性、易替换性。

ISO25010尺度有助于在软件初期阶段评估质量。然而,它有两个主要瑕玷:

1、尺度没有划定若何丈量质量属性。一些质量属性甚至似乎不适合客观丈量。以“可操作性”为例, 其子属性如“界面友好”和“易用性”。若何丈量这个,丈量单元是什么?

2、大多数界说的质量属性在差其余环境中具有差其余寄义。因此,纵然可以丈量质量属性,也很难找到判断是好或坏的明确客观尺度。“效率”就是这种情形的一个很好的例子。一些软件系统在1秒内做出响应就足够了,而另一些软件系统则要求在1毫秒内做出响应。

为了对软件质量举行系统的评估,经由多年的行业履历积累,制订出可以举行量化处置的八个器量项,它们划分是:

1)     代码笼罩率

2)     抽象注释 

3)     圈庞大度

4)     编译器忠告

5)     编码尺度 

6)     重复代码

7)     扇出 

8)     平安

这八个器量项基于ISO25010制订,其量化数值和软件质量属性有一定的映射关系,详细如下。

1. 代码笼罩率

在软件工程师将他们的代码移交到软件开发周期的下一个阶段之前,他们通常做一些单元测试。这些是小规模的自动化测试,可以检查程序的特定部门,例如单个函数,然后将这些自动化测试的现实效果与预期效果举行对照。单元测试是用来检查程序能否实现设计想到达的目的最低尺度的一种有用的测试方式。代码笼罩率示意在单元测试运行时代,代码中有若干行代码或可执行分支被测试。笼罩率越低,所执行的单元测试的质量就越低。代码笼罩率是“功效适用性”和“可靠性”的一个器量指标。 

下面的C,代码展示了用代码笼罩率检测工具输出的一个简朴示例。每一行颜色为“绿色”的代码都经由至少一次测试,而“红色”行的代码没用经由任何测试。



代码笼罩率测试工具的输出显示,除第37行外,此代码示例中的所有行都由(单元)测试笼罩。

2. 抽象注释 

现在有一种通过运行抽象注释工具(也称为深流剖析工具)来检测软件程序中可能存在的“可靠性”问题的新手艺。这些工具能够自动检测与程序控制流程相关的种种编程错误。例如空指针解引用、除零和未关闭的数据库毗邻。这些工具的优点是它们在不现实运行程序的情形下就能发生效果,这是通过以盘算程序所有可能的路径来完成的。抽象注释发现的错误是严重的编程错误,可能导致溃逃。这个器量项和程序“可靠性”属 *** 息相关。关于抽象注释问题的一个简朴示例展示在下面的Java代码中。


抽象注释工具将在第228行符号一个可能泛起的空指针解引用缺陷,由于函数“get Order”会在订单没有有用日期的情形下返回NULL。若是发生这种情形,将抛出异常,可能导致程序溃逃。

3. 圈庞大度

圈庞大度是最经典的软件器量项之一。圈庞大度在数目上显示为自力现行路径条数。例如,每个“if”语句就会添加了一条分外的代码路径。圈庞大度越高,程序代码的判断逻辑就越庞大。此外,路径越多,就需要编写更多的测试用例来实现更高的代码笼罩率。每个函数的平均圈庞大度是一个指标,可以对照程序之间的庞大性。圈庞大度在一定水平上展示了程序代码的“可维护性”。下面以一段C,代码为例展示若何盘算圈庞大度。


函数“get Value”在第123行的圈庞大度为2(由于包罗一条“then”路径和一条“else”路径”)。

4. 编译器忠告

为了在盘算机上执行软件程序,首先需要经由编译或注释。编译器或注释器会天生错误和忠告而且错误必须修复,否则程序无法运行。忠告虽然纷歧定需要解决,然则一些编译器忠告解释程序存在严重缺陷。留下这些未解决的问题可能会影响代码的“可靠性”。除此之外,大多数编译器忠告还体现了“可移植性”问题。因此,这个器量项和软件程序的“可移植性”也有很强的关联。下面是关于编译器忠告在C语言代码片断的一个简朴示例。


大多数编译器会在第32行的if条件下发出忠告(可能是为了举行对照的缘故原由)。

5. 编码尺度

软件维护是软件工程师最耗时的义务之一。其缘故原由之一是经由多次更新后,软件工程师很难明白程序代码编写原本的意图。降低软件维护成本的一种方式是引入编码尺度。编码尺度是代码工程师应该遵照的规则。这些编码规则涉及已知的语言缺陷、要阻止的代码组织,还涉及命名约定和程序结构。由于编码尺度通常包罗许多差其余规则,以是它们可以反映大多数代码质量属性问题。大多数规则涉及“可维护性”和“可靠性”,但也有可用于“可移植性”和“效率”的规则。下面是一个违反编码尺度的示例。


任何C编码尺度都不推荐第36行使用的goto语句。

6. 重复代码

有些时刻软件工程师会复制大量现成代码并对其举行一些小的修改而不是重新编写。大量重复代码的瑕玷是,若是出于某些缘故原由(修复bug或添加丢失的功效)必须更改代码的一部门,那么其他重复的代码也很可能需要更改。一旦有所疏忽,重复的大量代码将发生伟大的事情量。这异常影响程序的“可维护性”。

7.  扇出

软件程序通常是由模块或组件组织的。这些模块和组件存在条理挪用的情形。扇出示意某个模块使用的下级模块的个数。若是模块需要许多其他模块才气准确运行(高扇出),那么模块之间就有很高的相互依赖性,这使得代码更难修改。因此,扇出在一定水平上反映了软件程序的“可维护性”。下面的Java代码显示了一个高扇出的示例。

男足世界杯预选赛赛程2022www.9cx.net)实时更新比分男足世界杯预选赛赛程2022数据,男足世界杯预选赛赛程2022全程高清免费不卡顿,100%原生直播,男足世界杯预选赛赛程2022这里都有。给你一个完美的观赛体验。



在这段代码中,我们接纳了扇出的简朴界说来器量import语句。因此,上面Java文件的扇出数目是16。

8.平安

软件的平安性反映了在未获得授权的数据接见时软件程序有多容易被攻击,以及行使平安破绽对软件举行更改的难易水平。这种平安破绽的例子有缓冲区溢出(让程序溃逃)和敏感数据的露出(从而给用户提供信息以获得未经授权的接见)。下面的C代码给出了一个平安泄露的示例。



在第319行,一个异常长的字符串被写入一个名为“buf”的数组,该数组只能容纳8个字符。不适合“buf”的字符被保留在其他地方,可能会笼罩应该执行程序的代码。通过行使这个破绽,攻击者可以运行另一个程序,而不是运行的原本的程序。修正后的例子是下图。


通过使用“snprintf”而不是“sprintf”,写入缓冲区的字符数受到第二个参数的限制。

以上就是给出的八个器量项,从上文可以发现一些器量项可以很容易地映射某些质量属性。例如,若是一个文件的代码重复率为0%,那么这被以为是质量较高的一段代码,而若是重复率是50%,那会被以为是糟糕的编程。然而,对于八个器量项中的四个,“抽象注释”、“编译器忠告”、“编码尺度”和“平安”并没有和质量属性间存在异常明确的对应关系。例如,若是代码中有3000个编码尺度问题,那么这段编码的质量崎岖还取决于以下3个附加因素:


1. 丈量了若干编码规则?若是一个编码尺度比另一个编码尺度有更多的规则,那么违规的可能性就会更高。但这并不意味着该代码的代码质量较低。

2. 违反的规则的严重水平是若干?若是只违反了不主要的规则,那么代码质量就会比同样违规数目的其他代码更好。

3. 代码的数目级是若干?若是在一个由1000万行代码组成的系统中有3000起违反代码规则事宜,那么与一个只有1000行代码的系统相比,情形就显得不那么严重了。

为领会决这一问题,引入了“加权因子” (compliance factor) 的看法。加权因子示意软件代码在多洪水平上相符某一组规则。例如,这可能是一组编译器忠告或一组平安规则。


详细的盘算公式如下:



对此公式的详细注释人人可以参看文末相关文献链接。许多项目中使用这一界说已有20多年,在实践中效果显著。通过行业履历确定了器量项在软件质量属性中所占权重巨细,然后划分盘算每个器量项分数后举行加权汇总,获得反映软件质量品级和评分的一个检测讲述。

质量指标是一种异常适用的方式,可以在软件程序宣布前甚至在系统测试之前对软件代码的质量举行量化概述。该指标连系了最著名的代码质量器量项,通过公司现有的代码检测工具界说了它们是若何丈量的,以及若何判断质量的崎岖。根据获得的分数,将软件系统依次符号为A(优异质量)到F(质量差)多个差其余质量品级。

鸿渐科技现有的“源代码检测系统”可以对代码的圈庞大度,扇入扇出和重复代码比例做量化剖析,同时,参考众多海内外顶会文章的相关指标量化的设计也在起劲起劲的开发中。


参考

[1] Boehm, Barry W.; Philip N. Papaccio, “Understanding and Controlling Software Costs”, IEEE Transactions

on Software Engineering, v. 14, no. 10, October 1988, pp. 1462-1477.

[2] ISO, “Systems and software engineering – Systems and software Quality Requirements and Evaluation

(SquaRE) – System and software quality models”, ISO/IEC 25010:2011, 2011, obtainable from

http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=35733.

[3] Wikipedia, “Cyclomatic Complexity”, extracted July 2012, obtainable from

http://en. *** .org/wiki/Cyclomatic_complexity.

[4] Wikipedia, “Duplicated Code”, extracted July 2012, obtainable from

http://en. *** .org/wiki/Duplicate_code.

[5] Wikipedia, “Code Coverage”, extracted July 2012, obtainable from

http://en. *** .org/wiki/Code_coverage.

[6] Wikipedia, “Abstract Interpretation”, extracted July 2012, obtainable from

http://en. *** .org/wiki/Abstract_interpretation.

[7] Wikipedia, “Coding Conventions”, extracted July 2012, obtainable from

http://en. *** .org/wiki/Coding_standard.

[8] Henry, S.; Kafura, D., “Software Structure Metrics Based on Information Flow”, IEEE Transactions on

Software Engineering Volume SE-7, Issue 5, September 1981, pp. 510–518.

[9] OWASP, “OWASP top 10 - 2013, The ten most critical web application security risks”, extracted

December 2016, obtainable from https://www.owasp.org/index.php/Top_10_2013.

[10] CERT, “CERT Secure Coding”, extracted December 2016, obtainable from https://www.cert.org/secure

coding/.

[11] Jansen, Paul; Krikhaar, Rene; Dijkstra, Fons, “Towards a Single Software Quality Metric – The Static

Confidence Factor”, 2006, obtainable from

http://www.tiobe.com/content/paperinfo/DefinitionOfConfidenceFactor.html.

[12] Wikipedia, “European Union energy label”, extracted July 2012, obtainable from

http://en. *** .org/wiki/European_Union_energy_labe


  • 评论列表:

添加回复:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。