当前位置:文档之家› 第1章_软件工程概述

第1章_软件工程概述



软件具有如下特点:
– 软件是一种逻辑实体,不是具体的物理实体。
– 软件产品的生产主要是研制。 – 软件具有“复杂性”,其开发和运行常受到
计算机系统的限制。 – 软件成本昂贵,其开发方式目前尚未完全摆 脱手工生产方式。 – 软件不存在磨损和老化问题,但存在退化问 题。
失效率
失效率
实际曲线 理想曲线
1.3.4 软件工程不同于信息系统工程
信息系统是应用软件的一个分支。因为它的应用面极其 广泛,市场前景巨大,如管理信息系统(MIS)、企业资 源计划系统(ERP)、办公自动化系统(OA)、金税(税 务)系统、金关(海关)系统、金卫(医疗卫生)系 统、保险系统、金融系统、证券系统、港口系统、民 航系统、物流系统、公安系统、人口普查系统、电信 计费系统、数字化城市系统等,所以对它的研究特别 引起人们的重视。 信息系统工程是专门研究信息系统建设的工程,它是软 件工程的一个分支,或者说它是软件工程的一部分。 信息系统建设除了需要遵守软件工程的普遍原理和方 法之外,还要遵守自己的特殊原理和方法,所以在讨 论软件工程时也附带讨论一下信息系统工程。 信息系统工程是一门新兴的工程学科,目前还不十分成 熟,正处在发展之中,很多名词和定义还不规范,需 要人们进一步探索。

