当前位置:文档之家› 第一讲软件工程概述.doc

第一讲软件工程概述.doc

第一讲软件工程概述.doc
第一讲软件工程概述.doc

第一讲:软件工程概述

软件的定义

软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。

程序是按事先设计的功能和性能要求执行的指令序列

数据是使程序能正常操纵信息的数据结构

文档是与程序开发,维护和使用有关的图文材料

软件危机

软件危机是指计算机软件开发和维护过程中所遇到的一系列严重问题。概括的说即为:能否满足对软件日益增长的需求?能否维护数量日益增长的现有软件?

软件工程的定义

B o e h m:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料

I E E E:软件工程是开发、运行、维护和修复软件的系统方法

F r i t z B a u e r:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法

软件工程要素

三要素:方法、工具和过程(缺乏一个过程,洗厕所的都有方法和工具,但没有一个好的过程)软件工程方法为软件开发提供了“如何做”的技术

软件工具为软件工程方法提供了自动的或半自动的软件支撑环境

软件生命周期(Life Cycle)

软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生命周期

软件生存期的六个步骤,即制定计划、需求分析、设计、实现、测试及运行维护

软件生命周期:制订计划

确定要开发软件系统的总目标

给出功能、性能、可靠性以及接口等方面的要求

完成该软件任务的可行性研究

估计可利用的资源(硬件,软件,人力等)、成本、效益、开发进度

制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查

软件生命周期:需求分析

对用户提出的要求进行分析并给出详细的定义,得到系统逻辑模型,可用数据流程图、数据字典和简要算法加以表示。

编写软件需求说明书或系统功能说明书及初步的系统用户手册

提交管理机构评审

软件生命周期:软件设计

概要设计—把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应。

详细设计—对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。通常用的H I P O (层次图加输入/处理/输出图)或P D L(过程设计语言)描述。

编写设计说明书,提交评审。

软件生命周期:实现编码

把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”

写出的程序应当是结构良好、清晰易读的,且与设计相一致的

软件生命周期:测试

单元测试,查找各模块在功能和结构上存在的问题并加以纠正

组装测试,将已测试过的模块按一定顺序组装起来

按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,亦可称为验收测试

软件生命周期:运行与维护

改正性维护:运行中发现了软件中的错误需要修正

适应性维护:为了适应变化了的软件工作环境,需做适当变更

完善性维护:为了增强软件的功能需做变更

预防性维护:修改软件为将来的维护做准备

软件生存期模型

软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架

瀑布模型\演化模型\螺旋模型\喷泉模型\智能模型

瀑布模型的特点

演化模型

由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。做两次:

第一次只是试验开发,其目标只是在于探索可行性,弄清软件需求

第二次则在此基础上获得较为满意的软件产品

螺旋模型

螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:

制定计划──确定软件目标,选定实施方案,弄清项目开发的限制

风险分析──分析所选方案,考虑如何识别和消除风险

实施工程──实施软件开发

客户评估──评价开发工作,提出修正建议

螺旋模型的特点

把软件开发过程组成为一个逐步细化的可定义周期(螺旋周期)序列,每经历一个周期,系统就得到进一步的细化和完善;

本质上,具有上述特征的螺旋是一直运转的直到软件退役。有时这个过程处于睡眠状态,但任何时候出现了改变,过程都会从合适的入口点开始;

紧密围绕开发中的风险问题,用风险分析推动软件设计向深一层扩展、求精;

强调持续地判断、确定和修改用户任务目标,并按成本、效益来分析候选的软件产品性质对任务目标的贡献;

可结合采用多种软件开发方法,但究竟结合哪一种方法仍由风险分析来决定。

喷泉模型

迭代

重复\演进

无间隙

各阶段间无明显界限,支持分析和设计结果的自然复用。

适用

面向对象的软件开发过程。

Rational Unified Model

软件工程的基本原则

1、抽象。采用分层次抽象,自顶向下、逐层细化的办法控制软件开发过程的复杂性。

2、信息隐蔽。将模块设计成“黑箱”,实现的细节隐藏在模块内部,不让模块的使用者直接访问。这就是信息封装,使用与实现分离的原则。

3、模块化模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。

4、局部化要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚。这有助于控制解的复杂性。

5、确定性软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。

6、一致性整个软件系统的各个模块应使用一致的概念、符号和术语。程序内部接口应保持一致。软件和硬件、操作系统的接口应保持一致。系统规格说明与系统行为应保持一致。用于形式化规格说明的公理系统应保持一致。

7、完备性软件系统不丢失任何重要成分,可以完全实现系统所要求功能的程度。为了保证系统的完备性,在软件开发和运行过程中需要严格的技术评审。

8、可验证性开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确保系统的正确性。

第二讲:软件分析

需求分析的任务

?需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。

需求分析的任务

?深入描述软件的功能和性能

?确定软件设计的约束和软件同其它系统元素的接口细节

?定义软件的其它有效性需求

?准确地表达被接受的用户要求

?确定被开发软件系统的系统元素

?将功能和信息结构分配到这些系统元素中

弄清需求的分析技巧

需求分析的过程

?问题识别

?分析与综合

?编制需求分析阶段的文档资料

?需求分析评审

需求分析的过程—问题识别

?从系统的角度来理解软件并评审软件范围是否恰当

?确定对目标系统的综合要求,即软件的需求

?提出这些需求实现条件,以及需求应达到的标准

需求分析的过程—分析与综合

?从信息流和信息结构出发,逐步细化所有的软件功能,找出系统各元素之间的关联、接口

特性和设计上的约束,分析它们是否满足功能要求,是否合理。剔除其不合理的部分,增加其需要部分。最终综合成系统的解决方案,给出目标系统的详细逻辑模型。

需求分析的过程—编制需求分析文档

●软件需求说明书

●数据要求说明书

●初步的用户手册

●修改、完善与确定软件开发实施计划

需求分析的过程—需求分析评审

●系统定义的目标是否与用户的要求一致;

●系统需求分析阶段提供的文档资料是否齐全;

●文档中的所有描述是否完整、清晰、准确反映用户要求;

●与所有其它系统成分的重要接口是否都已经描述;

●被开发项目的数据流与数据结构是否足够,确定;

●所有图表是否清楚,在不补充说明时能否理解;

●主要功能是否已包括在规定的软件范围之内,是否都已充分说明;

需求规格说明原则

需求分析的原则

⑴需要能够表达和理解问题的信息域和功能域。信息域包括

◆信息流:数据和控制通过一个系统时的变化方式。两个功能之间的数据/控制传递就

◆确定了功能间的接口。

◆信息内容:单个数据或控制对象,它们构成了某个更大的由软件变换生成的信息的集

合。

◆信息结构:各种数据和控制项的内部组织。

2、以层次化的方式对问题进行分解和不断细化软件的功能域和信息域都能做进一步的分解。

这种分解可以是同一层次上的,称为横向分解;也可以是多层次的纵向分解。

3、要给出系统的逻辑视图和物理视图

◆软件需求的逻辑视图给出的是软件要达到的功能和要处理的数据之间的关系,而不是

实现的细节。

◆软件需求的逻辑描述是软件设计的基础。

◆软件需求的物理视图给出的是处理功能和数据结构的实际表现形式,这往往是由设备

本身决定的。

需求分析方法

?需求分析方法由对软件问题的信息域和功能域的系统分析过程及其表示方法组成

?大多数的需求分析方法是由信息驱动的

?信息域具有三种属性:信息流、信息内容和信息结构。

需求分析方法

?结构化分析方法(S A)

?软件原型化方法

?面向数据结构的J a c k s o n方法(J S D)

?面向数据结构的结构化数据系统开发方法(D S S D)

?面向对象的分析方法(O O A)等

结构化分析方法(Structure Analysis)

?结构化分析方法是一种建模技术

?在模型的核心是数据词典,它描述了所有的在目标系统中使用的和生成的数据对象。围绕

着这个核心的有三种图:

◆实体—关系图(E R D)描述数据对象及数据对象之间的关系;

◆数据流图(D F D)描述数据在系统中如何被传送或变换,以及描述如何对数据流进行变

换的功能(子功能);

◆状态—迁移图(S T D)描述系统对外部事件如何响应,如何动作。

E R D用于数据建模,D

F D用于功能建模,S T D用于行为建模。

原型化分析方法

?在开发初期,要想得到一个完整准确的规格说明不是一件容易的事。特别是对一些大型的软件项目。

?用户往往对系统只有一个模糊的想法,很难完全准确地表达对系统的全面要求。

?软件开发者对于所要解决的应用问题认识更是模糊不清

?随着开发工作向前推进,用户可能会产生新的要求,或因环境变化,要求系统也能随之变

化;开发者又可能在设计与实现的过程中遇到些没有预料到的实际困难,需要以改变需求来解脱困境。

?因此规格说明难以完善、需求的变更、以及通信中的模糊和误解,都会成为软件开发顺利推进的障碍。

?为解决这些问题,逐渐形成了软件系统的快速原型的概念。

原型分类

?在软件开发中,原型是软件的一个早期可运行的版本,它反映最终系统的部分重要特性。

–探索型:目的是要弄清对目标系统的要求,确定所希望的特性,并探讨多种方案的可行性。

–实验型:这种原型用于大规模开发和实现之前,考核方案是否合适,规格说明是否可靠。

–进化型:这种原型的目的不在于改进规格说明,而是将系统建造得易于变化,在改进原型的过程中,逐步将原型进化成最终系统。

原型分析优点:

●增进软件者和用户对系统服务需求的理解,使比较含糊的具有不确定性的软件需求(主

要是功能)明确化。

●软件原型化方法提供了一种有力的学习手段。

●使用原型化方法,可以容易地确定系统的性能,确认各项主要系统服务的可应用性,

确认系统设计的可行性,确认系统作为产品的结果。

●软件原型的最终版本,有的可以原封不动地成为产品,有的略加修改就可以成为最终

系统的一个组成部分,这样有利于建成最终系统。

原型建立技术:

?可执行规格说明

?基于脚本(s c e n a r i o)的设计

?自动程序设计

?专用语言

?可复用(r e u s a b l e)的软件

?简化假设

原型建立技术:

可执行规格说明

?可执行规格说明是用于需求规格说明的一种自动化技术。使用这种方法,人们可以直接观察他们用语言规定的任何系统性行为。包括

?代数规格说明

?有限状态模型

?可执行的数据流图

基于脚本(s c e n a r i o)的设计

?脚本是指用户界面的原型。一个脚本用以模拟在系统运行期间用户经历的事件。它提供了输入─处理─输出的屏幕格式和有关对话的模型。因此,软件开发者能够给用户显示系统的逼真的视图,使用户得以判断是否符合他的意图。

?可在任一脚本中使用一套可复用的软件模块,以表达某一方面的要求。

自动程序设计

?自动程序设计是指在程序自动生成环境的支持下,利用计算机实现软件的开发。它可以自动地或半自动地把用户的非过程式问题规格说明转换为某种高级语言程序。

专用语言

?专用语言是应用领域的模型化语言。在原型开发中使用专用语言,可方便用户和软件开发者在计划中的系统特性方面的交流。

可复用(r e u s a b l e)的软件

?利用可复用的模块,做出适当的组合,就可得到快速构造的原型系统。

?为了快速地构造原型,这些模块首先必须有简单而清晰的界面;其次它们应当尽量不依赖其它的模块或数据结构;第三,它们应具有一些通用的功能。

简化假设

?简化假设是在开发过程中使设计者迅速得到一个简化的系统所做的假设。尽管这些假设可能实际上并不能成立,但它们在原型开发过程中可以使开发者的注意力集中在一些主要的方面。

?在修改一个文件时,可以假设这个文件确实存在

?在存取文件时,待存取的记录总是存在

?一旦计划中的系统满足用户所有的要求,就可以撤消这些假设,并追加一些细节。?数据及数据库需求

?在数据词典中,强调对数据存储结构的逻辑设计,并用数据结构表达数据项之间的逻辑关系。

?但任何一个软件系统都可能有成千上万个数据项,仅仅描述这些数据项是不够的,更重要的是如何把它们以最优的方式组织起来,以满足系统对数据的要求。

?在软件系统中需要处理的数据是现实世界中存在的事物及其关联的反映

E-R方法(E n t i t y-R e l a t i o n s h i p A p p r o a c h)和实体模型

?在需求分析阶段进行数据库逻辑设计过程中,使用E-R图,可定义一个实体模型。?实体模型是现实世界的纯表示,它不涉及数据世界的数据结构、存取路径、存取效率等问题。因此,它可以转换成数据库中的数据模型。

数据结构的规范化

?信息域分析需要确定数据的内容,每个数据项要用表格列出,最后组织成文件的逻辑结构,即面向应用而不是面向存储的结构。

?为了便于数据库的设计,常常要对这种结构做一些简化,其中最常见的一种方法就是规范化技术。

●“规范化”将数据的逻辑结构归结为满足一定条件的二维表(关系)。

●表格中每个信息项必须是一个不可分割的数据项,不可是组项。

●表格中每一列(列表示属性)中所有信息项必须是同一类型,各列的名字(属性名)互异,

列的次序任意。

●表格中各行(行表示元组)互不相同,行的次序任意。

数据库分析

第三讲:软件设计

软件设计任务

?从工程管理的角度来看,软件设计分两步完成。

–概要设计,将软件需求转化为数据结构和软件的系统结构。划分出组成系统的物理元素:程序、数据库、过程、文件等。

–详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。

软件概要设计过程

1.制定规范

在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括:

阅读和理解软件需求说明书,确认用户需要,明确实现的条件,从而确定设计的目标,以及它们的优先顺序。

?根据目标确定最合适的设计方法。

?规定设计文档的编制标准。

?规定编码的信息形式,与硬件,操作系统的接口规约,命名规则。

2.软件系统结构的总体设计

基于功能层次结构建立系统。

●采用某种设计方法,将系统按功能划分成模块的层次结构

●确定每个模块的功能

●建立与已确定的软件需求的对应关系

●确定模块间的调用关系

●确定模块间的接口

●评估模块划分的质量

3.处理方式设计

?确定为实现系统的功能需求所必需的算法,评估算法的性能

?确定为满足系统的性能需求所必需的算法和模块间的控制方式

–周转时间

–响应时间

–吞吐量

–精度

?确定外部信号的接收发送形式

4.数据结构设计

?确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计

?确定输入,输出文件的详细的数据结构

?结合算法设计,确定算法所必需的逻辑数据结构及其操作

?确定对逻辑数据结构所必需的那些操作的程序模块(软件包)

?限制和确定各个数据设计决策的影响范围

5.可靠性设计

?可靠性设计也叫做质量设计

?在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。

6.编写概要设计阶段的文档

?概要设计阶段完成时应编写以下文档:

–概要设计说明书

–数据库设计说明书

–用户手册

–制定初步的测试计划

7.概要设计评审

?可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求

?接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内

?风险:确认该设计在现有技术条件下和预算范围内是否能按时实现

实用性:确认该设计对于需求的解决方案是否实用

?技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达

?可维护性:确认该设计是否考虑了方便未来的维护

?质量:确认该设计是否表现出良好的质量特征

?各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么

?限制:评估对该软件的限制是否现实,是否与需求一致

?其它具体问题:对于文档、可测试性、设计过程..等进行评估

软件详细设计过程

?在详细设计过程中,需要完成的工作是:

●确定软件各个组成部分内的算法以及各部分的内部数据组织。

●选定某种过程的表达形式来描述各种算法。

●进行详细设计的评审。

软件设计的基础

?自顶向下,逐步细化?软件结构?程序结构?结构图?模块化?抽象化?

信息隐蔽

自顶向下,逐步细化

将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。

软件结构

?软件结构包括两部分。程序的模块结构和数据的结构

?软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个问题就解决了

程序结构

?程序结构表明了程序各个部件(模块)的组织情况,是软件的过程表示。

结构图

①模块:模块用矩形框表示,并用模块的名字标记它。

②模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块。

③模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送

给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块

④在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一

个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。

模块化

?软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。

?把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。

?模块是数据说明,可执行语句等程序对象的集合

抽象化

?软件系统进行模块设计时,可有不同的抽象层次。

?在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。?在较低的抽象层次上,则采用过程化的方法。

(1)过程的抽象

在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。

?在软件需求分析阶段,用“问题所处环境的为大家所熟悉的术语”来描述软件的解决方法。?在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。

(2)数据抽象

在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。

信息隐蔽

?由p a r n a s方法提倡的信息隐蔽是指,每个模块的实现细节对于其它模块来说是隐蔽的。

也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。

模块独立性

●模块独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系

统中其它的模块的接口是简单的。

●一般采用两个准则度量模块独立性,即模块间耦合和模块内聚。

模块独立性

●耦合是模块之间的互相连接的紧密程度的度量。

●内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。

●模块独立性比较强的模块应是高内聚低耦合的模块。

模块耦合

非直接耦合\数据耦合\标记耦合\控制耦合\外部耦合\公共耦合\ 内容耦合\ 模块内聚

功能内聚

信息内聚\ 通信内聚\ 过程内聚\ 时间内聚\ 逻辑内聚\ 巧合内聚

软件体系结构

?软件体系结构的三要素

–程序构件(模块)的层次结构

–构件之间交互的方式

–数据的结构

?软件设计的一个目标是建立软件的体系结构表示。将这个表示当作一个框架,从事更详细的设计活动。

软件体系结构

?体系结构设计的第一步是将系统分解为一系列相互作用的子系统。

?在最抽象层次,系统可视为一个块图。图中每个盒子表示一个子系统。

?每个盒子内的盒子表明子系统本身还可分解为子系统。

?箭头表示一个子系统向另一子系统传送数据或控制。

?体系结构块图表示一个系统结构的概貌。软件工程师很容易理解它。

?根据各子系统如何共享数据、如何分布、如何相互交互,可开发更加特定的模型。

体系结构:数据仓库模型

?所有共享数据都存放于数据库中,这些数据可为所有子系统存取。

?每个子系统保有各自的数据库。通过传送消息,可在子系统之间交换数据。

?大量的数据围绕一个共享数据库或数据仓库来组织。

?这种系统主要适用于控制系统,信息管理系统,C A D系统,C A S E工具集。

?这种体系结构包括数据库、超文本系统及数据黑板系统等。它包含两种构件:一是共享的结构化数据;二是所有访问这些数据的操作。

?如果是因为输入数据而引起对共享数据的操作,那么这种控制策略下的体系结构就叫做数据库。

?如果是由共享数据的当前状态触发相应的处理,那么这种体系结构就叫做数据黑板。

?集成的C A S E工具集的体系结构

体系结构:客户机–服务器模型

?分布式系统模型,表明各种数据和处理如何分布到各个处理器上。

?有一组功能各自独立的服务器,为其他子系统提供服务。如打印服务器,文件服务器,编译服务器等。

?有一组客户机,他们调用服务器提供的服务。也可能存在一些客户机可并发执行的客户机程

序。

?有一个网络,使得客户机能够访问服务器。

?客户机–服务器方法可用来实现基于数据仓库的系统。由数据仓库作为服务器提供系统服务。?各子系统作为客户访问数据仓库,但各子系统还有自己的数据管理功能。

?服务器与客户间交换数据以执行处理。

体系结构:抽象机模型

?一个体系结构的抽象机模型也称为分层模型

?模型提供各个子系统的接口

?每一层次提供一组服务,定义一个抽象机

?每一个抽象机提供自己的语言,用以实现上一层的抽象机

?例如,网络协议的参考模型O S I

?抽象机模型支持系统的增量式开发。具有可变更性和可移植性。

?当一个层次开发出来后,就可以为其用户提供有效的某些服务。

体系结构:集中控制模型

?在集中控制模型中,将一个子系统设计为系统控制器,其职责是管理其他子系统的执行。?集中控制模型分为两类:

–控制子系统顺序执行

–控制子系统并发执行

体系结构:调用-返回模型

?此即熟悉的自顶向下的子程序模型。

?控制始于子程序层次的顶部,通过子程序调用,从层次结构较高层的程序向较低层的程序传递控制信息。程序执行结束将向较高层的父程序返回。

?这种程序模型仅应用于顺序系统。

?该模型可以在模块层使用以控制函数或对象。

体系结构:管理者模型

?这种模型应用于并发系统。

?模型中有一个系统构件被设计为系统管理者,它控制开始、终止,并协调其他系统进程。?一个进程可以是子系统,或者模块,它可以与其他进程并行执行。

?这种模型也可应用于顺序系统。管理例程根据某些状态变量的值调用特定的子系统。

体系结构:事件驱动系统

?事件驱动模型是通过外部生成的事件来驱动的。

?事件与简单输入间的区别在于事件的时序存在于事件处理进程控制的外部。

?一个子系统可能需要存取控制信息来处理这些事件,但控制信息通常不确定控制流。

–广播模型

–中断驱动模型

模块分解

?在设计出一个结构性体系结构后,下一步就是将子系统分解为模块。

?在系统分解和模块分解之间没有严格的区别。

?将子系统分解为模块时用到两种模型:

–面向对象模型

–数据流模型

结构化设计方法

?首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。

?然后根据数据流图决定问题的类型。数据处理问题典型的类型有两种:变换型和事务型。

针对两种不同的类型分别进行分析处理。

?由数据流图推导出系统的初始结构图。

?利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。

?修改和补充数据词典。

?制定测试计划。

结构图模块类型

?传入模块─从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。

?传出模块─从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。

?变换模块─它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。

?协调模块─对所有下属模块进行协调和管理的模块。

变换型系统结构图

?变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。?相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、中心变换和输出等三部分组成。

变换分析

变换分析方法由以下四步组成:

–重画数据流图;

–区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分;

–进行一级分解,设计上层模块;

–进行二级分解,设计输入、输出和中心变换部分的中、下层模块。

①在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成之后,才能转向

另一个模块的下层模块的设计。

②在设计下层模块时,应考虑模块的耦合和内聚问题,以提高初始结构图的质量。

③使用“黑箱”技术:在设计当前模块时,先把这个模块的所有下层模块定义成“黑箱”,在设计

中利用它们时,暂时不考虑其内部结构和实现。在这一步定义好的“黑箱”,在下一步就可以对它们进行设计和加工。这样,又会导致更多的“黑箱”。最后,全部“黑箱”的内容和结构应完全被确定。

④在模块划分时,一个模块的直接下属模块一般在5个左右。如果直接下属模块超过10个,可

设立中间层次。

⑤如果出现了以下情况,就停止模块的功能分解:

?当模块不能再细分为明显的子任务时;

?当分解成用户提供的模块或程序库的子程序时;

?当模块的界面是输入/输出设备传送的信息时;

?当模块不宜再分解得过小时。

事务型系统结构图

?它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。

?在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。

事务分析

?在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。

?与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。

①识别事务源

②规定适当的事务型结构

③识别各种事务和它们定义的操作。

④注意利用公用模块

⑤对每一事务,或对联系密切的一组事务,建立一个事务处理模块;

⑥对事务处理模块规定它们全部的下层操作模块

⑦对操作模块规定它们的全部细节模块

软件模块结构改进

?模块功能的完善化

一个完整的模块应当有以下几部分:

①执行规定的功能的部分;

②出错处理的部分。当模块不能完成规定的功能时,必须回送出错标志,出现例外情况的

原因。

③如果需要返回数据给它的调用者,在完成数据加工或结束时,应当给它的调用者返回

一个状态码。

?消除重复功能,改善软件结构

①完全相似:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并

的方法。

②局部相似:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与

它的上级模块合并。

?模块的作用范围应在控制范围之内

–模块的控制范围包括它本身及其所有的从属模块。

–模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。

–如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。

?尽可能减少高扇出结构,随着深度增大扇入。

如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。

应当适当增加中间层次的控制模块。

?避免或减少使用病态联接

应限制使用如下三种病态联接:

①直接病态联接模块A直接从模块B内部取出某些数据,或者把某些数据直接送到模块B内部。

②公共数据域病态联接模块A和模块B通过公共数据域,直接传送或接受数据,而不是通过

应限制使用如下三种病态联接:

③通信模块联接即模块A和模块B通过通信模块T A B L E I T传送数据。从表面看,这不是病态

联接,因为模块A和模块B都未涉及通信模块T A B L E I T的内部。然而,它们之间的通信(即数据传送)没有通过它们的上级模块。从这个意义上讲,这种联接是病态的。

?应限制使用如下三种病态联接:

?模块的大小要适中

模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在50~100左右,保持在一页纸之内,最多不超过500行。?设计功能可预测的模块,但要避免过分受限制的模块

–一个功能可预测的模块,不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果。但是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是

不可预测的。对于这种模块,如果调用者不小心使用,其结果将不可预测。

–如果一个模块的局部数据结构的大小、控制流的选择或者与外界(人、硬软件)的接口模式被限制死了,则很难适应用户新的要求或环境的变更。

–为了能够适应将来的变更,软件模块中局部数据结构的大小应当是可控制的,控制流的选择对于调用者来说,应当是可预测的。而与外界的接口应当是灵活的。

?软件包应满足设计约束和可移植性

为了使得软件包可以在某些特定的环境下能够安装和运行,对软件包提出了一些设计约束和可移植的要求。例如,设计约束有时要求一个程序段在存储器中覆盖自身。当这种情况出现时,设计出来的软件程序结构不得不根据重复程度、访问频率、调用间隔等等特性,重新加以组织。

数据设计

?R.S.P r e s s m a n数据设计的过程

–为在需求分析阶段所确定的数据对象选择逻辑表示,需要对不同结构进行算法分析,以便选择一个最有效的结构;设计对于这种逻辑数据结构的一组操作,以实现各种所期望的运算。

–确定对逻辑数据结构所必需的那些操作的程序模块(软件包),以便限制或确定各个数据设计决策的影响范围。

1.用于软件的系统化方法也适用于数据。

2.确定所有的数据结构和在每种数据结构上施加的操作。

3.应当建立一个数据词典并用它来定义

数据和软件的设计。4.低层数据设计的决策应推迟到设计过程的后期进行。。

5.数据结构的表示只限于那些必须直接使用该数据结构内数据的模块才能知道。

6.应当建立

一个存放有效数据结构及相关操作的库。数据结构应当设计成为可复用的。

7.软件设计和程序设计语言应当支持抽象数据类型的定义和实现。

以上原则适用于软件工程的定义阶段和开发阶段。“清晰的信息定义是软件开发成功的关键”。文件设计

(1)整理必须的数据元素:

(2) 分析数据间的关系:

(3) 确定文件的逻辑设计:

(4)理解文件的特性:

(5)确定文件的组织方式(6)确定文件的存储介质;

(7)确定文件的记录格式;

确定文件记录中各数据项以及它们在记录中的物理安排。

?记录的长度:

?数据项的顺序:

?数据项的属性:

?预留空间:

过程设计

?从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。这就是过程设计的任务。

?在过程设计阶段,要决定各个模块的实现算法,并精确地表达这些算法。表达过程规格说明的工具叫做详细设计工具,它可以分为以下三类:

●图形工具

●表格工具

●语言工具

J A C K S O N设计方法

W A R N I E R设计方法

1、软件测试的目的和原则

软件测试的目的:

?基于不同的立场,存在着两种完全不同的测试目的。

?从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。

?从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。

Myers软件测试目的

(1) 测试是程序的执行过程,目的在于发现错误;

(2) 一个好的测试用例在于能发现至今未发现的错误;

(3) 一个成功的测试是发现了至今未发现的错误的测试。

l换言之,测试的目的是

n想以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。如果我们成功地实施了测试,我们就能够发现软件中的错误。

n测试的附带收获是,它能够证明软件的功能和性能与需求说明相符合。

n实施测试收集到的测试结果数据为可靠性分析提供了依据。

n测试不能表明软件中不存在错误,它只能说明软件中存在错误。

软件测试的原则:

1. 应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。

2. 测试用例应由测试输入数据和对应的预期输出结果这两部分组成。

