• 静态白盒测试的资料收集


    声明:此篇文章的内容基本上都是从网络上收集到的已有的内容,原创部分几乎为零。概念性的内容摘自书《软件测试》(美国Ron Patton著)

    此篇文章的结构是:从“测试方式”渐进到其中的1项“静态白盒”,然后列出了3个常见的静态白盒工具它们是:FindBugs、PMD、CheckStyle。所以说此篇文章并不深入,仅作为初步参考好了。

    功能测试的基本分类

    • 静态黑盒:(测试产品说明书)

      针对任意形式的产品说明书,无所谓文档或者图示。要站在一格高度上审视,而不是立刻钻进去找软件缺陷,而是为了找出根本性的大问题、疏忽和遗漏。主要目的是更好地了解软件要做什么,如果能很好地理解产品说明书背后的原因和操作方式,就可以更好地仔细检查。

    • 动态黑盒:(测试软件,所以也称作“行为测试”)

      不深入代码细节的软件测试方法,进行输入、接受输出、检验结果。

    • 静态白盒:(检查程序代码,所以也称作“结构分析”)

      在不执行代码的前提下,有条理地仔细审查软件设计、体系结构、代码,从而找出软件缺陷。好处1是尽早发现缺陷,好处2是为设计黑盒测试用例提供思路。静态白盒测试不必要了解代码的细节,但是根据审查代码的备注,可以确定似乎有问题或者存在缺陷的特性范围。

      常见软件缺陷:数据引用错误、数据声明错误、计算错误、比较错误、控制流程错误、子程序参数错误、输入输出错误、其它(考虑编码、可移植性、软硬件兼容性….)

    • 动态白盒:(结构测试)

      查看并使用代码的内部结构,从而设计和执行测试。换句话说,是指利用查看代码功能和实现方式得到的信息来确定哪些要测试、哪些不要测试、如何开展测试。

    为什么静态白盒测试

      静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面。可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。

      为什么要进行静态测试呢?软件开发进行到编码阶段的时候,最大的风险就在于如何保证代码的易读性和一致性,从而使得软件的维护的代价不会很高。一个软件产品可能实现了所要求的功能,但如果它的内部结构组织的很复杂,很混乱,代码的编写也没有规范的话,这时软件中往往会隐藏一些不易被察觉的错误,这是其一。其次,即使这个软件基本满足了用户目前的要求,但到了日后对该产品进行维护升级工作的时候,会发现维护工作相当困难。 所以,如果能对软件进行科学、细致的静态分析,使系统的设计符合模块化、结构化、面向对象的要求,使开发人员编写的代码符合规定的编码规范,就能够避免软件中大部分的错误,同时为日后的维护工作节约大量的人力、物力。这就是对软件进行静态分析的价值所在。

    静态白盒测试的工具

    工具名

    静态扫描语言

    开源/付费

    厂商

    主页网址

    ounec5.0

    VB.Net、C、C++和C#,
    还支持Java

    付  费

    Ounce Labs

    http://www.ouncelabs.com

    Coverity Prevent

    C/C++,C#,JAVA

    付  费

    Coverity

    http://www.coverity.com/index.html

    @stake SmartRisk
    Analyzer

    C/C++,Java

    付  费

    Symantec Corporation

    http://www.symantec.com/business/index.jsp

    Rational Purify

    C/C++,Java

    付费

    IBM

    http://www-01.ibm.com/software/awdtools/purify/

    PREfix

    microsoft

    Jtext

    Java

    付费

    parasoft

    http://www.parasoft.com/jsp/cn/support.jsp

    flawfinder

    C/C++

    开源

    http://www.dwheeler.com/flawfinder/

    Static Code 
    Analyzer

    C/C++,C#,JAVA

    付费

    Fortify

    http://www.fortify.com/

    Klocwork Insight

    C/C++ ,Java 

    付费

    Klocwork

    http://www.klocwork.com/products/insight.asp

    PolySpace 
    Client/Server

    C/C++、Ada

    付费

    MathWorks

    http://www.mathworks.cn/

    rats

    C/C++, Python,Perl, PHP

    开源

    http://www.fortify.com/security-resources/rats.jsp

    LAPSE

    Java

    开源

    http://www.owasp.org/index.php/Category:OWASP_LAPSE_Project

    Fluid

    java

    开源

    http://www.fluid.cs.cmu.edu:8080/Fluid

    Splint

    C

    开源

    University of Virginia,
    Department of Computer
     Science

    http://www.splint.org/

    cqual

    C/C++

    开源

    马里兰大学

    http://www.cs.umd.edu/~jfoster/cqual/

    MOPS

    C

    开源

    berkeley大学

    http://www.cs.berkeley.edu/~daw/mops/

    BOON

    C

    开源

    berkeley

    http://www.cs.berkeley.edu/~daw/boon/

    BLAST

    C

    开源

    The BLAST 2.0 Team

    http://mtc.epfl.ch/software-tools/blast/

    SpikeWAMP

    Php

    开源

    http://developer.spikesource.com/wiki/index.php/SpikeWAMP

    Pixy

    Php

    开源

    http://pixybox.seclab.tuwien.ac.at/pixy/

    Mike

    Java

    开源

    http://milk.sourceforge.net/download.html

    Smatch

    C

    开源

    http://smatch.sourceforge.net/

    Oink

    C++

    开源

    http://www.cubewano.org/oink

    Frama-C

    C

    开源

    http://frama-c.cea.fr/

    RTL-check

    开源

    http://rtlcheck.sourceforge.net/

    PMD

    Java

    开源

    http://pmd.sourceforge.net/

    FindBugs

    Java

    开源

    马里兰大学

    http://findbugs.sourceforge.net/

    ITS4

    CC++

    开源

    http://www.cigital.com/its4/

    QJ-Pro

    Java

    开源

    http://qjpro.sourceforge.net/

    Jint

    Java

    开源

    http://artho.com/jlint/

    Hammurapi

    Java

    开源

    http://www.hammurapi.biz/hammurapi-biz/ef/xmenu/hammurapi-group/index.html

    DoctorJ

    Java

    开源

    http://www.incava.org/projects/java/doctorj/index.html

    Dependency Finder

    Java

    开源

    http://depfind.sourceforge.net/

    Checkstyle

    Java

    开源

    http://checkstyle.sourceforge.net/

    Classycle

    Java

    开源

    http://classycle.sourceforge.net/

    JDepend

    Java

    开源

    http://www.clarkware.com/software/JDepend.html

    JCSC

    Java

    开源

    http://jcsc.sourceforge.net/

     

    FindBugs

      FindBugs可以做什么

      FindBugs是一个专门分析JAVA代码问题的静态代码扫描工具,它是由一位马里兰大学的博士写的,官网:http://findbugs.sourceforge.net/index.html,里面有FindBugs工具的下载,并且也包含了那位博士写的关于静态代码分析引擎的一些论文。FindBugs可以发现的问题包括:多线程竞争问题、性能问题、安全问题、代码规范。FindBugs检查类或者JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题。如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作。

      FindBugs对于bug的解释在官网有说明,参考http://findbugs.sourceforge.net/bugDescriptions.html

      Bad practice—不好的做法,Correctness—正确性,Experimental—实验的,Internationalization—国际化,Malicious code vulnerability—恶意代码漏洞,

      Multithreaded correctness—多线程正确性,Performance—性能,Security—安全性,Dodgy code—狡猾的代码

      在何时使用FindBugs

      开发阶段

      当完成了某一部分功能模块开发的时候(这通常是指代码撰写完成,并已debug通过之后),可藉由FindBugs对该模块涉及的java文件进行一次扫描,以发现一些不易察觉的bug或是性能问题。交付新版的时候,开发团队可以跑FindBugs,除掉一些隐藏的bug。在开发阶段使用FindBugs,一方面开发人员可以对新版的品质更有信心,另一方面,测试人员藉此可以把更多的精力放在业务逻辑的确认上面,而不是花大量精力去关注一些要在特殊状况下才可能出现的bug(典型的如引用了空指针Null Pointer Dereference)。从而可以提高测试的效率。

      维护阶段

      这里指的是系统已经上线,却发现因为代码中的某一个bug导致系统崩溃。在除掉这个已暴露的bug之后,为了快速的找出类似的但还未暴露的bug,可以使用FindBugs对该版的代码进行扫描。当然,在维护阶段使用FindBugs往往是无奈之举,且时间紧迫。此外,如果本来在新版交付的时候就使用过FindBugs的话,往往意味着这种bug是FindBugs还无法检测出的。这也是FindBugs局限的地方。

      怎么使用FindBugs

      下载地址: http://sourceforge.net/projects/findbugs/files/findbugs%20eclipse%20plugin/

      安装:Eclipse插件安装

      FindBugs提供两种工具形式,一种是界面形式的工具,另外一种是以Eclipse插件的形式提供的。

      介绍FindBugs插件形式的使用:

      (1)    右键某个项目-->在弹窗里的路径是Find Bugs-->Find Bugs

      (2)    把FindBugs附带的3个功能(Bug Explorer、Bug Details、Bug User Annotation)导出,使它们显示在工具栏内

      (3)    Bug Explorer显示的是用FindBugs对这个项目扫描的结果

      (4)    Bug Details包括Bug类别及程度、Bug定位、对Bug的解释

      (5)    Bug User Annotation仅仅是一些自己的备注

    PMD

      PMD可以做什么

      PMD可以直接使用它自带的规则(当然也可以使用自己的规则)对Java源程序进行分析找出程序存在的问题,可以很大程度上的减轻代码检查工作的繁琐,为项目组今后的维护和开发工作起到指导的作用。

      PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题,例如:

        潜在的bug:空的try/catch/finally/switch语句

        未使用的代码:未使用的局部变量、参数、私有方法等

        可选的代码:String/StringBuffer的滥用

        复杂的表达式:不必须的if语句、可以使用while循环完成的for循环

        重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs

        循环体创建新对象:尽量不要再for或while循环体内实例化一个新对象

        资源关闭:Connect,Result,Statement等使用之后确保关闭掉

      此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求PMD找出所有创建Thread和Socket对象的操作。

      怎么使用PMD

      安装:Eclipse插件安装

      (1)     启动Eclipse

      (2)     选择Help-->Software Updates-->Find and Install

      (3)     选择Next,选择New remote site

      (4)     在Name框中输入PMD,URL框中输入http://pmd.sf.net/eclipse

      (5)     在之后的对话框中一直点击下一步或者接受协议,完成Eclipse的PMD插件的安装

      在安装完更新后,如果发生了一个异常,例如”java.lang.RuntimeException: Could not find that class xxxx”,这时试着删除workspace中的.metadata/plugins/net.sourceforge.pmd.eclipse目录下的ruleset.xml文件。

      (6)     然后选择PMD-->Check node with PMD,即可使用PMD工具检查代码,检查结果会放在reports目录下

      (7)     启动Eclipse IDE,打开工程,选择 "Windows"->"Preferences"下的PMD项,其中Rules Configuration 项目可以配置PMD的检查规则,自定义检查规则也可以在此通过Import的方式导入到PMD中

      (8)     配置好后,鼠标右键点击工程中需要检查的JavaSource,选择"PMD"->"Check Code With PMD" ,之后PMD就会通过规则检查你的JavaSource了并且将信息显示在PMD自己的视图上

    检查

    FindBugs

    检查.class

    基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug

    检查bytecode中的bug patterns

    NullPoint空指针检查、没有合理关闭资源、字符串相同判断错(==,而不是equals)等

    PMD

    检查源文件

    检查Java源文件中的潜在问题

    空try/catch/finally/switch语句块

    未使用的局部变量、参数和private方法

    空if/while语句

    过于复杂的表达式,如不必要的if语句等

    复杂类

    CheckStyle

    检查源文件

    主要关注格式

    检查Java源文件是否与代码规范相符

    Javadoc注释

    命名规范

    Size度量,如过长的方法

    缺少必要的空格Whitespace

    重复代码

    CheckStyle

      CheckStyle可以做什么

      通常一个之前没有进行过checkstyle检查的项目,初次检查可能会有几百个错误,有些格式之类的错误,使用Eclipse自动格式化一下就能解决,如果命名之类的错误可以通过Eclipse统一修改。通过checkstyle检查之后比较多的错误是如下几种:
      变量命名不符合规范
      空格使用不规范
      Java类没有加注释

      Equals使用没有避免空指针,使用了类似nullString.equals("myString");而不是使用"myString".equals(nullString)

      

      怎么使用CheckStyle

      安装:Eclipse插件安装

      在Eclipse-->Help-->Instasll New Software中输入下面的URL进行安装。http://eclipse-cs.sourceforge.net/update

      (1)     安装完插件后,在Eclipse的下面路径能找到配置选项

      Windows-->Preferences-->Checkstyle

      (2)     New--> External Configuration File,配置自定义规则

      原因:一般的项目检查出来都会有非常多的错误警告信息,所以需要导入我们自己编写的配置文件

      (3)     配置完成后ok--> Set as Default

      (4)     选择1个项目右键--> properties--> checkstyle--> Checkstyle active for this project-->在configure内选择自定义规则

      (5)     ok

    参考文档

    《Java静态代码检查checkstyle》http://qa.blog.163.com/blog/static/19014700220133351850624/

    《为啥不用静态代码检查工具呢?》http://qa.blog.163.com/blog/static/190147002201342382422899/

    《Analysis Tool List》http://www.cs.cmu.edu/~aldrich/courses/654/tools/

  • 相关阅读:
    简单记事本 V0.5
    一次对webplayer的嗅探
    引用的DLL不能调试的问题
    软件:让人越懒越好
    如何设置mysql远程访问
    ASP.NET基础培训 Cookie的正确利用
    Mysql中新建和调用存储过程
    CentOS下mysql的中文编码问题
    mysmall.ini、mymedium.ini、mylarge.ini、myhuge.ini文件的作用
    创建自定义线程池
  • 原文地址:https://www.cnblogs.com/musicmovie/p/3682729.html
Copyright © 2020-2023  润新知