阿里云大学 关注
手机版
  1. 云栖社区>
  2. 阿里云大学>
  3. 博客>
  4. 正文

【Java编码规范】《阿里巴巴Java开发手册(纪念版)》更新,认证考试+IDE插件助你码出质量

云木西 2017-02-08 17:01:38 浏览465777 评论157 发表于: 阿里云大学

java 阿里巴巴 开发手册 研发协同

摘要: 阿里巴巴集团推出的《阿里巴巴Java开发手册》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让Java开发者能够提升协作效率、提高代码质量。

        -------------- 2017.11.30更新 --------------


《阿里巴巴Java开发手册(纪念版)》于2017年11月30日正式对外发布,历经358的旅程,我们的PDF版本陪伴大家走过来,有挖苦讽刺,有闲言碎语,但是更多的是支持鼓励,添砖加瓦,阿里巴巴也认真听取了反馈建议,修正达9次之多,一步步趋近于亚完美,后续,我们会改为GITHUB在线维护。这是史上内容最全、修正最为彻底的一个版本,并且增加了单元测试规约内容,这也是阿里官方对外发布的最后一个PDF版本,值得纪念,更值得收藏。

《阿里巴巴Java开发手册》是阿里内部Java工程师所遵循的开发规范,涵盖编程规约、单元测试规约、异常日志规约、MySQL规约、工程规约、安全规约等,这是近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善。这是阿里回馈给Java社区的一份礼物,希望能够帮助企业开发团队在Java开发上更高效、容错、有协作性,提高代码质量,降低项目维护成本。


点击下载《阿里巴巴Java开发手册》(纪念版):https://yq.aliyun.com/attachment/download/?id=4942

编码规范考试认证:https://edu.aliyun.com/certification/cldt02

IDE插件下载:https://github.com/alibaba/p3c


32724b52767a32f761ae81578bdf77d0c9898da6


单元测试规约

单元测试有助于开发团队有效监测软件模块质量、促进代码深度优化,进而降低线上故障率,长期执行有助于提升项目迭代效率,减少重构成本。此次在终极版本中,阿里根据内部单元测试的实践经验,详细描述了单元测试的相关原则和重要建议:

  • AIR原则:

         A:Automatic,单元测试需要测试框架自动化执行,才有意义。

         I:Independent,单元测试用例之间互相独立,不存在依赖关系。

         R:Repeatable,单元测试可以被重复执行,且结果一致

  • BCDE原则:

         B:Border,边界值测试,包括循环边界、特殊取值、特殊时间点等。

         C:Correct,正确的输入,并得到预期的结果。

         D:Design,与设计文档相结合,来编写单元测试。

         E:Error,强制错误信息输入(如:非法数据),并得到预期的结果。


IDE代码检测插件 

自《阿里巴巴Java开发手册》正式版发布以来,Java开发者就一直关注何时推出IDE代码监测插件。经过研发和内部测试,现在插件终于要和大家见面了——10月14日,杭州云栖大会研发效能峰会场,阿里将正式对外开放插件及源码。

该插件在扫描代码后,将不符合《手册》的代码按block/critical/major三个等级显示在下方;实时编写代码时,还会给出智能提示,告诉你如何编写可以更优雅;对于历史代码,部分规则实现了批量一键修复的功能。是不是很方便? 


「阿里巴巴编码规范」考试认证

阿里云大学结合《阿里巴巴Java开发手册》,推出了「阿里巴巴编码规范」认证,通过在线考试,检测你对手册中开发规范的掌握程度,并发放官方认证证书。

立即考试:https://edu.aliyun.com/certification/cldt02 



------------------------------------------

关于《阿里巴巴Java开发手册》


你是否曾因Java代码规范版本纷杂而无所适从?

你是否想过代码规范能将系统故障率降低20%?

你是否曾因团队代码风格迥异而协同困难?

你是否正在review一些原本可以避免的故障?

你是否无法确定自己的代码足够健壮? 

码出高效,码出质量!

相比C++代码规范业界已经达成共识,Java代码规范业界比较混乱,我们期待这次发布的Java代码规范能够给业界带来一个标准,促使整体行业代码规范水平得到提高,最终能够帮助企业和开发者提升代码质量和降低代码故障率。

 

阿里出品,质量保证!

阿里Java技术团队一手打造出Dubbo、JStorm、Fastjson等诸多流行开源框架,部分已成为Apache基金会孵化项目;

阿里在Java后端领域支撑起全球访问量最大的服务器集群;

Java代码构建的阿里双11业务系统订单处理能力达到17.5万笔/秒;

到目前已累计数亿行高并发、高稳定性的最佳Java代码实践;

……

此次公开的Java开发手册正是出自这样的团队,近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善,铸就了这本高含金量的阿里Java开发手册。该手册以Java开发者为中心视角,划分为编程规约、异常日志规约、MYSQL规约、工程规约、安全规约五大块,再根据内容特征,细分成若干二级子目录。根据约束力强弱和故障敏感性,规约依次分为强制、推荐、参考三大类。此套规范不仅能让代码一目了然, 更有助于加强团队分工与合作、真正提升效率。 


