在细化阶段已经化解了主要质量风险以后,就可以进入构建阶段了。在这个阶段,风险的主要矛盾将发生转移,人们的关注点开始转向进度(交付时间)。而良好的架构和精细的设计对于缓解这些风险扮演着重要的角色。
为了发现进度风险,首先需要关注的就是哪些因素会影响进度?这些因素很对,但什么才是影响进度最大的风险呢?无数事实告诉我们,初期过于乐观的计划,过程中的需求变更,项目开发人员的、变动,都有可能对按期交付这个目标造成很大的风险。在这些因素中排第一位的,当属人们的思维方式。
1,处理庞大软件项目软件工程方法
很多组织都喜欢挑战复杂的大型项目,殊不知规模越大,项目失败的可能性就越大,一般规模扩大一倍,失败的可能性往往会增加十倍。但是我们所遇到的项目往往正是由于其规模和复杂性才具有价值,哪些策略可以帮助我们控制项目的规模呢?
l 抓住真正的需求:软件项目的交付目标表现为一组需求,需求定义了软件的功能和质量。但客户真正关注的需求是什么?不能为客户创造价值的需求应该受到质疑,很多情况下这类需求应该考虑推迟或者放弃。
l 分而治之:寻找机会把大项目分成小项目,比起由大量相互依赖的庞大功能组成的大项目,几个项目独立的小项目更容易管理。
l 设置优先级:业务环境瞬息万变。大型项目在完工之前,需求会改变很多,有些需求会随着业务的变化甚至被取消,但是关键需求通常会维持不变。理清需求的优先级,优先实现最关键的需求。
l 尽快交付:在看到演示产品之前,多数客户都不知道自己想要什么。由于不同的人对需求不同的理解,往往会把需求想得过于复杂,很可能与真正的需求不沾边。让客户试用演示的产品,没准会发现其实事情没那么复杂,可能会有更简单的解决方案。首先实现最重要的需求,尽快获得客户反馈,越快越好。
越复杂的项目越难成功实现。良好的架构有助于缩小项目规模,通常也会降低设计与实现的复杂性,这是成功交付的最有效途径。从工程方法来说:
首先,不论什么情况,必须把一个大项目分成若干相对独立能够持续交付的部分,这样就可以把大问题分成若干小问题,在每一个小部分可以用线性方法来处理,这样就简化了问题,提高了效率。
其次,如果前期需求比较清楚,则可以使用下面的分段线性化模型。由于限制了每个阶段的规模和复杂度,在每个里程碑阶段中都可以用线性方法来处理。在每个里程碑必须进行一次集成,这也是持续集成这个概念提出来的科学原理,被称之为架构驱动的增力量开发。需求的开发需要支持这种分阶段处理问题的方式。
最后,如果前期需求不是太清楚,项目带有强烈的创新成分,可以使用下面具有强迭代的逐步求精的模型:在每个迭代期间,由于限制了范围,线性模型仍然在起作用,被称之谓问题驱动的迭代开发,需求开发就需要支持这种逐步求精的方式。
这两种工程方法都可以做得很正规,而且是由计划来控制。这两种方法的共同特点就是通过分解,把大问题变为小问题,而且代表着两种极端情况,大部分项目处于这两者之间,形成一种混合体。
由于每一个阶段是一个小型的独立体,就需要考虑每一部分的关系,通过事先定义稳定的接口,使每一部分的变化不至于辐射到其它部分去,在这个背景下,接口也成为一种需求。
这种通过可演示的结果来评估自己目前身在何处,也使我们对于项目的实际进展更加有把握,对需求的理解也更透彻。迭代开发的评估比传统方法会更频繁,客户的参与程度会更高,而不是把问题全部堆积到项目后期来解决,这样就降低了项目的风险,通过早期发现需求得不确切之处,引领项目达到一个更加成功的目标。
2,利用持续集成缓解交付风险
我们经常遇到的困惑就是:产品集成是最后统一集成,还是分阶段持续集成?我经常看到开发人员在交付阶段在没日没夜的加班,为什么到了交付阶段就要加班?我提的问题是:在交付阶段不断加班、修修补补、赖赖巴巴的满足要求,这样能保证产品质量吗?
1)早期交付持续集成
将集成活动放到每个迭代周期,就可以利用每次迭代结束的演示来推动项目的进展。缺陷就可以在早期暴露出来,便于早期修复缺陷而不至于到后期发现缺陷束手无策。这些所谓缺陷有的是由于设计上的,更多的是由于双方对需求的理解不同造成的。在这样的迭代过程中,架构也会有一个不成熟的原型逐步成长为一个稳定的骨架,最后成长为一个可发布的产品。从认识论的角度,软件开发就是一个人们认识事物的过程,这也是一个对问题的理解逐步深入螺旋形上升的过程,符合人们认识事物的规律。
2)架构级别的需求与设计
如何避免后期大范围长周期的系统集成呢?利用架构驱动的开发是一个值得推荐的方法。在大型复杂项目中使用迭代开发的时候,软件开发团队应该首先完成架构,架构是一个产品并且早期经过验证,这样一来就可以早期检测出设计的瑕疵并且得到解决。这种开发风格的结果,就是每个迭代周期快要结束的时候都有集成活动,以避免到了后期那种爆炸式的集成。所以在项目开始之初,我们应该首先透彻理解架构级别的需求,进行详细的架构设计,并且把它稳定下来,这样就能降低废品率和返工率,而且早期缓解高风险。
3)架构的思想与过程的思想
这些过程思想能够得以实施的先决条件,就是架构设计思想和方案要与这种过程思想匹配。事实上设计思想与管理过程上的不匹配,往往是项目面临的最大风险。无数事实告诉我们,越是早期发现和解决风险,项目的成功率就越高,项目的成本也就越低。