第一,要“固化”。
软件过程又称“软件生存周期过程”,是软件生存期内为达到一定目标而必须实施的一系列相关过程的集合。说白了,就是软件开发中一系列最佳实践的集合。所谓“固化”,其本质就是把软件开发过程中已被实践反复证明的、符合软件规律的正确做法(最佳实践)沉淀在开发管理流程之中,供后人实践时借鉴、使用。
软件企业是一个天才汇集的地方,是人类智慧最集中的场所之一,同时,由于软件人才的流动性很强,软件企业又是智慧流失最快的地方。我觉得,软件企业要想做大、做强,除了采用好的机制留住人才之外,最重要的是沉淀众人的智慧。而企业沉淀众人智慧有三个载体:第一是知识库,第二是流程,第三是软件资产库(面向领域的软件构架及构件库)。沉淀众人智慧的过程就是“固化”。
有了固化的软件开发管理流程,才有了规范软件开发过程的基础。通过不断地固化软件开发实践中符合规律的正确做法,我们得到了流程规范。然后,用这些流程规范指导新的软件项目开发,并在开发实践中持续改进,从而使得我们的软件开发过程越来越规范。
固化的软件开发实践分为两个层次,一个是制度,一个是指南。制度是公司强制执行的一些流程规范,不可缺失、省略,如公司制定的标准、规范、管理制度等;而指南是一般情况下推荐执行,建议这么做,允许根据项目实际情况适度剪裁、取舍,如公司定义的软件开发过程模型、模板等。实现固化的手段也多种多样,如通过管理制度、定义开发过程、采用软件工具、培训等,根据本人实践体会,采用一些项目管理辅助软件工具,不失为“固化”众人智慧、规范软件开发过程管理的有效手段!
说到“固化”,有的企业走向了另一个极端:僵化。不顾本企业、本项目的实际情况,对ISO9000、CMM、ISO12207等标准盲目地生搬硬套、墨守成规,对其他企业的成功经验不加消化的照搬照抄、教条主义,从而扼杀了项目团队的主观能动性和创造性。殊不知,标准、规范、过程模型、模板是死的,参与项目的团队成员才是规范软件开发过程的主角和灵魂。
第二,要“简化”。
“固化”只是规范软件开发过程的“静态基础”,而“动态管理”对于规范软件开发过程更为重要。
回顾上个世纪70年代,软件开发很简单,因此很容易规范。随着软件项目规模越来越大,软件开发过程越来越复杂,涉及的人、财、物资源也越来越庞大。复杂导致多变,多变带来随意,随意容易使软件开发误入歧途,使开发过程难以规范。所以说规范软件开发过程还必须简化软件开发过程!
说到简化,也有企业走进了“随意化”的误区。*主义、经验主义随心所欲地发挥,口头协议满天飞,时间紧、人手不足是他们抛弃规范、拒绝监督的最佳接口。其实,简化绝不意味着随意化。
如何简化呢?我认为采用基于构件的软件开发方法就是一种有效手段。通过对应用领域的研究(领域工程),提炼领域需求的共性和变化性,刻画领域模型,设计面向领域的体系结构,开发各种构件,从而使应用软件的开发过程更接近于工业化生产流水线,基于体系结构,用各种构件进行组装。简化了的软件开发过程,变化因素更少,更容易规范管理。
第三,要“标准化”。
前面所说的固化、简化都只是单个企业内部的实践行为,而“标准化”则是整个社会范围内的固化和简化行为。技术标准化、管理过程标准化、度量标准化、应用领域内业务的标准化,都是推动整个软件行业内、软件产业链上各个企业规范软件开发过程的前提基础和有力保障。标准,凝聚着众多企业、科研院所的智慧,同时,又大大简化了标准所规范的领域内软件开发过程。当然,标准化也是规范软件开发过程的征途上最漫长、最困难而又最具意义的一步。
总之,失败的软件项目各有其失败,而成功的软件项目都一样:离不开规范的软件开发过程管理。固化、简化、标准化正是规范软件开发过程重要的三个方面。