引用声明:电子工业出版社《面向对象分析与设计》第三版:修订版 Grady Booch等著的书籍内容,仅供学习使用。
复杂性
一. 为什么软件在本质上是复杂的?
软件固有的复杂性有四个原因:
-
问题域的复杂性
比如公共交通购票系统需求(经常出问题的12306,不仅要处理正常用户购票,还要抗住第三方软件的频繁抢票)。
比如航天电子系统需求,从功能上就很难理解,还要加上所有的非功能需求,如可用性、性能、成本、健壮性和可靠性,不能遇到突发问题直接宕机吧,那就不是航天了,而是拿人命开玩笑。
有的客户只是对想要的软件系统有一个模糊的想法,和开发者之间存在沟通上的分歧。
软件系统在开发过程中经常发生需求改变;产品经理和开发程序员之间大打出手也不是一次两次了,“小明,其他同类型的产品做得挺好,今晚加班搞下,明早上线。”,“这种坑爹需求谁爱做谁做,老子不伺候了”。 -
管理开发过程中的困难性
人员协调困难,怎么合理安排人手,投入多少骨干和萌新,不同的开发者能承受多少工作量?
风险管控困难,怎么控制需求管道,不超出团队承受能力范围。怎么控制交付时间点,保证合理的开发和测试时间?
质量维护困难,怎么维持设计的一致性和完整性?怎样沉淀团队经验和解决方案?假如前期开发管理不到位,测试阶段问题爆炸怎么处理?线上问题多影响开发进度怎么办?如何复盘和回溯问题不再重蹈覆辙? -
软件中随处可能出现的灵活性
一千个人有一千个哈姆雷特,市场上解决某一问题的方法有多个,拿开发语言来说有java、c、python、golang等等,数据库方面有关系型数据库oracle、mysql、sqlserver,也有非关系型的NoSQL。
怎样进行技术选型 ,怎样进行基础建模和算法选择?怎样实现团队内部语义的统一,概念设计怎么开展? -
描述离散系统行为的问题
离散系统中的状态转换不能用连续函数来建模。外部事件有可能影响到系统内部状态的任何部分。就像你说自己是老司机,车在这段路跑了十几年闭着眼睛都不会出问题,然而某天从路边窜出一头野猪把你车撞坏了。
二. 复杂系统的5个属性
- 层次结构:复杂性常常以层次结构的形式存在。
- 相对本原:复杂系统中基础组件取决于系统观察者的判断
- 关注点分离:组件内部作用和组件间作用的差异
- 共同模式:复杂系统具有共同的模式,组件复用。
- 稳定的中间形式:复杂系统都是从能工作的简单系统演变而来的,从头设计的复杂系统根本不能工作。
来源:CSDN
作者:u010330303
链接:https://blog.csdn.net/u010330303/article/details/104033448