在代码静态分析跑完了以后,有时候会碰到一种情况,就是分析的结果,在工具里面看着倒是挺好的,可一旦到了要拿去交付给评审的时候,光靠那个界面就不太够用了,项目组这边,通常是需要去导出像代码评审报告、MISRA合规报告,还有标准符合性报告,这一类的文件,好把它们交给研发的负责人、质量的团队,或者是客户那边去做审核,QAC它是支持在项目的级别上,去生成报告的,也可以通过命令行的方式,基于项目分析的结果去出报告,这里面,常见的报告类型,就包括CRR、MCR、SCR等等好几种。
一、HTML报告要怎么生成
在拿QAC去生成HTML报告之前,得先确认一下,项目那边已经把同步和分析这整套流程,都给跑完了,要是源文件还没有被分析过,或者是依赖的检查还没通过,那最后导出来的报告,内容就有可能是缺胳膊少腿的,到了后面,哪怕你看着是成功导出了,也会冒出来数据不全,或者是结果跟界面上看到的,对不上号的情况。
1、要先去确认,项目的分析已经跑完了
在把QAC的项目给打开了以后,要先去运行一遍分析,去确认一下,消息的列表、规则跑出来的结果,还有那些度量的结果,都是已经正常生成了的,可不要刚一导入工程,就急急忙忙地想去出报告,尤其是在你第一次去配置项目、改动了编译配置、切换了规则集,或者是新加了文件以后,是一定要重新再去分析一次的。
2、从界面上去生成报告
要是你用的是QAC的图形界面,或者是它跟Visual Studio集成在一起的那种环境,那就可以在项目的级别上,去找到生成报告的那个入口,点进去以后,会弹出来一个报告生成的对话框,在里面,去把你想要的那几种报告类型给选上,按照文档的说明,这个功能,就是被拿来在项目级生成报告用的,选了以后,那个报告生成的对话框就会打开。
3、去选一种合适的报告类型
要是你只是想看一看代码的质量,还有消息的大概情况,那去选CRR,也就是代码评审报告,就可以了;要是你想去看MISRA那些规则,都符合得怎么样了,那就去选MCR;要是想去看通用标准的符合情况,那就去选SCR;再要是,你想去查看那些被抑制掉的信息,就可以去选SUR,不要一口气,把所有的报告全都给导出来,先照着评审的目的去选,这样产出来的文件,会显得更清楚一些。
4、去把报告要输出到什么地方给确认好
报告这个东西,它一般是会被生成在,项目配置目录底下的一个叫reports的文件夹里面的,当然,你也可以在输出的选项里面,去把它改到一个你指定的目录里去,按照QAC的文档说明,默认的报告路径,通常是放在项目配置的某个子目录下面的,并且,是可以通过输出的设置,把它给改到别的地方去的。
二、命令行要怎么导出报告
要是项目已经接进了持续集成里面,或者是需要一口气,去导出好几个不同配置的报告,那就可以去用qacli这个命令行的工具了,这个东西,它是Perforce QAC的命令行接口,既能被用在构建服务器上做集成,也可以在桌面环境里,单独去使用它。
1、进到项目的目录里面去
先去把命令行的窗口给打开,然后把当前的路径,切换到QAC项目的目录里面去,或者,也可以在命令里,用一个专门的参数,去把项目的路径给指定出来,要是一个项目里面,有好几个不同的配置,那就要用另一个参数,去把配置的名字也给指明了,免得导出来的,不是你当前正需要的那一个配置。
2、去执行那个出报告的命令
一条常用的命令,大概可以写成这个样子:
qacli report-P.-t CRR
要是你想导出的是MISRA的报告,那就可以把CRR给换成MCR;要是想导出标准符合性的报告,就可以把它给换成SCR,在这种用法里面,那个参数是用来指定项目目录的,而另一个参数,就是用来指定报告类型的。
3、去把输出的目录给指定一下
要是不想让报告散落在项目自己的文件夹里面,那就可以再去额外加上一个参数,就比如:
qacli report-P.-t CRR-o report_out
要是你连报告的文件名,都想自己指定,那还可以再去加另一个参数,在这里,有一点是需要留意的,就是你指定的那个输出的目录,必须得是有写入权限的才行;要是那个目录还不存在,那这个工具,它自己会试着去创建它。
4、别去滥用那个跳过依赖检查的参数
有些项目,为了赶点时间,会去用一个特殊的参数,把依赖的检查给跳过去,这么干,倒是能让报告继续往下生成,但是最后产出来的报告,是可能会被打上“草稿”标记的,并且,它也不一定是完整的,只有在你是非常清楚地知道,这么做会影响到什么范围的时候,再动手去用它,可不要把它,给当成是一个常规导出报告的手段了。
三、导出的报告乱码了要怎么处理
QAC导出来的报告出现乱码,这种问题,通常都是跟浏览器的编码、中文的路径、中文的文件名、文件被压缩再转发、系统的区域设置,还有源文件它自己是个什么编码,这些因素脱不开关系的,在动手处理的时候,要先判断一下,这到底是报告的标题乱码了、源代码的片段乱码了,还是文件的路径乱码了。
1、先换到一条英文的路径上,重新导出一次看看
去把项目的路径、报告要输出到哪里的路径,还有报告自己的名字,这些全都尽量给改成英文和数字的组合,要避免在里面,出现中文的目录、空格,还有那些特殊的符号,有不少的乱码,其实并不是HTML文件它里面的内容坏掉了,而是这些路径或者是资源文件,在被复制、压缩,还有解压的时候,被人用错误的编码方式给处理了。
2、用浏览器,直接去打开那个最主要的HTML文件
在报告被导出来了以后,可不要只去复制那一个单独的html文件,有些报告,它是会同时生成一个放着数据的文件夹,或者是跟它关联在一起的JSON文件的,在复制报告的时候,是要把那个主要的HTML文件,还有跟它配套的那个文件夹,全都一块儿给带走才行,要不然的话,页面上的显示,是有可能会变得不正常的。
3、去检查一下源文件的编码
要是报告的框架是正常的,只是里头那些源码的注释、中文的字符串,或者是文件名乱码了,那就要去检查一下,源文件它自己,到底是UTF-8、GBK,还是那种好几种编码给混在了一起的,在项目里面,最好是能去把编码给统一一下,至少,别让同一批要拿去检查的文件里面,同时混着用好几种不同的编码,不然的话,报告的那个工具,它就只能照着一种规则去显示,最后,局部的地方出现乱码,是很难被完全避免掉的。
4、去检查一下系统的区域设置,还有浏览器是怎么显示的
在Windows那个环境下,是可以去查一查,系统的区域设置,是不是跟项目里头,最常用到的那种编码相匹配;在用浏览器打开HTML文件以后,也可以试着去切换一下它的编码方式,或者是换到另外一个浏览器上去看看效果,要是在一个浏览器上看着是乱码,换了一个又变正常了,那就说明报告文件它自己,倒不一定是真的坏掉了。
5、要选择去重新生成报告,而不是去手动修改它
报告要是乱码了,可不要直接就动手去改那个已经被导出来的HTML文件,因为等到下一次再去生成报告的时候,你的这些手动改动,是会被无情地给覆盖掉的,正确的做法,是应该回到项目的路径、输出的目录、源文件的编码,还有报告配置,这些地方,去把根子上的问题给处理掉,等把这些都修正好了以后,再去重新跑一次分析,然后再导出,这样最后拿到手的结果,才会是更可靠的。
总结
在QAC里面,去生成HTML的报告,主要是有这么两条路可以走:一条,是在图形界面里面,去选那个项目级的报告;另一条,就是靠着qacli report这个命令,去按照报告的类型,把它给导出来,至于报告导出来以后,碰到乱码了要怎么去处理,这里面的关键,就是先去查一查,是不是中文的路径,还有跟它配套的那些资源文件在捣鬼,然后,再去查源文件的编码、浏览器的显示,还有系统的区域设置,等到报告,是要被拿去正式交付用的时候,最好能把输出的目录,全都设成英文的、把要导出的报告类型给固定下来、再把那个完整的报告文件夹,整个儿地给保留好,并且,在动手导出之前,先去确认一下,分析得到的结果,已经都是最新的了,把这些都做完了以后,报告的内容,还有它显示出来的效果,就都会稳当不少。