文档章节

如何精细化管理代码质量?

J
 JRuler
发布于 2015/03/05 18:17
字数 2056
阅读 27
收藏 1

1.1 背景与范围

    代码是工程师与硬件机器交流的语言。和人类语言交流一样,表达一个相同的意思可以用很多不同的方法。哪一种表达的方法更好呢?对于代码而言,大概有三个方面的内容。第一个方面是看起来如何,第二个方面是分析起来如何,第三个方面是运行起来如何。前面两个方面的内容属于代码的静态质量问题,最后一个方面属于代码的动态质量问题。总之,静态的代码质量问题包括:抒写风格、逻辑规则、静态分析等等;动态的代码质量问题包括代码的单元测试,性能测试等等。

1.2 方法与困难

    在编码阶段的一个迭代周期中,开发人员需要完成的过程如统一编码规范、单元测试、代码评审、重构、持续集成、代码分析等等。报怨代码的质量问题是毫无用处的,解决代码质量的问题,唯一有效的办法就是行动起来,严格的进行代码审查过程.常见的方法是小组的领导人,带领团队人员定期的抽查部分代码,进行校正,从而达到其它成员参考的作用。在这一过程中使用自动化的检测工具,可以代替部分人工的功能。团队成员坚持不断地执行代码审查,使所有的工程师形成良好的编码习惯,不断提高编程能力,从而提高软件产品的代码质量。但是这个过程需要大量的时间和人力的成本。

    代码风格是代码审查的最基本的内容。在代码审查过程中,逐条针对代码风格的定义进行审查,核对。每个公司都有自己对代码的通用风格定义,也有自己的特殊风格定义。比如公司版权,属性名、注释等等。尽管公司有严格定义,但是却难以执行。

代码的逻辑规则以及潜在的缺陷是代码重大缺陷审查的主要内容.这些问题一般在测试过程中难以发现,或者需要花费大量的精力才能发现.所以在代码审查的过程中提前发现,提前解决.这些问题种类繁多,需要大量的编程经验才能发现.例如空对象的处理问题;捕获Runtime类型的异常问题等等;所以在执行代码审查的过程中需要花费大量的时间和人力成本。

代码审查还有一个更加重要,并且更加困难的部分就是对系统设计方面的审查。优秀的代码不仅需要遵循代码的风格、逻辑的规则,而且需要优秀的代码结构和高效的性能。拙劣的设计,往往伴随着代码冗余、逻辑混乱、效率低下。比起经验欠缺的工程师,优秀的工程师可能会使用更少量的代码完成更为复杂的功能。例如初级的工程师经常使用大量的if-else去实现逻辑的判断,而经验丰富的工程师会使用设计模式去解决这样的问题;再如经验丰富的工程师善于使用简捷的算法去解决一些看似复杂的问题,而初级的工程师往往使用非常复杂的逻辑来处理等等。

1.3 解决方案

    代码审查可以解决代码质量的大部分问题,但是人工检测比较费时费力,所以我们需要一种自动化的方案。市场上也一些工具辅助执行,例如 jindentcheckstylepmdJtestjfindbugs等等。jinentcheckstyle主要解决代码的书写格式的问题;pmd主要解决代码的一些逻辑规则的问题;jtestfindbugs主要解决了代码的分析问题可以检测很多代码中存在的潜在bug。这些工具存在一些缺点,一个方面需要我们在开发中安装多种工具,以解决不同的问题。 另一个方面是均不能很好的自动的优化我们的代码,检测出来的问题需要我们去分析才能解决,这个将花费我们很多的精力。再有一个方面是我们自定义的扩展功能不强。

 

针对上面这些问题,我们推出了一款可编程的代码自动分析工具---JRULER精细化代码质量管理工具。JRULER内置了一种标准化代码的编写风格和逻辑规则、以及代码分析功能的脚本编程语言.可以自动检测、并且可以自动优化开发人员生产的代码,从而把优秀的编程技术和经验积累下来。我们只要将开发人员的代码通过我们系统检测,就可以自动的优化源码在编写风格上面的缺陷,以及大量积累的良好编程经验,也可以检测代码中潜在的问题。大概80%的问题可以自动的优化,对不能自动优化的部分,会生成报告,然后提交给相应的工程师去解决。从而大大降低管理成本,有效的提高了公司软件的代码质量,并且使所有开发人员生产的代码达到统一的标准。

 

 

 

总结JRULER产品的特点:

 

1,书写格式功能,可以自动的优化代码的书写格式,包括空格、换行、注释等等。

2,逻辑规则功能,可以自动的检测代码的逻辑规则,并且可以自动的进行优化。

