• 1
  • 1
分享
  • 测试体系搭建之代码扫描基础——软件测试圈
  • 曼倩诙谐 2021-10-27 10:04:07 字数 2780 阅读 1939 收藏 1

  前言

  此次文章的连载,目的是笔者从自身经历出发,梳理出来的一套完整的测试体系,涵盖了功能测试、接口测试、单元测试、代码扫描、性能测试、稳定性测试、异常测试、前端测试、线上质量跟踪、线下质量改进、安全测试等各个测试环境。

  希望可以通过自己的文章输出,让大家对测试工作有一个更整体性的认知,也方便大家构建自身的测试体系,在测试行业上越走越好~

1-1.png


  代码扫描的起源

  静态源代码扫描是近年来软件测试过程当中,被人提及较多的软件应用安全解决方案之一,也是大厂必备考题。

  它是指在软件工程当中,程序员在写好源代码后,无需经过编译器编译,而直接使用一些扫描工具对其进行扫描,找出代码当中存在的一些语义缺陷、安全漏洞的解决方案。

  静态扫描技术已经从90年代时候的,编码规则匹配这种由编译技术拓展过来的分析技术向程序模拟,全路径执行的方向发展。

  由此,这种模拟执行相对的执行路径比动态执行更多,能够发现很多动态测试难以发现的缺陷,在源代码环节就减少bug,更快地提高测试的效率。

  关于代码扫描工具,比较主流的有SonarQube、FindBugs、Alibaba Java Coding Guidelines、CheckStyle。

  今天我们主要从SonarQube做一个切入,细细了解。

  SonarQube大致分为idea插件版本和带有非常友好功能强大GUI的SonarQube代码质量平台,完全能满足我们的需求。

  并且Sonar提供了面向gitlab、jekins、maven的无缝对接支持,是当下最活跃热门的代码质量扫描工具。

  SonarQube的优势

  个人使用之后认为,sonarQube的优势如下(相比于阿里编码规约这种市面上常见类似软件):

  更加优秀的图形化界面基本上通过界面就可以对自己项目的代码状况一目了然。

  可以查询出其它软件难以定位到的问题。

  比如:

  ·可能导致空指针异常的问题 (对象在进行使用前没有加空的判断);

  ·可能导致内存泄漏的问题,在try catch块里面,直接使用e.printStackTrace()将堆栈信息打印到内存;

  ·可能导致的漏洞,成员变量使用public定义。

  还有诸如流等未关闭或者是非正常关闭,都能够检测出来,功能非常强大。

  支持Java、C#、C/C++、PL/SQL、Cobol、 JavaScrip、Groovy等等二十几种编程语言的代码质量管理与检测。

  Sonar(SonarQube)是一个开源平台,用于管理源代码的质量,开源意味着可信赖,安全可靠,不需要担心代码泄露的风险。

  SonarQube的检测维度

  复杂度维度检测

  如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。

  重复性代码检测

  重复显然程序中包含大量复制粘贴的代码是质量低下的,Sonar可以展示 源码中重复严重的地方。

  代码规范

  不遵循代码标准,都可以检测出来。

  自定义规则编写

  Sonar可以通过PMD、CheckStyle、Findbugs等等代码规则检测工具规范代码编写。

  代码注释检查

  注释不足或者过多没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降。

  而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。

  单元测试结果展示

  缺乏单元测试Sonar可以很方便地统计并展示单元测试覆盖率。

  循环嵌套代码检测

  糟糕的设计通过Sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则。

  通过Sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况,检测藕合。

  SonarQube架构

1-2.png


  SonarQube服务器

  主要包括web服务器,基于ElasticSearch的搜索服务器,计算引擎服务器。

  其中,web服务器是供开发人员浏览查看代码分析结果、进行相应的配置等。

  计算引擎服务器主要是处理代码分析报表并将其存储在数据库。

  SonarQube数据库

  存储配置信息和代码分析报表。

  多个Soanr插件

  包括分析各种语言的插件。

  多个Sonar Scanner

  主要运行在开发人员的代码端,可以单独部署,也可以集成在Maven、Gradle等。

  SonarQube实战

  下载

  根据对应的操作系统下载安装包。

  下载地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

  解压

  解压安装包,如果是windows环节的话,配置环境变量到path,见图:

1-3.png


  验证

  验证是否成功,如下提示则表示成功:

1-4.png


  以上安装完毕,接下来我们通过扫描器结合SonarQube来完成对代码的质量扫描。

  创建口令

  在Sonar系统内创建token口令,建项目名称,下一步用到:

1-5.png

1-6.png



  这里的token在第一次登陆SonarQube系统时会提示你录入,见下图,也可以跳过,登陆系统后可以在如上图位置进行设置。

1-7.png


  检查

  cd到你需要进行代码检查的项目目录,执行如下命令(Windows服务器):