70年代初,自“软件工程”这一概念提出以来,主要围绕软 件过程以及软件复用,开展了有关软件生产技术和软件生产 管理的研究与实践。其主要成果有:提出了应用广泛的面向 对象语言以及相关的面向对象方法,大力开展了计算机辅助 软件工程的研究与实践。尤其是近几年来,针对软件复用及 软件生产,软件构件技术以及软件质量控制技术、质量保证 技术得到了广泛的应用。目前各个软件企业都十分重视资质 认证,并想通过这些工作进行企业管理和技术的提升。 软件工程(Software Engineering)的框架可概括为:目标、过 程和原则。 (1) 软件工程目标是生产具有正确性、可用性以及开销合 宜的产品。正确性指软件产品达到预期功能的程度。可用性 指软件基本结构、实现及文档为用户可用的程度。开销合宜 是指软件开发、运行的整个开销满足用户要求的程度。这些 目标的实现不论在理论上还是在实践中均存在很多待解决的 问题,它们形成了对过程、过程模型及工程方法选取的约束。
1.3.6 软件工程涉及的人员
1.3.7 什么是好的软件
表1.1 优良软件具有的属性
含义 产品特性 可维护性
软件必须能够不断进化以满足客户的需求变化,这是软 件产品最根本的特性,因为工作环境是不断变化的,软 件也必然要跟着变化
软件可依赖性还包括一系列特性,包括可靠性、保密性、 安全性。可靠的软件在系统失败的情况下,也不会导致 人员伤亡和经济损失 软件不要浪费内存和处理器等系统资源,因而有效性应 包括响应时间、处理时间、内存利用率等方面
软件工程围绕工程设计、工程支持以及工程管理,提出了以下 四项基本原则: (1) 选取适宜的开发范型。 该原则与系统设计有关。在系统设计中,软件需求、硬件需求 以及其他因素之间是相互制约、相互影响的,经常需要权衡。 因此,必须认识需求定义的易变性,采用适宜的开发范型予 以控制,以保证软件产品满足用户的要求。 (2) 采用合适的设计方法。 在软件设计中,通常要考虑软件的模块化、抽象与信息隐蔽、 局部化、一致性以及适应性等特征。合适的设计方法有助于 这些特征的实现,以达到软件工程的目标。 (3) 提供高质量的工程支持。 “工欲善其事,必先利其器”。在软件工程中,软件工具与环 境对软件过程的支持颇为重要。软件工程项目的质量与开销 直接取决于对软件工程所提供的支撑质量和效用。 (4) 重视开发过程的管理。 软件工程的管理,直接影响可用资源的有效利用,生产满足目 标的软件产品,提高软件组织的生产能力等问题。因此,仅 当软件过程得以有效管理时,才能实现有效的软件工程。
1.3.3 软件工程不同于传统工程
软件工程是更广泛的系统工程的一部分。因此,软件设计者必 须理解整个系统的需求,并且必须具备在系统所应用的领域 为软件应用环境提供接口的能力。同时,软件设计者必须理 解有些数据,信息用硬件处理比用软件更好,有些处理根本 不需要(或不能)实现自动化。 系统工程(system engineering)研究管理复杂系统内部的工作原 理。在传统工程(traditional engineering)学科中使用系统工 程已经有很长时间了。现有的系统工程原理是用数学模型形 式化了的。这些模型被确认正确后就应用于工程化的产品中。 而软件产品则不同。软件是非物质的,经典的数学模型只适 用于一部分而不是全部的软件。 软件工程不必一味地模仿传统工程,它们是完全不同的。 软件设计者必须做好准备去开发能适应环境变化的软件。这是 软件应该具备的性质。软件必须是可支持的(supportable), 即可理解的、可维护的和可扩展的,这就是软件不同于桥的 地方,也是软件工程不同于传统工程的地方。
1.3 关于软件工程的问题
1.3.1软件工程不同于计算机科学
从本质上讲,计算机科学研究的是构成计算机和软件系 统基础的有关理论和方法,而软件工程则研究软件制 作中的实际问题。正如电子工程师必须具有一定的物 理学知识一样,软件工程人员同样必须具有一定的计 算机科学知识。
理论上,所有软件工程都应该以计算机科学理论作为坚 实的基础,但实际情况并非如此。软件工程人员常常 必须要用特定的方法去开发软件。对于实际、复杂的 问题,计算机科学的经典理论不可能总是适用的,这 时就需要应用软件工程的方法来解决。
时间
时间
图1.1给出了硬件的失效率曲线,它是一个U型曲 线(即浴盆曲线),说明硬件随着使用时间的增 加失效率急剧上升。 图1.2所描述的软件失效率曲线,它没有U型曲线 的右半翼,表明软件随着使用时间的增加失效率 降低,因为软件不存在磨损和老化问题,然而存 在退化问题。
软件产品有以下两类: (1)通用软件产品 这类软件产品由软件开发机构制作,在市场上公开 销售,可以独立使用。这类软件产品有:数据库 软件、字处理软件、绘图软件以及工程管理工具 等。 (2)定制软件产品 这类软件产品受特定的客户委托,由软件承包商专 门为这类客户开发。这类软件有:电子设备的控 制系统、特定的业务处理系统和空中交通管制系 统等。 这两类产品的一个重要区别在于:在通用软件中, 软件描述由开发者自己完成,而定制软件产品的 软件描述通常是由客户给出,开发者必须按客户 要求进行开发。
1.2软件工程概述


软件工程是一类工程。工程是将理论和知识应用于实践的 科学。就软件工程而言,它借鉴了传统工程的原则和方法, 以求高效地开发高质量软件。其中应用了计算机科学、数 学和管理科学。计算机科学和数学用于构造模型与算法, 工程科学用于制定规范、设计范型、评估成本及确定权衡, 管理科学用于计划资源、对质量和成本进行管理。 早期软件开发的经验是:非正规的软件开发并不奏效。多 数软件项目有时甚至要推迟几年才能完成,而且比预计的 费用高,不可靠,难以维护,总之,做得很差。软件开发 陷入危机,结果是硬件成本在下降而软件成本却呈快速增 长之势,因而必须要有新的技术和方法来控制大型软件系 统固有的复杂性。
1.3.2 软件工程不同于系统工程
确切地说,系统工程应该是基于计算机的系统工程,研 究由软件起主导作用的、有关复杂系统的开发和进化 的方方面面,包括硬件开发、系统决策、过程设计、 系统实施和软件工程等。系统工程人员要做的是描述 这个系统,定义总的体系结构,然后集成各个组件以 完成整个系统。他们较少关注系统各组件(硬件、软 件等)的工程问题。 系统工程的产生比软件工程要早。100多年来,人们已经 描述、集成了复杂的工业系统,如火车、化工厂。随 着软件在系统中的比重不断增大,诸如用例建模、配 置管理等,软件工程技术正被应用于系统工程过程之 中。

