当前位置:文档之家› 《软件工程》第一章软件工程学概述

《软件工程》第一章软件工程学概述

《软件工程》第一章软件工程学概述
《软件工程》第一章软件工程学概述

第一章软件工程学概述

1.1 软件危机

1.1.1 软件的定义

——定义:软件=“完成特定功能的程序+数据结构+文档”

——特征:(3个)软件是开发的,而不是制造的;软件不磨损,但退化;自定义。

——发展问题

1.1.2 软件危机的表现

——定义:在计算机软件的开发和维护过程中所遇到的一系列严重的问题。

——表现:(6个)

(1)对软件开发成本和进度的估计常常很不准确。

(2)软件产品质量较差,可靠性低。

(3)用户对开发出来的软件产品不满意。

(4)软件常常是不可维护的。

(5)软件产品缺少应有的文档资料。

(6)软件产品的供不应求。

1.1.3 软件危机的原因

——客观原因

——主观原因

1.2 软件工程

1.2.1 软件工程的概念

——定义:指导软件开发与维护的工程科学。采用工程的概念、原理、技术和方法来开发和维护软件,综合运用正确的管理技术和最好的技术方法,以经济

地开发出高质量的软件并有效维护它。

IEEE的定义:①软件工程是把系统的、规范的、可度量的途径应用于软件

开发、运行和维护过程,也就是把工程应用于软件;②对这些途径加以研究。

1.2.2 软件工程的基本原理(7个)

——(1)用分阶段的生命周期计划严格管理

(2)坚持进行阶段评审

(3)实行严格的产品控制

(4)采用现代程序设计技术

(5)结果可以清楚地审查

(6)开发小组成员少而精

(7)承认不断改进软件工程实践的必要性

1.2.3 软件工程方法学:3个要素(方法、工具和过程)

——传统方法学:结构化技术,软件生命周期

——面向对象方法学:类+对象+继承+消息,软件开发过程更接近人类认知模式

1.3 软件生命周期

1.3.1 软件生命周期的概念

——定义:一个软件从定义、开发、使用和维护,直至最终被废弃,要经历的漫长的时期称为软件生命周期。

——构成:3个时期,8个阶段

软件定义:问题定义,可行性研究,需求分析

软件开发:总体设计,详细设计,编码和单元测试,综合测试;

运行维护:软件维护

1.3.2 各阶段的基本任务(8个阶段)

——问题定义:需要解决的问题是什么?书面报告

——可行性研究:确定软件系统是否值得去解《可行性研究报告》

——需求分析:解决这些问题需要系统做什么?《软件需求规格说明书》

——总体设计:应该怎样实现目标系统?《概要设计说明书》

——详细设计:如何具体地实现这个系统?

——编码和单元:写代码,测试每个模块!

——测试、综合测试:通过各类测试和调试来完善软件《测试计划/方案》

——软件维护:通过各种必须的维护活动使系统持久地满足用户的需要。(改正性维护,适应性维护,完善性维护,预防性维护)

1.3.3 软件生命周期的模型

——瀑布模型:广泛采用,顺序严格,文档驱动,执行困难

——原型模型:快速开发原型后,评价反馈、再细化改进,忽略整体设计,

——增量模型:渐进开发,逐步完善,第一个增量很关键

——喷泉模型:面向对象软件开发过程迭代和无缝

——螺旋模型:有效降低风险的渐进式开发模型

第二章可行性研究

2.1 可行性研究的目标与任务

2.1.1 目标:用最小的代价和尽可能短的时间判断问题是否值得去解?

2.1.1 任务:

——技术可行性

——经济可行性

——操作可行性

——社会可行性

2.2 可行性研究过程

(1)复查系统规模与目标

(2)研究目前正在使用的系统

(3)导出新系统的高层逻辑模型

(4)导出与评价各种方案

(5)推荐行动方针

(6)草拟开发计划

(7)书写文档提交审查——《可行性研究报告》

2.3 可行性研究工具

——

系统流程图:表达数据在系统各部件之间流动的情况

程序流程图:对数据进行加工处理的控制过程

2.4 成本/效益分析:从经济角度评价开发一个新的软件工程项目是否可行

——成本估计

……代码行技术

……任务分解技术

……自动估计成本技术

——效益分析:有形效益,无形效益

——常用的效益度量方法

……货币的时间价值

……投资回收期

……纯收入

第三章需求分析

