讲师:张传波版权所有;讲师:张传波�你写过代码没有?�你看过代码没有?�你评审过代码没有?�你被评审过代码没有?�你是编码方面的行家吗?�项目可以无文档,但代码必须有!�不抓代码质量,就是等死!�猛抓代码质量呢?可能是找死……版权所有;讲师:张传波2�某项目编码差不多完成了,技术副总检查代码,不看不知道,一看把几火(愤怒、生气的意思)!◦不符合编码规范的代码到处都是。◦程序到处冒烟,无法正常运行!�程序员们疲于奔命地四处扑火,但就是不去改正不符合编码规范的问题,理由是:工期紧,需首先保证程序能运行,编码规范问题无暇顾及,而且不是核心问题。�但技术副总就是抓住编码规范问题不放,程序员们极力反抗!�你支持技术副总还是程序员呢?A.支持技术副总!B.支持程序员!版权所有;讲师:张传波3�编码知识超级扫盲◦代码、方法、类◦面向过程、面向对象、面向……�编码的问题及“漂亮”的代码◦编码综合征◦代码的低级问题与高级问题◦什么是“漂亮”的代码?�编码规范�代码评审案例分析�代码评审实践建议版权所有;讲师:张传波4�求1-100所有奇数之和Inti,n=0;For(i=1;i=100;i++){If(i/2!=Int(i/2)){//判断是否为奇数n=n+I;}}Printn;�三种最基本的代码◦顺序语句◦循环语句◦条件(分支)语句版权所有;讲师:张传波5求奇数的总和//输入:起止整数;输出:奇数总和IntGetOddSum(intstart,intend){Inti,n=0;For(i=start;i=end;i++){If(i/2!=Int(i/2)){//判断是否为奇数n=n+I;}}returnn;}//原来为Print�方法的关注点例:IntGetOddSum(intstart,intend)◦完成什么功能◦输入是什么,输出是什么◦方法使用者无需关注方法的内部实现版权所有;讲师:张传波6{IntGetOddSum(intstart,intend)IntGetDualSum(intstart,intend)//求偶数之和IntGetPrimeSum(intstart,intend)//求质数之和IntGetSum(intstart,intend)//求和……}�类的关注点◦将相关功能的方法放在一起。◦类还包含属性、方法等,类具备更强大的功能。◦类使用者无需关注类的内部实现。版权所有;讲师:张传波7版权所有;讲师:张传波8代码方法方法之间的关系类类之间的关系构件构件之间的关系服务服务之间的关系面向过程面向对象OO:object-oriented面向构件面向服务SOA:service-orientedarchitecture代码评审关注点架构设计评审关注点�编码知识超级扫盲◦代码、方法、类◦面向过程、面向对象、面向……�编码的问题及“漂亮”的代码◦编码综合征◦代码的低级问题与高级问题◦什么是“漂亮”的代码?�编码规范�代码评审案例分析�代码评审实践建议版权所有;讲师:张传波9�“裸奔型代码”◦全英文书写,没有一个汉字(不写注释)。◦一条大道通罗马,其它分支全不考虑。◦编译通过,第一次运行没问题,就认为完成。◦选择自己熟悉的写法,其它任何写法都不考虑。◦头脑发热,写出一堆最后连自己也看不同的深奥代码。�“阿弥陀佛型”◦求神拜佛不要让我去改别人的代码。◦保佑客户不要需求变更。◦项目结束赶紧走人。◦实在不行硬着头皮改代码,软件勉强能用就万事大吉。◦最后代码变成一团面条。版权所有;讲师:张传波10编码技能问题!积重难返!这是历史的错?�“吹毛求疵型”◦为了写出漂亮的代码,花掉大量时间。◦为让某个功能很炫,放下其它事情。◦软件未能解决温饱问题,就直奔小康社会了。�“眼高手低型”◦每天都对自己说,我的编程水平最高。◦别人的意见一律听不进去。◦制造麻烦的高手,解决问题的低手。�“事不关己型”◦今天的任务已完成。◦缺陷在你做的部分发生,不关我事。◦设计没有说清楚,不关我事。版权所有;讲师:张传波11工作态度问题!开发人员的可爱特点�初级问题◦重复代码。◦难以看懂的代码。◦不规范的代码。◦不满足需求的代码。◦不符合设计的代码。◦……�高级问题◦代码不够优雅。◦代码不够强壮。◦算法不是最好。◦……版权所有;讲师:张传波12小Tips:应先消灭初级问题,再解决高级问题!�达到及格线的要求:◦满足需求。◦符合设计。�基础级要求:◦规范而统一。◦容易看懂,别人能改得动。�专业级要求:◦考虑全面,不易出错。◦高性能、高安全性。�最高境界:◦优雅而且零缺陷!版权所有;讲师:张传波13所有项目都应该达到的标准!根据项目战略和项目组人员水平情况,决定你的标准!�编码知识超级扫盲◦代码、方法、类◦面向过程、面向对象、面向……�编码的问题及“漂亮”的代码◦编码综合征◦代码的低级问题与高级问题◦什么是“漂亮”的代码?�编码规范�代码评审案例分析�代码评审实践建议版权所有;讲师:张传波14�规范编码行为。�增加代码的可读性。�将一些好的编程习惯变成规范。�帮助程序员养成良好的编码习惯。�提高代码的质量。�编码规范应该是对项目有益的,而不是为了有规范而有规范。版权所有;讲师:张传波15小Tips:编码规范能一定程度解决编码的问题,提高代码质量,但要从根本上提高代码质量,需要提高程序员的编程素质。�代码规范�数据库规范◦如:表、字段命名规范,存储过程、触发器编写规范�脚本规范◦如:数据库脚本、Javascript脚本版权所有;讲师:张传波16版权所有;讲师:张传波17该规范特点:1.代码正确性、可读性优先。2.强调基础级要求。3.基本没有高级要求。小Tips:编码规范应先解决代码的初级级别问题,再考虑解决高级问题。�编码知识超级扫盲◦代码、方法、类◦面向过程、面向对象、面向……�编码的问题及“漂亮”的代码◦编码综合征◦代码的低级问题与高级问题◦什么是“漂亮”的代码?�编码规范�代码评审案例分析�代码评审实践建议版权所有;讲师:张传波18�某项目进度计划评审,QA发现没有代码评审的任务,PM在开发后期增加了代码评审的任务。于是评审通过了。�请问你觉得上述代码评审时间安排是否合适?�应该在什么时候评审代码?A.应安排在所有编码任务之后。B.应安排在编码工作进行了一半的时候进行。C.应尽早安排,持续进行!D.应尽早安排,达到效果后可减少甚至不需要评审。版权所有;讲师:张传波19�某进度计划评审,QA发现只是对部分编码任务安排了代码走查,觉得不妥,要求安排更多的代码走查或者评审任务,但PM和开发人员都觉得没有必要。�你如何评价此事呢?�应对哪些代码进行评审?A.有条件的话,应该全部代码都要评审!B.至少要做到50%以上的覆盖率。C.应明确评审的目标,抓住重点,以点带面!版权所有;讲师:张传波20�某公司编码规范公布已有一段时间,而且该规范事先经过全体程序员的同意,并进行了相关培训。�规范的内容并不复杂,主要是对类、方法、变量、常数等命名要求。�有一次公司首席程序员评审某项目的代码,指出了一些变量命名不符合规范的问题,程序员全力反击,他们的理由是:◦公司的编码规范有点像匈牙利命名法,不合时宜,应该采用骆驼命名法!◦花这么多时间讨论这些鸡毛蒜皮的事情,实在不应该,应该重点看代码的算法!�你如何处置此事?�建议方案:◦基础级别的编码规范,应强力执行!部分人须克服“旧习惯”!◦不要等程序员写了一大段不合要求的代码才去指出他的问题,应一开始就要检查他的代码,让他尽早养成新的编程习惯。版权所有;讲师:张传波21�案例1:什么时候评审代码?�案例2:所有代码都需要评审?�案例3:对抗编码规范的程序员们版权所有;讲师:张传波22评审应尽早进行,尽快规范程序员的编码习惯。抓住重点,以点带面!一些编码规范其实是“不得随地吐痰”级别的要求,需一开始就落实执行。�编码知识超级扫盲◦代码、方法、类◦面向过程、面向对象、面向……�编码的问题及“漂亮”的代码◦编码综合征◦代码的低级问题与高级问题◦什么是“漂亮”的代码?�编码规范�代码评审案例分析�代码评审实践建议版权所有;讲师:张传波23�代码需遵循的编码规范�代码对应的软件需求�代码对应的软件设计版权所有;讲师:张传波24�达到及格线的要求:◦满足需求。◦符合设计。�基础级要求:◦规范而统一。◦容易看懂,别人能改得动。�专业级要求:◦考虑全面,不易出错。◦高性能、高安全性。�最高境界:◦优雅而且零缺陷!版权所有;讲师:张传波25先保证达到这个要求!�明确评审目标。�评审应尽早进行。�新人的代码更应尽早评审。�实现方法类似的多个功能点,完成第一个即安排评审。�“第一次”写的代码应评审。�测试代码(如果有的话)也应该一并评审。版权所有;讲师:张传波26�关键代码应尽早评审、重点评审。◦复杂算法核心业务代码◦被调用的多的代码�代码评审者水平要高,找近似水平的人来评审效果不大。�开发人员水平能达到评审目标时,无需再安排评审。�可通过某些评审来教育开发人员。�高手在项目初期多展示自己的代码。版权所有;讲师:张传波27小Tips:1.评审不仅是为了发现问题解决问题,更重要是要尽快帮助程序员建立好的编程习惯,应以预防问题、提升能力为主。2.编码初期安排比较密集的评审,大家都达到水平要求后,可减少甚至不需要评审。�编码知识超级扫盲◦代码、方法、类◦面向过程、面向对象、面向……�编码的问题及“漂亮”的代码◦编码综合征◦代码的低级问题与高级问题◦什么是“漂亮”的代码?�编码规范�代码评审案例分析�代码评审实践建议版权所有;讲师:张传波28�案例分析:要工期还是要质量——程序员PK技术副总�某项目编码差不多完成了