无规矩不成方圆 无规范不能协作

众所周知,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全。试想如果没有限速,没有红绿灯,没有规定靠右行驶,谁还敢上路行驶。 

同理,对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的方式一起做事,降低故障率,提升协作效率。开发手册详细列举如何开发更加高效,更加容错,更加有协作性,力求知其然,更知其不然,结合正反例,提高代码质量。比如,异常日志处理时的各种不规范行为;集合转换的各种坑;创建线程池出现的等待队列OOM等。 


阿里技术资深大咖联袂推荐

阿里高级研究员多隆:工程师对于代码,一定要“精益求精”,不论从性能,还是简洁优雅,都要具备“精益求精”的工匠精神,认真打磨自己的作品。 

阿里研究员毕玄:一个优秀的工程师和一个普通工程师的区别,不是现在满天飞的架构图,他的功底就是体现在他写的每一行代码上。 

阿里研究员玄难:代码是软件工程里面的产品设计、系统架构设计等工作的最后承载体,代码的质量决定了一切工作的成败。 

阿里巴巴B2B事业群CTO李纯:好的软件产品离不开工程师高质量的代码及相互间顺畅的沟通与合作。简单,适用的代码规约背后所传递的是技术上的追求卓越、协同合作的精神,是每个技术团队不可缺失的重要利器。 

阿里研究员、HipHop作者:赵海平(花名:福贝):程序员是创造个性化作品的艺术家,但同时也是需要团队合作的工种。个性化应尽量表现在代码效率和算法方面,牺牲小我,成就大我。 


拥抱规范,远离伤害!

开发的同学们赶紧行动起来,遵守代码规范,你好,我好,大家好! 


关注云栖社区微信公众号:

2adbbb40545618044d6ebff62c513480e7591581

本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

用云栖社区APP,舒服~

【云栖快讯】中办国办印发《推进互联网协议第六版(IPv6)规模部署行动计划》加快推进基于 IPv6 的下一代互联网规模部署,计划指出2025年末中国 IPv6 规模要达到世界第一,阿里云也第一时间宣布了将全面提供IPv6服务,那么在全面部署 IPV6 前,你需要了解都在这儿  详情请点击

网友评论

41F
gao本

很好的东西,感谢这样有责任有担当的企业,只有这样整个社会才会快速进步

42F
raorihong

有没有php的呢?

43F
nick.yuan

真是受益匪浅

(来自社区APP)
44F
jiankangbeijing

只有正确实现了业务需求,并且符合架构设计的代码才能称之为优秀的活代码,否则即使写的再优雅也是死的!

(来自社区APP)
45F
小鬼谷子

阿里引领DT时代

(来自社区APP)
46F
她的小小猪

JQuery对象怎么命名啊?
我一般都是用$符号开头的

47F
星光似霰

学习了

48F
芝麻谷
  1. 【推荐】循环体内,字符串的联接方式,使用 StringBuilder 的 append 方法进行扩展。
    反例:

String str = "start";
for(int i=0; i<100; i++){
str = str + "hello";
}
说明:反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行
append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。

第十七条的这个说明说的是什么 为什么和反例对不上

一个人螃蟹

请问你工作多久了

一个人螃蟹

他的意思是让你看反编译的字节码分析jvm是如何处理的,正例赘述内容太多,不容易说明问题,反正我是看懂了

评论
49F
芝麻谷

我也推荐谷歌的规范

50F
jeeklin

哇哈哈

51F
cap丨jacv

好像很牛,我刚学Java.有帮助吗?

(来自社区APP)
52F
小克思

做标杆了!

53F
starstar998

顶起

54F
tianwei02

不够全,还不如我们公司的规范手册。

比如我们公司规定:
1、代码单行不允许超过整个屏幕的一半,方便垂直拆分视图阅读。
2、方法的名词和动词需要有约束,比如 “删除用户”是一个动词,是可以作为方法名。若当前类是“用户”,是方法直接写成“删除”而不需要携带“用户”。再比如,事件名称,过去式和进行时是有区别的,同时需要名词在前动词在后。比如 UserDeleted 和 UserDeleting 的关系。
诸如此类,希望再接再厉继续补充哈。。。

糗蛋网tianwei02 赞同
55F
scruel

请问阿里的大佬们啊,能不能在更新的时候标注下更新了具体那些内容啊?方便以前看过文档的人校对~

孤尽

在下载的PDF版本最后的附1,详细说明了当前版本的更新点。

scruel

好的谢谢!

评论
56F
tiankonghewo

必须支持,先看一遍再说

57F
chengning

赞,看似基础,实则值得细细品味!

58F
初心永恒1

很好,赞一个

59F
neo.he

在规范中倡导的前提下,为什么还不提倡用可变参数编程,毕竟入参的时候写起来更加简洁,不用区分是数组还是可预知的参数个数

孤尽

只是不提倡,如果满天飞的可变参数,对写是舒服,对维护的人来说是一件头疼的事情。

评论
60F
东方太阳☀

半路出家的小白,有没有大腿抱抱。

(来自社区APP)