3.1 需求分析的任务和步骤

——需求分析的任务

……确定对系统的综合要求

……分析系统的数据要求

……建立软件的逻辑模型

——确定对系统的综合要求

……功能性需求

……非功能性需求:可用性,可靠性……

——分析系统的数据要求

……数据字典——定义数据

……层次方框图——定义数据结构

——建立软件的逻辑模型:数据流图、数据字典、实体-联系图、主要算法

——编写软件需求规格说明书

——需求分析评审

3.2 需求获取的常用方法(5个)

——访谈

——问卷调查

——观察用户工作流程

——建立联合分析小组

——快速原型法

3.3 需求分析的方法(4个)

——功能分解法:软件需求当做一棵倒置的功能树

——结构化开发方法:结构化分析、结构化设计和结构化程序设计

——信息建模方法:实体-联系图

——面向对象的分析

3.4 结构化分析技术

——思路:基于数据流图自顶向下逐层分解

3.5 需求分析图形工具

——实体-联系图(Entity-Relationship Diagram)

……实体定义:对软件必须理解的复合信息的抽象

……属性定义:数据对象的性质

……联系定义:数据对象彼此之间相互连接的方式

——数据字典

……定义:数据字典是关于数据的信息的集合,也就是对数据流图中包含的

所有元素的定义的集合。

……四类元素:数据流,数据流分量(即数据元素),数据存储,处理——层次方框图

……定义:用树型结构的一系列多层次的矩形框描绘数据的层次结构。

——IPO图(Input Process Output)

第4章总体设计

4.1 总体设计的目标及任务

——基本目的:解决“系统应该如何实现”的问题

——系统设计阶段:确定系统的具体实现方案

——结构设计阶段:确定系统的软件结构

……任务1.设计软件结构

……任务2.数据结构及数据库设计

……任务3.确定测试要求并制定测试计划

……任务4.编写总体设计文档《概要设计说明书》

……任务5.评审

4.2 软件结构设计原理

4.2.1 模块化

——模块

……定义:是构成程序的基本单位,数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素(如函数、子程序、过程)等。

——模块化

……定义:解决一个复杂问题时自顶向下逐层把软件系统划分成若干个独立命名、且可独立访问的模块的过程。每个模块完成一个特定的子功能,

所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求

的功能。

——模块的基本属性

……外部属性:接口,功能,状态

……内部属性:逻辑

4.2.2 抽象:逐步求精

——定义:抽出事物本质特性而不考虑细节

4.2.3 信息隐藏和局部化

——信息隐藏原理定义:设计和确定模块时,使得一个模块内包含的信息对于不

需要这些信息的模块来说,是不能访问的。

——局部化定义:把一些关系密切的软件元素物理地放得彼此靠近

4.2.4 模块独立性

——模块独立定义:每个模块完成一个相对独立的特定子功能,并且和其他模块

之间的关系很简单。

——模块独立性的定性标准度量:

……耦合:

(1)定义:软件系统结构中各模块间相互联系紧密程度的一种度量。模

块之间联系越紧密,其耦合性就越强,模块的独立性则越差。

(2)分类:无直接…数据…控制…特征…公共…内容

……内聚:

(1)定义:一个模块内部各个元素彼此结合的紧密程度的度量。

(2)分类:偶然…逻辑…时间…过程…通信…顺序…功能

……原则:力争做到高内聚,并且能辨认出低内聚的模块,通过修改设计提高模块的内聚程度并降低模块间的耦合程度。

4.3 软件结构设计工具

——层次图

——HIPO图:带编号的层次图

——软件结构图

4.4 软件结构设计启发式规则

——作用域定义:指受该模块内一个判断影响的所有模块的集合

——控制域定义:指模块本身以及其所有直接或者间接从属于它的模块集合

——原则:好的设计:所有受判定影响的模块应该都从属于做出判定的那个模块,最好局限于做出判定的那个模块本身及它的直属下级模块。

——深度:指软件结构中模块的层次数

——宽度:指同一层次中最大的模块个

——扇出:指一个模块直接调用的模块数目,一般是3-4,不能超过5-9

——扇入:指有多少个上级模块直接调用它

4.5 结构化设计方法

4.5.1 数据流图的类型

——变换型数据流图

——事务型数据流图

4.5.2 结构化设计方法过程

4.5.3 变换型分析设计

4.5.4 事务型分析设计

4.5.5 综合型数据流图

第5章详细设计

5.1 详细设计的目的与任务

——处理方式的设计(数据结构、算法、性能、外部信号形式)

——为数据库进行物理设计

——其它设计(IO格式,人机对话格式)

5.2 详细设计方法

5.2.1 结构化程序设计(Structured Programming,SP)方法

——单入单出结构:顺序、选择和循环,goto语句

——基本思路

……自顶向下、逐步细化

……模块化设计

……结构化编码

5.2.2 面向数据结构的设计方法

——Jackson图

——改进的Jackson图

——Jackson方法

5.3 详细设计工具

5.3.1 程序流程图

5.3.2 盒图

5.3.3 PAD 问题分析图

5.3.4 PDL 过程设计语言

5.3.5 判定表与判定树

第6章实现

目的:使用选定的程序设计语言,把模块的过程性描述翻译为用该语言书写的源程序

6.1 程序设计语言的分类

——面向机器语言:机器语言,汇编语言

——高级语言:通用语言,专用语言

6.2 程序设计语言的选择

6.3 编码风格

——定义:编码风格是指在不影响程序正确性和效率的前提下,有效编排和合理组织程序的基本原则。

6.3.1 程序内部文档

——标识符,程序的注解,语句,输入和输出

6.3.2 语句的构造及书写

6.3.3 输入/输出

6.3.4 效率

6.4 程序复杂度度量

6.4.1 McCabe方法——环形复杂度度量

6.4.2 Halstead方法——文本复杂度度量

第7章软件测试

7.1 软件测试目标

——测试是为了证明程序有错,而不是证明程序无错误

7.2 软件测试准则(6个)

——所有测试都应该能追溯到用户需求

——测试开始之前制定测试计划

——Pareto原理可应用于软件测试

——从小规模测试开始,并逐步进行大规模测试

——穷举测试是不可能的

——由独立的第三方从事测试工作

7.3 软件测试方法

——测试时是否需要执行被测软件

……静态测试定义:对被测程序进行特性分析的方法的总称,这些方法的主要特性是无须执行被测代码,而是借助专用的软件测试工具评审软件文

档或程序,度量程序静态复杂度,检查软件是否符合编程标准,借以发

现编写的程序的不足之处,减少错误出现的概率。

……动态测试定义:实际运行被测程序,通过输入相应的测试用例,判定执行结果(输入/输出的对应关系)是否符合要求,从而检验程序的正确性、

可靠性和有效性。

——测试是否针对内部结构和具体实现算法

……黑盒测试定义:是一种从用户观点出发的测试。用这种方法进行测试时,把被测程序当作一个黑盒,不考虑程序内部结构和特性,测试者只考虑

程序输入输出和程序功能,根据需求规格说明书来设计测试用例,推断

测试结果的正确性

……白盒测试定义:依赖于对程序内部细节的严密检验,针对特定条件设计测试用例,对软件的逻辑路径进行测试。

……灰盒测试

7.4 软件测试过程

7.4.1 单元测试

——定义:将每个模块作为一个独立的实体来测试。用详细设计描述作指南,对重要的程序执行通路进行测试,以便发现模块内部的错误。发现编码和详细

设计的错误。

——驱动模块,桩模块(存根程序)

7.4.2 集成测试

——定义:按照概要设计的要求组装独立模块成为子系统或系统,同时经过测试来发现接口错误的一种系统化的技术。

——模式:

……非渐增式测试方法(分模块测试→一次性组装→所有模块集成测试)

……渐增式测试方法(分模块测试→逐个模块组装→直到集成测试)

●自顶向下集成(深度优先策略,宽度优先策略)

●自底向上集成

●三明治集成

7.4.3 系统测试

——定义:系统测试是指将经过集成测试的软件作为整个基于计算机系统的一个元素,与计算机硬件、外设、支持软件、数据和人员等元素结合在一起,对

计算机系统进行一系列的组装测试和确认测试。系统测试的依据是软件需求

规格说明书,测试的内容主要包括功能测试和性能测试两方面。

——测试内容:功能测试,性能测试

7.4.4 确认测试

——定义:确认测试又称“验收测试”、“有效性测试”,其任务是验证软件的功能和性能及其它特性是否与用户的要求一致。

——分类:Alpha测试(开发者+用户),Beta测试(用户+开发者)

7.4.5 回归测试

——定义:重新执行已经做过的测试的某个子集,以保证上述这些变化没有带来非预期的副作用。

——作用:保证由于调试或其他原因引起的变化,不会导致非预期的副作用。

7.5 测试用例的设计

7.5.1 测试用例的设计原则

7.5.2 白盒测试方法用例的设计

——逻辑覆盖

……语句覆盖:程序中每个可执行语句至少执行一次

……判定覆盖:使得程序中每个判断的取真分支和取假分支至少经历一次,

即判断真假值均曾被满足

……条件覆盖:使每个判断中每个条件的可能取值至少满足一次

……判定条件覆盖:使得判断条件中的所有条件可能至少执行一次取值,同

时所有判断的可能结果至少执行一次

……条件组合覆盖:使得每个判定表达式中条件的各种可能组合都至少执行

一次

……路径覆盖:覆盖程序中的所有可能的执行路径

——循环覆盖

……单循环

……嵌套循环

——基本路径测试

7.5.3 黑盒测试方法用例的设计

——等价类划分

……有效等价类定义:指对于程序的规格说明来说,是合理的有意义的输

入数据构成的集合

……无效等价类定义:是指对于程序的规格说明来说,是不合理的,是无

意义的输入数据构成的集合

——边界值分析

——错误推测

——因果图法

7.6 软件调试

——试探法

——回溯法

——对分查找法

——归纳法

——演绎法

第8章维护

8.1 软件维护的定义

——在交付使用后,为改正错误或满足新需要而修改软件的过程。

8.2 软件维护的分类

——改正性维护

——完善性维护

——适应性维护

——预防性维护

各类维护活动都必须应用于整个软件配置,包括维护文档和维护软件的可执行代码。

8.3 软件维护的特性

8.3.1 软件维护的困难

——结构化维护定义:指软件开发过程是按照软件工程方法进行的、各开发阶段

文档齐全的软件的维护过程。修改从设计文档开始,到编

写源代码和回归测试,再次交付使用。

——非结构化维护定义:指在只有源程序,缺乏必要的文档说明,难于确定数据

结构、系统接口等特性的情况下,进行的软件维护过程。

8.3.2 维护代价高昂

8.3.3 软件维护的副作用

——修改代码的副作用

——修改数据的副作用

——修改文档的副作用

8.4 软件维护过程

——本质:修改和压缩了的软件定义和开发过程

——过程

……(1)维护组织

……(2)维护报告

……(3)维护的事件流

……(4)保存维护记录

……(5)评价维护活动

8.5 软件的可维护性

——定义:软件的可维护性是指维护人员理解、改正、改动或改进这个软件的难易程度,它是软件质量的主要特征之一。

8.6 提高可维护性的途径

第9章面向对象的技术

9.1 面向对象方法学

——基本思想:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程更接

近人类认识世界、解决问题的方法与过程。

9.1.1 两种方法学的比较(传统的程序设计技术、面向对象的软件技术)

——与人类习惯的思维方法一致

——系统稳定性好

——可重用性好

——较易开发大型软件产品

——可维护性好

9.1.2 面向对象的基本概念

——对象定义:一个包含数据结构和施加其上的操作的封装体

——类定义:对一组具有相同属性和运算的对象的抽象

——继承定义:是父类和子类之间共享数据结构和方法的机制

——多态性定义:指相同的操作或函数、过程作用于不同的对象上并获得不同的

结果

——消息定义:指对象之间在交互中所传送的通信信息

9.1.3 面向对象的开发方法

——Booch方法

——Coad方法

——OMT(Object Modeling Technology,对象建模技术)

——UML(Unified Modeling Language,统一建模语言)

9.2 面向对象的实施步骤

——面向对象分析OOA

——面向对象设计OOD

——面向对象实现OOP

——面向对象测试OOT

9.3 面向对象的建模语言—UML

9.3.1 UML的特点

9.3.2 UML的构成

——视图(4+1):用例视图+ 设计视图、过程视图、实现视图、配置视图

——图

——模型元素

——通用机制

9.3.3 UML的通用模型元素

——关联、泛化、依赖、聚合、细化、组合

第10章面向对象的需求分析

10.1 用例图

——元素:参与者、用例、关系(包含、扩展、泛化)

10.2 用例建模的步骤

——步骤1:定义系统边界

——步骤2. 确定参与者

——步骤3. 识别用例

——步骤4. 确定用例之间的关系

——步骤5. 建立完整的用例图

——步骤6. 书写用例描述文档

第11章面向对象的分析

11.1 面向对象分析的任务

——分析的过程:提取系统需求,开发分析模型

——分析工作内容:理解,表达,验证

——文档资料:软件需求规格说明

——中心任务:从需求模型中导出分析模型

——分析模型由3个独立模型构成:

……用例模型:表示系统功能,用例和场景

……对象模型:表示系统组成,类和对象图

……动态模型:表示用例实现,协作图和顺序图

11.2 静态结构建模

——静态分析是分析静态模型(类图或对象图)

——静态结构建模过程:

……提取系统中的类(在用例中寻找类)

……添加关系

……确定类的属性

……确定类的操作

……完善初始的静态结构模型

11.3 动态结构建模

——动态分析是分析动态模型(顺序图或协作图)

——动态行为建模的过程:

……(1)消息

……(2)事件序列图

……(3)状态转换图

……(4)活动图

……(5)协作图

第12章面向对象的设计与实现

12.1 面向对象设计准则

——模块化

——抽象

——信息隐藏

——弱耦合:交互耦合(松散好),继承耦合(紧密好)

——强内聚

——可重用

12.2 面向对象启发规则

12.3 面向对象的实现

12.4 面向对象的软件测试

12.4.1 测试类型

——面向对象分析测试:分析、验证对象及其关系的合理性、可行性

——面向对象设计测试:确定类和类结构满足要求

——面向对象编程测试:类功能的实现和相应的面向对象程序风格

——面向对象单元测试:对类及其实例的测试

——面向对象集成测试:基于线程的测试,基于使用的测试

——面向对象系统测试:检测软件的整体行为表现,是对软件开发设计的再确认

——面向对象确认测试:集中检查用户可见的动作和用户可识别的输出

12.4.2 测试用例的设计

——测试类的方法

……随机测试:不考虑对类对象操作的限制而设计为一组按不同次序排

列的操作序列

……划分测试(类似等价划分测试)

……基于故障的测试(类似错误推测法)

——集成测试方法

……多类测试

……从动态模型导出测试用例

软件工程概述习题及答案

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

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

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

软件工程学概述单元测试

3.总体设计单元测试 一、填空题 1.软件模块独立性的两个定性度量标准是()和()。 2.为使用流程图描述结构和程序,限制流程图有五种基本的控制结构()、()、()、until循环、多情况型选择。 3. 软件的结构化设计(SD)方法中,一般分为总体设计和详细设计两阶段,其中总体设计主要是要建立()。 4.层次结构的上一层是下一层的(),下一层是上一层的()。 5.一个模块直接调用的模块数目称为模块的(),一个模块被多少上级模块直接调用称为模块的()。 6.软件设计方法中的Jackson方法是一种()的设计方法。 7.模块的耦合性按耦合强弱程度,由弱到强依次是:非直接耦合、()、标记耦合、控制偶合、外部耦合、公共耦合、()。 8.()内聚是指模块内各成分之间并不存在有意义的联系。 二、判断题 1. 模块越多,开发成本越小。 2. 耦合是指一个模块内各个元素彼此结合的紧密程度。 3. 内聚是指一个软件结构内各个模块之间互连程度的度量。 4. 在软件设计中应该尽量设计紧密耦合的系统。 5. 内容耦合又称为病态耦合,在很多高级程序设计语言中不允许出现任何形式的内容耦合。 6. 如果一个模块内的处理元素是彼此相关的,并且以一个特定的次序执行,则这种内聚为时间内聚。 7. 概要设计阶段完成的主要文档是概要设计说明书。 8.模块的控制域应该在作用域之内。 9.用盒图和PAD图设计出来的算法必定是结构化的。 10.一个模块执行时,必须引用另一个模块的某些数据,则这个模块的独立性不强。 三、选择题 1.用()图描述的程序结构容易实现自动生成程序 A.程序流程图 B.NS盒图 C.PAD图 D.数据流图 2.()可以作为模块。 A.过程 B.子程序 C.函数 D.宏 3.下列关于模块的描述,正确的是()。(多选)

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

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

软件工程概述

