精准测试新玩法の基于犯罪心理学挖掘代码风险
Python脚本 (用于merge 结果生成json) https://s3.amazonaws.com/CodeMaatDistro/scripts0.4.zip
https://s3.amazonaws.com/CodeMaatDistro/sample0.2.zip ? 执行过程 (以svn为例子):
svn log -v -r {yyyymmdd}:{yyyymmdd} --xml > <svnLogFile > 例子: svn log -v -r {20160227}:HEAD --xml > test.log svn log -v -r {20160127}: {20160227} --xml > test.log ? ?2.用code maat分析总结svn log maat -l <svnLogFile> -c svn -a revisions > <code_freqs.csv> 可以用下面的命令打印测试下 maat -l ?<svnLogFile>-c svn -a summary?? 例子: maat -l test.log -c svn -a summary?? maat -l test.log -c svn -a revisions > test_freqs.csv ? 注意: 需要打开结果文件把前面的三行删掉(打印的命令行) 另外svn log 打印出来的结果是在svn trunk的相对路径,如果工作目录不是svn trunk的根路径,需要修改文件里面代码的路径 /Test_proj/trunk/test/src/features/Log/log.cpp,94 /Test_proj/trunk/test/src/features/LogMgr/logMgr.cpp,94 /Test_proj/trunk/test/src/features/test/test.cc,75 ? 替换成下面这样 (当前工作目录为device),因为cloc 得出的文件路径是工作路径的相对路径,要保持两者一致才可以 Log/log.cpp,94 LogMgr/logMgr.cpp,94 test/test.cc,75 ?3. 用cloc 分析文件大小 ????cloc-1.64.exe? ./ --unix--by-file --csv --quiet --report-file=<code_lines.csv>? ????? ????例子: ????cloc-1.64.exe? ./ --unix--by-file --csv --quiet --report-file=test_lines.csv? ? ?4. 把前面结果merge生成json 文件 python csv_as_enclosure_json.py --structure <code_lines.csv>--weights <code_freqs.csv > ?> ?<jsonFile> ? 备注: 可以先用merge试一下结果是否正确: Python merge_comp_freqs.py??<code_freqs.csv ><code_lines.csv> ? 例子: python merge_comp_freqs.py??test_freqs.csv? test_lines.csv python csv_as_enclosure_json.py --structure test_lines.csv --weightstest_freqs.csv > test.json ? 5.热点可视化 在sample/hibernate?目录中: 把hib_hotspot_proto.json内容替换成上一步生成的json文件 运行下面命令 然后浏览器打开下面链接,即可看到结果 http://localhost:8888/hibzoomable.html ? 备注: ? 也可以自己建立自己的项目目录,具体格式可参考 hibernate?里面的hibzoomable.html ? ? 效果: ? Hibernate开源项目全景图(支持鼠标缩放): ? 代码热区区分? 下面图为上面全景图的局部放大 ? 在上图中(hibernate项目热区),颜色越红,表示代码区域被改动次数越多,也即越有风险,圆圈的大小表示代码文件的大小(行数), ? 除了代码热区还能够挖掘出来其他的东东么?- 我们一起来进一步思考在上文中展示的代码热区只包含两个维度: 代码大小,代码改动次数. ? 在每个产品或者项目阶段,我们可以加入自己的维度来定义或者进一步过滤代码热区来得到自己想要的结果. ? (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |