第3章 软件工程基础(习题答案).doc

  • 格式:doc
  • 大小:94.00 KB
  • 文档页数:6

第 3章习题答案

3」什么是软件危机?为什么会岀现软件危机?

解答:

软件危机是指落后的软件生产方式无法满足开发复杂软件的需求,从而导致软件开发与 维护过稈屮出现一系列严重的问题,主要表现在:(1)软件开发费用和进度估计不准。

(2)软件的正确性和可靠性难以保证。(3)文档不全,导致软件维护难度加大。

总Z,可将软件危机归结为:成木、质量和生产率等问题。

到了 20世纪50年代末和60年代初,随着计算机应用的普及,软件的规模和复杂度提 高了,“家庭作功”式的方法已经无法适应软件的开发。软件开发的周期变长、费用上涨, 导致软件的生产效率下降、目标软件的正确性难于保证,即出现了 “软件危机”。

3.2软件T程的概念是什么?软件T程的忖标和原则是什么?

解答:

软件工程是指导计算机软件开发和维护的一门学科。软件工程从管理和技术两个方面, 研究如何更好地开发和维护计算机软件,内容主要包括:软件开发技术和软件工程管理。

软件工程的日标是在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、

可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并且满足用 户需求的软件产品。

软件工稈的原则,在软件开发各阶段,应遵循一些基木原则,包括抽象、信息隐蔽、模 块化、局部化、确定性、一致性、完备性和可验证性。

3.3什么是软件的生命周期?瀑布模型把软件生命周期划分成几个时期、几个阶段?每 一个阶段的任务是什么?每个阶段产生的文档是什么?

解答:

软件从提出、开发、使用到退役的整个过稈称为软件生命周期,软件生命周期可划分为

3个时期,共8个阶段,毎个阶段应完成的基本任务和产生的文档如下表所示。

时期 阶段 任务 文档

定义期

(计划期) 问题的定义 理解用户要求,明确工作目标 计划任务书

可行性研究 可行性方案分析

需求分析 软件系统的目标及应完成的任务 需求规格说明书

开发期 概要设计

(总体设计)

(系统设计) 系统逻辑设让,明确软件模块结构,及

各模块间的调用关系 软件概要设计说明书

数据库/数据结构设计说明书

集成测试计划

详细设计 系统的模块设计,对各模块进行功能说

明,实现细节描述 软件详细设计说明书

编码 编写程序代码 程序、数据、详细注释

测试和调试 单元测试、集成测试 测试大纲、方案,测试用例,

测试结果

维护期 使用和维护 运行和维护 运行、修改记录

3.4什么是结构化方法?结构化分析、结构化设计、结构化程序设计分别用在软件生命 周期的哪一个阶段?

解答:

结构化开发方法是现有软件开发方法屮最成熟、应用最广泛的方法。结构化方法报早起 源于结构化程序设计。目前由结构化分析方法(SA)、结构化设计方法(SD)及结构化程序 设计方法(SP)组成。

结构化分析方法主要应用于需求分析阶段,结构化设计方法主要应用于软件概要设计阶

段,结构化程序设计方法主要应用于详细设计和编码阶段。

3.5软件需求分析阶段要解决的问题是什么?采用什么分析技术?需求分析常用T具有 哪些?这些工具用于表述什么?

解答:

需求分析的任务是通过与用户广泛的交流,准确定义未来系统的目标,确定为了满足用 户的需求系统必须做什么,用需求规格说明书规范地、准确地表达用户的需求。

需求分析要应得到如下内容:功能需求、性能需求、环境需求、界血需求、用户或人的 因素、文档要求、数据需求、资源需求、安全保密要求、软件成木消耗与开发进度需求、质 量保证。

需求分析的方法很多,如功能分析法、结构化分析法、信息建模法以及面向对象分析法

等。最常用的是基于功能分析的结构化分析法。

结构化分析法常用工具有数据流图、数据字典、结构化英语、判定表和判定树等工具。

