LDRA制定编码规则检查标准
背景
在高级编程语言问世之前,所有的程序都是通过手工编写机器码来实现的,此过程效率低且复杂,因此我们不得不花费大量时间去发现错误并实施校正来确保代码的正确性。在理论上可以认为:引入更高水平的编程语言和更好的程序输入方法能结束这乏味的过程;而实际上人们还是发现很多程序并没有按照预期的目标工作,引入高级语言所取得的成就也仅限于从编码到发现缺陷上。众多的机构和专家分析了大量出现在程序中的缺陷,发现它们中有很多可归属于相同的失败原因。正由于这种认识从而导致了编程规则的产生,其目的是防止或发现可能引入的软件缺陷。
为什么进行编程规则检查
编程规则设定了特定的规则或程序设计风格准则,可以帮助程序开发人员快速阅读和理解源代码以及帮助避免引入缺陷。程序的编程风格可来自于编码标准、本公司或其他软件机构的规定、编程人员的习惯。
C和C++语言由于其内在的灵活性,在编写程序时,容易产生未定义,未详细说明或执行依赖性等类型的代码,为确保可移植性及避免出现无法预知的后果,编程规则尽量减小对特定的编译器或特定的平台架构的依赖性。避免不可达或不可行代码的重要性在于最小化对程序的可维护性的影响。某些编程语言结构是一些常见的错误的发源地,可以禁止这些语言结构的使用。同时可衡量的程序复杂性和程序可测性也是影响软件质量的两大因素。
下面我们来谈谈编码/编程标准检查的发展历史以及LDRA是如何帮助您实现这些功能的。
概况
自1975年以来,LDRA不断发展LDRA
Testbed(LDRA工具套件的一部分),工具套件的静态分析功能极大简化了开发人员和测试人员的工作。LDRA
Testbed支持650条(并还在增加)静态分析编码规则。LDRA有能够自动适应单个源文件或整个系统的一套全面的编程标准,这些标准适用于C和C++语言,用户也可以像下面的工业标准一样自定义规则集,如:
MISRA C, MISRA-C:2004,
HIS & GJB(中国军用标准)
JSF AV C++,
High Integrity C++, MISRA C++ & LM 列车控制系统(LMTCP)
SPARK
Ada subset & the Ravenscar Profile
虽然后期审查很少,但相关人员仍然不得不维护别人编写的代码,大量的时间花费在解读那些不容易理解的代码上。很让人诧异的是仅仅很小的编程风格差异也会降低阅读代码的速度。
使用代码分析工具,如LDRA
Testbed,能够在代码开发过程中快捷地检查代码是否违反设定的规则集并警示开发人员,因此它将标准的采用向前推进了一大步。
LDRA Testbed采用了预先配置的编码规则集并指出程序中对规则集违反的地方。选择标准非常容易,只要从下拉列表中选择所需标准即可。
首先,标准为源代码和注释指定一个统一格式,更重要的是,一个好的标准不仅仅要求代码如何显示在屏幕上,而且会细化到关于代码如何书写。更为重要的原因是有一个可以一贯坚持的标准,有一个编码标准文档意味着如果开发人员不使用这个规则就没有任何可利用的手段。
无论是采用何种开发模型(
v型模型,迭代,瀑布,极限编程等)创建应用程序,使用指定语言的编程标准将大大降低将错误引入程序的可能性。
LDRA
Testbed
编程标准检查
LDRA Testbed
的一个主要功能是提供软件的静态和动态分析。由LDRA
Testbed
静态分析器分析执行编码规则检查,它包含了在航空航天和汽车行业多年来一直在使用的各种标准,并且这种分析技术正在扩大扩展到其他行业。
MISRA
检查
汽车工业软件可靠性协会(
MISRA
)标准已经得到了发动机工业界的广泛认可,同时它也成为大量在其它工业领域中应用的安全性代码或关键业务系统的基础。
MISRA-C:2004已经被工业和工具供应商进行了广泛的修订,作为MISRA协同软件分析工具的领袖供应商,LDRA参与了这次修订工作,并扩展工具套件以适应新修订的MISRA-C:2004及在不久之后发表的MISRA
C++。
LDRA适应98%的实例包
MISRA提供了一个实例示例包,其中包含工具可验证的每一条规则的符合规则和不符合规则的实例。
-
MISRA-C:2004包括21个方面,由142组规则组成(其中14个是公认的MISRA作为不被接纳的条目)。规则实例示例包中包含将近700个不符合的示例,其中675个示例是针对某一个具体的规则违反情况。其他是交叉性的规则违反示例,也就是有的程序缺陷可能违反一个以上的规则。
-
C版本LDRA
Testbed静态分析器目前支持MISRA-C2004中所有可以用工具进行检查的规则,对于规则示例集中的675条规则示例可以报告出659,实现了大约98
%检查规则示例报告率。
未来
随着时间的推移,不同的信息来源(当前的最佳实践)汇聚在一起形成了更加广泛的质量标准,例如MISRA-C和JSF
AV C++。这些"汇聚"受益于被广泛的使用,而且一旦掌握,它们可以被用于多种不同的项目。此外,随着大量实践,工具也变得越发成熟,期望和执行越来越趋向于一致。
MISRA委员会有许多令人振奋的发展,在2008年初我们将看到一个MISRA
C++
的标准公布,预期MISRA
C第3版的公布日期是2010年