3. 程序员应避免检查自己的程序。

4. 在设计测试用例时,应包括合理的输入条件和不合理的输入条件。

5. 充分注意测试中的群集现象。

经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。47%的错误在4%的模块中。

6. 严格执行测试计划,排除测试的随意性。

7. 应当对每一个测试结果做全面检查。

8. 妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。

2、单元测试基本技能

模块接口测试

?在单元测试的开始,应对通过被测模块的数据流进行测试。测试项目包括:

l 调用本模块的输入参数是否正确;

l 本模块调用子模块时输入给子模块的参数是否正确;

l 全局量的定义在各模块中是否一致;

?在做内外存交换时要考虑:

–文件属性是否正确;

–OPEN与CLOSE语句是否正确;

–缓冲区容量与记录长度是否匹配;

–在进行读写操作之前是否打开了文件;

–在结束文件处理时是否关闭了文件;

–正文书写/输入错误,

–I/O错误是否检查并做了处理。

局部数据结构测试

?不正确或不一致的数据类型说明

?使用尚未赋值或尚未初始化的变量

?错误的初始值或错误的缺省值

?变量名拼写错或书写错

?不一致的数据类型

?全局数据对模块的影响

路径测试

?选择适当的测试用例,对模块中重要的执行路径进行测试。

?应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。?对基本执行路径和循环进行测试可以发现大量的路径错误。

错误处理测试

?出错的描述是否难以理解

?出错的描述是否能够对错误定位

?显示的错误与实际的错误是否相符

?对错误条件的处理正确与否

?在对错误进行处理之前,错误条件是否已经引起系统的干预等

边界测试

?注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。

?如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。

3、软件测试策略和种类

软件测试策略4个步骤:

?单元测试

?组装测试

?确认测试

?系统测试

?开始是单元测试,集中对用源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。

?组装测试把已测试过的模块组装起来,主要对与设计相关的软件体系结构的构造进行测试。?确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。

?系统测试把已经经过确认的软件纳入实际运行环境中,与其它系统成份组合在一起进行测试。

软件测试的种类:

1.功能测试;

2.可靠性测试;

3.强度测试;

4.性能测试;

5.恢复测试;

6.启动/停止测试;

7.配置测试;

8.安全性测试;

面向对象方法概念

?C o a d和Y o u r d o n给出了一个定义:“面向对象=对象+类+继承+通信”。

?如果一个软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的。?一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。

面向对象的特点

第1章_软件工程学概述练习题

第一章练习题 一、判断题 1.螺旋模型是在瀑布模型和增量模型的基础上增加了风险分析活动。(√) 2..软件是指用程序设计语言(如PASCAL ,C,VISUAL BASIC 等)编写的程序,软件开 发实际上就是编写程序代码。(X) 3.在面向对象的软件开发方法中,每个类都存在其相应的对象,类是对象的实例,对象是 生成类的模板。(X) 4.快速原型模型可以有效地适应用户需求的动态变化。(√) 5.类是关于对象性质的描述,由方法和数据组成。(√) 6.如果把软件开发所需的资源画成一个金字塔,人是最基本的资源。(√) 二、名字解释: 1.软件:完成特定功能的程序+数据结构+文档。 2.软件危机:软件危机指在计算机软件的开发和维护过程中,所遇到的一系列严重问题。 3.软件工程:指导计算机软件开发和维护的一门工程学。 4.软件生命周期:一个软件从定义、开发、使用和维护直至最终被废弃,要经历的漫长时 期。 5.软件过程:为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任 务的工作步骤。 6.瀑布模型:是将软件生存各个活动规定为依线性顺序联接的若干阶段的模型。它包括可 行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试盒维护。它规定了由前至后,相互衔接的固定次序,如同瀑布流水,逐级下落。 7.快速原型模型:是快速建立起来的可以再计算机上运行的程序,它所能完成的功能往往 是最终产品能完成的功能的一个子集。 8.增量模型:是在项目的开发工程中以一系列的增量方式开发系统。增量方式包括增量开 发和增量提交。增量开发是指在项目开发过程中以一定的时间间隔开发部分工作软件; 增量提交是指在开发周期内,以一定的时间间隔增量方式向用户提交工作软件及相应文档。增量开发和增量提交可以同时使用,也可以单独使用。 9.螺旋模型:是一种演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模 型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型更适合大型的昂贵的系统级的软件应用。 对象。

软件工程概述习题及答案

第一章软件工程概述 一. 填空题 1. 软件的发展过程, , , . 2. 基于软件的工作方式,软件可以划分为, , , . 3. 在软件发展的第四阶段计算机体系结构迅速地从环境转变为环境. 4. 在计算机系统中,软件是, 而硬件是. 5. 软件危机是在软件发展第阶段末期,随着第代计算机和诞而产生。 6. 文档一般可分为面向的文档,面向的文档,面向的文档和面向的文档。 7. 软件生存期若分为三个大的阶段,,. 8. 它是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。 9. 在软件的生存周期开发阶段要经三个步骤, , 。 10. 瀑布模型是以文档为驱动、适合于的软件项目的模型。 11. 螺旋模型将开发过程分为几个螺旋周期,在每个螺旋周期内为,, 和四个步骤。 12. 软件开发的螺旋模型综合了瀑布模型和演化模型的优点,还增加了____。采用螺旋模型时,软件开发沿着螺线自内向外旋转,每转一圈都要对____ 进行识别和分析,并采取相应的对策。螺旋线第一圈的开始点可能是一个____ 。从第二圈开始,一个新产品开发项目开始了,新产品的演化沿着螺旋线进行若干次迭代,一直运转到软件生命期结束。 13. 软件开发模型, , , , , . 14. 软件工程面临的问题有, , , . 15. 面向对象方法学把客观世界的事物或实体都看成对象,把对象作为分析设计的元素,把所有对象都划分成对象类,类可以派生和. 16.基于软件的功能划分可以把软件划分为, ,和。 17.计算机系统发展的早期所形成的一系列错误概念和做法,已经严重地阻碍了计算机软件的开发,甚至有的根本无法维护,只能提前报废,造成大量人力、物力的浪费,从而导致软件危机。为了研究解决的方法,计算机科学技术领域中的一门新兴的学科逐步形成了,这就是。18.软件工程是指导的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。 19.为了开发出低成本高质量的软件产品,软件工程学应遵守以下基本原则:, ,和, 。 20.原型模型是从需求分析开始。软件开发者和用户在一起定义,说明需求,并规划出定义的区域。然后快速设计软件中对用户/客户可见部分的表示。快速设计导致了原形的建造,原形由用户/客户评估,并进一步求精。