数据流图从数据传递和加工的角度,描述系统的数据从输入到输岀的移动变换过程。数 据字典用于对数据流图屮包含的全体数据元索进行定义和说明。结构化语言用于描述数据流 图屮“加工”的处理步骤。判定表也称决策表,可用于处理结构化语言不易表述的复杂组合 条件,是描述多条件、多条忖动作的形式化工具。判定树是也称决策树,它的意义与判定表 一样,表述比判定表更加直观。

3.6数据流图有哪两类?分别表示什么意义?

解答:

根据“加工”的特征,可以将局部数据流图划分成两种类型,即变换型和事务型。

变换熨数据流的特点是:“加工”是按照时间顺序对数据流讲行处理的。事务型数据流 的特点是:接受一项事务,根据事务处理的特点和性质,选择一个适当的处理单元,然麻分 别处理分别给出结果。

3.7如何从数据流图导出软件结构图?

解答:

首先区分局部数据流图的类型,然后按照变换型和事务型数据流图的特点分别转换成对 应的软件结构图,最后合成一个整体。

3.8软件设计分成哪两步?每一步的任务是什么?

解答:

分为概要设计和详细设计两步。概要设计从数据流图出发,导出软件结构图,即划分软 件模块,界定模块间的调用关系,在此过程屮要充分考虑模块的独立性,即模块间的耦合性 和模块内部的内聚性。详细设计对每个软件模块内部的实现细节进行设计,用稈序流程图、 N-S图和PAD图等给出模块实现的具体流稈。

3.9什么是模块的独立性?模块的内聚和耦合是什么意义?有哪几种内聚和耦合? 一般 提倡使用什么内聚、什么耦合?

解答:

模块独立性是评价模块Z间彼此依赖稈度的一个评价标准,一般用耦合与内聚两个度量 标准。

耦合用于度量不同模块彼此间互相依赖的紧密程度,表明模块Z间的关系是否密切。耦 合性由低到高依次为非肓接耦合、数据耦合、同构耦合、控制耦合和公共耦合,一般推荐使 用数据耦合。内聚是衡量一个模块内部徐个元索彼此结合的紧密稈度,内聚从功能角度来衡 量模块内部的功能联系。内聚性由低到高依次为偶然内聚、逻辑内聚、时间内聚、过程内聚、 通信内聚、序列内聚和功能内聚,一般推荐使用功能内聚。

3.10详细设计阶段的任务是什么?通常使用什么工具来描述模块内部的流程?

解答:

详细设计阶段对每个软件模块内部的实现细节进行设计,用程序流程图、N・S图和PAD 图等给出模块实现的具体流程。

3.11什么是软件实现?软件实现包括哪儿步?

解答:

软件实现包括程序编码和程序测试两步。稈序编码就是用选定的程序设计语言将详细设 计的结构“翻译”成具体的程序代码。测试阶段的任务是尽可能多地发现与排除程序代码中 的错误。

3.12如何选择程序设计语言?从总体上说良好的稈序设计风格是什么?

解答:

为一个特定开发项目选择程序设计语言时,应该从技术角度、工程角度、心理学角度评 价和比较各种语言的适用范ffl,最终确定使用何种语言。

良好的稈序设计风格强调程序的简单和清晰,程序可读性和可理解性要强。即程序“结 构清晰第一,执行效率第二”。不可以牺牲稈序结构的清晰度来换取所谓的稈序执行效率。 在保证程序正确的基础上再要求提高效率。

3.13用户界面设计的任务是什么?友好用户界面应具备的特性是什么?

解答:

用户界面设计的任务分为结构设计、交互设计、视觉设计三个部分。

结构设计是界面设计的骨架,起始于需求分析阶段。在结构设计屮,基于系统功能 分类的功能目录结构和词语定义是非常重要的,设计的好坏是方便用户理解和操作的重 要前提。交互设计的目的是使用户界面简单易用,包括输入设计和输岀设计。视觉设计 考虑目标用户的心理特点,包括色彩、字体、页面等。视觉设计要达到用户愉悦使用的 目的。

