一行代码导致灾难,一个Bug导致发射失败,一个不合格的电容导致产品寿命缩短。这些看似偶然的事件,偏偏又常常真实地发生了。(参考我们之前的文章)
即使产品设计没有问题,又可能因为不好卖,而没能给公司带来丰厚利润。不但初创的小公司时刻面临生存的威胁,一些巨无霸公司由于产品决策失误,陷入困境甚至倒闭的案例也不鲜见。
人们于是想有没有一种方法,可以帮助我们设计出又好用,又好卖的产品。我们今天介绍一些前人在这方面探索,主要涉及一些开发模型,和开发管理流程。
开发模型指的是软件开发的全部过程、活动和任务的框架,它规定了软件开发的具体活动和任务,并且以清晰直观的方式表达出软件开发的全部过程。简单来说,开发模型是软件开发过程的基础和保障。
开发流程是指软件开发的具体步骤和过程。它包括可行性分析、项目开发计划、需求分析、系统概要设计、系统详细设计、编码、测试等环节。这些环节是软件开发不可或缺的步骤,它们之间的关系密切,相互衔接,以确保软件开发的高效和顺利。
瀑布模型
瀑布模型是最经典的开发模型,又称为线性模型。它把开发过程分解为按顺序进行的六个阶段:计划,需求分析,设计,实现,测试,运行维护。每一个阶段完成后,评审通过,才能开启下一阶段,一级一级向下进行,如同瀑布。用户在最后得到一个可用产品。
迭代模型
一个项目被拆解为多个小项目,每个小项目如同一个瀑布模型,都包括需求分析,设计,实现,测试。每个小项目的完成,就可以认为是产品的一次迭代,虽然还不完善,但用户可以使用。每个小项目可以反复迭代,整个产品也不断完善。SpaceX的猎鹰火箭,就是采用了这种迭代方式开发。所以虽然爆炸了几次,最终还是成功了。而其它的采用传统瀑布模型的公司,很多还没有一次发射。
除了以上这两种,还有不少变种,如快速原型模型,螺旋模型,智能模型,增量模型,喷泉模型,V模型,混合模型,演化模型。
IPD (Integrated Product Development)
IPD的思想来源于美国PRTM公司出版的《产品及生命周期优化法》(Product And Cycle-time Excellence)一书,该书中详细描述了这种新的产品开发模式所包含的各个方面。
IBM公司在上世纪90年代遭遇了一次危机,当时研发经费开支过高,产品上市时间过长,利润下降严重。作为重振公司的一项重要内容,IBM引入了集成产品开发方法IPD。它由7个方面的内容组成:异步开发与公共基础模块、跨部门团队、项目和管道管理、结构化流程、分析客户需求的工具($APPEALS)、优化投资和衡量指标 。其核心为产品开发由市场驱动,强调决策的重要性,更关注做正确的事。
华为在1998年花重金从IBM引入IPD,经过多年优化,成为其飞速成长的基石之一。其它比较知名的公司有美的,VIVO,方太等。
CMMI (Capability Maturity Model Integration)
1987年,由美国卡内基.梅隆大学软件研究所提出CMM,即软件过程成熟度模型,用于评价软件承包能力,并帮助其改善软件质量的方法。后推广至硬件开发,系统集成等更多领域。其核心目的为衡量一个组织的过程能力,并推动其改进。CMMI分为初始级,已管理级,已定义级,已定量管理级,优化级等5个等级,其中优化级为最高等级。
CMMI主要关注执行,也就是正确地做事。它认为控制好了过程,就可以保证产品交付质量。
敏捷开发 (Agile Development)
2001年,烦透了各种开发管理流程,疲于应付各种文档的17名程序员大佬,聚会于犹他州瓦萨奇山中的一个小酒店,扯起了敏捷开发的大旗,并发表了4条宣言:
Individuals and interactions over processes and tools
(有话您直说,甭瞎扯流程。)
Working software over comprehensive documentation
(软件贼好用,文档如废纸。) Customer collaboration over contract negotiation
(客户一点头,合同算个鸟。)
Responding to change over following a plan
(领导一挥手,马上跟着走。)
总之,敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
大公司引入流程,花费巨资的传闻,有点儿让小公司望而却步。但也并不是说只有大公司才需要流程,小公司其实可以根据自身的情况,做一些借鉴。比如项目需求分析,一开始就和客户做深入的交流,为客户周到的考虑,不要到最后发现某个功能没实现,要过认证时才整改。项目需求形成说明书文档,设计实现要跟需求一一对应。另外,开发的每一阶段,做一些评审也是很必要的,特别是开发人员之间的互相检查(Peer Review),可以把很多问题解决在萌芽状态。把开发分解成并行的过程,并进行关键路径分析,可以大大缩短研发周期。