10 2012 档案
摘要:产生劣质代码的另外一个原因是对编程环境的不熟悉。原本想简略讲一讲这一章的,网上关于如何使用IDE的文章到处都是,特意写这么一章给人一种凑数的感觉。但是,回到现实当中,当我发现有这样一些行为的时候,深感对于编程环境的不熟悉是一个造成不能集中精力去思考的很重要的原因之一。这些行为是(在Eclipse里):1. 从行尾移动到行首: 不停地按左键。 正确的方法是按Home2. 为某个变量改名: 拖动滚动条,肉眼搜索,然后用Backspce删除找到的单词,再把复制的名字粘贴进去。 正确的方法是双击变量,按Alt + Shift + R,然后改名3. 某个长方法中的一段想要提出来,变成另外一个方法: ..
阅读全文
摘要:6.空对象模型当需要访问一个对象有可能是空的时候,需要进行空校验。 比如,下面的例子。1 public class User {2 int id;3 String name;4 public void save() {5 System.out.println("Save user");6 }7 }1 public void saveUser(int id, String name) {2 User user = findUserById(id);3 if (user == null) {4 return;5 ...
阅读全文
摘要:3.正则表达式 a. 白名单 下列代码是用来进行白名单校验的,即如果输入的文字符合条件的话就返回true,否则返回false。 1 private static final String[] ENABLED_TEXTS = new String[]{"a", "b", "c", "d", "e"}; 2 3 public boolean isEnabled(String input) { 4 for (String text : ENABLED_TEXTS) { 5 if (text.equal
阅读全文
摘要:2.反射 (Reflect)反射是Java1.5开始出现的特性,反射是通过名称访问类、方法、域、声明的方法。反射方法的出现为Java增加了更多的特性。 a.访问private类型的属性和方法 由于不能访问private的域和方法而无法对相应的功能进行xUnit的测试。但是反射提供了访问private方法的途径,所以,对于private的方法可以进行xUnit测试。1 public class Testee {2 3 private void execute(){4 System.out.println("method called"); 5 }6 } 1...
阅读全文
摘要:产生劣质代码的另外一个原因是对编程员的知识掌握的不够充分。很多特性如果得到正确的利用,会让代码变得更为简练易懂。但是由于对这些特性不够了解或者根本就不知道。只好写出不太好的代码。本文以Java语言为例,将一些高级特性列出来以飨读者。1.声明 (Annotation) 在Java5中就开始引入了Annotation概念。这个概念帮助 a. 编译用声明例如:@Deprecated, @Override b. 语法检验用声明例如:@SuppressWarnings c. 运行时声明例如:@d.自定义声明 例一:根据annotation来进行页面校验。 假设一个考试成绩登记页面,登记的成绩不能超过10
阅读全文
摘要:前一讲我们提到了一些广为统计,但是实际上却可能没有指导意义的数据。那么这一讲,我们将来阐述那些需要统计并对项目产生积极影响的数据。一般来说,软件项目最关心的就是Quality (质量)、Cost (成本)、 Delivery(交货期)。管理者希望以不同的角度,不同的形式通过数据形式将这些属性展示出来。那么我们所统计的数据也就是围绕着三方面的。而同时,我们也要关系这些数据将为未来的改进提供什么样的帮助。1.圈复杂度 圈复杂度无疑是衡量软件质量的一个指标。圈复杂度有现成的工具来统计。C#.Net的NUnit,Java的Google Code Pro*,Matrix等都可以统计这个数据。圈复杂度的推
阅读全文
摘要:ISO/IMC 9126对于软件的质量进行了定义,其中包括如下几项: 可理解性(Understandabiliy)、可维护性(Maintainability)、可扩展性(Extensibility)、容错性(Fault Tolerance)和可测试性(Testability)。 这些都和阅读质量相关。在诸多组织里,管理人员和开发人员一样都把目光集中在软件的运行质量上,而很少关心代码的阅读质量。其中很重要的原因是,这些人从来没有听过这些概念。即使有些组织提出过编码规范的要求,但是这也只是一种形式上的要求,至于实际上做的如何,很少有人关心。那么代码的阅读质量为什么这么重要,它又用哪些指标进行衡量呢
阅读全文
摘要:劣质代码令人深恶痛绝。那么它们究竟是怎么产生的呢?只有明白了它们的产生根源,才能够从根本上杜绝劣质代码的产生。劣质代码的产生主要来自于几个方面:1. 理论知识的匮乏 缺少理论知识,以至于不知道什么是优质代码,什么是劣质代码。本文将从质量、2. 编程语言知识不足 由于对编程语言的接触只限于表面的常见功能,更多的高级功能从来没有用过,所以不知道有能够写出更精简的代码的方法。 本文将以Java为例,阐释那些高级而又不常用到的功能。3. 编程工具的不熟悉。 也许有些夸张,我见过有人用键盘上的箭头移动光标到最开始,而不是用Home键的,见过全局替换用眼睛而不是用工具的。尽管每天都在使用编程工具,但是却不
阅读全文
摘要:劣质代码带来的劣质体验 时下很流行讨论用户体验。当我们浏览一个网站或者使用一个软件的时候,如果它的界面组织的不够友好,我们就会感到沮丧,离开,而且不想再次回来。程序员修改程序的时候所产生的体验就是对代码的体验。他们时而因为代码的精彩而感到兴奋;时而因为代码的结构混乱而愤恨不已;时而因为某个精彩的方案而感到激动;时而因为某个糟糕的命名而焦头烂额。就像网站的用户体验包括页面布局、文字、图片、链接等各种属性一样,代码通过其命名、注释、风格和结构给程序员带来不同的体验。 糟糕的代码不仅仅给程序员带来糟糕的体验,它同时带来质量问题,也让人们为它付出额外的心血,却难以产生额外的价值。对于程序员来说,劣质.
阅读全文
摘要:为了能够更好地改进软件项目,开发团队往往会统计一些数据,用以分析总结,并作为下次开发改进的依据。那么在软件开发中,你的团队会统计哪些数据呢?这些数据又如何为下次项目改进提出帮助呢?本文通过对软件开发过程中统计的一些数据进行分析,让读者能够从本质上重新理解统计数据的方法和意义。1. 生产率 统计生产率是为了能够了解开发团队的生产效率在整个行业中处于何种水平。长期统计之后可以为下次工时估算提供依据。 单位:每人月可以生产的千行代码数,KLOC/MM 统计了生产率对改进工作有什么样的帮助呢?支持统计这个数据的人说,统计生产率是为了和社会平均生产效率进行对比,从而分析改进方案。当自己的团队远远高于社会
阅读全文