摘要:
和其他工业一样,从经济角度上来说,软件开发注重三个重要的指标Quality 质量Cost 成本Delivery 交货期Q-C-D三个指标综合起来考虑软件项目是否成功。质量 按照bug数量来测量成本 按照投入的工时来测量(以后还会讨论《软件开发按工时收费的荒谬之处》)交货期 按照交货时间来测量一般企业在改进的时候总是困扰于一件事情:QCD三个指标无论如何都无法改进。过去人们在用油纸伞,后来人们用折叠伞。因为折叠伞在:质量成本交货期方面都比油纸伞有优势。在其他的生产制造行业也有同样的例子,比如:电灯和蜡烛,打火机和火柴,等等,不一而足。那么在软件行业也有这样的改进方式吗?答案是肯定的。在软件的几十 阅读全文
摘要:
为了能够减少二次Bug率,一般组织都有一套Bug跟踪流程用来确保Bug修改的正确性。下面是一个典型的Bug跟踪流程。登记Bug -> 原因分析 -> 修改方案 -> 影响性分析 -> 修改 -> 测试 -> 测试组再测试这个Bug跟踪流程基本上会有一个较高的Bug率,我的经验显示,这个流程的二次Bug率在20%左右,即每修改10个Bug,其中有2个可能没修改完全或者是引起新的Bug。于是,一个改进的Bug跟踪流程出现了。登记Bug -> 原因分析 -> 修改方案 -> 方案确认 -> 影响性分析 -> 修改 -> 修改代码 阅读全文
摘要:
等待在软件开发过程中的浪费比例应该是最大的。下面这些种等待,在你的项目中是否也发生过呢?(1)等待客户确认(2)等待上司命令(3)等待环境构筑(4)等待前一个阶段的成果物(5)等待Bug修改完毕(6)等待测试结果(7)等待UI设计图(8)等待不知道什么——莫名其妙的等待其实大可不必发生这些等待。首先,要弄明白发生等待的原因,只有这样才能够找到根本去消除一些不必要的等待。等待是怎么发生的呢?第一种等待工序定义错误造成的。为什么两个工序之间需要空闲时间呢?因为这两个工序是由不同的人来完成的。一个人工作的时候另外一个人必须等待。---------------比如:以Bug修改为例,测试人员登记Bug 阅读全文
摘要:
SQA是Software Quality Assurance的缩写,意为:软件质量保证。通过了CMMI认证的组织往往会设置有专职的SQA人员。有时,他们也有另外一个名称:PPQAProcess and Product Quality Assurance。过程与产品质量保证。这个角色是通过对组织中的各个开发团队的开发过程进行跟踪,统计和总结,来提出全盘改进企业开发能力成熟度的。但是实际上他们并没有起到这个作用。他们的作用恰好相反,是用来拉低企业开发和管理水平的。这就是搅混水的SQA/PPQA的题目由来。我跟踪过一些组织的SQA的工作方式,事实说明他们是拉低企业的开发和管理水平的。那么为什么会产生 阅读全文
摘要:
一般软件开发组织,在软件项目结束时会进行项目总结会,利用项目中的统计数据对项目中发生的成败得失进行总结分析,然后制定出改进计划,以希望在下次项目可以做的更好。然而,多年过去之后,对比一下现在的数据和当初的数据,基本上可以得出一个结论:这么多年没有丝毫改进,甚至还有退步的迹象。这是发生在很多地方的现象。为什么会发生这种现象呢?本人就那些无用的项目总结会以及无用的过程改进建议进行原因分析以及提出解决对策。 项目总结会的原意是遵照戴明环(P-D-C-A)进行改进的一种方式。它通过对项目发生的成败得失进行总结,并且制定详细具体的行动方案,以达到团队能力成熟度提升的目的。 项目总结会要由以下要素构成: 阅读全文
摘要:
软件开发到处都需要英语。对于人英语不是母语来说,英语能力不足直接影响到代码中用到的单词以及语法,以及能够表达的意思。1、单词试试看,下列单词,不查字典能认识几个:a.wildcardb.assertionc.infinited.inherite.concurrentf.offsetg.abbreviationh.acceleratei.cryptoj.cipherk.gregorianl.exponentm.asteriskn.semicolono.flushp.atomicq.EOFr.SSLs.CSSt.pythonu.weak referencev.NaNw.duplicate上述这些单 阅读全文
摘要:
产生劣质代码的另外一个原因是对编程环境的不熟悉。原本想简略讲一讲这一章的,网上关于如何使用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... 阅读全文