CreatFuture 2007-9-13 22:11
提高嵌入式软件质量的重要方法―软件代码检查
[align=center][size=3][color=#000000][font=宋体]作者[/font][font=Times New Roman]: CreatFuture
2007[/font][font=宋体]年[/font][font=Times New Roman]9[/font][font=宋体]月[/font][font=Times New Roman]13[/font][font=宋体]日[/font][/color][/size][/align]
[font=Times New Roman][size=3][color=#000000][/color][/size][/font]
[font=宋体][size=11pt] 目前嵌入式系统的[/size][/font][color=#000000][font=宋体][size=3]应用领域越来越广泛,与人们的生活也越来越密切。随着嵌入式产品更新换代的加快,软件规模急速膨胀,软件的开发周期却越来越短。[/size][/font][font=宋体][size=11pt]硬件发展日益稳定,而软件故障却日益突出,[/size][/font][font=宋体][size=3]这些故障不仅会造成重大经济损失,甚至危及人的生命安全。[/size][/font][font=宋体][size=11pt]软件的重要性逐渐引起人们的重视,提高嵌入式软件的测试质量势在必行。[/size][/font][/color][font=Tahoma][size=11pt][/size][/font]
[font=Tahoma][size=11pt][/size][/font]
[font=宋体][size=11pt] 为什么嵌入式产品发布后,还残留了许多软件缺陷?原因可能很多,我们试列举以下几种:[/size][/font][font=Tahoma][size=11pt][/size][/font]
[font=宋体][b][font=Times New Roman][color=#000000][size=3] ①[/size][/color][/font][/b][/font][size=3][color=#000000][font=宋体]嵌入式软件本身特点,如实时性,与硬件结合紧密等导致软件测试难度大。[/font][/color][/size]
[font=Times New Roman][color=#000000][size=3] ②[/size][/color][/font][size=3][color=#000000][font=宋体]在代码规模巨大、开发周期短等客观条件下,软件测试不足。[/font][/color][/size]
[font=宋体][b][font=Times New Roman][color=#000000][size=3] ③[/size][/color][/font][/b][/font][size=3][color=#000000][font=宋体]在测试阶段,要动态覆盖所有条件、所有状况的测试几乎是不可能的。[/font][/color][/size]
[font=宋体][b][font=Times New Roman][color=#000000][size=3] ④[/size][/color][/font][/b][/font][size=3][color=#000000][font=宋体]嵌入式软件开发主要使用[/font][b][font=Times New Roman]C[/font][/b][font=宋体]语言,而[/font][b][font=Times New Roman]C[/font][/b][font=宋体]语言非常灵活,容易造成编码错误。[/font][/color][/size]
[font=宋体][b][font=Times New Roman][color=#000000][size=3] ⑤[/size][/color][/font][/b][/font][size=3][color=#000000][font=宋体]项目团队未有效建立[/font][b][font=Times New Roman]/[/font][/b][font=宋体]遵守编码规范,留用有缺陷代码等导致可移植性、可维护性方面存在缺陷。[/font][/color][/size]
[font=宋体][b][font=Times New Roman][color=#000000][size=3] ⑥[/size][/color][/font][/b][/font][size=3][color=#000000][font=宋体]项目团队的惯性思维,不良编码[/font][b][font=Times New Roman]/[/font][/b][font=宋体]测试习惯等因素的影响等。[/font][/color][/size]
[font=Times New Roman][size=3][color=#000000][/color][/size][/font]
[font=宋体][size=3][color=#000000] 软件测试的分类方法有很多种,如静态测试、动态测试;单元测试、集成测试、系统测试、确认测试;模拟测试、实机测试等。各种测试方法其对测试阶段、测试环境等要求也各具特点,本文就软件代码检查这种静态测试方法进行探讨。[/color][/size][/font]
[font=Times New Roman][color=#000000][size=3]1.[/size][/color][/font][font=宋体][size=3][color=#000000]什么是代码检查[/color][/size][/font]
[size=3][color=#000000][font=宋体] 代码检查团队以第三方的角度,运用工具[/font][font=Times New Roman]/[/font][font=宋体]人工的方式对代码进行静态检查。[/font][/color][/size]
[size=3][color=#000000][font=宋体] 软件开发团队根据代码检查团队的检查报告,进行缺陷原因分析、影响范围调查、缺陷修改、修改后验证、缺陷预防措施实施及效果确认活动。[/font][/color][/size]
[font=Times New Roman][color=#000000][size=3]2.[/size][/color][/font][font=宋体][size=3][color=#000000]代码检查种类[/color][/size][/font]
[font=宋体][b][font=Times New Roman][color=#000000][size=3] ①[/size][/color][/font][/b][/font][size=3][color=#000000][font=宋体]代码规范([/font][b][font=Times New Roman]MISRA[/font][/b][font=宋体]等[/font][b][font=Times New Roman]C[/font][/b][font=宋体]、[/font][b][font=Times New Roman]C++[/font][/b][font=宋体]规范)符合性检查[/font][/color][/size]
[size=3][color=#000000][font=宋体] 使用[/font][b][font=Times New Roman]MISRA[/font][/b][font=宋体]、[/font][b][font=Times New Roman]QAC[/font][/b][font=宋体]等代码规范检查工具,对代码规范的符合性进行检查,然后人工对工具输出的警告进行确认。[/font][/color][/size]
[font=宋体][b][font=Times New Roman][color=#000000][size=3] ②[/size][/color][/font][/b][/font][size=3][color=#000000][font=宋体]代码逻辑检查[/font][/color][/size]
[size=3][color=#000000][font=宋体] 针对代码规范检查工具不能检查的项目,如公用变量的初始化、函数返回值的使用等方面进行人工检查。[/font][/color][/size]
[color=#000000][font=宋体][b][font=Times New Roman][size=3] ③[/size][/font][/b][/font][size=3][font=宋体]中断冲突检查。[/font][/size][/color]
[size=3][color=#000000][font=宋体] 对因中断或多任务共同访问全局变量而引起的冲突进行人工检查。[/font][/color][/size]
[font=宋体][b][font=Times New Roman][color=#000000][size=3] ④[/size][/color][/font][/b][/font][size=3][color=#000000][font=宋体]功能符合性检查。[/font][/color][/size]
[size=3][color=#000000][font=宋体] 对看门狗、[/font][b][font=Times New Roman]AD/DA[/font][/b][font=宋体]转换等与硬件相关部分的代码进行人工检查。[/font][/color][/size]
[font=Times New Roman][color=#000000][size=3]3.[/size][/color][/font][font=宋体][size=3][color=#000000]代码检查的特点[/color][/size][/font]
[font=宋体][font=Times New Roman][color=#000000][size=3] ①[/size][/color][/font][/font][size=3][color=#000000][font=宋体]可在编码[/font]~[font=宋体]产品发布这一期间内的任何阶段进行。在项目前期通过代码检查可尽可能多地发现缺陷,从而可削减开发成本,提高产品质量。[/font][/color][/size]
[font=宋体][font=Times New Roman][color=#000000][size=3] ②[/size][/color][/font][/font][size=3][color=#000000][font=宋体]利用第三方的经验、看问题的角度,可以找出自己开发团队因惯性思维、不良编码[/font][font=Times New Roman]/[/font][font=宋体]测试习惯等因素造成的而自己难于发现的缺 陷。[/font][/color][/size]
[font=宋体][font=Times New Roman][color=#000000][size=3] ③[/size][/color][/font][/font][font=宋体][size=3][color=#000000]不受测试环境、测试设备等客观因素的制约,费用较低。[/color][/size][/font]
[font=Times New Roman][color=#000000][size=3]4.[/size][/color][/font][font=宋体][size=3][color=#000000]从事代码检查业务的要求[/color][/size][/font]
[font=宋体][font=Times New Roman][color=#000000][size=3] ①[/size][/color][/font][/font][font=宋体][size=3][color=#000000]拥有一套检查理论、方法和流程。[/color][/size][/font]
[font=宋体][font=Times New Roman][color=#000000][size=3] ②[/size][/color][/font][/font][size=3][color=#000000][font=宋体]需要一些辅助工具的配合,以提高检查质量和效率。[/font][/color][/size]
[font=宋体][font=Times New Roman][color=#000000][size=3] ③[/size][/color][/font][/font][size=3][color=#000000][font=宋体]代码检查人员应熟练掌握[/font][font=Times New Roman]C/C++[/font][font=宋体]编码规则,熟悉编译器原理。对于功能性检查还应熟悉芯片等硬件知识及通信、汽车等领域产品知识。[/font][/color][/size]
[font=宋体][font=Times New Roman][color=#000000][size=3] ④[/size][/color][/font][/font][font=宋体][size=3][color=#000000]拥有嵌入式产品代码缺陷库,可进行更有针对性的检查。[/color][/size][/font]
[font=Times New Roman][color=#000000][size=3]5.[/size][/color][/font][font=宋体][size=3][color=#000000]有关代码检查的疑问[/color][/size][/font]
[font=宋体][font=Times New Roman][color=#000000][size=3] ①[/size][/color][/font][/font][font=宋体][size=3][color=#000000]代码检查与开发团队自己进行的交叉走码有什么区别?[/color][/size][/font]
[size=3][color=#000000][font=宋体] 代码检查虽然从形式上来说类似于交叉走码,但交叉走码基本上是属于代码规范符合性检查;而代码检查除代码符合性检查外,更着重逻辑、中断冲突和功能符合性检查。[/font][/color][/size]
[font=宋体][font=Times New Roman][color=#000000][size=3] ②[/size][/color][/font][/font][size=3][color=#000000][font=宋体]连熟悉开发系统的开发团队都检查[/font][font=Times New Roman]/[/font][font=宋体]测试不出来的缺陷,不熟悉系统第三方可以吗?[/font][/color][/size]
[font=宋体][size=3][color=#000000] 事情有时候就是“成也萧何,败也萧何”。正是由于项目开发团队熟悉自己的系统,但由于惯性思维,有时候会想当然地将缺陷作为正确。第三方代码检查团队虽然对系统不熟悉,但是完全从检查观点的角度来进行判断是否有问题,这样不会轻易使缺陷漏网。[/color][/size][/font]
[font=宋体][size=3][color=#000000]检查团队将不符合检查观点的程序指摘出来,项目开发团队对指摘出的问题进行进一步确认,这样结合两种思维方式,即从该系统的特殊性及检查观点共性两个方面,能够发现开发团队自己发现不了的隐藏缺陷。[/color][/size][/font]
[font=宋体][size=3][color=#000000]另外,有些缺陷是只在极端条件下才发生,通过动态测试去发现几乎是不可能的,特别是中断冲突方面的问题。因此在某些情况下,代码检查是唯一的手段。[/color][/size][/font]
[font=宋体][font=Times New Roman][color=#000000][size=3] ③[/size][/color][/font][/font][font=宋体][size=3][color=#000000]代码检查的实施效果如何?[/color][/size][/font]
[size=3][color=#000000][font=宋体] 根据对汽车、电子、通信等领域数十个项目检查结果的数据统计,检查出的代码缺陷率为每千行代码零点几[/font]~[font=宋体]几之间,并为客户检查出了许多重大缺陷。[/font][/color][/size]
[font=Times New Roman][color=#000000][size=3]6.[/size][/color][/font][font=宋体][size=3][color=#000000]代码检查国内外现状[/color][/size][/font]
[font=宋体][size=3][color=#000000] 目前发达国家如美国、日本等嵌入式产品开发企业特别重视代码检查业务,一般将业务外包给专业从事代码检证业务的公司。而国内从事嵌入式产品开发的企业,基本上还没有意识到代码检证的益处。同时,国内能够从事代码检查业务的公司也屈指可数,目前这些公司基本上也都是承接国外的业务。[/color][/size][/font]
[font=Times New Roman][size=3][color=#000000][/color][/size][/font]
[size=3][color=#000000][font=Times New Roman]
PS[/font][font=宋体]:本文作者及所在公司已经为国外知名企业从事代码检查业务[/font][font=Times New Roman]4[/font][font=宋体]年。[/font][/color][/size]
[font=Times New Roman][size=3][color=#000000] [/color][/size][/font]
zhouqing0 2007-9-19 10:35
呵呵
代码审查,代码走查
CreatFuture 2007-10-9 09:41
从本质上是属于代码走查,但是与传统的代码走查的角度不同,特别是在中断冲突及代码逻辑方面。