***>sonar-scanner.bat -Dsonar.projectKey=mvndemo -Dsonar.sources=. 
-Dsonar.host.url=http:// 192.168.192.144:7000 
-Dsonar.login=85d561f16a442dd3593b069d704fca1826b75a6a 
-Dsonar.java.binaries=./WebRoot/WEB-INF/classes

  没有异常则表示成功,如下图:

1-8.png


  SonarQube报告解析

  登录http://192.168.192.144:9000,加载项目扫描情况:

1-9.png


  点击项目名称,查看报告总览:

1-10.png


  开发人员主要关注【问题】标签页。

1-11.png

  主要关注bug和漏洞,其中bug是必须要修复的,漏洞是要经过评估,查看是否需要修改。

1-12.png

  异味是轻微问题,不影响代码,如创建一个变量,但从未使用过。

  严重程度:严重程度是开发人员用来标记问题等级,排序为阻断、严重、主要、次要、提示。

  处理方式:处理方式是开发人员用来标记问题的产生。

  如当评估一个问题需要修改,开发人员要确认此个问题,修改后点击解决。

  如果认为这个问题是代码规则不符,不需要修改,则点击误判或不修复。



作者:Henry   

来源:http://www.51testing.com/html/48/n-4479148.html


2021 问卷礼物图.png

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 数据分析是从数据中提取有价值信息的过程,过程中需要对数据进行各种处理和归类,只有掌握了正确的数据分类方法和数据处理模式,才能起到事半功倍的效果,以下是数据分析员必备的9种数据分析思维模式:1. 分类分类是一种基本的数据分析方式,数据根据其特点,可将数据对象划分为不同的部分和类型,再进一步分析,能够进一步挖掘事物的本质。2. 回归回归是一种运用广泛的统计分析方法,可以通过规定因变量和自变量来确定变量之间的因果关系,建立回归模型,并根据实测数据来求解模型的各参数,然后评价回归模型是否能够很好的拟合实测数据,如果能够很好的拟合,则可以根据自变量作进一步预测。3. 聚类聚类是根据数据的内在性质将数据分...
            12 12 1223
            分享
          •   实用的测试书籍免费送,点击链接参与问卷活动就有机会获得:http://vote.51testing.com/(还有百分百中奖的价值398元的测试课程。)  目前市面上比较不错的网络爬虫抓包工具有Fiddler、charles、Anyproxy和mitmproxy等。  有人可能会问,何为网络爬虫?  首先,网络爬虫它是一种程序,它的样子如同一个大蜘蛛.它将网络上全部的链接和内容进行查索,建立相关的数据库并引入。往往较好的爬虫将会决定搜索引擎的质量。  Charles  Charles是一款macOS上的一款抓包分析工具之一。当然他也支持windows和linux。简洁的GUI界面,http...
            0 0 2054
            分享
          •   安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程,其主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力,安全指标不同,测试策略也不同。  但安全是相对的,安全性测试并不能最终证明应用程序是安全的,而只能验证所设立策略的有效性,这些对策是基于威胁分析阶段所做的假设而选择的。例如,测试应用软件在防止非授权的内部或外部用户的访问或故意破坏等情况时的运作。  软件安全是软件领域中一个重要的子领域,系统安全性测试包括应用程序和操作系统两个方面的安全性。而系统安全性又包括两个方面的测试:一是软件漏洞,设计上的缺陷或程...
            0 1 1957
            分享
          • 最近的项目中,将很多原本的纸质合同转移到线上,变成电子合同,包括电子合同的制作,审核,电子合同的生成,电子合同的签署等环节,也容易出现一部分问题,一下列举碰到问题的排查方向:APP端生成电子合同,提示:系统异常,请和管理员联系:合同创建失败,请先联系客服大概率原因:公司名称变更了,在资源中心的elec_contract_user表中,存放了开户信息,查看标品中的公司名称和开户信息中的公司名称,是否一致。雇主端签署电子合同,提示:请先开户原因:在生成电子合同后,修改合同中的客户名字,查看合同中的客户名字和elec_contract_user表中的开发信息是否一致电子合同中存在未替换的替换符原因一...
            1 0 5115
            分享
          • 一、简介移动应用App已经渗透到每个人的生活、娱乐、学习、工作当中,令人激动、兴奋且具有创造性的各种App犹如雨后春笋般交付到用户手中。各类智能终端也在快速发布,而开发者对于全球移动设备的质量和性能却掌握甚少,App与设备的兼容性问题常常导致用户投诉,令开发者十分沮丧,App测试与服务质量保证矛盾十分突出。移动开发的一个重要难题,就是应用在开发过程中,必须使用手机真实环境进行系统测试,才有可能进入商用。由于手机操作系统的不同,以及操作系统版本之间的差异,使得真机系统测试这个过程尤其复杂,涉及终端、人员、工具、时间、管理等方面的问题。首先必须购买足够多的手机,包括不同操作系统,不同版本,不同分辨...
            12 12 3139
            分享
      • 51testing软件测试圈微信