(完整版)软件工程第一二三章习题参考答案

第一章软件工程概述 软件是计算机程序及其有关的数据和文档的结合。 软件危机是指在计算机软件开发和维护时所遇到的一系列问题。 软件危机主要包含两方面的问题:一是如何开发软件以满足对软件日益增长的需求;二是如何维护数量不断增长的已有软件。 软件工程是软件开发、运行、维护和引退的系统方法。 软件工程是指导计算机软件开发和维护的工程学科。软件工程采用工程的概念、原理、技术和方法来开发与维护软件。软件工程的目标是实现软件的优质高产。 软件工程学的主要内容是软件开发技术和软件工程管理。 软件开发方法学是编制软件的系统方法,它确定软件开发的各个阶段,规定每一阶段的活动、产品、验收的步骤和完成准则。常用的软件开发方法有结构化方法、面向数据结构方法和面向对象方法等。 习题参考答案: 1.什么是软件危机?为什么会出现软件危机? 答:软件危机是指在计算机的开发和维护过程中所遇到的一系列严重问题。这些问题决不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。 出现软件危机的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软件不同于硬件,它是计算机系统中逻辑件而不是物理部件。管理和控制软件开发过程相当困难。软件是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这是使软件问题发展成软件危机的主要原因。总结如下: 1)取得正确的用户需求和正确地描述需求很困难 2)开发人员对需求的正确理解也有困难 3)常常在没有正确理解之前就仓促开始编程 4)软件项目缺乏有效的组织、管理和内部交流 5)缺乏软件开发方法、模型和工具的支持 6)软件维护的困难性 2.假设你是一家软件公司的总工程师,当你把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意你的观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”你怎么反驳他? 答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件已经完成时再引入变动,当然付出的代价更高。一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是整体构架的错误。 3.什么是软件工程?它有哪些本质特性?怎样用软件工程消除(至少是缓解)软件危机? 答:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。

第01章软件工程概述

第一章软件工程概述 我们知道,计算机软件是整个计算机系统中具体实现各种功能和操作的核心部分。软件工程即采用工程的概念、原理、技术和方法来开发和维护软件,将工程管理技术成功的经验和思想与具体软件的开发过程、研究技术相结合,形成一整套适合于计算机软件开发的方法、规范和技术。因此,软件工程这门课程,对于从事软件开发研究的专业人员,特别是高层次的管理、分析、开发人员,显得比以往更加重要。 1.1 软件工程的基本概念、特点、分类 1.1.1软件的概念、特点 计算机软件是程序、数据及相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列,数据是使程序能正常操纵信息的数据结构,文档是与程序开发、维护和使用有关的图文材料。 要深入进行计算机软件的开发和研究,首先要了解计算机软件的特点和计算机软件开发的规律。计算机软件可归结具有如下几个共同特点: 1、软件是一种逻辑实体,而不是具体的物理实体。因此,它具有抽象性。 2、软件的生产与硬件不同,软件是由开发或工程化而形成的,它没有明显的制造过程。对软件的质量控制,必须立足于软件开发方面。软件成为产品之后,其制造只是简单的拷贝而已。 3、任何机械、电子设备在运行和使用过程中,其失效率大致遵循如图1-1所示的U型曲线(即浴盆曲线)。软件的情况与此不同,它不存在磨损和老化问题。然而,它存在退化问题,设计人员必须多次修改(维护)软件,图1-2(a)给出了软件故障率的理想曲线,图1-2(b) 给出了实际的软件故障率曲线。

4、软件的开发和运行往往受到计算机系统的限制,对计算机系统有着不同程度的依赖性。为了解除这种依赖性,在软件开发中提出了软件移植的问题。 5、迄今为止,软件的开发尚未完全摆脱手工艺的方式。 6、软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。 7、软件的成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它投入的成本是比较高的。 8、相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构设置、体制运作及管理方式等问题,甚至涉及到人们的观念和心理,这些因素直接影响到项目的成败。 9、从市场上买到的软件,它本身就是一个完整的软件,而不能作为构件再组装成新的程序。但目前已有大量的支持“软件复用”的软件和中间件作为相对独立的构件。

第一讲软件工程概述.doc

