一、本文背景
在我转产品之前,虽然我混迹IT行业,做过实施和售前,也跟研发打过交道,但我一直都不知道一个软件是怎么开发出来的。直面客户,扛着压力,在对程序一无所知的情况下,很容易产生一些想法:为什么产品的结果是这样?为什么产品开发的速度不能再快一点?为什么程序员经常加班?他们都在忙些什么?测试是不是就是每天忙着点点程序看会不会报错?
所以本文面向的对象是,适合和我当初一样对软件开发一无所知的IT从业者(或者有兴趣者),另外也欢迎我的程序员小伙伴和测试小伙伴,因为你们也懂这个过程,所以我们可以作更多探讨,这个过程中我们可能会发现大家对同一件事的理解并不一致,也许经过碰撞,我们能共创智慧的果实。
二、CMMI的组织成熟度
在讲解正式流程之前,我们先花一些笔墨讲一下CNMI(Capability Maturity Model Integration)组织成熟度,这样读者可以大概知道我司开发的水平,也可以知道本文撰写的基本根据。
CMMI是美国产业界、政府和卡内基梅隆大学软件工程研究所于2002年推出的集成了软件工程、系统工程、集成化产品和过程开发等学科的综合成熟度模型。模型总共分五级,目前我司是CMMI5级,具体每个等级达到的水准请见下图。
三、软件开发流程
现在开始文章重点,目前我司一个完整的开发流程是什么样的?(本文的流程适用于纯开发型项目,涵盖服务端、APP、H5的开发)
目前可以大致分为四个里程碑:
一、需求;二、设计;三、编码;四、测试;五、上线。
里程碑仅是一个比较重要的节点,其实每个节点再拆开,还有许多关键的步骤以及重要的产物输出,下面先简单说一下每个过程:
1、需求
包括需求梳理、需求设计,需要产品经理输出《产品原型》并进行讲解,研发根据产输出的线框图,完成《概要需求》并评审;
2、设计
包括UI界面(含交互)及研发设计,需要UI界面设计师输出《界面效果图》,研发根据界面效果图再输出《需求规格》,评审过后进行研发上的一系列设计,包括《概要设计》《通讯协议》;
3、编码;
这个阶段是研发真正去写代码的阶段,写代码的依据就是前两个阶段的过程产物,目标就是完成需求规格的内容。
4、测试;
测试过程主要是测试工程师来发挥力量,不过程序员也需要根据测试包括最基础的功能性测试、压力测试等,功能性测试的依据是测试根据需求撰写的《测试用例》来的。
这里在多啰嗦两句,其实测试的主要目的不是为了找出软件有哪些地方无法正常运行,那是最基础的找bug,测试更主要的工作应该是测出功能与需求不一致的地方。
5、上线
产品上线前通常会有一些准备工作,包括相关数据的维护,培训资料的准备等。上线前通常会有一段试运行的时间,最后才正式上线。
未完待续……
附:后面的内容,主要想更详细地讲解每个过程,写的过程可能更多的是站在前端、站在老板站在上级角度来写的。这几个利益方都会关注的一个点是——怎么控制成本?而要控制成本,则开发过程要尽量一步到位,减少返工;要实现减少返工,则要在每个阶段要有相应的成果及评审。我接下来要写的就是我们应当输出什么成果,我们怎么做评审。
最后,在说完这些基本事项之后,再提出一些想要探讨的开发过程问题。