Klocwork软件静态分析解决方案1.Klocwork简介Klocwork公司是软件静态分析领域技术和市场领先的厂商,全球拥有200多个客户,其中许多是全球财富500强中的公司。Klocwork软件是Klocwork公司基于专利技术分析引擎开发的,综合应用了多种近年来昀先进的静态分析技术,是出色的软件静态分析软件。Klocwork产品与其它同类产品相比,具有很多突出的特征:Klocwork支持的语言种类多,能够分析C、C++和Java代码;能够发现的软件缺陷种类全面,既包括软件质量缺陷,又包括安全漏洞方面的缺陷,还可以分析对软件架构、编程规则的违反情况;软件分析功能全面,既能分析软件的缺陷,又能进行可视化的架构分析、优化;能够分析软件的各种度量;能够提供与多种主流IDE开发环境的集成;能够分析超大型软件(上千万代码行)。1.1Klocwork功能简介Klocwork功能包括:缺陷检测安全漏洞检测软件架构分析软件度量分析可定制的代码分析开发人员IDE集成1.1.1缺陷检测提供多角度的各种缺陷类型的分析。自动化的缺陷检测功能易于使用,定制灵活,具有图形化的构建和报表管理图形界面,拥有业界领先的消息过滤器,极具柔性的配置,和强大的学习调整知识库;Klocwork能够分析C/C++和Java代码,生成代码问题报告,能够发现的缺陷类型举例。(详细参见附录):C/C++缺陷类型样例Java缺陷类型样例空指针释放效率错误(如:空的finalize方法)内存管理问题(如:内存泄漏)可维护性问题(如:空的catch从句)数组越界可靠性问题(如资源泄漏)未初始化数据使用编码风格问题(如:在条件中赋值)1.1.2.安全漏洞检测Klocwork确信软件安全性是软件质量中一个重要的、并越来越受重视的方面。同样的,所有的Klocwork安全漏洞分析是基于市场领先的缺陷检测能力,从原来的缺陷检测分离出来单独的安全漏洞检测和违反推荐的安全代码昀佳实践的缺陷检测。能够检测到的安全漏洞类型举例(详细参见附录)C/C++安全漏洞分类Java安全漏洞分类访问控制缺陷拒绝服务缓冲区溢出注入缺陷(如:SQL注入、进程注入等)DNS欺骗未经验证的输入忽略返回值移动代码安全注入缺陷有漏洞的会话管理不安全的存储跨站点脚本未经验证的用户输入出错处理不当有漏洞的访问控制1.1.3.软件架构分析Klocwork帮助组织为任何需要理解软件架构的项目进行准备工作,如:外包项目、改造利用一段老的代码、或者向已有系统添加新功能。利用Klocwork,架构师、管理人员和开发人员能够重新获得对他们软件和产品的架构理解,并在进行任何代码修改的时候进行功能强大的影响分析。当结合使用Klocwork的缺陷和安全漏洞检测,它提供一个强大的功能集帮助理解在您软件架构异常和缺陷发生率的关联关系。架构分析可以进行代码结构可视化展示,显示已有应用系统的物理结构,应用系统中的依赖关系连同应用系统以及外部环境间的依赖关系。软件架构师还可以利用架构分析快速发现复杂的架构问题(如循环依赖)、模型改进等方面的内容,然后为开发人员产生一个可操作的变更列表。在大型C/C++软件中,一个普遍的可维护性问题就是过于复杂的头文件结构,比如包含了许多不必要的头文件。Klocwork能够对您的系统执行自动分析,然后给出经过优化后,对潜在的系统文件大小、构建时间减少的量值,并给出优化您头文件的某种推荐方案的路径图。使用自动的流程图功能,从源代码分析得出程序的流程图,理解文件的处理流程,来帮助进行更加高效的编码。1.1.4.软件度量分析基于实际从软件源代码采集得到的信息,Klocwork直接帮助执行官和开发经理理解、预测、和指导公司在软件安全和质量方面的成长。Klocwork随产品发布100多种关于文件、类、和函数/方法的代码度量,包括了从McCabe复杂度、Halstead程序度量、代码行数、继承数、循环数等各种基本度量。客户还可以根据自己的质量目标,任意组合这些基本度量进行运算生成复合度量。1.1.5.可定制的代码分析许多组织有自己独特的编码标准、安全策略或质量目标。经过扩展Klocwork产品,您可以将我们的分析引擎应用到您独特的、公司特色的问题上。另外,Klocwork产品的可扩展性能够用于实现行业特定的编码标准,保证遵守昀新的昀佳实践。客户可使用Klocwork文档中介绍的扩展性API或者使用Klocwork提供的专业服务编写适合您的检查器。1.1.6.开发人员IDE集成Klocwork与众不同的核心之一就是我们能够集成到您选定的开发环境中去。通过集成,在开发人员的桌面上即可自动进行代码的检查,您可创建更为优秀的软件并通过在开发过程早期捕捉到潜在的问题而降低开发成本。Klocwork能够与Eclipse、WindRiverWorkbench2.3、VisualStudio6/2002/2003/2005、IBMRationalApplicationDeveloperforWebsphereSoftware、Gvim、Emacs、VisualSlickEdit、PlatformBuilder、KDevelop、MetroWerksCodeWarrior、IntelliJ等集成。1.2Klocwork架构Klocwork产品基于安装目录和静态分析项目目录之上,其架构包括一组服务器、一组静态分析引擎、一组客户端应用,如图:Klocwork服务器KlocworkAdminServer(rmimanager)――Klocwork管理服务器:管理Klocwork产生的数据,配置其它的服务器。Klocwork客户端连接到AdminServer来获取项目信息。KlocworkDatabaseServer(mysql)――Klocwork数据库服务器:是一个MySQL数据库服务器,包括KlocworkProjectCentral和inSightArchitect的使用的数据。KlocworkWebServer(tomcat)――KlocworkWeb服务器:基于ApacheTomcat,提供Web方式访问ProjectCentral使用inSpect报告和inSightDeveloper。LicenseManager(lm)――FLEXlmLicenseManager:可以是包含在Klocwork内的FLEXlm版本或者是一个独立的FLEXlm安装。LicenseManager不需要安装在与Klocwork服务器相同的计算机上。Klocwork分析引擎Klocworkcompilers(kwcc,kwjava)――Klocwork编译器:编译C/C++和Java语言的源代码,每个源代码文件经过编译输出一个目标文件。Klocworklinker(kwlinker)――Klocwork连接器:连接目标文件,生成Klocwork数据库的tables。kwdefectsj――对Java字节码(.jar和.class文件)进行缺陷和安全漏洞分析。kwlef――对C/C++目标文件进行缺陷和安全漏洞分析。KlocworkinSpect(kwinspect)――提供整个软件系统的质量信息的质量保证系统,inSpect根据构建生成的tables生成各种报告(文本、PDF或者HTML输出格式)。Klocwork项目目录是所有Klocwork服务器和应用程序的数据存储位置。projects_root包含Klocwork服务器设置和Klocwork分析引擎生成的项目、构建相关的信息。projects_root目录的选择很重要,目录应该拥有并且将来也一直会有充分的磁盘空间。projects_root目录必须是一个所有Klocwork都能够访问到的位置。Klocwork应用工具KlocworkManagementConsole(KMC)-Klocwork管理控制台:有GUI方式和命令行方式的界面。使用KMC和命令行程序管理Klocwork服务器、项目和构建。KlocworkProjectCentral――Web站点方式的Klocwork项目中心:KlocworkinSightDeveloper和KlocworkinSpect的Web站点方式的管理中心。无需安装,因此不出现在安装程序的客户程序列表里。inSightDeveloper提供直接从源代码快速访问软件系统的信息。KlocworkEnterpriseDeveloper――在将源代码提交到源代码管理系统之前,帮助保证源代码的质量;ArchitecturalAnalysis――直接从源代码提取准确的关于软件设计的图形视图(C,C++和Java)。MetricsandTrending――分析软件缺陷的分布和趋势,监控软件的质量状态。2.Klocwork静态分析工具与软件开发进行过程集成2.1.软件静态分析技术是降低缺陷管理成本的首选据美国NIST统计,2002年美国解决软件缺陷的费用是$600亿,占美国当年GDP的0.6%,而这还只是直接成本统计,不包括由缺陷而带来的间接成本:品牌破坏、客户信誉度下降、利润下降、市场份额下降、甚至人身伤害的损失。这巨大的因缺陷而产生的费用在缺陷生命周期中的分布(来自Garnter、IBM和HP的统计数字)如下图:在测试、发布阶段纠正缺陷的成本是编码阶段发现并纠正缺陷的成本的15-90倍,如果在交付用户之后才发现并解决缺陷,这个数字将达到50-200倍。因此,在编码实现阶段发现并解决尽可能多的缺陷,能够极大降低缺陷管理成本,据相关统计数字估计,这个成本至少可以降低1/3。如何才能在编码实现阶段发现更多的缺陷呢?利用软件静态分析技术是昀好的答案。软件静态分析无需代码运行,就能发现代码的质量和安全问题,这种技术能够把缺陷的发现和解决时间向前推移到“第一时间”――在软件开发过程中,发现并纠正问题所需成本昀低的时间点。2.2.软件静态分析技术的发展静态分析技术很早时候出现在大学的科研机构中以及高科技研究部门,已经有很多年的历史了,而且在很早时候,大家就已经意识到软件静态分析技术在降低缺陷管理成本方面的作用,并且尽可能在软件开发的日常过程中进行静态分析工作。但是,前期的软件静态分析技术应用并非预期的那样有效,也没有真正成为开发人员的日常开发工作的一部分。原因有三:1.软件静态分析技术由于其算法的特殊性――分析占用的时间、资源问题,导致无法对大型软件(10万代码行以上)进行分析;2.早期的静态分析技术误报现象严重,开发人员面临大量的误报需要辨别其真伪,耗时耗力,并且淹没了真正的缺陷所在;3.性能问题,静态分析过程通常很慢,无法应用到开发人员的日常开发环境当中。随着计算机技术的发展,计算资源效率日新月异,更重要的是静态分析技术正在逐渐成熟起来,现在的静态分析技术已经与以前有了质的飞跃,这些都使得静态分析技术进行软件开发测试成为现实。2.2.1.早期的软件静态分析z昀初的静态分析方法――代码审查一直到现在,代码审查的方式一直都在应用,这种方式的确是有效的提高软件质量的方式,但这种方式具有如下的弊端:人工方式具有很大的不可靠性,随着复杂度增加,错误会淹没在代码里,经验证明,超过百行的代码进行审查时,发现问题是很困难的;人工方式耗时,容易犯错误;要求审查人员在软件质量方面具有较深的造诣,才能取得好的效果;z昀简单的静态分析方法-grep强大的搜索源代码的能力;不能识别语法、句法、注释、字符串、声明、函数调用等,灵敏度很低;z基于基本词法分析的静态分析是早期静态分析工具采用的静态分析方法,如ITS4、FlawFinder、RATS等;能够区分发生缺陷的词汇,例如能区分gets(&buf)与intbegetsNextChild=0中的gets关键字;过程:缺点:产生许多的误报(falsepositives),原因是没有考虑目标代码的语义(Semantics);不能很好地理解代码执行时的行为,尽管有些缺陷信号非常明显,不需要语义解析就能准确定位,但大多数的缺陷都不是