1、获取“优质”代码的重要手段 关于软件静态测试关于软件静态测试又称静态分析,也称源代码分析又称静态分析,也称源代码分析与动态测试相对应与动态测试相对应不运行被测代码,只对源代码本身进行分析不运行被测代码,只对源代码本身进行分析无需测试用例无需测试用例无需事先假设,没有预期性无需事先假设,没有预期性自动化,简单易行自动化,简单易行源代码分析技术的发展,使软件测试从要求功能性正确向如何获得高质量代码的方向发展源代码分析技术的发展,使软件测试从要求功能性正确向如何获得高质量代码的方向发展4 早期静态分析技术早期静态分析技术“古老的”静态分析方法代码审查“古老的”静态分析方法代码审查 直到现在,代码审查
2、的方式仍在应用。这种方式的确有利于提高代码的质量,最大的好处是简单易行,可以发挥人的主观能动性。直到现在,代码审查的方式仍在应用。对审查人员的要求较高对审查人员的要求较高 经验表明,超过百万行的代码进行审查时,发现问题是很困难的经验表明,超过百万行的代码进行审查时,发现问题是很困难的 人工方式有很大的局限:耗时、易犯错、可靠性低人工方式有很大的局限:耗时、易犯错、可靠性低 对内缺乏可持续性,对外不具备权威性对内缺乏可持续性,对外不具备权威性基于词法/语法的代码分析基于词法/语法的代码分析 自动扫描自动扫描 能够区分有问题的词汇和语法缺陷能够区分有问题的词汇和语法缺陷 会产生误报,没有考虑代码的
3、语义会产生误报,没有考虑代码的语义 编译工具的一种补充编译工具的一种补充质量从代码抓起源代码分析技术概述5 新一代静态分析技术新一代静态分析技术基于规则的代码检查基于规则的代码检查 以某种编程标准(规则)为依据分析源代码,发现其违反或不合规则的地方,并给出以某种编程标准(规则)为依据分析源代码,发现其违反或不合规则的地方,并给出“违规违规”的具体信息的具体信息 规则是指导我们写出高质量代码的标准。我们有理由相信符合规则的代码就是高质量、少缺陷的代码规则是指导我们写出高质量代码的标准。我们有理由相信符合规则的代码就是高质量、少缺陷的代码 通过找出通过找出“不合规则不合规则”的代码剔除可能的缺陷的
4、代码剔除可能的缺陷 提高产品的可移植性、可靠性、可读性提高产品的可移植性、可靠性、可读性 除明显的错误外,一般不深入分析缺陷除明显的错误外,一般不深入分析缺陷 重在重在“预防预防”,影响深远,影响深远质量从代码抓起源代码分析技术概述6 新一代静态分析技术新一代静态分析技术基于结构的质量分析基于结构的质量分析 从分析代码结构入手从分析代码结构入手 结构的复杂程度:代码的结构的复杂程度:代码的“量量”结构的良好程度:代码的结构的良好程度:代码的“质质”客观分析代码质量客观分析代码质量 预测缺陷,评估风险,计算工作量和生产率预测缺陷,评估风险,计算工作量和生产率 为质量改进指明方向为质量改进指明方向
5、基于算法的缺陷分析基于算法的缺陷分析 使用算法技术对程序运行时的状态和行为进行预测,检查源代码中的错误和缺陷,并标明问题区域使用算法技术对程序运行时的状态和行为进行预测,检查源代码中的错误和缺陷,并标明问题区域 算法本身决定了发现错误的效率,有可能误报。算法本身决定了发现错误的效率,有可能误报。重在重在“治病治病”,效果立显,效果立显质量从代码抓起源代码分析技术概述7 新一代静态分析技术新一代静态分析技术三招“打造”高质量的代码代码规则检查代码规则检查 预防为主预防为主代码质量分析代码质量分析 强身健体强身健体代码缺陷分析代码缺陷分析 检查治疗检查治疗质量从代码抓起源代码分析技术概述8 代码规
6、则的作用代码规则的作用对可靠性和正确性的强制要求,对语言使用的规则说明对可靠性和正确性的强制要求,对语言使用的规则说明 避免使用未定义的、不明确的语言特性避免使用未定义的、不明确的语言特性 限制特定库、特定结构的使用限制特定库、特定结构的使用 防止编译器的错误防止编译器的错误 防止一般编程错误防止一般编程错误 提高预防性编程实践提高预防性编程实践 限制程序的复杂性限制程序的复杂性 提供统一的编程风格和命名规范提供统一的编程风格和命名规范标准体系认证过程所必备标准体系认证过程所必备 CMM/CMMI、DO178-B、ISO9000-3等CMM/CMMI、DO178-B、ISO9000-3等源代码
7、分析技术概述代码规则检查9 代码规则检查的意义代码规则检查的意义避免程序员对编程语言的不正确使用避免程序员对编程语言的不正确使用 这些错误不是动态测试能解决的这些错误不是动态测试能解决的 预防错误或缺陷预防错误或缺陷在软件工程中更早地找出问题在软件工程中更早地找出问题 问题发现得越早,付出的代价就越小问题发现得越早,付出的代价就越小统一编码风格统一编码风格 提高产品的可移植性、可靠性、可读性提高产品的可移植性、可靠性、可读性减少对个体程序员的依赖减少对个体程序员的依赖 由由“人治人治”走向走向“法治法治”由事后检测向质量控制发展 实现软件产品生产的工业化、标准化实现软件产品生产的工业化、标准化
8、源代码分析技术概述代码规则检查10 嵌入式编程标准嵌入式编程标准 C MISRA C 汽车制造业嵌入式C编程标准 C+JSF C+联合攻击战斗机C+编程标准 HICPP(High Integrity C+)高可靠性高可靠性C+编程标准 MISRA C+汽车制造业嵌入式C+编程标准 行业标准 GJB 5369 航天型号C语言安全子集 源代码分析技术概述代码规则检查11 MISRA C概述MISRA C概述 关于MISRA MISRA标准,为什么 MISRA-C2规则一览嵌入式软件静态测试技术一切为了安全12 关于MISRA关于MISRA MISRA=The Motor Industry Soft
9、ware Reliability Association 汽车工业软件可靠性联合会汽车工业软件可靠性联合会源自于英国政府1990年成立的“安全IT”计划的一个项目 1994年正式独立出来,总部在英国1994年正式独立出来,总部在英国致力于协助汽车厂商开发安全可靠的软件,其主要成果就是MISRA C/C+标准MISRA常设一个指导委员会,目前成员是:福特汽车(Ford)福特汽车(Ford)捷豹路虎(Jaguar Land Rover)捷豹路虎(Jaguar Land Rover)莲花公司(Lotus Engineering)莲花公司(Lotus Engineering)米拉汽车设计(MIRA L
10、td)米拉汽车设计(MIRA Ltd)里卡多公司(Ricardo plc)里卡多公司(Ricardo plc)TRW汽车电子TRW汽车电子 利兹大学(The University of Leeds)利兹大学(The University of Leeds)一切为了安全MISRA C概述13 MISRA标准,为什么MISRA标准,为什么在汽车电子和实时嵌入式应用中,C的使用越来越体现出广泛性和重要性。这主要取决于C语言在嵌入式行业的应用优势:C可用于硬件操作。对多数微处理器来说,C往往是最佳甚至是唯一的选择。C对高速、底层、输入/输出操作等提供了很好的支持。而这些特性是许多汽车嵌入式系统的基本特
11、性。由于嵌入式系统日益复杂,高级语言C较之汇编语言显然更为适合。相对于其他一些高级语言,C能够产生较少的代码和较少的RAM密集性(RAM-intensive)。不断增长的可移植性需求。市场竞争要求可以通过移植到新的和/或低成本的处理器,以降低硬件成本。不断增长的自动产生C代码的需求,以及对开放系统和主机环境(hosted enviroments)的兴趣。一切为了安全MISRA C概述14 MISRA标准,为什么MISRA标准,为什么没有任何一种编程语言能够确保它的最终执行过程会和程序员的预期完全吻合没有任何一种编程语言能够确保它的最终执行过程会和程序员的预期完全吻合程序员的失误这是常有的事。错
12、误发生时,C往往能容忍 书写错误书写错误 算法理解错误算法理解错误 C语言非常灵活,可以写出风格和表达截然不同的文章C语言非常灵活,可以写出风格和表达截然不同的文章程序员对语言的误解 误会语言构造的作用误会语言构造的作用 没有正确理解编程语言的全部内容没有正确理解编程语言的全部内容一切为了安全MISRA C概述15 MISRA标准,为什么MISRA标准,为什么程序员对编译器的误解 C语言中许多地方是未经完善定义的,其实际行为取决于编译器的解释,可能与程序员的预期完全不同C语言中许多地方是未经完善定义的,其实际行为取决于编译器的解释,可能与程序员的预期完全不同“未定义行为未定义行为”可能会随着编
13、译器的改变而改变可能会随着编译器的改变而改变 某些情况下其行为甚至在同一个编译器内也会根据上下文而发生变化某些情况下其行为甚至在同一个编译器内也会根据上下文而发生变化编译器的错误 编译器也是软件,也有缺陷编译器也是软件,也有缺陷 对于C的一些难以理解的地方,编译器的编写者很容易错误地解释和实现对于C的一些难以理解的地方,编译器的编写者很容易错误地解释和实现操作平台的差异 尽管语言一样,但在不同的目标平台上表现不一样尽管语言一样,但在不同的目标平台上表现不一样运行时错误 也许语言本身并没有问题,但某些特殊的数据会在代码运行时产生错误也许语言本身并没有问题,但某些特殊的数据会在代码运行时产生错误一
14、切为了安全MISRA C概述16 MISRA标准,为什么MISRA标准,为什么 所以,在安全相关系统中使用所以,在安全相关系统中使用C语言需要相当小心。语言需要相当小心。MISRA的建议:的建议:首先,只能使用在ISO标准中定义的语言。因此排除了以下方面的使用 K&R CK&R C C+C+C的私有扩展C的私有扩展其次,不要使用所有的C语言特性而且,必须对语言的使用加以限制,避免那些确实可能产生问题的地方,直到它是可以应用的另外,汇编语言不再适合于安全相关系统,在某些方面可能更糟,不建议使用一切为了安全MISRA C概述17 MISRA标准,为什么MISRA标准,为什么 MISRA C标准为人们提供了标准为人们提供了C语言使用的限制子集语言使用的限制子集MISRA C:1998(MISRA C1)基于ISO 9899:1990 基于ISO 9899:1990“Programming languages Programming la
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1