




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Klocwork 软件静态分析解决方案 目 录 1. Klocwork 简介.1 1.1. Klocwork 功能简介.1 1.1.1. 缺陷检测.1 1.1.2. 安全漏洞检测.1 1.1.3. 软件架构分析.2 1.1.4. 软件度量分析.3 1.1.5. 可定制的代码分析.4 1.1.6. 开发人员IDE集成.4 1.2. Klocwork架构.4 2. Klocwork静态分析工具与软件开发进行过程集成.6 2.1. 软件静态分析技术是降低缺陷管理成本的首选.6 2.2. 软件静态分析技术的发展.6 2.2.1. 早期的软件静态分析.7 2.2.2. 新一代软件静态分析技术.8 2.3. Klocwork软件静态分析原理.9 2.3.1. Klocwork静态分析技术原理.9 2.3.2. Klocwork构建过程.12 2.3.3. 工作原理.13 2.4. 在软件开发过程中使用Klocwork .16 2.5. 使用Klocwork的团队角色.17 2.5.1. 软件开发人员在桌面阶段消除软件缺陷和安全漏洞.17 2.5.2. 软件开发经理在提交到QA之前获取您软件质量的可视化和控制.17 2.5.3. 软件架构师理解和优化架构.19 2.5.4. 安全经理或审查人员在被利用之前,防止安全漏洞发生.19 3. 部署.20 1. Klocwork 简介 Klocwork公司是软件静态分析领域技术和市场领先的厂商,全球拥有200多个客户,其中许多是全球财富500强中的公司。 Klocwork软件是Klocwork公司基于专利技术分析引擎开发的,综合应用了多种近年来最先进的静态分析技术,是出色的软件静态分析软件。Klocwork产品与其它同类产品相比,具有很多突出的特征:Klocwork支持的语言种类多,能够分析C、C+和Java代码;能够发现的软件缺陷种类全面,既包括软件质量缺陷,又包括安全漏洞方面的缺陷,还可以分析对软件架构、编程规则的违反情况;软件分析功能全面,既能分析软件的缺陷,又能进行可视化的架构分析、优化;能够分析软件的各种度量;能够提供与多种主流IDE开发环境的集成;能够分析超大型软件(上千万代码行)。 1.1. Klocwork 功能简介 Klocwork功能包括: 缺陷检测 安全漏洞检测 软件架构分析 软件度量分析 可定制的代码分析 开发人员IDE集成 1.1.1. 缺陷检测 提供多角度的各种缺陷类型的分析。 自动化的缺陷检测功能易于使用,定制灵活,具有图形化的构建和报表管理图形界面,拥有业界领先的消息过滤器,极具柔性的配置,和强大的学习调整知识库; Klocwork能够分析C/C+和Java代码,生成代码问题报告,能够发现的缺陷类型举例(详细参见附录): C/C+缺陷类型样例 Java缺陷类型样例 空指针释放 效率错误(如:空的finalize方法) 内存管理问题(如:内存泄漏) 可维护性问题(如:空的catch从句) 数组越界 可靠性问题 (如资源泄漏) 未初始化数据使用 编码风格问题(如:在条件中赋值)1.1.2. 安全漏洞检测 Klocwork确信软件安全性是软件质量中一个重要的、并越来越受重视的方面。同样的,1 所有的Klocwork安全漏洞分析是基于市场领先的缺陷检测能力,从原来的缺陷检测分离出来单独的安全漏洞检测和违反推荐的安全代码最佳实践的缺陷检测。 能够检测到的安全漏洞类型举例(详细参见附录) C/C+安全漏洞分类 Java安全漏洞分类 访问控制缺陷 拒绝服务 缓冲区溢出 注入缺陷(如:SQL注入、进程注入等) DNS欺骗 未经验证的输入 忽略返回值 移动代码安全 注入缺陷 有漏洞的会话管理 不安全的存储 跨站点脚本 未经验证的用户输入 出错处理不当 有漏洞的访问控制 1.1.3. 软件架构分析 Klocwork帮助组织为任何需要理解软件架构的项目进行准备工作,如:外包项目、改造利用一段老的代码、或者向已有系统添加新功能。利用Klocwork,架构师、管理人员和开发人员能够重新获得对他们软件和产品的架构理解,并在进行任何代码修改的时候进行功能强大的影响分析。当结合使用Klocwork的缺陷和安全漏洞检测,它提供一个强大的功能集帮助理解在您软件架构异常和缺陷发生率的关联关系。 架构分析可以进行代码结构可视化展示,显示已有应用系统的物理结构,应用系统中的依赖关系连同应用系统以及外部环境间的依赖关系。 2 软件架构师还可以利用架构分析快速发现复杂的架构问题(如循环依赖)、模型改进等方面的内容,然后为开发人员产生一个可操作的变更列表。 在大型C/C+软件中,一个普遍的可维护性问题就是过于复杂的头文件结构,比如包含了许多不必要的头文件。Klocwork能够对您的系统执行自动分析,然后给出经过优化后,对潜在的系统文件大小、构建时间减少的量值,并给出优化您头文件的某种推荐方案的路径图。 使用自动的流程图功能,从源代码分析得出程序的流程图,理解文件的处理流程,来帮助进行更加高效的编码。 1.1.4. 软件度量分析 基于实际从软件源代码采集得到的信息,Klocwork直接帮助执行官和开发经理理解、3 预测、和指导公司在软件安全和质量方面的成长。Klocwork随产品发布100多种关于文件、类、和函数/方法的代码度量,包括了从McCabe复杂度、Halstead程序度量、代码行数、继承数、循环数等各种基本度量。客户还可以根据自己的质量目标,任意组合这些基本度量进行运算生成复合度量。 1.1.5. 可定制的代码分析 许多组织有自己独特的编码标准、安全策略或质量目标。经过扩展Klocwork产品,您可以将我们的分析引擎应用到您独特的、公司特色的问题上。另外,Klocwork产品的可扩展性能够用于实现行业特定的编码标准,保证遵守最新的最佳实践。客户可使用Klocwork文档中介绍的扩展性API或者使用Klocwork提供的专业服务编写适合您的检查器。 1.1.6. 开发人员IDE集成 Klocwork与众不同的核心之一就是我们能够集成到您选定的开发环境中去。通过集成,在开发人员的桌面上即可自动进行代码的检查,您可创建更为优秀的软件并通过在开发过程早期捕捉到潜在的问题而降低开发成本。Klocwork能够与Eclipse、Wind River Workbench 2.3、Visual Studio 6/2002/2003/2005、IBM Rational Application Developer for Websphere Software、Gvim、Emacs、Visual SlickEdit、Platform Builder、KDevelop、MetroWerks CodeWarrior、IntelliJ等集成。 1.2. Klocwork架构 Klocwork 产品基于安装目录和静态分析项目目录之上,其架构包括一组服务器、一组静态分析引擎、一组客户端应用,如图: Compilec/ kwckwjavaKlocwork 安装目录 kwlinkerLoad database (kwadmin) kwinspect kwintellectdb Compilekwcc/ kwjavamysql tomcat flexlm SCM服务器源文件Klocwork 服务器 Klocwork Database Server LicenseManager(FLEXlm)Klocwork Admin ServerKlocwork Web Server Object filesFBKB Project propertiesIDF KlocworktablesinSpect Reports Filter filesConfig filesKlocwork 应用工具 KMC Architectual Analysis Develop. inSpect Klocwork Project Central Web browser) kwadminMetrics&Tren R/O 服务器 R/W 服务器 Klocwork 分析引擎 Compilekwcc/ kwjavakwlinkerLoad database(kwadmin) kwinspect kwintellectdb 构建 服务器 KLOCWORKSERVERFLEXLM SERVER MySQL SERVER TOMCAT SERVER 客户端 计算机 Klocwork 项目目录 DatabaseSystem ModelUser Models4 Klocwork服务器 Klocwork Admin Server(rmimanager)Klocwork管理服务器:管理Klocwork产生的数据,配置其它的服务器。Klocwork客户端连接到Admin Server来获取项目信息。 Klocwork Database Server(mysql)Klocwork数据库服务器:是一个MySQL数据库服务器,包括Klocwork Project Central和inSight Architect的使用的数据。 Klocwork Web Server(tomcat)Klocwork Web服务器:基于Apache Tomcat,提供Web方式访问Project Central使用inSpect报告和inSight Developer。 License Manager(lm)FLEXlm License Manager:可以是包含在Klocwork内的FLEXlm版本或者是一个独立的FLEXlm安装。License Manager不需要安装在与Klocwork 服务器相同的计算机上。 Klocwork分析引擎 Klocwork compilers(kwcc,kwjava)Klocwork编译器:编译C/C+和Java语言的源代码,每个源代码文件经过编译输出一个目标文件。 Klocwork linker(kwlinker)Klocwork连接器:连接目标文件,生成Klocwork数据库的tables。 kwdefectsj对Java字节码(.jar和.class文件)进行缺陷和安全漏洞分析。 kwlef对C/C+目标文件进行缺陷和安全漏洞分析。 Klocwork inSpect(kwinspect)提供整个软件系统的质量信息的质量保证系统,inSpect根据构建生成的tables生成各种报告(文本、PDF或者HTML输出格式)。 Klocwork项目目录 是所有Klocwork服务器和应用程序的数据存储位置。projects_root包含Klocwork服务器设置和Klocwork分析引擎生成的项目、构建相关的信息。 projects_root目录的选择很重要,目录应该拥有并且将来也一直会有充分的磁盘空间。projects_root目录必须是一个所有Klocwork都能够访问到的位置。 Klocwork应用工具 Klocwork Management Console(KMC)Klocwork管理控制台:有GUI方式和命令行方式的界面。使用KMC和命令行程序管理Klocwork服务器、项目和构建。 Klocwork Project CentralWeb站点方式的Klocwork项目中心:Klocwork inSight Developer和Klocwork inSpect的Web站点方式的管理中心。无需安装,因此不出现在安装程序的客户程序列表里。inSight Developer提供直接从源代码快速访问软件系统的信息。 Klocwork Enterprise Developer在将源代码提交到源代码管理系统之前,帮助保证源代码的质量; Architectural Analysis直接从源代码提取准确的关于软件设计的图形视图(C,C+和Java)。 Metrics and Trending 分析软件缺陷的分布和趋势,监控软件的质量状态。 5 2. Klocwork静态分析工具与软件开发进行过程集成 2.1. 软件静态分析技术是降低缺陷管理成本的首选 据美国NIST统计,2002年美国解决软件缺陷的费用是$600亿,占美国当年GDP的0.6%,而这还只是直接成本统计,不包括由缺陷而带来的间接成本:品牌破坏、客户信誉度下降、利润下降、市场份额下降、甚至人身伤害的损失。 这巨大的因缺陷而产生的费用在缺陷生命周期中的分布(来自Garnter、IBM和HP的统计数字)如下图: 在测试、发布阶段纠正缺陷的成本是编码阶段发现并纠正缺陷的成本的1590倍,如果在交付用户之后才发现并解决缺陷,这个数字将达到50200倍。 因此,在编码实现阶段发现并解决尽可能多的缺陷,能够极大降低缺陷管理成本,据相关统计数字估计,这个成本至少可以降低1/3。 如何才能在编码实现阶段发现更多的缺陷呢?利用软件静态分析技术是最好的答案。软件静态分析无需代码运行,就能发现代码的质量和安全问题,这种技术能够把缺陷的发现和解决时间向前推移到“第一时间”在软件开发过程中,发现并纠正问题所需成本最低的时间点。 2X 5X 10X 50X 30X 40X IBM 40 到 50倍 HP 30倍 Gartner 50 到 1000倍 测试/QA 最常见的缺陷发现和纠正时间点 “第一时间” 软件开发过程中,发现并纠正问题所需成本最低的时间点 缺陷 管理 成本 发布 测试 编码实现阶段 设计 需求 2.2. 软件静态分析技术的发展 静态分析技术很早时候出现在大学的科研机构中以及高科技研究部门,已经有很多年的历史了,而且在很早时候,大家就已经意识到软件静态分析技术在降低缺陷管理成本方面的作用,并且尽可能在软件开发的日常过程中进行静态分析工作。但是,前期的软件静态分析技术应用并非预期的那样有效,也没有真正成为开发人员的日常开发工作的一部分。原因有三: 6 1软件静态分析技术由于其算法的特殊性分析占用的时间、资源问题,导致无法对大型软件(10万代码行以上)进行分析; 2早期的静态分析技术误报现象严重,开发人员面临大量的误报需要辨别其真伪,耗时耗力,并且淹没了真正的缺陷所在; 3性能问题,静态分析过程通常很慢,无法应用到开发人员的日常开发环境当中。 随着计算机技术的发展,计算资源效率日新月异,更重要的是静态分析技术正在逐渐成熟起来,现在的静态分析技术已经与以前有了质的飞跃,这些都使得静态分析技术进行软件开发测试成为现实。 2.2.1. 早期的软件静态分析 z 最初的静态分析方法代码审查 一直到现在,代码审查的方式一直都在应用,这种方式的确是有效的提高软件质量的方式,但这种方式具有如下的弊端: 人工方式具有很大的不可靠性,随着复杂度增加,错误会淹没在代码里,经验证明,超过百行的代码进行审查时,发现问题是很困难的; 人工方式耗时,容易犯错误; 要求审查人员在软件质量方面具有较深的造诣,才能取得好的效果; z 最简单的静态分析方法grep 强大的搜索源代码的能力; 不能识别语法、句法、注释、字符串、声明、函数调用等,灵敏度很低; z 基于基本词法分析的静态分析 是早期静态分析工具采用的静态分析方法,如ITS4、FlawFinder、RATS等; 能够区分发生缺陷的词汇,例如能区分gets(&buf)与int begetsNextChild = 0中的gets关键字; 过程: 前置处理 为源代码打标记 与Compiler做的 第一件事词法分析相同 比对 缺陷结构库 标记文件 缺点: 产生许多的误报(false positives),原因是没有考虑目标代码的语义(Semantics); 不能很好地理解代码执行时的行为,尽管有些缺陷信号非常明显,不需要语义解析就能准确定位,但大多数的缺陷都不是那么直接了当; 7 2.2.2. 新一代软件静态分析技术 2.2.2.1. 原则 新一代的软件静态分析技术使用了如下的分析原则:使用许多抽象的程序约束来映射源代码的结构。 2.2.2.2. 理论基础程序分析(Program Analysis) 使用静态技术对程序执行时状态和行为的集合进行预测; 但程序分析包括运行时错误是不可判定的,没有固定、可靠的方法能够真正回答程序是不是有运行时错误,这是数学理论上不可能实现的; 采用替代的方法,简化所有的程序分析问题成为可以跟踪和计算的问题; 2.2.2.3. 基本思路 使用抽象语法树(Abstract Syntax Tree),从源代码利用借鉴编译技术的方法构建一个AST,并加入更为丰富的语义状态的描述。 2.2.2.4. 四种基本方法 z 数据流分析(Data Flow Analysis) 将程序看作是图,节点是程序的基本块,边是描述控制如何从一个基本块转移到另一个基本块。图可以解决很多问题,例如:以图中边的抽象得出数学方程,其解就是可达性问题的答案;PREfix、SLAM静态分析系统使用了数据流分析的思想。 z 基于约束的分析(Constraint-based Analysis) 从程序文本产生一系列的本地约束,通过解译这些约束来验证所有的属性。Cqual是这种类型的系统。 z 抽象解析(Abstract Interpretation) 将程序映射成更加抽象的域(Domain),使分析更加具有可跟踪性并具有检验代码的作用;抽象解析通过计算能够直接得出分析结果,而不是象其他类型的方法使用验证的方式进行分析;ASTREE是抽象解析的静态检查器。 z 类型与结果分析(Type and Effect Analysis) 是结果系统和注释的类型系统的混合。结果系统表达一个语句的执行有什么结果;注释的类型系统提供结果系统的语义。这种分析广泛应用于各类编译器(如:gcc Wall选项)。 2.2.2.5. 静态分析技术方法的目标平衡与关键问题 静态分析方法由于其算法特殊性,静态分析不可能分析程序的所有状态从而完全判定程序是不是有缺陷,因此静态分析采用了各种逼近的算法来尽可能追求不同的目标,例如: 能够找到尽可能多的缺陷; 提高报告的准确率; 这样,以不同目标进行分析的算法,往往会倾向于某个特定目标,从而降低对其它目标的追求,这样,在静态分析方法中就存在这样几类的目标平衡和关键问题: 8 z 准确与全面的平衡 我们知道,程序分析包括运行时错误是不可完全判定的,没有固定的方法能够真正回答程序是不是有运行时错误,这是数学理论上不可能实现的;采用替代的方法,简化所有的程序分析问题成为可以跟踪的问题;这种简化或者说近似不可避免地或者导致准确性下降或者导致全面性下降;换句话说,要追求准确,就要牺牲全面,反之亦然;例如:PREfix只分析几类问题,但分析得非常准确;ASTREE则通过设置控制参数来设置准确与全面的不同程度的平衡这是抽象解析方法的强大而有意思的功能。 z 注释与外部检查 注释提供对程序代码细粒度的说明,基于注释的静态分析系统通常能够比外部检查系统发现更全面的问题;但基于注释的程序与源程序同步起来困难,重用性差;随着程序复杂性增加,原来添加的注释已经不能适用,产生大量的错误报告,需要添加新的注释;但很难确定到底添加多少注释合适。不过最新的基于注释的静态分析器正在考虑自动化注释过程,从而解决这个问题。 z 适应性(Scalability) 适应性是指分析大型复杂程序的适应能力;一般的自动分析器随着程序复杂度增加,很容易就满载了。进行过程间分析(Interprocedural analysis)和过程内分析(Intraprocedural analysis)的方法具有不同级别的适应性: Interprocedural analysis:能够发现更多的bug,比intraprocedural更为准确;如:PREfix interprocedural 检查器发现90的错误是关于多个函数间交互的;但interprocedural分析代价很高(CPU、内存等),与程序大小为超线性增长; 2.3. Klocwork软件静态分析原理 经过多年的发展,静态分析技术由原来的词法分析、语法分析发展到现在的语义分析阶段,现在的静态分析技术已经远远发生了巨大的变化,通过对程序状态的分析,能够发现程序的运行时错误。现在的静态分析不是“grep on steroids”或“现代的lint工具”。Grep或者lint都不能达到现代静态分析工具的精确度,均不能精确地检测出代码中复杂的缺陷和安全漏洞,更无法有效集成到您的开发过程中。 2.3.1. Klocwork静态分析技术原理 Klocwork静态分析融合了多种先进的静态分析技术、Klocwork专利软件分析技术以及Klocwork在静态分析领域的专业技术和经验,这使得Klocwork的产品成为自动化的、适应大规模代码的和准确的静态分析工具。 Klocwork按照如下四个步骤分析软件代码: 步骤1构建和代码分析 步骤2代码和系统知识聚合 步骤3跨过程缺陷分析 步骤4数据库生成 9 步骤1 步骤2 步骤3 步骤4 客户代码Klocwork代码分析 可定制的客户知识库文件 Klocwork中间系统文件平台知识库文件Klocwork缺陷分析 函数行为 知识库Klocwork数据库自动生成的文件 自动化构建发现步骤 1 构建和代码分析 z 客户代码 显而易见,这是进行任何静态分析最重要的输入,包括:构成客户全部或部分系统的头文件、库文件和其他组件,用来产生目标代码和可执行文件。Klocwork能够分析C,C+和Java代码。 z 自动化的构建发现 另一个同等重要的输入信息是客户构建软件的准确信息尤其,必须的详细信息包括标准的编译选项如头文件目录(-I)、定义文件目录(-D)等。目的是使Klocwork工具能够按照其标准的系统构建的方式来分析整个软件系统。这种方式与其它的静态分析工具不同,其它静态分析工具不能生成代码的全系统视图,只能基于逐个文件(file-by-file)的方式进行分析,因此分析类型具有很大的局限性。Klocwork提供易于使用的、自动化的工具,通过使用专有的构建发现技术对客户的构建进行检测,产生一个构建规格文件。这一创新技术大大简化了Klocwork在客户环境中的部署,而许多客户环境是极其复杂的构建环境。另外,在标准的构建环境如Microsoft的构建环境中,还可以从Visual Studio项目文件中自动提取构建信息。 10 z Klocwork 代码分析 准确的构建信息和客户代码是代码分析系统的两个输入。此分析使用Klocwork的技术对代码进行解析、编译和链接,产生Klocwork的中间系统数据。Klocwork代码分析技术是极具适应性的(适应超大规模的代码),可以对上千万行的客户代码进行分析。此外,使用Klocwork的分布式构建能力,客户能够利用已有的构建结构快速、频繁地对他们的大规模代码进行分析。因为Klocwork使用自己拥有的专为复杂环境而设计的编译器和解析器,客户可获得最大的灵活性以支持众多不同的环境。 步骤 2 代码和系统知识聚合 z Klocwork中间系统数据 代码分析时产生的中间系统数据,存储和聚合了如下的详细系统模型: o 抽象语法树(Abstract syntax tree-AST) 高层次的中间程序表示,将代码分解为语法和语义结构,以树的方式组织在一起。一些样例结构包括:声明、语句和表达式。 o 调用图(Call graph) 包括函数和/或方法调用其他函数和方法的信息。 o 控制流图(Control flow graph) 控制流或者“逻辑流”分析包括所有的关于软件“任务链”的信息,利用这些结果能够跟踪所有的路径。这样通过确保缺陷检测已经执行了所有的代码路径,提高率代码覆盖率。 z 平台知识库文件 Klocwork随产品发布提供一个平台专有信息的详细的知识库。无需解析代码,就可以知道函数行为的信息。这个功能在客户仅仅访问系统的库文件而不是代码时非常有用。平台知识库既增强了分析的准确性(减少误报),又提高了缺陷检测能力(减少漏报)。 z 客户知识库文件(可选) Klocwork也允许用户添加他们自己的系统中所使用的第三方库的特定描述。客户也可以在没有源代码的情况下,输入关于任何函数行为的详细信息,如:封装了系统内存分配过程的客户内存管理过程。 步骤 3 过程间的缺陷分析 z Klocwork 缺陷分析 步骤2完成后,Klocwork的缺陷分析就开始运行,选取多种精密复杂的技术来检测代码中的缺陷。在高层次上,Klocwork的缺陷分析结合了语法检查技术和精确的逻辑分析技术,在整个系统中追踪变量的可能的值和不同的执行路径。与其它分析技术不同,Klocwork从多种技术中选择分析方法来保持适应性(大规模分析能力)和健壮的、准确的缺陷检测之间的恰当平衡。三种通用的技术是: i. 过程间数据流分析 这种复杂的分析可以为代码中所有的执行路径建立详细的模型,并在全局的或者全系统的层次上覆盖代码。在此项技术中,Klocwork通过使用如下方式进行分析: 路径消除 消除错报的重要步骤,从分析中删除所有的不可达路径; 别名分析 更加准确理解系统内存使用情况; 11 ii. 抽象解释和约束解析 这些技术提供代码中变量值可能值的推导,提高发现缺陷的概率和精度,提高分析的质量。 iii. 启发式排序 为静态分析工具报告的缺陷分配概率值,并且利用各种开放源代码和行业编码标准进行“训练”,缺陷分析积累的知识库和概率都集成到工具中。 z 函数行为知识库(Function Behavior Knowledge Base -FBKB) 自动生成描述所有函数行为的文件。这个文件作为系统分析的一部分集成到系统中。为了保证开发人员只对系统中他/她自己的部分进行编译,也可以用于开发人员的桌面环境,所有的跨过程的系统知识通过一个共享的FBKB文件实现,以保证开发人员获得基于全系统环境的准确的结果。 步骤 4 数据库生成 分析结束后,Klocwork将生成的所有数据存储到数据库中,这些数据包括缺陷、安全漏洞、架构模型、度量。这样,就为客户提供了一个适应性强的可搜索的数据库,使客户能够方便地找到他们想查找的缺陷。这也使得Klocwork能够按照每次构建跟踪质量问题,报告的所有缺陷均通过统一的缺陷状态和阶段进行管理。 2.3.2. Klocwork构建过程 .c .cpp kwccProject Central数据库 目标文件 kwlef含有缺陷信息的目标文件 kwlinker Tables kwadmin build-project构建配置文件 kwbuildprojectkwinject 或 手工过程 (构建集成或解析构建日志) 构建配置文件 以前的构建 (可选) 人工FBKB (可选) kwscope这部分是自动的 这是用户执行的内容 使用自动的集成构建,或者使用kwinject生成构建配置文件,再由构建配置文件使用kwbuildproject进行构建。 整个构建过程对用户来讲是自动的、不可见的:C/C+源文件,经过kwcc编译器编译,生成目标文件,再由kwlef对目标文件进行分析,生成带有缺陷信息的目标文件。kwlinker12 将带有缺陷信息的目标文件进行连接,生成构建结果数据库tables。 然后,从tables数据库,由kwadmin build-project,将缺陷信息、度量信息和架构信息进行结构化并存入Project Central数据库,供inSpect进行缺陷报告、inSight进行架构分析。 2.3.3. 工作原理 这里通过Klocwork工具自动在Firefox(一个开源的web浏览器)发现空指针引用的问题,来说明如何使用Klocwork静态分析技术在代码中发现严重的运行时错误。这个例子将展示Klocwork如何能够自动推断一个函数的行为,尤其在这个例子中,通过考虑不同的预判条件,推断某个的可能返回值和之后的参数引用。 缺陷类型:Result of function that may return NULL will be dereferenced 函数的返回结果可能为空并被引用 Klocwork提供的缺陷描述: Pointer certs returned from call to function nssList_CreateIterator at line 991 may be NULL and will be dereferenced by passing argument 1 to function nssListIterator_Start at line 992. 下图是从Klocwork基于Web的缺陷引用和管理界面Porject Central中截取的图片。图片的上方2/3显示的是源代码视图,而下方1/3显示Klocwork的缺陷追溯信息,通过这些信息,开发人员可以一步步查看代码,并一步步理解缺陷产生的原因。 Klocwork工具自动识别出在这一行,指针certs被赋值 然后,需要了解在另外一个函数nssList_CreateIterator内部作了什么操作,以确定是否有返回NULL的可能性 13 Klocwork工具进行过程间跟踪,分析到nssList_CreateIterator函数并自动判别可能会返回NULL。 注:通常情况下,简单的静态分析工具会报告每一次NULL的情况,但不会推断函数其它部分的行为,这当然会引起大量的误报。 然后,Klocwork工具进行过程间路径跟踪,发现certs被传递给位于另外一个源文件中的另一个函数nssListIterator_Start。 14 在函数nssListIterator_Start内部,工具识别出有一个宏封装了对第一个形参的引用。 因为Klocwork预处理了代码,宏可以在这里展开,这样工具就能够理解其中的操作。 缺陷分析现在能够推断在返回NULL之后,有一处引用。 在宏定义里,出现了引用,产生了空指针引用的条件,因此,工具就报告了这个错误。 15 2.4. 在软件开发过程中使用Klocwork Klocwork通过与软件开发过程的结合,帮助实现一个闭环质量控制管理过程。 首先,开发人员在个人开发环境中,使用Klocwork静态分析,在代码提交配置管理之前,把产生的代码缺陷和安全漏洞发现并消灭在第一时间,这本身就大大节省了缺陷管理成本和开发时间。在解决缺陷问题的时候,Klocwork还能够帮助进行缺陷修改的影响分析,避免缺陷的修改带来新的问题。 在系统集成的时候,使用Klocwork对软件系统进行分析,发现整个软件系统级别的缺陷和安全漏洞,保证在进行QA工作和集成测试之前,将代码本身的问题消灭掉。这样,QA工作和集成测试就可以更多的关注用户需求问题,而不是象传统过程那样,花费将大量时间用来解决软件的代码缺陷和安全漏洞问题。 生成的质量报告,分别被开发管理人员、安全审查人员、代码审查人员/QA人员、软件架构师所参考。 开发管理人员获得整体的可视化质量数据,包括从团队成员的角度和组件的角度进行数据的趋势分析。 安全审查人员将关注软件中存在的安全漏洞,最小化软件安全风险,限制安全漏洞扩散。 代码审查人员/QA人员/测试人员则使用Klocwork进行完全的、自动化的代码审查,在展开QA工作之前,解决更多的缺陷问题。 16 软件架构师则通过Klocwork检查开发人员的工作是否遵守了架构目标,理解原有系统架构,优化当前软件架构,简化和维护软件架构。 开发过程中的角色如开发管理人员、安全审查人员、代码审查人员/QA人员和架构师,可以设置质量和安全策略,以保证整个开发团队能够遵守策略进一步改进开发过程和软件质量。Klocwork支持设置质量和安全策略,并在进行静态分析的时候,给出对策略的违反情况检查。这样,通过在开发过程中使用Klocwork,通过开发策略规范开发人员的开发行为,提高软件质量,形成质量过程控制闭环。 2.5. 使用Klocwork的团队角色 2.5.1. 软件开发人员在桌面阶段消除软件缺陷和安全漏洞 Klocwork集成到Eclipse IDE中,也有与Windriver Workbench,Visual Studio,和IBM Rational Application for Websphere的集成插件。 软件缺陷有时发生在开发拷贝的时候,或者在为复杂系统增强功能时因为疏忽而造成。无论什么情况,在代码进入到代码流(开发流)之前尽早自动的检测
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国腰部训练器行业销售动态与竞争策略分析报告
- 安全生产责任主体安全责任追究与事故预防机制研究考核试卷
- 农业机械化对农产品包装的影响考核试卷
- 心理疲劳与恢复策略在体育表演中的应用考核试卷
- 乐器行业市场社交媒体营销效果评估考核试卷
- 肠胃疾病饮食禁忌考核试卷
- 以木材为主的乡村风格室内设计探索
- 品牌塑造中的市场领导者能力及团队协作培养
- 公共设施建设中的公益物资需求预测
- 高温合金材料及其涂层应用的市场预测与发展趋势分析
- 高三一轮复习训练 湖泊专题
- 安全生产月关爱生命注意安全
- 肌少症的诊治浅析
- 2024年海南省中考数学试卷真题及答案详解(精校打印)
- 三菱FX3u-PLC应用实例教程全套课件配套课件完整版电子教案
- 畜禽解剖生理学-课程说课课件
- 2024北京海淀区初二(下)期末物理及答案
- 广东省深圳市福田区2023-2024学年七年级下学期期末数学试题
- 新疆省新疆生产建设兵团2024年六年级下学期5月模拟预测数学试题含解析
- 北京市昌平区2022-2023学年四年级下学期数学期末试卷(含答案)
- 《第14课 明至清中叶的经济与文化》教学设计教学反思-2024-2025学年高中历史统编版必修中外历史纲要上
评论
0/150
提交评论