第一讲:软件工程概述 软件的定义 软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。 程序是按事先设计的功能和性能要求执行的指令序列 数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料 软件危机 软件危机是指计算机软件开发和维护过程中所遇到的一系列严重问题。概括的说即为:能否满足对软件日益增长的需求?能否维护数量日益增长的现有软件? 软件工程的定义 B o e h m:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料 I E E E:软件工程是开发、运行、维护和修复软件的系统方法 F r i t z B a u e r:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法 软件工程要素 三要素:方法、工具和过程(缺乏一个过程,洗厕所的都有方法和工具,但没有一个好的过程)软件工程方法为软件开发提供了“如何做”的技术 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境 软件生命周期(Life Cycle) 软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生命周期 软件生存期的六个步骤,即制定计划、需求分析、设计、实现、测试及运行维护 软件生命周期:制订计划 确定要开发软件系统的总目标 给出功能、性能、可靠性以及接口等方面的要求 完成该软件任务的可行性研究 估计可利用的资源(硬件,软件,人力等)、成本、效益、开发进度 制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查 软件生命周期:需求分析 对用户提出的要求进行分析并给出详细的定义,得到系统逻辑模型,可用数据流程图、数据字典和简要算法加以表示。 编写软件需求说明书或系统功能说明书及初步的系统用户手册 提交管理机构评审 软件生命周期:软件设计 概要设计—把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应。 详细设计—对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。通常用的H I P O (层次图加输入/处理/输出图)或P D L(过程设计语言)描述。 编写设计说明书,提交评审。 软件生命周期:实现编码

习题-1-软件工程概述

第一章习题 一、选择题 1、1968年北大西洋公约组织的计算机科学家召开国际会议,讨论问题,这次会议上正式使用了软件工程这个名词。 (A)系统设计(B)软件危机(C)设计模式(D) 软件开发 2、下面哪些不属于软件工程学的内容是: A、软件开发方法 B、软件环境 C、成本估算 D、人员配置 3、下面哪个途径属于摆脱软件危机的方法:() A、多安排软件人员进行编程 B、招聘编程水平高的人员 C、采用必要的组织管理措施 D、提高计算机硬件的配置 4 下面哪个是开发原型系统的目的: (A)检验设计方案是否正确(B)画出系统的逻辑模型 (C)给出系统的最终用户界面(D)系统是否可行 5、在下列工具与环境中()属于较早期的CASE。 A.基于信息工程的CASE B.人工智能CASE C.集成CASE环境 D.交互编程环境 6、软件复杂性主要体现在() A.数据的复杂性 B.程序的复杂性 C.控制的复杂性 D.问题的复杂性 7、用于设计阶段,考核实现方案是否可行的是()原型。 A.探索型 B.演化型 C.实验型 D.增量型 8、具有风险分析的软件生存周期模型是() A.瀑布模型 B.喷泉模型 C.螺旋模型 D.增量模型 9、软件工程管理的具体内容不包括对_________管理。 A.开发人员B.组织机构 C.过程D.设备 10、在RUP开发过程模型的主要特征是_________。 A.迭代和原型 B.增量和原型 C.迭代和增量 D.瀑布和原型 二、问答题 1.在你平时开发软件时,遇到过类似于“软件危机”的现象吗?你通常是怎么解决的?2.通过对本章内容的学习,你认为软件工程主要研究哪些问题。谈谈你对这些问题的理解。3.假如你的客户需求很模糊,或者他不是很了解软件开发的一些概念,这时,你拟采取什么过程模型?为什么? 4. 假设你开发一个软件,它的功能是把73624.9385这个数开平方,所得到的结果应该精确到小数点后4位,一旦实现并测试完之后,该产品将被抛弃。你打算选用哪种生命周期模型,请说明理由。

软件工程概论复习题(答案)[1]汇编

软件工程概论复习题答案 一、单选题 1.软件工程的纵向分解是把软件开发分为几个(B) A.模块B.阶段C.子系统D.过程 2.McCall软件质量度量模型中属于面向软件产品操作的是(D) A.适应性B.可重用性C.可测试性D.可用性 3.快速原型模型中,用于及早向用户提交一个原型系统的是(D) A.实验型原型B.探索型原型C.提交型原型D.演化型模型4.软件维护中,因重新初始化控制标志或指针而引起的错误是以下哪一项的副作用(B)A.文档B.数据C.编码D.设计 5.软件维护费用高的主要原因是(B) A.生产率高B.生产率低C.人员多D.人员少 6.根据对软件开发机构调查的结果可知,各类维护活动所占的比重是(A)A.完善性占50%,适应性占25%,校正性占21%,其他维护占4% B.完善性占25%,适应性占50%,校正性占21%,其他维护占4% C.完善性占21%,适应性占25%,校正性占50%,其他维护占4% D.完善性占21%,适应性占50%,校正性占25%,其他维护占4% 7.下列属于用白盒技术设计测试用例的是(B) A.错误推测B.逻辑覆盖C.等价类划分D.因果图 8.有助于培养良好的编程风格并且第一个体现了结构化编程思想的程序设计语言的是(A) A.PASCALB.FORTRAN C.DL/1D.C 9.在软件详细设计过程中不采用的工具为(C) A.判定表B.PDL C.数据流图D.IPO图 10.根据输入输出的数据结构产生程序结构的设计方法是(B) A.PARNAS方法B.JACKSON方法C.WIRTH方法D.DIJKSTRA方法11.在软件设计中,为解决一个大而复杂的问题把软件系统划分为一个个完成某一特定的子功能的方法称为(C) A.细化B.结构化C.模块化D.抽象化 12.结构化方法在建立软件系统的结构模块时按照以下哪种方法进行?(B) A.由底向上B.自顶向下C.随机D.回归 13.两个模块之间传递的是同一个数据结构的地址,这种耦合方式称为(C ) A.控制耦合B.公告耦合C.标记耦合D.数据耦合 14.结构化设计是以哪个阶段产生的DFD图为基础,按一定的步骤映射成软件结构?(B)A.可行性分析B.需求分析C.概要设计D.详细设计 15.结构化方法的基本原则是功能的分解和( C ) A.模块化B.信息隐藏C.抽象D.细化 16.数据字典和数据流图共同构成了系统的(B) A.物理模型B.逻辑模型C.原型D.目标模型

相关主题
文本预览
相关文档 最新文档