技术债务相关文章推荐链接(不重复造轮子)
Android开发债务检查工具实战
项目的债务检查可以通过第三发Sonar完成,首先我们需要到http://www.sonarqube.org/官网下载SonarQube 5.5,虽然最新的版本是5.6,但是window10上面我一直没发运行成功
解压到目录后根据自己系统的类型和位数选择目录,配置到Path环境变量
配置好path后切换到命令行如下执行命令启动服务
打开网页http://localhost:9000/可以图形操作,默认账号密码admin登陆,然而你看到的只是管理分析界面,你需要把你要分析的项目部署到服务里面,才能开始分析技术债务。这里呢已Eclipse项目为例,AndroidStudio项目这样配置太麻烦了,还有跟简单的做法。部署Eclipse项目需要用到sonar-runner-2.4(百度csdn可以下载),同样下载解压后配置path,修改sonar-runner2.4/conf/sonar-runner.properties
#Configure here general information about the environment, such as SonarQube DB details for example
#No information about specific project should appear here
#----- Default SonarQube server
#sonar.host.url=http://localhost:9000
#----- PostgreSQL
#sonar.jdbc.url=jdbc:postgresql://localhost/sonar
#----- MySQL
#sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
#----- Oracle
#sonar.jdbc.url=jdbc:oracle:thin:@localhost/XE
#----- Microsoft SQLServer
#sonar.jdbc.url=jdbc:jtds:sqlserver://localhost/sonar;SelectMethod=Cursor
#----- Global database settings
#sonar.jdbc.username=sonar
#sonar.jdbc.password=sonar
#----- Default source code encoding
#sonar.sourceEncoding=UTF-8
sonar.scm.disabled=true//这句是我在部署遇到问题添加的
#----- Security (when 'sonar.forceAuthentication' is set to 'true')
#sonar.login=admin
#sonar.password=admin
来到需要部署项目添加配置文件
具体内容如下(下面注释只为说明,实际文件内容注释采用#方式)
# Required metadata
sonar.projectKey=TestSimple//项目名字
sonar.projectName=TestSimple//项目名字
sonar.projectVersion=1.1
# Comma-separated paths to directories with sources (required)
sonar.sources=src//分析源码目录
#sonar.binaries=bin\classes
sonar.binaries=bin//如果bin目录下不止classes就用bin
# Language
sonar.language=java
# Encoding of the source files
sonar.sourceEncoding=UTF-8
在项目根目录下运行:sonar-runner,访问:http://localhost:9000/,选择相应的项目,查看分析结果(下面是一个我在以前同事的项目的基础上修改了部分代码的一个项目的分析结果图)
如果你看不懂英文自己汉化吧,个人感觉上述这种技术债务检查对我们来说是非常有用的,但是呢,目前android开发流行Android Studio开发,项目按照上例方法配置不一定能成功的,目录都不一样了,项目还有module,配置起来相对比较繁琐,怎么办呢?Sonar对Android Studio开发的插件也出来了
安装完成后需要重新配置,设置服务代理 ,我这里是已本地启动服务,所以配置如下
安装下图操作开始分析项目
分析结果如下
Sonar从各个方面进行了代码分析
1.变量赋值问题
2.类结构
3.代码成熟度问题
4.代码风格问题
5.控制流的问题
6.数据流的问题
7.声明冗余
8.性能问题
9.可能的错误
10.拼写
11.冗长的或冗余的代码结构
12.res下面的XML问题
………………..
具体项目自己具体分析哈,这里只提几个示例作为演示。
① 开源项目SwipeMenu项目采用了过时方法
上例drawable的获取方法在Api21就过时了,具体做法应该走版本分之,不同版本采用不同的获取方法,当然过时方法任然可用。针对上述代码ContextCompat一帮我们做了版本分之,一键调用即可
public static final Drawable getDrawable(Context context, int id) {
final int version = Build.VERSION.SDK_INT;
if (version >= 21) {
return ContextCompatApi21.getDrawable(context, id);
} else {
return context.getResources().getDrawable(id);
}
}
②代码风格问题实例
public boolean isEnable() {
if (!isCanUseBluetooth) {
return false;
}
return blueAdapter.isEnabled();
}
上面这代码块是没问题的,但是看上去总觉得别扭,具体别扭在哪又说不出来,这下好了,通过Sonar债务检查发现了它,并给出了最佳解决方案
更多问题自己实战吧,这里不再逼逼叨叨了,个人感觉Sonar比Jenkins使用跟方便