引用声明:电子工业出版社《面向对象分析与设计》第三版:修订版 Grady Booch等著的书籍内容,仅供学习使用。
复杂性
一. 为什么软件在本质上是复杂的?
软件固有的复杂性有四个原因:
-
问题域的复杂性
比如公共交通购票系统需求(经常出问题的12306,不仅要处理正常用户购票,还要抗住第三方软件的频繁抢票)。
比如航天电子系统需求,从功能上就很难理解,还要加上所有的非功能需求,如可用性、性能、成本、健壮性和可靠性,不能遇到突发问题直接宕机吧,那就不是航天了,而是拿人命开玩笑。
有的客户只是对想要的软件系统有一个模糊的想法,和开发者之间存在沟通上的分歧。
软件系统在开发过程中经常发生需求改变;产品经理和开发程序员之间大打出手也不是一次两次了,“小明,其他同类型的产品做得挺好,今晚加班搞下,明早上线。”,“这种坑爹需求谁爱做谁做,老子不伺候了”。 -
管理开发过程中的困难性
人员协调困难,怎么合理安排人手,投入多少骨干和萌新,不同的开发者能承受多少工作量?
风险管控困难,怎么控制需求管道,不超出团队承受能力范围。怎么控制交付时间点,保证合理的开发和测试时间?
质量维护困难,怎么维持设计的一致性和完整性?怎样沉淀团队经验和解决方案?假如前期开发管理不到位,测试阶段问题爆炸怎么处理?线上问题多影响开发进度怎么办