ቤተ መጻሕፍቲ ባይዱ

(2) 软件工程过程是生产一个最终能满足需求且达 到工程目标的软件产品所需要的步骤。软件工程过程 主要包括开发过程、运作过程、维护过程。它们覆盖 了需求、设计、实现、确认以及维护等活动。需求活 动包括问题分析和需求分析。问题分析获取需求定义, 又称软件需求规约。需求分析生成功能规约。设计活 动一般包括概要设计和详细设计。概要设计建立整个 软件系统结构,包括子系统、模块以及相关层次的说 明、每一模块的接口定义。详细设计产生程序员可用 的模块说明,包括每一模块中数据结构说明及加工描 述。实现活动把设计结果转换为可执行的程序代码。 确认活动贯穿于整个开发过程,实现完成后的确认, 保证最终产品满足用户的要求。维护活动包括使用过 程中的扩充、修改与完善。伴随以上过程,还有管理 过程、支持过程、培训过程等。 (3) 软件工程的原则是指围绕工程设计、工程支持 以及工程管理在软件开发过程中必须遵循的原则。
1.3.5 软件工程不只是程序设计
软件工程不只是程序设计。复杂问题需要软件工程,单靠 程序设计无法解决复杂问题。复杂系统必须在编程之前 进行设计。像建筑业一样,在建造复杂系统之前必须进 行结构设计。必须用抽象和“分治”的方法对系统进行 模块化。在程序员编写代码之前,对每个模块都要进行 详细说明,并且必须定义与其他模块的接口。 在设计一个系统之前,软件工程师必须了解它的需求。这 就意味着必须做需求分析,而且必须用某种建模语言说 明。最终,软件工程还是一个团队活动,必须对团队进 行管理。因此,项目管理(project management)对软件工 程是有影响的,同时软件工程对项目管理也是有贡献的。 这包括计划、预算和进度、质量控制和风险管理、变更 和配置管理。 总之,软件工程为系统提供一个体系结构的解决方案,包 括设计体系结构组件,将组件集成为一个可操作的系统, 项目管理等。软件工程是一门精妙的学问,程序设计只 是其中一项有用的技能。
1.5.1 结构化开发方法
(1) 结构化分析的步骤 结构化分析(structured analysis,简称SA)与所有的软件分析方法一样, 也是一种模型的确立活动。SA方法就是使用独有的符号,来确立 描绘信息(数据和控制)流和内容的模型,划分系统的功能和行 为,以及其他为确立模型不可缺少的描述。其基本步骤是: ① 构造数据流模型:根据用户当前需求,在创建实体—关系图的基 础上,依据数据流图(DFD)构造数据流模型。 ② 构建控制流模型:一些应用系统除了要求用数据流建模外,通过 构造控制流图(CFD),构建控制流模型。 ③ 生成数据字典(DD):对所有数据元素的输入、输出、存储结构, 甚至是中间计算结果进行有组织的列表。目前一般采用CASE的 “结构化分析和设计工具”来完成。 ④生成可选方案,建立需求规约:确定各种方案的成本和风险等级, 据此对各种方案进行分析,然后从中选择一种方案,建立完整的 需求规约。
相关主题