《系统分析与设计方法及实践》一1.1 什么是软件

简介: 本节书摘来华章计算机《系统分析与设计方法及实践》一书中的第1章 ,第1.1节,窦万峰 主编 宋效东 史玉梅 李东振 赵菁 等参编更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.1 什么是软件

软件分析与设计的主旨是以工程化的思想进行软件开发,以便生产出高质量和高效率的软件系统,即软件分析与设计研究的基础就是软件。那么,软件是怎么定义的呢?它有哪些特性呢?

1.1.1 软件定义与特性

软件是计算机系统中与硬件系统相对应的部分,包括一系列程序、数据及其相关文档的集合。在这里,程序是按照特定顺序组织的计算机数据和指令的集合;数据是使程序能正常执行的数据结构;文档是与程序开发、维护和使用有关的图文资料。软件系统的核心是程序,而文档则是软件系统不可分割的组成部分。image

要理解软件的真正含义,首先需要了解软件有哪些特性。人们利用结构化的思想创造出的软件是逻辑的,而不是有固有形态的实体,所以,软件具有以下特性:
1)复杂性:软件是一个庞大的逻辑系统,比任何人类构造的其他产品都复杂,甚至硬件系统的复杂性和软件系统比起来也是微不足道。软件主要依靠人脑的“智力”构造出来,多种人为因素使得软件难以统一化,增加了其复杂性。软件的复杂性使得软件难以理解、生产、维护,更难以对生产过程进行管理。
2)一致性:软件系统必须和运行软件的硬件系统保持一致,这是由软件系统对硬件系统的依赖所决定的。如果硬件系统是“现有”的,那么软件系统必须与现有硬件系统对接。由于计算机的软件和硬件是具有功能互换性的,所以也可能出现用软件系统来替代硬件系统部分功能的情况。
3)抗磨损性:软件系统的运行周期与一般的器械设备系统截然不同,因为它不存在磨损和老化的问题。事实上,软件不会磨损,但它却会退化,因此,软件在其生命周期中一般都需要进行多次维护。图1-1给出了软件系统的理想故障曲线和实际故障曲线。
4)易变性:软件在生产过程中,甚至在投入运行之后,也可以再改变。软件必然需要变化,这是软件的特有属性。改变软件往往可以收到改变或者完善系统功能的效果,且比更换硬件系统容易,使得软件系统易维护、易移植、易复用。但是,修改软件导致软件始终在“变”,这种动态的变化不仅难以预测、难以控制,还可能对软件的质量产生负面影响。
5)移植性:软件的运行受计算机系统的影响,不同的计算机系统平台可能会导致软件无法正常运行,这里就涉及软件的可移植性了。好的软件在设计时就考虑到软件如何应用到不同的系统平台。
6)高成本性:软件系统的开发是一个复杂的过程,显然,软件系统的成本非常高昂。

1.1.2 软件的演化

软件的发展经历了一个演化的过程,自从20世纪40年代生产出世界上第一台计算机后,伴随而生的就是程序。纵观前后的几十年,软件的演化大致经历了4个阶段:
1)程序设计阶段(第一阶段):从1946年到20世纪60年代初,是计算机软件系统发展的初期,其主要特征是程序生产方式为个体手工方式。
2)程序系统阶段(第二阶段):从20世纪60年代初到70年代初,软件工程学科诞生。当时,程序的规模已经很大,需要多人分工协作,程序的开发方式由个体生产发展到了小组生产,其开发与维护费用以惊人的速度增加。因此许多程序系统后来根本不能维护,最终导致了严重的软件危机。
3)软件工程阶段(第三阶段):从20世纪70年代中期至80年代中期,软件工程师把工程化的思想加入软件系统的开发过程中,用工程化的原则、方法和标准来开发与维护软件。
4)面向对象阶段(第四阶段):从20世纪80年代中期至今,面向对象的方法学受到了人们的重视,促进了软件业的飞速发展,软件产业在世界经济中已经占有举足轻重的地位。
随着计算机的普及,程序的稳健性和易读性受到了广泛的关注,于是,程序从个人按自己意图创造的“艺术品”转变成了能被广大用户接受的“工程化”产品。由于外部环境和用户需求的不断变化及软件开发技术的不断发展,注定了软件系统只有不断的演化才能适应用户的新需求。
从整个系统的角度看,开发软件系统的目的是为了满足用户的需求,提高生产率,因此软件系统的需求仍是软件发展的动力。早期的程序开发者只是为了满足自己的需要,这种自给自足的生产方式仍然是其低级阶段的表现。进入软件工程阶段以后,软件系统的开发具有社会属性,它要在市场中流通以满足更多用户的需要。
软件演化过程的各个阶段也有不同的特征,在这些阶段中,软件系统开发的范围从只考虑程序的编写扩展到涉及整个软件生命周期。

