最近实现了一个很有意思的 Workflow,就是通过 GitHub Actions 自动将每次最新发布的文章自动同步到我的 GitHub 首页。
就像这样在首页显示最近发布的博客文章。
要实现这样的工作流需要了解以下这几点:
- 需要创建一个与 GitHub 同名的个人仓库,这个仓库的
README.md
信息会显示在首页 - 通过 GitHub Actions 自动获取博客的最新文章并更新
README.md
- 只有当有新的文章发布的时候才触发自动获取、更新文章 GitHub Action
最近实现了一个很有意思的 Workflow,就是通过 GitHub Actions 自动将每次最新发布的文章自动同步到我的 GitHub 首页。
就像这样在首页显示最近发布的博客文章。
要实现这样的工作流需要了解以下这几点:
README.md
信息会显示在首页README.md
2021-22 世界质量报告(World Quality Report 简称 WQR)是由 Micro Focus,Capgemini 和 Sogeti 三家公司合作的来分析软件质量和测试趋势在全球范围内唯一的报告。
这份报告共采访了 1750 名高管和专业人士。从最高管理层到 QA 测试经理和质量工程师,涵盖了来自全球 32 个国家的 10 个行业。
世界质量报告(WQR)是一项独一无二的全球研究,今年的调查强调了新部署方法中不断变化的受大流行影响的应用程序需求的影响,以及 QA 对敏捷和 DevOps 实践的采用,AI 的持续增长。
作为测试关注这类软件质量报告可以帮助我们快速了解软件测试行业的现状和趋势。
WQR 的一个关键信息:在新冠疫情依旧的今天,我们看到了数字化转型的融合以及敏捷和 DevOps 实践的实时采用。此外,QA 正在成为采用敏捷和 DevOps 实践的领导者,为团队提供工具和流程以促进整个软件生命周期(SDLC)的质量。
WQR 围绕关键发现和趋势突出了五个特定主题:
这可能是中文网里介绍Polaris最详细的文章了
Polaris - 托管静态应用程序软件测试(SAST)工具的 SaaS 平台,它是用于分类和修复漏洞并运行报告的 Web 站点。
SAST - 一种对源代码分析或构建过程中去寻找安全漏洞的工具,是一种在软件开发的生命周期(SDLC)中确保安全的重要步骤。
Coverity - Coverity 是 Synopsys 公司提供的原始静态应用软件测试 (SAST) 工具。Polaris 是 Coverity 的 SaaS 版本。
Synopsys - 是开发 Polaris 和其他软件扫描工具的公司,比如 BlackDuck 也是他们的产品。
C/C++ |
通常如果你的组织引入了 Polaris 的 SaaS 服务,你将会有如下网址可供访问 URL: https://organization.polaris.synopsys.com
然后登录,你就可以给自己的 Git Repository 创建对应的项目了。
建议:创建的项目名称与 Git Repository 的名称一致。
在进行 Polaris 扫描之前,你需要先下载并安装 polaris。
如果你的 Polaris server URL 为:POLARIS_SERVER_URL=https://organization.polaris.synopsys.com
下载连接为:$POLARIS_SERVER_URL/api/tools/polaris_cli-linux64.zip
然后将下载到本地的 polaris_cli-linux64.zip
进行解压,将其 bin 目录添加到 PATH 中。
在进行扫描之前,你需要为你的项目创建 YAML 文件。默认配置文件名为 polaris.yml
,位于项目根目录。如果你希望指定不同的配置文件名,你可以在 polaris
命令中使用 -c
选项。
在项目根目录运行 polaris setup
以生成通用的 polaris.yml
文件。
运行 polaris configure
以确认你的文件在语法上是正确的并且 polaris
没有任何问题。
YAML 配置文件可以包含三种类型的 Capture:
Languages | Build Options |
---|---|
C, C++, ObjectiveC, Objective C++,Go, Scala, Swift | 使用 Build 捕获 |
PHP, Python, Ruby | 使用 Buildless 或 Filesystem 捕获 |
C#, Visual Basic. | 如果想获得更准确的结果使用 Build 捕获;如果寻求简单使用 Buildless 捕获 |
Java | 如果想获得更准确的结果使用 Build 捕获;如果寻求简单使用 Buildless 捕获 |
JavaScript,TypeScript | 使用 Filesystem 捕获;如果寻求简单使用 Buildless 捕获 |
如果你正在扫描 C/C++ 代码,则应包括此分析部分以充分利用 Polaris 的扫描功能:
analyze: |
不管是对于 Git 的初学者还是经常使用 Git 的码农们,在日常工作中难免会有遇到有的命令一时想不起来。不妨将下面总结的一些 Git 常用命令及技巧收藏或打印出来,以备需要的时候可以很快找到。
git config
# 检查 git 配置 |
git init
# 初始化一个仓库 |
git add
# 将文件添加到暂存区 |
git status
# 检查仓库状态 |
git commit
# 提交更改 |
git log
# 查看提交历史 |
git diff
# 在使用 diff 提交之前所做的更改 |
git rm
# 删除跟踪文件 |
git mv
# 重命名文件 |
git checkout
# 切换分支 |
git reset
# 还原暂存区的更改 |
git commit --amend
# 修改最近的提交信息 |
git revert
# 回滚最后一次提交 |
git branch
# 创建分支 |
git merge
# 将 branch_name 合并到当分支 |
git pull
# 从远程仓库拉取更改 |
git fetch
# 获取远程仓库更改 |
git push
# 推送更改到远程仓库 |
git remote
# 添加远程仓库 |
清理已经合并的本地分支
git branch --merged master | grep -v "master" | xargs -n 1 git branch -d |
.gitignore
指明 Git 应该忽略的故意不跟踪的文件的文件,比如 .gitignore
如下
# 忽略 .vscode 目录 |
.gitattributes
关于 .gitattributes
请参考
After you have set up the SonarQube instance, you will need to integrate SonarQube with project.
Because I used the community edition version, it doesn’t support the C/C++ project, so I only demo how to integrate with Maven, Gradle, and Others.
For example, the demo project name and ID in SonarQube are both test-demo
, and I build with Jenkins.
Add the following to your pom.xml
file:
<properties> |
Add the following code to your Jenkinsfile
:
stage('SonarQube Analysis') { |
Add the following to your build.gradle
file:
plugins { |
Add the following code to your Jenkinsfile
:
stage('SonarQube Analysis') { |
Create a sonar-project.properties
file in your repository and paste the following code:
sonar.projectKey=test-demo |
Add the following code to your Jenkinsfile
:
stage('SonarQube Analysis') { |
More about how to integrate with SonarQube, please visit your SonarQube instance documentation: http://localhost:9000/documentation
When execute command: lcov --capture --directory . --no-external --output-file coverage.info
to generate code coverage report, I encountered the following error:
$ lcov --capture --directory . --no-external --output-file coverage.info |
fixed this problem “Can’t locate CPAN.pm” by running the command yum install perl-CPAN
sh-4.2$ sudo perl -MCPAN -e 'install JSON' |
Then run sudo perl -MCPAN -e 'install JSON'
again, it works.
fixed this problem by copying backportPP.pm to the PP.pm file.
$ cd /usr/local/share/perl5/JSON |
本篇分享如何使用 Gcov 和 LCOV 对 C/C++ 项目进行代码覆盖率的度量。
如果你想了解代码覆盖率工具 Gcov 是如何工作的,或是以后需要做 C/C++ 项目的代码覆盖率,希望本篇对你有所帮助。
不知道你没有遇到过和我一样的问题:几十年前的 C/C++ 项目没有单元测试,只有回归测试,但是想知道回归测试测了哪些代码?还有哪些代码没测到?代码覆盖率是多少?今后哪些地方需要提高自动化测试用例?
可能对于接触过 Java 的 Junit 和 JaCoCo 的人来说,没有单元测试应该测不了代码覆盖率吧 … 其实不然,如果不行就没有下文了 :)
市场上有一些工具可以针对黑盒测试来衡量代码覆盖率 Squish Coco,Bullseye 等,它们的原理就是在编译的时候插入 instrumentation,中文叫插桩,在运行测试的时候用来跟踪和记录运行结果。
其中我比较深入的了解过 Squish Coco 它如何使用,但对于大型项目,引入这类工具都或多或少的需要解决编译上的问题。也正是因为有一些编译问题没有解决,就一直没有购买这款价格不菲的工具 License。
当我再次重新调查代码覆盖率的时候,我很惭愧的发现原来正在使用的 GCC 其实有内置的代码覆盖率的工具的,叫 Gcov
对于想使用 Gcov 的人,为了说明它是如何工作的,我准备了一段示例程序,运行这个程序之前需要先安装 GCC 和 LCOV。
如果没有环境或不想安装,可以直接查看示例仓库的 GitHub 仓库:https://github.com/shenxianpeng/gcov-example
注:主分支 master
下面放的是源码,分支 coverage
下的 out
目录是最终的结果报告。
# 这是我的测试环境上的 GCC 和 lcov 的版本 |
Gcov 工作流程图
主要分三步:
*.gcno
;*.gcda
数据文件;*.gcno
和 *.gcda
,通过源码生成 gcov
文件,最后生成代码覆盖率报告。下面就开始介绍其中每一步具体是怎么做的。
第一步编译,这里已经将编译用到的参数和文件都写在了 makefile
里了,只要执行 make
就可以编译了。
make |
sh-4.2$ make |
通过输出可以看到,这个程序在编译的时候添加了两个编译选项 -fprofile-arcs
and -ftest-coverage
。在编译成功后,不仅生成了 main
and .o
文件,同时还生成了两个 .gcno
文件.
.gcno
记录文件是在加入 GCC 编译选项-ftest-coverage
后生成的,在编译过程中它包含用于重建基本块图和为块分配源行号的信息。
在编译完成后,生成了 main
这个可执行文件,运行(测试)它:
./main |
sh-4.2$ ./main |
当运行 main
后,执行结果被记录在了 .gcda
这个数据文件里,查看当前目录下可以看到一共有生成了两个 .gcda
文件,每个源文件都对应一个 .gcda
文件。
$ ls |
.gcda
记录数据文件的生成是因为程序在编译的时候引入了-fprofile-arcs
选项。它包含弧过渡计数、值分布计数和一些摘要信息。
make report |
sh-4.2$ make report |
执行 make report
来生成 HTML 报告,这条命令的背后实际上主要执行了以下两个步骤:
在有了编译和运行时候生成的 .gcno
和 .gcda
文件后,执行命令 gcov main.c foo.c
即可生成 .gcov
代码覆盖率文件。
有了代码覆盖率 .gcov
文件,通过 LCOV 生成可视化代码覆盖率报告。
生成 HTML 结果报告的步骤如下:
# 1. 生成 coverage.info 数据文件 |
上传过程中所有生成的文件可通过执行 make clean
命令来彻底删除掉。
sh-4.2$ make clean |
首页以目录结构显示
进入目录后,显示该目录下的源文件
蓝色表示这些语句被覆盖
红色表示没有被覆盖的语句
LCOV 支持语句、函数和分支覆盖度量。
旁注:
In my opinion, SonarQube is not a very easy setup DevOps tool to compare with Jenkins, Artifactory. You can’t just run some script under the bin folder to let the server boot up.
You must have an installed database, configuration LDAP in the config file, etc.
So I’d like to document some important steps for myself, like setup LDAP or PostgreSQL when I install SonarQube of v9.0.1. It would be better if it can help others.
Need to be installed JRE/JDK 11 on the running machine.
Here is the prerequisites overview: https://docs.sonarqube.org/latest/requirements/requirements/
Download SonarQube: https://www.sonarqube.org/downloads/
cd sonarqube/ |
I installed SonarQube on CentOS 7 machine, the Java version is OpenJDK 1.8.0_242 by default, but the prerequisite shows at least need JDK 11. There is also JDK 11 available on my machine, so I just need to change the Java version.
I recommend using the alternatives
command change Java version,refer as following:
$ java -version |
SonarQube needs you to have installed a database. It supports several database engines, like Microsoft SQL Server, Oracle, and PostgreSQL. Since PostgreSQL is open source, light, and easy to install, so I choose PostgreSQL as its database.
How to download and install PostgreSQL please see this page: https://www.postgresql.org/download/linux/redhat/
Please refer to the sonar.properties
file at the end of this post.
sonar.security.realm=LDAP |
Comment out ldap.followReferrals=false
in sonar.properties file would be help.
Related post: https://community.sonarsource.com/t/ldap-login-takes-2-minutes-the-first-time/1573/7
I want to display Javascript code coverage result in SonarQube, so I added sonar.javascript.lcov.reportPaths=coverage/lcov.info
to the sonar-project.properties
But when I run sonar-scanner.bat
in the command line, the code coverage result can not show in sonar. I noticed the following error from the output:
INFO: Analysing [C:\workspace\xvm-ide\client\coverage\lcov.info] |
There are some posts related to this problem, for example, https://github.com/kulshekhar/ts-jest/issues/542, but no one works in my case.
# here is an example error path in lcov.info |
Finally, I have to use the sed
command to remove ..\
in front of the paths before running sonar-scanner.bat
, then the problem was solved.
sed -i 's/\..\\//g' lcov.info |
Please comment if you can solve the problem with changing options in the tsconfig.json
file.
To output more logs, change sonar.log.level=INFO
to sonar.log.level=DEBUG
in below.
Note: all above changes of
sonar.properties
need to restart the SonarQube instance to take effect.
sonar.properties
For the sonar.properties
file, please see below or link
When you want to add build status to your Bitbucket the specific commit of a branch when you start a build from the branch
When the build status is wrong, you want to update it manually. for example, update build status from FAILED to SUCCESSFUL
You can call Bitbucket REST API to do these.
Below is the code snippet to update Bitbucket build status with REST API in the shell script.
The code on GitHub Gist: https://gist.github.com/shenxianpeng/bd5eddc5fb39e54110afb8e2e7a6c4fb
Click Read More to view the code here.