一、现状分析
我们采用CMMI规范开发已经多年,过程上显的已经非常规范,然而,我们很少思考开发方法问题,那怕是最流行的结构化方法或者面向对象方法,不错,我们过程走的很规范,这是好事,可大家有没有想过一个问题,我们的需求分析、概要设计、详细设计,可能文档写的很好,想的很好,可是当到编码的时候,编码人员却不知道怎么编?具体说就是不知道怎么构件类?构建几个类?或者复制了一个自己以前编写过的项目代码,自己去在那里修改,最后实现需求,也许这样的过程,我们完成了最终产品,也实现了需求,然而,我们的代码质量、代码水平何在?这就比方说,同样一个杯子,都满足了需求,可实际上一个是劣质材料做的,而一个是上等材料做的。软件开发不同于传统产业,传统产业工艺过程非常严格,过程质量好最终质量肯定好;而软件开发不行,它是智力劳动,我们也许CMMI过程很规范,可有没有考虑过这些过程文档是如何反映到最终产品成果(即源代码)中的?实际上我们的过程和最终代码是脱节的。
如上图所示,我们的开发从需求到设计到编码测试,按步就搬的去做,上述问题实际已经存在多年,我很早就提出这个问题,希望在概要设计阶段构建代码框架,只有这样,我们才能保证我们设计的质量原封不动的反映到最终的产品中,不会出现“设计时候规划想象的很美好,可最终编出的代码是一堆垃圾”,这里可能有人说我们有代码评审啊,然而,即使评审发现了问题,去修改了,可效率是何等低下,况且人一般是不愿意去修改自己创造的成果,既然这样我们为什么不一开始就让他创建出好的成果呢,当然,不可能在概要设计阶段构建所有的模块代码框架,于是就有了模板的概念,我们要把影响质量的关键模板功能做出来,成为其他的功能的样板,关键模板功能(即代码框架)做好了,我们的项目就成功了一半。
为此,我早在08年就提出了“基于模板的设计开发方法”,我一直认为:模板化是解决设计与实现脱节,提升开发效率的根本出路。
二 、什么是模板化方法
模板化思想不是我发明的新玩意,它早在活字印刷时代就已经体现。下面我给大家分享网上摘录的一篇内容:话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗性大发,不觉吟道:“喝酒唱歌,人生真爽。…………”。众文武齐呼:“丞相好诗!”于是一臣子速命印刷工匠刻版印刷,以便流传天下。
样张出来给曹操一看,曹操感觉不妥,说道:“喝与唱,此话过俗,应改为‘对酒当歌’较好!”,于是此臣就命工匠重新来过。工匠眼看连夜刻版之工,彻底白费,心中叫苦不喋。只得照办。
样张再次出来请曹操过目,曹操细细一品,觉得还是不好,说:“人生真爽太过直接,应改问语才够意境,因此应改为‘对酒当歌,人生几何?…………’!”当臣转告工匠之时,工匠晕倒…………!
可惜三国时期活字印刷还未发明,所以类似事情应该时有发生,如果是有了活字印刷。则只需更改四个字就可,其余工作都未白做。实在妙哉。
第一,要改,只需更改要改之字,此为可维护;第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用;第三,此诗若要加字,只需另刻字加入即可,这是可扩展;第四,字的排列其实有可能是竖有可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵活性好。
活字印刷的发明创造了模板化思想。那么,回过头来,在开发中模板是什么?答案是:模板是可复用性很强的带有业务功能完整实现场景抽象的功能模块集合。而“基于模板的软件设计开发方法”是一种工作方法模型:“首先运用模板思想将一个大的复杂的任务通过查询历史模板库进行领域分析、相似度分析后,分解归并成若干个有关联关系的小任务集合,然后找出每个集合中的典型任务作为任务模板,对任务模板由高层次的研发人员进行高质量设计开发,最后由低层次的研发人员参考任务模板对任务集合中的其他任务进行CPM式(复制-粘贴-修改)快速开发,最后完成整个任务”。
“基于模板的软件设计开发方法”的关键是模板任务的发现和开发,最大的特点是“模板从任务中来又回到任务中去,是一个循环的过程”。“基于模板的软件设计开发方法”总体开发过程分为三个步骤,即:发现模板任务、开发模板任务和开发常规任务三大块,如下图所示:
[说明]:
1、 接收到任何一件任务,首先需要思考的问题是,发现任务中的模板任务。
2、 开发模板任务就是根据模板任务需求完成最终模板产品的开发,模板产品是最终产品的半成品,但它直接反映出了最终产品的质量,发现模板任务和开发模板任务这个过程是较为复杂的分析过程,是架构师和高级编码人员需要完成的,是智力劳动,占总体开发工作量60%或者以上。
3、 常规任务开发是比较简单的任务开发活动,是在模板任务指导下使用CPM方法完成,常规任务数量大,但是难度低,属于体力劳动,总体工作量仅仅占整个任务开发工作量的40%或者以下,这些常规任务只需要一些普通编码人员就可以完成。
假如我们项目开发没有任何模板,我们的项目怎么做?
假如没有模板,那么,我们所做的一切都是创造发明;
假如都是创造发明,那么,我们所做的一切都依赖于发明者的水平,水平高的发明的质量好,水平低的发明的差;
假如都是创造发明,那么,我敢说我们每个人发明的都会不一样,风格各异;
假如都是创造发明,那么,我们都要从零开始,一个简单的增加操作,辛苦的写上几百行代码;
假如都是创造发明,那么,我们的代码是非常多的,没用的重复的垃圾代码一大堆;
假如都是创造发明,那么,评审和返工工作量是巨大的;
假如没有模板,那么,我们干的很辛苦,可干出的成果是垃圾。
……
由此可以反推,“基于模板的软件设计开发方法”会给我们带来多少好处。
有了“基于模板的软件设计开发方法”的指导,我们会在一开始就下意识的去选择和发现模板;
有了“基于模板的软件设计开发方法”的指导,我们非常方便的创造出高质量的模板;
我们有了模板,我们创造发明的就很少,我们的代码量非常少;
我们有了模板,我们所有的代码质量站在一个很高质量的起跑线上;
我们有了模板,我们的代码风格是一致的;
我们有了模板,我们的测试非常简单和统一;
我们有了模板,评审和返工工作量是很小的;
开发的项目越多,我们的高质量的模板就越多;
我们的模板越多,我们下一个项目开发就越容易;
……
一句话,有了“基于模板的软件设计开发方法”,我们的产品质量和开发效率会得到明显提高。
“基于模板的软件设计开发方法”与CMMI过程规范刚好形成互补效应,CMMI解决了过程的规范性问题,而模板化打通了过程之间成果的联系和脉络,更好的看到了落地的代码质量,CMMI+模板化熟练应用,那么产品质量将有很大的提升。