软件工程概述 王立福 概念:应需而生 软件工程是一类工程。工程是将理论和知识应用于实践的科学。就软件工程而言,它借鉴了传统工程的原则和方法,以求高效地开发高质量软件。其中应用了计算机科学、数学和管理科学。计算机科学和数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量和成本的管理。 软件工程这一概念,主要是针对20世纪60年代“软件危机”而提出的。它首次出现在1968年NATO (北大西洋公约组织)会议上。自这一概念提出以来,围绕软件项目,开展了有关开发模型、方法以及支持工具的研究。其主要成果有:提出了瀑布模型,开发了一些结构化程序设计语言(例如PASCAL语言,Ada语言)、结构化方法等。并且围绕项目管理提出了费用估算、文档复审等方法和工具。综观60年代末至80年代初,其主要特征是,前期着重研究系统实现技术,后期开始强调开发管理和软件质量。 70年代初,自“软件工厂”这一概念提出以来,主要围绕软件过程以及软件复用,开展了有关软件生产技术和软件生产管理的研究与实践。其主要成果有:提出了应用广泛的面向对象语言以及相关的面向对象方法,大力开展了计算机辅助软件工程的研究与实践。尤其是近几年来,针对软件复用及软件生产,软件构件技术以及软件质量控制技术、质量保证技术得到了广泛的应用。目前各个软件企业都十分重视资质认证,并想通过这些工作进行企业管理和技术的提升。软件工程所涉及的要素可概括如下: 根据这一框架,可以看出:软件工程涉及了软件工程的目标、软件工程原则和软件工程活动。 目标:我的眼里只有“产品” 软件工程的主要目标是:生产具有正确性、可用性以及开销合宜的产品。正确性意指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜性是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多问题有待解决,它们形成了对过程、过程模型及工程方法选取的约束。 软件工程活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”。主要包括需求、设计、实现、确认以及支持等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件体系结构,包括子系统、模块以及相关层次的说明、每一模块接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。支持活动包括修改和完善。伴随以上活动,还有管理过程、支持过程、培训过程等。 框架:四项基本原则是基石 软件工程围绕工程设计、工程支持以及工程管理,提出了以下四项基本原则: 第一,选取适宜开发范型。该原则与系统设计有关。在系统设计中,软件需求、硬件需求以及其他因素之间是相互制约、相互影响的,经常需要权衡。因此,必须认识需求定义的易变性,采用适宜的开发范型予以控制,以保证软件产品满足用户的要求。 第二,采用合适的设计方法。在软件设计中,通常要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。 第三,提供高质量的工程支持。“工欲善其事,必先利其器”。在软件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。

《软件工程》第一章软件工程学概述

第一章软件工程学概述 1.1 软件危机 1.1.1 软件的定义 ——定义:软件=“完成特定功能的程序+数据结构+文档” ——特征:(3个)软件是开发的,而不是制造的;软件不磨损,但退化;自定义。 ——发展问题 1.1.2 软件危机的表现 ——定义:在计算机软件的开发和维护过程中所遇到的一系列严重的问题。 ——表现:(6个) (1)对软件开发成本和进度的估计常常很不准确。 (2)软件产品质量较差,可靠性低。 (3)用户对开发出来的软件产品不满意。 (4)软件常常是不可维护的。 (5)软件产品缺少应有的文档资料。 (6)软件产品的供不应求。 1.1.3 软件危机的原因 ——客观原因 ——主观原因 1.2 软件工程 1.2.1 软件工程的概念 ——定义:指导软件开发与维护的工程科学。采用工程的概念、原理、技术和方法来开发和维护软件,综合运用正确的管理技术和最好的技术方法,以经济 地开发出高质量的软件并有效维护它。 IEEE的定义:①软件工程是把系统的、规范的、可度量的途径应用于软件 开发、运行和维护过程,也就是把工程应用于软件;②对这些途径加以研究。 1.2.2 软件工程的基本原理(7个) ——(1)用分阶段的生命周期计划严格管理 (2)坚持进行阶段评审 (3)实行严格的产品控制 (4)采用现代程序设计技术 (5)结果可以清楚地审查 (6)开发小组成员少而精 (7)承认不断改进软件工程实践的必要性 1.2.3 软件工程方法学:3个要素(方法、工具和过程) ——传统方法学:结构化技术,软件生命周期 ——面向对象方法学:类+对象+继承+消息,软件开发过程更接近人类认知模式 1.3 软件生命周期 1.3.1 软件生命周期的概念 ——定义:一个软件从定义、开发、使用和维护,直至最终被废弃,要经历的漫长的时期称为软件生命周期。

第一章软件工程概述习题及答案

第一章软件工程概述习题 及答案 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

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

习题-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.目标模型

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