- 软件开发过程
- 定位问题
- 需求分析
- 规划构建
- 软件架构(或高层设计)
- 详细设计
- 编码与调试
- 单元测试
- 集成测试
- 集成
- 系统测试
- 系统维护
实际开发过程中往往没有这么细致,往往是:需求分解->搭建项目框架->编码->测试,最后开始没有尽头的维护工作。或者一些规范的项目可能会细化的执行这个开发过程,但是构建过程往往被忽略。
这里的构建活动指的是确定需求之后需要着手开发项目,与实际需要开发写代码这中间的过程。这个过程包括:
- 前边的工作已经完成,可以着手构建项目
- 确定测试方式(单元测试需要吗?自测?联调?等等)
- 如何定义类
- 如何定义变量
- 如何优化代码,添加注释、格式化等等
- 如何优化执行
- 包括但不仅仅是一些代码规范的细节
2. 使用隐喻
隐喻即模型,是对抽象事物的具象化、模型化,让我们能容易的理解。软件构建同样是一种抽象的过程,所以使用隐喻能更好的理解。
文字写作模型:fred brooks的《人月神话》十分推崇,这种模型认为软件开发可以看做是一种写作模型,这是一个不断纠错逐步产出的过程。这其中提到了增量开发的思想,显然是十分正确的。但是写作更像是拿出纸笔,凭借灵感想到哪儿写到哪儿,一气呵成,不需要规划、计划。但是软件开发要复杂的多,软件开发是个协作的过程,没有计划(代码规范)会让一个系统内在割裂严重,所以需要计划、规划。这种模型反应了软件开发中的一个过程,但是比较片面,虽有看着有些道理。
培植模型:认为软件开发像是种庄稼一样,播种,浇水,施肥,除草,将一个复杂的过程变成一个小的步骤,强调增量、阶段性开发。但是缺少了对开发过程和方式的直接控制,就是说播种施肥、浇水之后听天由命。与软件开发是不符合的,软件开发应该是明确的,一定要达到阶段性成果的。
生长模型:认为软件开发是像牡蛎孕育珍珠一样,持续不断的、自适应的、增量的。强化增量开发的观点,逐渐添加充实系统,但是太过于步骤化、突出按部就班的概念。
盖房子模型:这其中包括绘制图纸(明确需求、计划构建)、打地基(构建)、建造房屋框架(搭建项目结构)、购买家具(引入已有的工具类、jar、算法等)。总体而言盖房子的过程与软件开发更加贴切。
3.为什么要构建
似乎没有这么复杂的过程,没有隐喻依然能开发软件,似乎并不影响。这也是构建过程容易被忽略的原因之一,同时出了问题好像修复成本比较低。无非就是改改架构,调整下命名规则等等,没有技术上的难度。我个人就真实的经历过:我们开发一个web项目,开始分为首页、专题、审核、后台三个大的模块+后台独立的系统,所以就这样分了controller,所有的专题的内容都写在一个controller,service,mapper中,初期项目代码少好像没问题,随着需求越来越多,类代码越来越臃肿才不得不拆分。但是拆分也不过是机械劳动而已,没有难度,就是要辛苦下。构建不合理带来的问题往往就是这样,不得不改但是没啥难度,所以容易让人忽略。
诚然,需求是持续增加的,一定会到需要重构的程度,因为业务是变化的。但是这种只要稍微想想就能想到的问题,他不可能三个类就能写完一个系统,这是绝对不可能的,但是这种低级错误就是发生了,不是因为水平不行,就是单纯的没有构建过程,上来就写,也不管规范,怎么舒服怎么来,这显然是不行的。
这就是构建的意义,减少体力活,让系统合理。