友好用户界面应具备的特性(1)可使用性,它包括使用格式简单、使用标准化和一致 性的术语、系统响应速度快等(2)灵活性,它包括提供多种快捷使用方式、对不同级别的 用户提供不同的选项、提供不同详细程度的系统响应信息等。(3)复杂性和可靠性,它包括 应当使用户界面的复杂性越低越好、提供可靠的系统使用方式和数据安全保障。

3.14软件测试的任务和目的是什么?在软件生命周期屮哪些阶段涉及到测试工作? 解答:

软件测试的任务是使用人工或自动手段来运行或测定系统的过程,其目的在于检验它是 否满足规定的需求或是弄清预期结果与实际结果Z间的差别。

测试是为了发现程序中的错误而执行程序的过程。测试要以查找错误为目的,而不是以 演示软件的正确为目的的。测试只能证明程序屮有错误,而不能证明程序中无错误。

在软件开发的需求分析、概要设计、详细设计、编码和测试阶段都涉及到测试工作,即 测试贯穿在整个软件开发的全过程。

3.15软件测试分儿步?每一步测试什么?

解答:

软件测试过程一般按4个步骤进行:单元测试、集成测试、确认测试(验收测试)和系 统测试。

单元测试乂称为模块测试,是对程序设计的最小模块(程序单元)进行正确性检验的测

试。

集成测试也称为组装测试。将经过单元测试后的各模块全部放在一起,测试整个系统能 否正常T作。集成测试所涉及的内容包括:软件单元的接口测试、全局数据结构测试、边界 条件和非法输入测试等。

确认测试用以检杳软件是否实现了需求规格说明书中规定的全部功能要求、软件配置 (稈序、文档资料等)是否完整、正确、合理,其他的需求如可移植性、可维护性、兼容性、 错谋恢复能力等是否满足,确认测试是用户迸•行的测试。

系统测试是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬

件、外设、支撑软件、数据和人员等其他系统元素组合在一起,在实际使用环境下对计算机 系统进行的一系列集成测试和确认测试。系统测试必须在目标环境下运行,其功能在于评估 系统在目标环境屮的性能,发现和捕捉软件屮潜在的错误。系统测试的具体实施一般包括: 功能测试、性能测试、操作测试、配置测试、夕卜部接口测试、安全性测试、压力测试等。

3.16什么是白盒测试法?什么是黑盒测试法?它们部采用什么具体方法选择测试用 例?它们一般被用于测试的哪些阶段?

解答:

白盒测试是在稈序内部进行的,主要用于完成程序内部操作的验证。

H盒测试一般用于单元测试阶段。

白盒测试法具体的测试用例选择方法有:①逻笹覆盖测试,包括语句覆盖、判定覆盖、 条件覆盖、判定——条件覆盖、条件组合覆盖和路径覆盖等。②基木路径测试。

黑盒测试也称为功能测试或数据驱动测试,是针对软件已经实现的功能是否满足需求进 行的测试和验证。黑盒测试不考虑稈序内部的结构和内部特性,只依据稈序的需求和功能规 格说明,检查程序的功能是否符合它的功能说明。所以,黑盒测试是在软件接口处进行,完 成功能验证的。

黑盒测试一般用于集成测试、确认测试和系统测试。

黑盒测试法具体的测试用例选择方法有:等价类划分法、边界值分析法和错误推测法等。

3.17什么是调试?常用调试策略是什么?调试和测试的区别是什么?

解答:

程序调试的任务是诊断和改正程序中的错误。

常用调试策略有试探法、冋溯法、对分法(二分法)、归纳法和演绎法。

调试与测试不同,测试用于发现程序中的错误,调试是使用调试工具去定位并修改程序 屮的错误。软件测试贯穿于软件幣个生命周期,而调试主要在开发阶段讲行。

3.18什么是软件维护?有儿种维护?每种维护完成的任务是什么?

解答:

软件维护是对己交付使用的软件进行排错、修改和扩充的丁作。维护工作类型包括:纠 错性维护、完善性维护、适应性维护和预防性维护。