没有银弹——软件工程中的根本和次要问题
没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步
摘要
软件活动包括根本任务——打造由抽象软件实体构成的复杂概念结构,次要任务——使用编程语言表达这些抽象实体,在空间和时间限制内将它们映射成机器语言。
我认为软件开发中困难的部分是规格化、设计和测试这些概念上的结构,而不是对概念进行表达和对实现逼真程度进行验证。当然,我们还是会犯一些语法错误,但是和绝大多数系统中的概念错误相比,他们是微不足道的。
数学家和物理学家建立模型以简化复杂的现象,从模型中抽取出各种特性,并通过试验来验证这些特性。
软件的根本困难
-
复杂度
-
一致性
-
可变性
-
不可见性
以往解决困难的一些突破
-
高级语言最可能实现的是提供所以编程人员在抽象程序中能想到的要素。
-
分时。主要效果是缩短了系统的响应时间。
-
统一编程环境
银弹的希望
面向对象编程
人工智能
专家系统
专家系统是包括归纳推理引擎和规则基础的程序,它接受输入数据和假设条件,通过从基础规则推导逻辑结果,提出和建议,向用户展示前因后果。
自动编程
自动编程总数成为一种热情,使用现在并不可用的更高级语言编程的热情。
大多数情况下所给出的技术说明本质上是问题的解决方法,而不是问题自身。
图形化编程
程序验证
尽管验证可能减少程序测试的工作量,但却不能省略程序测试
再论没有银弹
那些想看到完美方案的人,其实在心底里就认为它们以前不存在,以后也不可能出现。
层次化,通过分层的模块或者对象
增量化,从而系统可以持续地运行
##《人月神话》的观点:是或非?
我们理解也好,不理解也好,描述都应该简短精炼