|
三星使用Parasoft C++TEST有效提高软件代码质量
作者:JunHo Yoon,YoonKyu Jang
编码规则帮助您提高代码质量,生成一致代码,防止易错编码风格。Robert Buckley对MISRA-C和编码规则添加了一个注释。
JunHo和YoonKyu是三星电子软件实验室的工程师,可以使用邮件junho.yoon@samsung.com和 yoonkyu.jang@samsung.com联系到他们。
--------------------------------------------------------------------------------
编码规则一致性检查
为克服严峻的软件开发挑战并同时减少开发成本,软件工程领域已经形成了自己的规则惯例,如需求工程分析,设计技术,制程开发,等等。许多规则惯例都应用于开发的实际执行阶段,如编码规则,代码重构,代码检查,静态分析。其中,编码规则是基础,它能够很好地提高代码可靠性,帮助不同的开发人员都生成一致的代码,并防止易出错编码方式的出现。
三星电子重点着眼于通过定义并强制执行内部编码规则来提高代码质量。我们QA部门使用了一个编码标准一致性检查器来实现这个目的,但我们并没有规范全部地将这个初始检查工具应用到我们的软件开发过程中去。因为这个工具功能不强,所以我们只是在最后的审核阶段才偶尔用一下它。因此我们只看到了它对代码质量的提高起到了一丁点儿的作用。
最近,我们评估了Parasoft的C++TEST,并应用它到我们正在进行的开发项目“MOBILE”中。在本文中,我们将从中学习到的经验和大家一起分享。在本文中,一个“编码规则条目”是指一个在公司编码规则和一致性文档中描述的总的描述条,一个“编码规则”(或“规则”)是指一个在自动化编码规则工具中制订的具体的编码规则。
三星电子是一个主要的消费电子公司。尽管三星以主营硬件起家,软件也迅速成为了我们一个主要的关注中心,正如大多数其他的消费电子厂商一样。这个“MOBILE”项目是三星的一个电子C/C++开发项目,它是要开发出一个用于移动设备的可重用、可扩展的面向对象的软件框架。我们的QA部门是一个独立出来专门测试三星电子开发出来的软件的。我们投入了相当多的时间来评估自动化工具,以求能最大地减少重复的工作量。
C/C++编码标准
这个MOBILE项目使用一套源于总的三星编码规则并针对这个项目特别指定的编码规则。这套MOBILE项目规则可以通过改变语言变量和其他开发约束条件来进行改写。比如,在MOBILE项目中的一些编译器不支持对异常情况的处理。因此,当一个对象的构造器被调用的时候,不可能侦测到资源分配失败。为解决这个问题,我们在MOBILE项目中采用了大家熟知的two-phase object construction(二阶段对象构造)技术(在MOBILE项目编码规则中有描述):将一个对象的初始化分为对象分配阶段和资源分配阶段,以通过一个值的方式返回异常情况(见代码清单1)。
class ResourceManager
{
ResourceManager(); // allocate only object
result Construct(); // allocate resources
// 'result' contains error code
};
int main()
{
// Two phase construction
ResourceManager aObject;
if (aObject.Construct() == FAIL)
printf("Resource allocation is failed");
}
代码清单1
另外,这个MOBILE项目需要对编码规则进行严格恪守。这个项目主要目标是建成一个软件框架给其他开发人员使用;它必须是一致的、组织良好的,以使得软件开发能够很好地在这个框架上进行。越多的项目涉及进来,就越需要一个自动化的工具。这就是为什么MOBILE项目要采用一个编码规则检察器。
Parasoft的C++TEST(www.parasoft.com)提供了自动的C/C++单元测试,和自动化的编码规则检查。我们选择C++TEST作为我们的编码规则检查器,是因为它对于我们的大多数考虑来说是最有效的解决方案。
C++TEST的一个明显的特点就是它的基于图形化界面的规则。如图1显示了对规则“每个全程变量必须进行初始化”的图形化界面规则描述,在分析源代码时,每当发现一个“全程变量”,这条规则便会评估逻辑组件。如果以下条件中的任何不相符合,程序就会报告有一个代码违规:
- 侦测到的全程变量是一个外部的声明
- 它没有进行初始化
- 它的类型不是一个数组或类
图1: Parasoft C++test中基于图形化界面的编码规则
图形化界面简化了规则创建。大多数的C++代码检查器在创建规则时需要编写脚本;这有一定的难度,并要求更多的C++编程知识。
因为现有的条件是图形化显示的,所以基本图形化界面的规则能被容易地理解和执行。通过基于图形化界面的规则可以有更好的可扩展性,因为通过图形化界面只有预定义的节点和条件可以选择。 |
|