如上图所示是软件工程的生命周期或者是软件中某个迭代生命周期。构建活动一般滴被认为是包括 详细设计 、 编码调试 、 测试 这些活动的集合。当然这张图只是一个简单大概的示例而已,实际软件开发过程中的会涉及到更多的活动以及更多的参与者,并且每个活着的参与者不止是只有一个。比如测试的步骤细分来说包含了单元测试、系统测试、集成、集成测试等步骤;规划构建的活动可能是由项目经理、产品经理、项目主管等多个参与者共同决议的。
整个软件的生命周期可以看做是由各种活动以及活动参与者构成的食物链,链下游的活动和参与者会受到链上游的活动和参与者影响,每一级的参与者都会把上一级的任务具体化、细化、消化,以供给下一个参与者对应的活动。从食物链的角度看,食物链底端的参与者吃了受污染的食物那么势必是会影响到食物链上端的参与者,构建活动也是类似的。如果构建活动的上游包括问题提出、需求分析、架构设计相关的活动除了差错那么到了构建活动纠正这些差错的代价就会大得多了,比如需求出现了问题,可能导致下游的架构设计、详细设计、编码调试、测试等一系列活动的变更和调整,需要花费更多的时间、人力去做这个调整,比起在需求分析活动中纠正这个错误,到了构建活动发现这个错误来说这个问题就显得相对的致命了,所以这些构建活动的前期准备需要被认真加以对待的。
构建前期的活动包含了 问题的定义
、 需求分析
、 构建设计
,下面分别谈论这些活动所需要的先决条件
何为问题的定义,就是对要解决的问题作出清除的陈述,有以下几个原则需要被遵守
为什么需要遵循以上这些原则呢?还得从实际的软件活动中来看的,比如我在开发过程中遇到一个问题是:Android平台详情页中显示长图的效果比较模糊,这是因为Android平台对图片渲染使用的内存做了限制,长图或者相对比较大的图会被压缩为比较小的图片导致清晰度降低了很多。如果从技术角度看待这个问题,这个问题就会被描述为:“Android平台的长图显示过于模糊,开发人员需要对长图做优化”。前半句是问题描述、后半句是对应问题的解决方案,这是一个反面的例子,因为不止描述了问题,还包含了问题的解决方案,其实这个问题出现的概率是比较小的,可以通过运营手段来处理这个内容,比如长图分割为多图显示、带有图文的长图分解为图文重新排版,这就可以解决该问题了。所以精确不带方案的提出问题的意义其实是十分重大的,可以重新从多角度看待该问题,最终提出合理的解决方案,反之不严格的问题定义限制了方向,导致了最终问题的解决出现偏差。
在上面的 构建的几个先决条件 也提到了这一点
需求变更是客观存在的事实,25%的变革导致的返工占到总量的70%-85%,处理需求的变革可以遵循的一些原则