4,自动的报告生成功能。系统可以根据脚本的执行情况,决定是否产生检测结果的报告。

5,自动的代码优化功能。系统检测出来的报告,脚本可以自动化的优化问题,对可以自动

   优化了的问题,就不再产生报告了。
3
,可编程功能, 代码的检测和优化均通过脚本编程的方式实现,可编程的检测可以达

   到灵活的自定义效果。工程师根据自己编程的经验,将优秀的编程习惯通过脚本固化下

   来。从而达到,积累优秀编程经验的目的。

 

网站地址:www.jruler.com

资源下载:www.jruler.com/download/plugins_v2.0.zip

插件连接:www.jruler.com/download/plugins_v2.0.feature

1.4 脚本例子

1、如何检测类名命名规则

 

/**

 * 如何检测类名命名规则

 */

#include "java.h"

string getClassName(token tk);

string checkClassNaming() hooks tk : @"CLS" {

 

         if(tk == null) return null;

        

         string cls_name=getClassName(tk);

         if(cls_name == null) {

             return null;      

         }

         boolean b=regMatch(cls_name, "[A-Z][a-zA-Z]+");

         if(!b) {

                   return "class name is not suitable.";

         }

}

 

string getClassName(token tk){

 

         token [] tkList = tk.childs;

         var i=0;

        

         while(i<tkList.length) {

                   token ttk=tkList[i];

                   string s = toString(ttk.values);

                   if(s=="class") {

                            break;

                   }

                   i=i+1;

         }

         if(i<tkList.length) {

                   token tkCName = tkList[i+1];

                   return toString(tkCName.values);

         }

        

         return null;

}

© 著作权归作者所有

J
粉丝 1
博文 1
码字总数 2056
作品 0
无锡
私信 提问
SOFAChannel#5:给研发工程师的代码质量利器 —— 自动化测试框架 SOFAActs

| SOFAChannel 有趣实用的分布式架构频道:前沿技术、直播 Coding、观点“抬杠”,多种形式。 将作为 SOFA 所有在线内容的承载,包含直播/音视频教程,集中体现 SOFAStack 的能力全景图。 | ...

SOFAStack
04/28
78
0
捉虫记--bugCatcher

捉虫记 [|Spring|Spring MVC|Mybatis] 捉虫记简介 捉虫记的设计初衷是为了方便开发人员自测(当然了,对于需要自行完成测试的测试团队也是适用的),其主要特性为: 项目管理 :由需求方发起...

canyuns
2017/05/04
475
1
APP精细化运营:数据才是核心驱动力

提到APP运营,大家都会说要做好用户生命周期的管理,但在实际操作过程中,大部分运营者都沿着以下这个三角在走。 如上图所示,国内互联网网民数、移动端用户数接近饱和,人口红利逐渐消失,从...

个推大数据
08/01
0
0
建设企业的数据化引擎,网易严选数据中台的经验和方法论

数据中台最早是阿里提出的,但真正火起来是 2018 年,我们能感受到行业文章谈论数据中台的越来越多。大量的互联网、非互联网公司都开始建设数据中台。为什么很多公司开始建设数据中台?尽管数...

大数据之路
2012/09/03
1K
0
CODING 受邀参加《腾讯全球数字生态大会》

近日,腾讯全年最重要的一场活动——《腾讯全球数字生态大会》于昆明滇池国际会展中心正式举办。此次全球数字生态大会是腾讯战略升级后,整合互联网+数字经济峰会、云+未来峰会、腾讯全球合作...

CODING研发管理系统
05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

全面兼容IE6/IE7/IE8/FF的CSS HACK写法

浏览器市场的混乱,给设计师造成很大的麻烦,设计的页面兼容完这个浏览器还得兼容那个浏览器,本来ie6跟ff之间的兼容是很容易解决的。加上个ie7会麻烦点,ie8的出现就更头疼了,原来hack ie...

前端老手
7分钟前
3
0
常用快递电子面单批量打印api接口对接demo-JAVA示例

目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打...

程序的小猿
10分钟前
5
0
Yii 框架中rule规则必须搭配验证函数才能使用

public $store_id;public $user_id;public $page;public $limit;public $list;public $mch_list;public $cart_id;public $is_community;public $shop_id;public $cart_typ......

chenhongjiang
13分钟前
2
0
Flutter使用Rammus实现阿里云推送

前言: 最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之...

EmilyWu
13分钟前
26
0
Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

短网址顾名思义就是使用比较短的网址代替很长的网址。维基百科上面的解释是这样的: 短网址又称网址缩短、缩短网址、URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短...

阿里巴巴云原生
28分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部