软件开发复杂度分析

软件开发的本质在于管理复杂度,复杂性源于现实世界的无序、细节、状态和变化。面对这些挑战,开发者需要掌握抽象化思考,寻找OOD与FP之间的平衡,并学会识别及适应变化。通过抽象、设计模式和重构技术,应对软件开发中的复杂性问题。
摘要由CSDN通过智能技术生成

1.软件开发的本质

软件开发的首要难题是什么?需求的收集?技术的选型?项目管理?都没错,但用一个词来总结那就是:复杂度!《Code Complete》中引用了Brooks(没错,就是写出了著名的《人月神话》的那位)论文《No Silver Bullets: Essence and Accidents of Software Engi- neering》里对软件开发复杂度的阐述,按照亚里士多德的哲学观,将事物的属性分为本质(Essential)和附属(Accidental)。本质属性就是一样东西之所以是它的属性,比如车都要有引擎,但引擎是什么型号的就是附属的属性。软件开发一路发展过来,像编程语言、编译器、开发环境等工具方面都有了长足的进步。可直到今天,我们仍然不能说软件开发很简单,所以就如Brooks所说:软件开发本质上是复杂的,所以首要任务就是管理复杂度!那么哪些元素致使软件开发的复杂度这样高呢?下面就以《Code Complete》第五章为资料,加以一些个人的思考,来看一看软件工程复杂的原因、构成以及如何应对。


2.复杂无序的世界

正如前文所说,即便我们有了类似自然语言一般的高级编程语言、最自动化的工具等,也无法消灭软件开发的复杂性。因为我们用期望用软件来解决现实世界中的问题,而非最理想情况下的计算(例如算法书里一个简单的数据结构的伪代码),所以我们要处理各种可能的用户输入,潜在的硬件、网络、磁盘等错误,复杂的业务逻辑和UI展示,以及不断随着时间而变化的客户需求。因为现实世界就是如此,所以复杂度难以避免。那现在就来看看真实世界给我们带来了哪些挑战。

2.1 从原子到星云:细节

软件开发者对自己工作“最引以为傲”的一点可能就是软件开发中横跨的数量级。计算机科学泰斗Dijkstra指出,编程(计算)是唯一横跨9个数量级的智力活动的职业。到今天为止,在一个复杂的大型项目里这个数量级可以很容易就超过15个。任何人,即便是最强大脑,也不可能把一个项目所有的细枝末节都灌入脑海。就像马戏团里的演员,不断地将小球扔入空中再用另一只手接下来,玩的球越多就越容易掉到地上。

2.2 正确性挑战

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值