主要观点:软件工程不存在能大幅提升生产力、可靠性和简洁性的“银弹”,但有许多令人鼓舞的创新在推进。软件本质复杂,具有复杂性、一致性、易变性和不可见性等固有属性,导致诸多问题,如沟通困难、不可靠等。过去的突破解决了偶然困难,如高级语言提高生产力等,但不能根治本质问题。目前被认为可能的“银弹”技术,如 Ada 语言、面向对象编程等,虽有一定作用,但无法成为根治软件问题的关键。而一些有前景的技术,如购买现成软件、需求细化与快速原型法、增量式开发、培养伟大设计师等,能应对软件问题的本质。
关键信息:
- 软件本质属性:复杂性(各部分不同且规模越大元素越多、交互非线性致整体复杂度远超线性)、一致性(需符合多种人为接口致复杂)、易变性(受多种因素影响不断需改变)、不可见性(无现成几何表示难用强大概念工具)。
- 过去突破:高级语言消除偶然复杂性提高生产力等;分时缩短系统响应时间提高程序员效率;统一编程环境方便程序间调用等。
- 潜在“银弹”技术及局限:Ada 语言是高等级语言进步,虽有影响但非根治软件问题的关键;面向对象编程去除偶然困难但不改变设计本质;人工智能中专家系统技术可分离应用复杂性,对软件工程有帮助但实现困难;“自动”编程难推广至普通软件系统;图形编程抽象差、硬件不足难以实现;程序验证不能消除错误且不能提升生产力;编程环境提升边际效益;工作站提升有限。
- 有前景的技术:购买现成软件成本低交付快文档好;需求细化与快速原型法是迭代提取和细化产品需求,是解决软件本质问题的技术;增量式开发自下而上构建软件, morale 效果好;培养伟大设计师,识别、培养顶尖设计师对软件组织成功至关重要。
重要细节:
- 数学和物理科学通过构建简化模型取得进步,而软件本质复杂,抽象模型易忽略本质。
- 高级语言最多提供程序员在抽象程序中所需的构造,语言发展接近用户复杂度但存在工具掌握负担。
- 分时缩短系统响应时间但超过人类可感知阈值后无效益。
- 专家系统技术可分离应用复杂性,在软件测试等方面有应用但知识获取困难。
- 购买现成软件在硬件软件成本比变化后需求增加,电子表格等工具应用广泛。
- 快速原型法通过模拟主要接口和功能让客户测试,迭代开发和规范产品。
- 增量式开发自顶向下构建软件, morale 高易回溯适合早期原型。
- 培养伟大设计师要早期识别、指定导师、制定发展计划、提供互动机会等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。