1.1.3 软件危机

在软件技术发展的第二阶段,随着计算机硬件技术的不断进步,人们要求软件能与之相适应。然而软件技术的进步一直未能满足提出的要求,导致问题不断积累,形成了日益尖锐的矛盾。这就导致了软件危机。
这场软件危机主要表现在:软件系统的规模越来越大,复杂度不断增加,软件系统的需求量也日益增大,且价格昂贵,供需差日益增大。而软件系统的开发过程是一种高密集度的脑力劳动,软件系统开发常常受挫,质量差,很难按照指定的进度表来完成指定的任务,软件系统的研制过程很难管理,往往失去控制。软件系统开发的模式及技术已经不能适应软件系统发展的需要,因此导致大量低质量的软件涌向市场,部分软件花费了大量的人力、财力,有的软件系统甚至在开发过程中就夭折了。例如,伦敦股票交易系统当初预算4.5亿英镑,后来追加到7.5亿英镑,历时五年,但最终还是失败,导致伦敦股票市场声誉下跌。我们称软件开发和维护过程中所遇到的这种严重问题为软件危机。

1.1.4 软件危机的解决途径

在软件危机相当严重的背景下,软件工程产生了。在引入工程化的思想后,人们总结了出现软件危机的原因并提出了相应的解决对策。
在软件开发的初期阶段,需求提得不够明确,或是未能得到确切的表达。开发工作开始后,软件开发人员和用户又未能及时交换意见,造成开发后期矛盾的集中暴露。如果前期的需求分析不到位,认为软件的开发仅仅是编写程序,很有可能导致后期开发的软件达不到客户的要求,并进一步导致软件的二次开发。
需求分析后,要做好软件定义时期的工作,这样可以在一定程度上降低软件开发的成本,同时又在无形中提高了软件的质量,毕竟软件是一种商品,提高质量是软件开发过程中的重中之重。
开发过程要有统一的、公认的方法论和规范指导,参加的人员必须按照规定的方法论进行开发。重视设计和实现过程的资料,不要忽视每个人的工作与其他人的接口,以便后期能够较好地进行软件的维护工作。由于软件是逻辑部件,开发阶段的质量较难衡量,开发过程管理和控制同样不易实现,这就需要开发人员必须有统一的软件开发理论来指导。
软件工程师必须在测试阶段做好充分的检测工作,提交给客户高质量的软件。要借鉴软件开发的经验,积累与软件开发有关的数据,确保开发工作按时完成。

相关文章
|
敏捷开发 测试技术
《软件测试技术实战 设计、工具及管理》联载-52
《软件测试技术实战 设计、工具及管理》联载-52
68 0
|
存储 云安全 安全
软件测试技术实战 设计、工具及管理》联载-27
软件测试技术实战 设计、工具及管理》联载-27
65 0
|
安全 测试技术 UED
《软件测试技术实战 设计、工具及管理》联载-50
《软件测试技术实战 设计、工具及管理》联载-50
53 0
《软件测试技术实战 设计、工具及管理》联载-50
|
存储 分布式计算 网络协议
软件测试技术实战 设计、工具及管理》联载-28
软件测试技术实战 设计、工具及管理》联载-28
118 0
软件测试技术实战 设计、工具及管理》联载-28
|
监控 测试技术 Linux
软件测试技术实战 设计、工具及管理》联载-25
软件测试技术实战 设计、工具及管理》联载-25
66 0
|
存储 监控 测试技术
软件测试技术实战 设计、工具及管理》联载-32
软件测试技术实战 设计、工具及管理》联载-32
82 0
|
敏捷开发 测试技术
《软件测试技术实战 设计、工具及管理》联载-2
《软件测试技术实战 设计、工具及管理》联载-2
73 0
《软件测试技术实战 设计、工具及管理》联载-2
|
SQL 测试技术 数据库
《软件测试技术实战 设计、工具及管理》联载-16
《软件测试技术实战 设计、工具及管理》联载-16
57 0
《软件测试技术实战 设计、工具及管理》联载-16
|
敏捷开发 测试技术 UED
软件测试技术实战 设计、工具及管理》联载-29
软件测试技术实战 设计、工具及管理》联载-29
67 0
|
测试技术
《软件测试技术实战 设计、工具及管理》联载-10
《软件测试技术实战 设计、工具及管理》联载-10
78 0
《软件测试技术实战 设计、工具及管理》联载-10