面向软件危机:从处理经验中学习
宇宙是离散的吗? 或者是连续的?
这涉及到以何种方式对世界进行程序开发。
1 面向软件危机:其中问题
软件危机软件可以定义为在软件开发期间提出的一系列问题。
而在过去,曾经存在过一次严重的软件危机,这也导致了许多新的方法和事物出现。
这是在1968年的北约会议上“软件危机”一词首次使用。
自1960年代初以来计算机的可用性和效率提高了。人们对计算机的认识提高了,硬件变得更便宜了。
随着更强大的机器和更人性化的操作系统的出现,计算机的应用迅速增长。计算机使用的增加和应用程序的复杂化,对软件的需求也在增加。
人们从简单的编程开始练习,逐渐将重点转移到开发软件系统。然而编写简单程序的技术无法扩展到整个开发软件系统,这导致了软件危机。
软件危机一词用于描述计算机能力迅速增加的影响和要解决的问题的复杂性。因此,复杂性、期望和变化阻碍了软件开发过程,导致软件危机迅速发展。
2 造成软件危机主要问题
软件危机的原因与开发过程相关的所有问题和复杂性有关,导致软件危机的各种因素包括:
- 复杂性问题
软件本质上是复杂的,因为我们试图解决复杂领域中的问题,问题的大小迫使我们以团队的形式工作。
软件是不可思议的建筑材料,离散系统容易出现不可预测的行为,软件系统由许多部分组成,其中许多部分相互进行通信,这种复杂性导致了大型软件项目的许多问题。
- 规模问题:
开发一个有一百行的小型软件的方法不适合大型对象系统。换句话说,用于开发小型系统的方法通常不会扩展到大型系统。
- 软件昂贵而且成本超支:
用户对最终产品的不满意,总是会有缺陷的软件,因为软件是脆弱的。
与硬件相比,开发软件的成本很高。开发软件需要高素质和熟练的人力。
他们必须支付大量资金,这增加了开支。因此,在这种情况下,人力成本是主导成本。
- 软件延迟交付:
术语“延迟”是指软件无法在指定时间段内完成。软件未及时交付的原因有很多包括以上这些。
- 软件不可靠:
不可靠性意味着软件无法执行所需的功能。许多故障是由于引入软件中的错误而发生的。
- 生产力不一致:
程序员的生产能力跟不上市场的需求,对软件开发时间和成本通常都高度地被乐观估计了。
这是由于缺乏对问题及其环境的了解,通常开发的软件不适合系统的预期用途。
- 代码很难维护:
维护围绕着对现有软件的理解,维护者必须花费大部分时间来了解他们想要修改的软件,这将提高软件维护成本。
- 问题区域复杂性的增加:
影响和反映软件复杂性的一些因素,对大型和更复杂的软件系统的需求通常会持续地增加。
比如:
可见的名称(变量、函数等)的数量增加。
对操作时间序列的约束(实时约束)。
内存管理(垃圾回收和地址空间)。
- 重复劳动:
由于大多数软件开发活动缺乏自动化,因此必须人工重复这些努力。人类如何应对日常生活中的复杂性?有些工作甚至无法自动化。
3 软件工程存在的意义就是软件危机
随着计算系统变得越来越大和复杂,对计算机软件的需求增长速度超过了我们生产和维护它的能力。
为了控制这场软件危机,软件开发需要一些有条不紊的方法。
这就是软件工程的用处,为了应对这场危机,“软件工程”被创造出来。
IEEE将“软件”定义为计算机程序、程序、规则以及相关文档和数据的集合。
软件工程一词被定义为“软件开发、操作、维护和退役的系统方法”。
软件工程是一门以处理软件危机问题为目标的学科。
4 使用OO方法解决软件危机
OO在其他范式和实践中有着深厚的历史根基。它的出现是为了解决通常被归类为“软件危机”的问题。
面向对象方法是对客观世界的一种看法,它是把客观世界从概念上看成一个由相互配合、协作的离散对象所组成的系统。信息系统开发的面向对象方法的兴起是信息系统发展的必然趋势。数据处理包括数据与处理两部分。
面向对象的分析方法是利用面向对象的信息建模概念,如实体、关系、属性等,同时运用封装、继承、多态等机制来构造模拟现实系统的方法。
传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程,然后制作对应的数据流图分析数据流。而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同目标是建造一个问题域的模型。在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。在应用时,在类库中选择相应的类。
但是如果应用不当,或者由没有技能、知识和经验的人使用,它并不能解决任何问题,甚至可能使事情变得更糟。它可以是解决方案的重要组成部分,但不是保证或灵丹妙药。
为什么可以解决软件危机:
抽象化,人类通过对细节进行抽象来处理复杂性。这是基于一些特别的现实理由,例如:
正面理由:驾驶汽车不需要内燃机知识,足以将汽车视为简单的交通工具。
负面理由:呆板印象是抽象的负面例子。
为了有用,抽象(模型)必须小于它所表示的内容。比如路线图、地形照片、物理模型比实际物体内容少得多。
软件危机问题在软件开发过程中遇到。现如今目前的软件开发方法中,面向对象的方法占据着主导地位。面向对象方法的主导地位也决定着软件开发过程模型化技术的发展,面向对象的建模技术方法也就成为主导的方法。
一个典型的OO方法雅各布森OOSE方法:
5 小结
当代解决软件危机的方法已经大大增加了,包括面向对象OO,结构化方法,虚拟机,RUP,SOA等等知名方法,大致分为以软件需求完全确认为前提的结构化方法(如瀑布模型);在软件开发初期只能提供基本需求为前提的渐进式开发模型(如螺旋模型等);以形式化开发方法为基础的变换模型。
面向对象方法不断发展,曾经是软件开发方法的一场革命,它代表了计算机程序设计的新的思维方法。
该方法与通常的结构化程序设计不同,它支持一种概念,即旨在使计算机问题的求解更接近人的思维活动,人们能够利用各种面向对象开发语言(如C++,JAVA,C#,Python)充分挖掘硬件的潜力,在减少开销的前提下提供更有力的开发工具。
它们通常具备可重用性好,编程效率高,安全性好,程序运行时系统不容易崩溃和跨平台的特性。
- 点赞
- 收藏
- 关注作者
评论(0)