静态测试和动态测试
静态测试和动态测试是软件测试中两种不同的方法。
1. 静态测试
静态测试是一种对软件文档、代码和其他相关材料进行测试的方法,而不是在程序运行时测试。静态测试的目的是发现潜在的问题、错误和缺陷,以便在程序运行之前修复它们。静态测试通常由开发团队的成员完成,例如代码评审、需求审查、设计审查等。
静态测试的优点:
- 可以在程序运行之前发现潜在问题,从而减少测试成本。
- 可以提高团队成员的代码质量和协作效率。
- 可以避免在生产环境中出现的严重错误和缺陷。
静态测试分类
- 静态代码扫描
- 代码评审
- 单元测试
2. 动态测试
动态测试是在运行程序时对软件进行测试的方法,以确保它符合规格说明书中的要求,并且符合用户需求。动态测试可以进一步分为黑盒测试和白盒测试。
- 黑盒测试:黑盒测试是基于软件外部行为的测试,它不需要了解软件的内部工作原理。测试人员只需根据软件规格说明书和用户需求来设计测试用例,以检查软件是否符合要求。
- 白盒测试:白盒测试是基于软件内部结构和实现的测试,它需要了解软件的内部工作原理。测试人员需要查看软件代码和架构,以设计测试用例来检查软件是否正确地执行。 动态测试的优点:
- 可以验证软件是否符合规格说明书和用户需求。
- 可以发现代码错误和缺陷。
- 可以提高软件的稳定性和可靠性。
动态测试分类
- 手工执行
- 自动化
- 性能
- 安全
代码扫描工具的原理
分析对象主要分为两类:
-分析源文件
-分析编译后的文件 java字节码
大致分为以下几个步骤:
- 代码解析:首先,代码扫描工具需要将源代码转化为抽象语法树(AST)或其他形式的中间表示,以便进行后续的分析。
- 漏洞检测:扫描工具会对代码进行各种形式的静态分析,包括缺陷模式匹配、类型推断、数据流分析等,以检测潜在的漏洞和安全问题。
- 结果输出:扫描工具将分析结果输出为报告或者直接集成到集成开发环境(IDE)或代码仓库中,以便开发人员查看和修复。
SonarQube
SonarQube是一个用于代码质量管理的开源平台。它可以分析代码,检测代码中的技术债务和漏洞,并提供有关代码质量的可视化报告。 SonarQube支持各种编程语言,包括Java,C#,JavaScript,C / C ++等。
SonarQube提供了一系列插件,可以集成到各种构建工具中,如Maven,Gradle,Jenkins等。这使得SonarQube易于集成到现有的开发工作流程中,并且可以在代码提交时自动执行质量检查和代码分析。
除了代码质量管理外,SonarQube还可以帮助团队管理项目的技术债务。它可以通过检测代码中的潜在问题和漏洞来减少技术债务,并提供指导和建议,帮助开发人员编写更高质量的代码。
总之,SonarQube是一个强大的代码质量管理工具,可以帮助开发人员、项目经理和团队领导者在项目开发过程中提高代码质量和可维护性。
sonarqube框架组成
- 被分析项目
- SonarQube Scanner: SonarQube Scanner 是一个命令行工具,用于在项目中执行静态代码分析。它通过读取配置文件来决定要分析哪些文件和使用哪些规则。
- SonarQube Server: SonarQube 服务器是核心组件,用于处理代码分析和存储分析结果。它提供了一个 Web 界面,让用户可以查看分析报告、设置分析规则、管理项目等。
- 数据库,结果存储的地方
SonarQube环境搭建
整体思路是,sonar scanner分析项目代码,并将结果上传到sonar server
启动SonarQube Server
- 下载sonarqube https://www.sonarsource.com/products/sonarqube/downloads
- 根据自己的需求修改/conf/sonar.properties文件,可以指定连接的数据库、用户名、密码等
- 启动sonar服务,去bin目录根据不同的平台,启动服务
启动SonarQube Scanner
服务启动同SonarQube Server,注意修改配置文件中的密钥和SonarQube Server进行连接
scanner对java工程进行代码扫描
要将SonarScanner与Java项目关联,您需要完成以下步骤:
- 下载并安装SonarScanner。
- 将SonarScanner添加到系统路径中。这样,可以在命令行中直接使用SonarScanner命令。
- 在的Java项目中添加一个SonarQube配置文件(sonar-project.properties)。该文件应包含项目的相关信息,例如项目名称、版本号、源代码目录、测试代码目录、构建工具等。
# 定义唯一的关键字
sonar.projectKey=devops-hello-service
# 定义项目名称
sonar.projectName=My project
# 定义项目的版本信息
sonar.projectVersion=1.0
# 指定扫描代码的目录位置(多个逗号分隔,java项目源代码一般在src目录下面)
sonar.sources=.
# 执行项目编码
sonar.sourceEncoding=UTF-8
# 指定扫描java语言,如果不指定,则扫描目录下存在的全部
sonar.language=java
# 扫描java项目时,指定编译文件所在目录,不指定该目录会报错
sonarjava.binaries=target/classes
配置文件可以来自于项目的properties文件,也可以是自己重写在analysis properties文件里
4. 运行SonarScanner命令来分析项目并将分析结果上传到SonarQube服务器上。您可以使用以下命令:
sonar-scanner
在运行该命令之前,请确保已经进入了包含项目代码的目录
5. 在SonarQube服务器上查看项目分析结果。您可以在SonarQube仪表板中查看项目的概览、代码质量、问题列表等信息。
scanner对maven工程进行代码扫描
- 安装并启动SonarQube Server
- 在Maven项目中添加SonarQube插件。您可以在Maven项目的pom.xml文件中添加以下内容:
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.8.0.2131</version>
</plugin>
</plugins>
</build>
- 在Maven项目中运行SonarQube扫描器。在Maven项目的根目录下,运行以下命令:
mvn sonar:sonar \
-Dsonar.projectKey=<项目唯一标识符> \
-Dsonar.host.url=<SonarQube服务器URL> \
-Dsonar.login=<SonarQube用户令牌>
其中,
sonar.projectKey
是您的项目在SonarQube中的唯一标识符,
sonar.host.url
是您的SonarQube服务器的URL地址,
sonar.login
是您的SonarQube用户令牌,用于验证您的身份和访问权限,其中projectKey,host.ur,login也可以配置到maven的setting文件中。
4. 等待扫描完成并查看SonarQube分析报告。扫描完成后,您可以登录到SonarQube服务器,查看分析报告并获取有关代码质量、漏洞和缺陷的详细信息。
需要注意的是,SonarQube支持多种编程语言和技术栈,您需要根据项目类型和语言选择合适的SonarQube插件和配置。此外,为了获取更准确和详细的扫描结果,您可以在Maven项目的pom.xml文件中添加其他配置参数,例如:
- `sonar.projectName`:项目名称
- `sonar.projectVersion`:项目版本号
- `sonar.language`:代码语言
- `sonar.sources`:源代码目录
- `sonar.tests`:测试代码目录
- `sonar.java.binaries`:Java二进制文件目录
- `sonar.java.libraries`:Java依赖库目录
- `sonar.java.source`:Java源代码版本
- `sonar.java.target`:Java目标字节码版本
sonar的规则库设置
使用sonar默认的规则库扫描时可能会有一大堆严重缺陷,产出一大堆不适用本项目的bug,产出报告令开发很苦恼,并拒绝修复,可以根据项目调整sonar规则。在为公司项目设置Sonar规则时,应该考虑以下几个因素:
- 项目的技术栈:Sonar规则应该根据项目的技术栈来选择。例如,如果项目使用Java编程语言,则应该选择Java规则集。
- 项目的安全性要求:如果项目处理敏感数据或需要满足特定的安全标准,则应该选择与安全相关的规则集。
- 项目的复杂性:如果项目非常复杂,则可能需要更严格的规则集,以确保代码的质量和可靠性。
- 项目的团队规模:如果项目由大型团队开发,则需要考虑将规则设置为比较宽松,以避免代码审核过程中的冲突和耗时。 一般来说,应该使用Sonar默认规则集,并根据项目需要进行调整。以下是一些可能有用的Sonar规则:
- 代码复杂性规则:这些规则可以帮助您避免过于复杂的代码,使代码更易于阅读和维护。
- 安全性规则:这些规则可以帮助您保持代码的安全性,并减少潜在的漏洞和安全风险。
- 代码可读性规则:这些规则可以帮助您确保代码易于理解和阅读,从而提高代码的可维护性。
- 性能规则:这些规则可以帮助您优化代码的性能,从而提高应用程序的响应速度和可扩展性。
sonar如何接入jenkins项目
jenkins接入sonar分为三种类型:
- 普通类型(自由风格任务类型)
- maven(java+maven)
- pipeline
sonar如何接入jenkins Java项目
- 首先,在Jenkins中安装SonarQube插件。在Jenkins的管理面板中,导航到插件管理器,搜索并安装SonarQube插件。
- 安装完成后,转到系统设置并配置SonarQube服务器。 在Jenkins管理面板中,导航到“系统设置”并找到SonarQube服务器配置部分。在此部分中,您需要提供SonarQube服务器的URL,身份验证令牌以及其他细节。
- SonarScanner的安装可以在全局工具配置中选择自动安装
- 然后,在构建过程中添加构建步骤以运行SonarQube分析。 在Jenkins作业配置的“构建”部分中,添加构建步骤以运行SonarQube分析。使用SonarScanner等其他工具来运行SonarQube分析。还需要提供SonarQube项目的唯一标识符。 SonarQube analysis properties可以写在jenkins中,如上图。也可以放到项目的sonar-project.properties文件中,需要jenkins中指定配置文件的路径,格式如下:
sonar.projectKey=${JOB_NAME}
sonar.sources=.
sonar.projectName=${JOB_NAME}
sonar.projectVersion=${BUILD_VERSION}
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
- 最后,可以在Jenkins中查看SonarQube报告。 在Jenkins作业的构建历史记录中,您可以找到SonarQube报告链接。您可以通过单击此链接来查看SonarQube分析的结果和报告。
sonar如何接入jenkins maven项目
- 安装和配置Jenkins Maven插件 确保在Jenkins服务器上安装了Maven插件。在Jenkins中,转到Manage Jenkins > Manage Plugins > Available,搜索Maven Integration Plugin并安装。确保Maven的路径在全局工具配置中配置正确。
- 安装和配置SonarQube插件 确保在Jenkins服务器上安装了SonarQube插件。在Jenkins中,转到Manage Jenkins > Manage Plugins > Available,搜索SonarQube Scanner插件并安装。
- 配置SonarQube服务器 在Jenkins中,转到Manage Jenkins > Configure System并找到SonarQube服务器的配置。添加SonarQube服务器,输入服务器URL,以及访问服务器的登录凭证。
- 在Maven项目中添加SonarQube插件 在Maven项目的pom.xml文件中添加SonarQube插件。在标记中添加以下插件代码:
<plugin><groupId>org.sonarsource.scanner.maven</groupId><artifactId>sonar-maven-plugin</artifactId><version>3.8.0.2131</version></plugin>
- 使用jenkins build项目,并使用sonar扫描 在build中如下配置 其中maven具体需要使用那些命令根据自己的需求而定。 然后根据需求设置pre step或者post step扫描 Analysis properties 配置内容如下:
sonar.projectKey=${JOB_NAME}
sonar.sources=.
sonar.projectName=${JOB_NAME}
sonar.projectVersion=${BUILD_VERSION}
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
- 保存并构建 保存Jenkins项目的配置并执行构建操作。Jenkins将在构建过程中运行SonarQube扫描,并将结果报告到SonarQube服务器。
sonar如何接入jenkins pipeline项目以及门禁设置
- 构建一个流水线job,流水线pipeline script如下编写: 其中一些具体代码可以通过代码生成器生成
pipeline{
agent {
label "api_test"}
options{
// 保留最大的构建历史
buildDiscarder(logRotator(numToKeepStr: '2'))
// 设置流水线运行时间最长不超过10Min,如果超过,则自动中止
timeout(time:10,unit:'MINUTES')
// 打印当前时间戳
timestamps()
// 增加重试3次
retry(3)}
tools{
maven "maven"}
stages{
stage("代码获取"){
steps{echo"开始拉取代码..."git credentialsId: '80cff850-de44-4be7-a874-d6d59a7712fd', url: 'https://gitee.com/jinjiancode/training_jrequests.git'}}
stage("单元测试"){
steps{echo"starting unittest..."
bat "mvn test"}}
stage("静态代码扫描"){
steps{
withSonarQubeEnv(credentialsId: 'sonar', installationName: 'sonarqube'){
// some block
bat "mvn sonar:sonar"}}}
stage('代码质量门禁'){
steps{
script{#等待质量门禁通过
def result=waitForQualityGate()echo"结果状态为: ${result.status}"
if(result.status!='OK'){echo"质量门禁不通过"
error '未达到Sonarqube质量门标要求!'}}}}
stage("部署到测试环境"){
steps{echo"deploy to test env"}}
stage('自动化测试'){
parallel{
stage('自动化测试'){
steps {echo"执行自动化测试"}}
stage('性能测试'){
steps {echo"执行性能测试"
build job: 'test_job1', parameters: [string(name: 'env', value: 'dev')]}}
stage('安全测试'){
steps {echo"执行安全测试"
build job: 'test_job2', parameters: [string(name: 'env', value: 'dev')]}}}}
stage('生成报告'){
steps{echo"生成报告"}}
stage('部署到生产环境'){
steps{
input '是否部署到生产环境?'echo"执行部署。。。"}}}
post{
always{echo"发送邮件"}
success {echo"发钉钉"}
failure {echo"发微信"}}}
- 接入Sonar质量门禁 通过上面的job,只是代码扫描可能无法满足日常的情况,当扫描的结构不满足时我可能就不进行后面的步骤了,这样的情况,我们就需要接入质量门禁的方式来实现。
- 在sonar服务端的质量阀中设置质量门禁,添加要运用的项目,在质量配置->质量阀添加指标来定义通过扫描的条件。然后将设置的质量阀分配给要扫描的项目。
- 在sonar服务端的配置里面添加网络调用hook 配置->网络调用 这里添加Jenkins调用的地址,用来回调扫描的结果。URL配置为:Jenkins地址+/sonarqube-webhook
版权归原作者 Tester_孙大壮 所有, 如有侵权,请联系我们删除。