软件的复杂性

引用声明:电子工业出版社《面向对象分析与设计》第三版:修订版 Grady Booch等著的书籍内容,仅供学习使用。

复杂性

一. 为什么软件在本质上是复杂的?

软件固有的复杂性有四个原因:
  1. 问题域的复杂性
    比如公共交通购票系统需求(经常出问题的12306,不仅要处理正常用户购票,还要抗住第三方软件的频繁抢票)。
    比如航天电子系统需求,从功能上就很难理解,还要加上所有的非功能需求,如可用性、性能、成本、健壮性和可靠性,不能遇到突发问题直接宕机吧,那就不是航天了,而是拿人命开玩笑。
    有的客户只是对想要的软件系统有一个模糊的想法,和开发者之间存在沟通上的分歧。
    软件系统在开发过程中经常发生需求改变;产品经理和开发程序员之间大打出手也不是一次两次了,“小明,其他同类型的产品做得挺好,今晚加班搞下,明早上线。”,“这种坑爹需求谁爱做谁做,老子不伺候了”。

  2. 管理开发过程中的困难性
    人员协调困难,怎么合理安排人手,投入多少骨干和萌新,不同的开发者能承受多少工作量?
    风险管控困难,怎么控制需求管道,不超出团队承受能力范围。怎么控制交付时间点,保证合理的开发和测试时间?
    质量维护困难,怎么维持设计的一致性和完整性?怎样沉淀团队经验和解决方案?假如前期开发管理不到位,测试阶段问题爆炸怎么处理?线上问题多影响开发进度怎么办?如何复盘和回溯问题不再重蹈覆辙?

  3. 软件中随处可能出现的灵活性
    一千个人有一千个哈姆雷特,市场上解决某一问题的方法有多个,拿开发语言来说有java、c、python、golang等等,数据库方面有关系型数据库oracle、mysql、sqlserver,也有非关系型的NoSQL。
    怎样进行技术选型 ,怎样进行基础建模和算法选择?怎样实现团队内部语义的统一,概念设计怎么开展?

  4. 描述离散系统行为的问题
    离散系统中的状态转换不能用连续函数来建模。外部事件有可能影响到系统内部状态的任何部分。就像你说自己是老司机,车在这段路跑了十几年闭着眼睛都不会出问题,然而某天从路边窜出一头野猪把你车撞坏了。

二. 复杂系统的5个属性

  1. 层次结构:复杂性常常以层次结构的形式存在。
  2. 相对本原:复杂系统中基础组件取决于系统观察者的判断
  3. 关注点分离:组件内部作用和组件间作用的差异
  4. 共同模式:复杂系统具有共同的模式,组件复用。
  5. 稳定的中间形式:复杂系统都是从能工作的简单系统演变而来的,从头设计的复杂系统根本不能工作。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值