软件工程第三章习题及参考答案
软件工程(习题与参考答案)
![软件工程(习题与参考答案)](https://img.taocdn.com/s3/m/67df27f36137ee06eef91800.png)
第1章概述(习题与参考答案)[判断题]1. 由于今天个人计算机不断发展壮大,人们不再采用软件团队的开发方式。
(×)2. 由于软件是产品,因此可以应用其他工程制品所用的技术进行生产。
(×)3. 购买大多数计算机系统所需的硬件比软件更昂贵。
(×)4. 大多数软件产品在其生命周期中不需要增强功能。
(×)5. 大多数软件系统是不容易变化的,除非它们在设计时考虑了变化。
(√)6. 一般来说,软件只有在其行为与设计者的目标一致的情况下才能成功。
(×)[选择题]1. ()因素促使计算机系统越来越复杂。
(D)A. 计算机内存和存储容量上的巨大增长B. 外部输入/输出选项的更加多样性C. 计算机体系结构方面的深刻变化D. 以上所有选项2. 下面的()不再是现代软件工程师关注的问题。
(A)A. 为什么计算机硬件的成本这么高?B. 为什么软件需要很长时间才能完成?C. 为什么开发一个软件的成本这么高?D. 为什么不能在产品发布前去除软件错误?3. 软件会逐渐退化而不会磨损,其原因在于()。
(C)A. 软件通常暴露在恶劣的环境下B. 软件错误通常发生在使用之后C. 不断的变更使组件接口之间引起错误D. 软件备件很难订购4. 大多数软件仍然是定制开发的,其原因在于()。
(C)A. 软件组件重用是十分普遍的B. 可重用的组件太昂贵而无法使用C. 软件在不使用其他组件的情况下很容易构造出来D. 商业组件在很多应用领域中可以得到5. 下面的()说法是正确的。
(C)A. 软件危机在20世纪70年代末期全面爆发B. 当前先进的软件工程方法已经解决了软件危机的问题C. 软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题D. 软件危机是指在软件产品中存在一系列的质量问题6. 软件工程的基本目标是()。
(B)A. 消除软件固有的复杂性B. 开发高质量的软件C. 努力发挥开发人员的创造性潜能D. 更好地维护正在使用的软件产品7. ()是将系统化的、规范的、可定量的方法应用于软件的开发、运行和维护的过程,它包括方法、工具和过程三个要素。
第3章 软件工程基础(习题答案).doc
![第3章 软件工程基础(习题答案).doc](https://img.taocdn.com/s3/m/509995fdf18583d04864599f.png)
第3章习题答案3」什么是软件危机?为什么会岀现软件危机?解答:软件危机是指落后的软件生产方式无法满足开发复杂软件的需求,从而导致软件开发与维护过稈屮出现一系列严重的问题,主要表现在:(1)软件开发费用和进度估计不准。
(2)软件的正确性和可靠性难以保证。
(3)文档不全,导致软件维护难度加大。
总Z,可将软件危机归结为:成木、质量和生产率等问题。
到了20世纪50年代末和60年代初,随着计算机应用的普及,软件的规模和复杂度提高了,“家庭作功”式的方法已经无法适应软件的开发。
软件开发的周期变长、费用上涨,导致软件的生产效率下降、目标软件的正确性难于保证,即出现了“软件危机”。
3.2软件T程的概念是什么?软件T程的忖标和原则是什么?解答:软件工程是指导计算机软件开发和维护的一门学科。
软件工程从管理和技术两个方面,研究如何更好地开发和维护计算机软件,内容主要包括:软件开发技术和软件工程管理。
软件工程的日标是在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并且满足用户需求的软件产品。
软件工稈的原则,在软件开发各阶段,应遵循一些基木原则,包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
3.3什么是软件的生命周期?瀑布模型把软件生命周期划分成几个时期、几个阶段?每一个阶段的任务是什么?每个阶段产生的文档是什么?解答:软件从提出、开发、使用到退役的整个过稈称为软件生命周期,软件生命周期可划分为3个时期,共8个阶段,毎个阶段应完成的基本任务和产生的文档如下表所示。
时期阶段任务文档定义期(计划期)问题的定义理解用户要求,明确工作目标计划任务书可行性研究可行性方案分析需求分析软件系统的目标及应完成的任务需求规格说明书开发期概要设计(总体设计)(系统设计)系统逻辑设让,明确软件模块结构,及各模块间的调用关系软件概要设计说明书数据库/数据结构设计说明书集成测试计划详细设计系统的模块设计,对各模块进行功能说明,实现细节描述软件详细设计说明书编码编写程序代码程序、数据、详细注释测试和调试单元测试、集成测试测试大纲、方案,测试用例,测试结果维护期使用和维护运行和维护运行、修改记录3.4什么是结构化方法?结构化分析、结构化设计、结构化程序设计分别用在软件生命周期的哪一个阶段?解答:结构化开发方法是现有软件开发方法屮最成熟、应用最广泛的方法。
软件工程习题及答案第三章
![软件工程习题及答案第三章](https://img.taocdn.com/s3/m/83112f0f7f1922791688e8e4.png)
1、(√)软件需求分析阶段要确定软件系统要“做什么”。
2、(×)软件需求规格说明书可作为可行性研究的依据。
3、(√)需求分析员可以参加最后的需求评审工作。
4、(×)画数据流图时可以加少量的控制流,使加工之间有时序的关系。
5、(√)结构化分析模型的核心是数据词典。
6、(×)在数据流图中,带有箭头的线段表示的是控制流。
回答“系统必须做什么” 的问题, 即确定系统必须完成哪些工作, 对新系统提出完整、 准确、 清晰、具体的要求。
具体任务是:明确问题定义、导出软件的逻辑模型、编写软件需求规格说明书。 “做什么”,即深入描述软件的功能和性能,确定软件设计的限制和软件与其他系统元 素的接口细节,定义软件的其他有效性需求。
7、(×)在软件生产过程中,需求信息的来源是项目经理。
8、(√)需求分析阶段的任务是确定软件的功能。
二、选择题
1、需求分析最终结果是产生(B)。
A、项目开发计划B、需求规格说明书
C、设计说明书D、可行性分析报告
2、数据流图(DFD)是(A)方法中用于表示系统的逻辑模型的一种图形工具
A、SAB、SDC、SPD、SC
3、需求规格说明书的作用不包括(C)。
A、软件验收的依据
B、用户与开发人员对软件要做什么的共同理解
C、软件可行性研究的(D)中的各个成分的具体含义。
A、流程图B、功能结构图
D、数据流图
5、结构化分析方法(SA)是一种面向(B)的分析方法。
A、数据结构B、数据流
(2)学生按照准考证要求进入考场考试。考试完后将试卷交给阅卷站。
(3)阅卷站阅卷后把成绩表(包括每个考试科目、每个考生的分项分数)交给本系统 并输入计算机。
软件工程(习题与参考答案)
![软件工程(习题与参考答案)](https://img.taocdn.com/s3/m/7a40cc16876fb84ae45c3b3567ec102de2bddf67.png)
第1章概述〔习题与参考答案〕[判断题]1. 由于今天个人计算机不断开展壮大,人们不再采用软件团队的开发方式。
〔×〕2. 由于软件是产品,因此可以应用其他工程制品所用的技术进展生产。
〔×〕3. 购置大多数计算机系统所需的硬件比软件更昂贵。
〔×〕4. 大多数软件产品在其生命周期中不需要增强功能。
〔×〕5. 大多数软件系统是不容易变化的,除非它们在设计时考虑了变化。
〔√〕6. 一般来说,软件只有在其行为与设计者的目标一致的情况下才能成功。
〔×〕[选择题]1. 〔〕因素促使计算机系统越来越复杂。
〔D〕A. 计算机内存和存储容量上的巨大增长B. 外部输入/输出选项的更加多样性C. 计算机体系构造方面的深刻变化D. 以上所有选项2. 下面的〔〕不再是现代软件工程师关注的问题。
〔A〕A. 为什么计算机硬件的本钱这么高?B. 为什么软件需要很长时间才能完成?C. 为什么开发一个软件的本钱这么高?D. 为什么不能在产品发布前去除软件错误?3. 软件会逐渐退化而不会磨损,其原因在于〔〕。
〔C〕A. 软件通常暴露在恶劣的环境下B. 软件错误通常发生在使用之后C. 不断的变更使组件接口之间引起错误D. 软件备件很难订购4. 大多数软件仍然是定制开发的,其原因在于〔〕。
〔C〕A. 软件组件重用是十分普遍的B. 可重用的组件太昂贵而无法使用C. 软件在不使用其他组件的情况下很容易构造出来D. 商业组件在很多应用领域中可以得到5. 下面的〔〕说法是正确的。
〔C〕A. 软件危机在20世纪70年代末期全面爆发B. 当前先进的软件工程方法已经解决了软件危机的问题C. 软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题D. 软件危机是指在软件产品中存在一系列的质量问题6. 软件工程的根本目标是〔〕。
〔B〕A. 消除软件固有的复杂性B. 开发高质量的软件C. 努力发挥开发人员的创造性潜能D. 更好地维护正在使用的软件产品7. 〔〕是将系统化的、标准的、可定量的方法应用于软件的开发、运行和维护的过程,它包括方法、工具和过程三个要素。
软件工程(习题与参考答案)
![软件工程(习题与参考答案)](https://img.taocdn.com/s3/m/a2a95c2da5e9856a561260a5.png)
第1章概述(习题与参考答案)[判断题]1. 由于今天个人计算机不断发展壮大,人们不再采用软件团队的开发方式。
(×)2. 由于软件是产品,因此可以应用其他工程制品所用的技术进行生产。
(×)3. 购买大多数计算机系统所需的硬件比软件更昂贵。
(×)4. 大多数软件产品在其生命周期中不需要增强功能。
(×)5. 大多数软件系统是不容易变化的,除非它们在设计时考虑了变化。
(√)6. 一般来说,软件只有在其行为与设计者的目标一致的情况下才能成功。
(×)[选择题]1. ()因素促使计算机系统越来越复杂。
(D)A. 计算机内存和存储容量上的巨大增长B. 外部输入/输出选项的更加多样性C. 计算机体系结构方面的深刻变化D. 以上所有选项2. 下面的()不再是现代软件工程师关注的问题。
(A)A. 为什么计算机硬件的成本这么高?B. 为什么软件需要很长时间才能完成?C. 为什么开发一个软件的成本这么高?D. 为什么不能在产品发布前去除软件错误?3. 软件会逐渐退化而不会磨损,其原因在于()。
(C)A. 软件通常暴露在恶劣的环境下B. 软件错误通常发生在使用之后C. 不断的变更使组件接口之间引起错误D. 软件备件很难订购4. 大多数软件仍然是定制开发的,其原因在于()。
(C)A. 软件组件重用是十分普遍的B. 可重用的组件太昂贵而无法使用C. 软件在不使用其他组件的情况下很容易构造出来D. 商业组件在很多应用领域中可以得到5. 下面的()说法是正确的。
(C)A. 软件危机在20世纪70年代末期全面爆发B. 当前先进的软件工程方法已经解决了软件危机的问题C. 软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题D. 软件危机是指在软件产品中存在一系列的质量问题6. 软件工程的基本目标是()。
(B)A. 消除软件固有的复杂性B. 开发高质量的软件C. 努力发挥开发人员的创造性潜能D. 更好地维护正在使用的软件产品7. ()是将系统化的、规范的、可定量的方法应用于软件的开发、运行和维护的过程,它包括方法、工具和过程三个要素。
软件工程案例教程软件项目开发实践第三版第三章练习题
![软件工程案例教程软件项目开发实践第三版第三章练习题](https://img.taocdn.com/s3/m/ddc4bfe2360cba1aa811dae8.png)
练习题:一、填空题1.分析模型在系统级描述和软件设计之间建立了桥梁。
2.最常见的实体关系图的表示法是Peter Chen表示法和James Martin表示法。
3.结构化分析方法是面向数据流进行需求分析的方法。
结构化分析方法使用数据流图、数据字典、系统流程图等来描述。
4.在需求分析中,可从有关问题的简述中提取组成数据流图的基本成分。
通常问题简述中的动词短语将成为数据流图中的处理成分。
5.面向对象的需求分析中常用的UML图示有用例图、顺序图、状态图、活动图和协作图等。
二、判断题1.系统流程图表达了系统中各个元素之间信息的流动情况。
(√)2.用例需求分析方法采用的是一种结构化的情景分析方法,即一种基于场景建模的方法。
(×)3.面向对象分析方法认为系统是对象的集合,是以功能和数据为基础的。
(×)4.结构化分析方法适合于数据处理类型软件的需求分析。
(√)5.需求变更管理是需求管理过程中很重要的过程。
(√)6.软件需求规格说明的内容包括算法的详细描述。
(×)三、选择题1.软件开发过程中,需求活动的主要任务是(B)。
A.给出软件解决方案B.定义要求并建立系统模型C.定义模块算法D.给出系统模块结构2.软件需求规格说明文档中包括很多方面的内容,下述(D)不是软件需求规格说明文档中应包括的内容。
A.安全描述B.功能描述C.性能描述D.软件代码3.软件需求分析一般应确定的是用户对软件的(D)。
A.功能需求B.非功能需求C.性能需求D.功能需求和非功能需求4.结构化分析方法中,描述软件功能需求的常用工具有(A)。
A.数据流图,数据字典B.软件流程图,模块说明C.用例图,数据字典D.系统流程图,程序编码5.软件需求分析阶段建立原型的主要目的是(C)。
A.确认定系统的功能和性能要求B.确定系统的性能要求C.确定系统是否满足用户要求D.确定系统是否满足开发人员需求6.在需求分析阶段,需求分析人员需要了解用户的需求,认真仔细地调研、分析,最终应建立目标系统的逻辑模型并写出(B)。
软件工程习题与答案
![软件工程习题与答案](https://img.taocdn.com/s3/m/801d6372a9956bec0975f46527d3240c8547a144.png)
第1章概述(习题和参考答案)[推断题]1. 由于今日个人计算机不断发展壮大,人们不再接受软件团队的开发方式。
(×)2. 由于软件是产品,因此可以应用其他工程制品所用的技术进行生产。
(×)3. 购买大多数计算机系统所需的硬件比软件更昂贵。
(×)4. 大多数软件产品在其生命周期中不须要增加功能。
(×)5. 大多数软件系统是不简洁变更的,除非它们在设计时考虑了变更。
(√)6. 一般来说,软件只有在其行为和设计者的目标一样的状况下才能成功。
(×)[选择题]1. ()因素促使计算机系统越来越困难。
(D)A. 计算机内存和存储容量上的巨大增长B. 外部输入/输出选项的更加多样性C. 计算机体系结构方面的深刻变更D. 以上全部选项2. 下面的()不再是现代软件工程师关注的问题。
(A)A. 为什么计算机硬件的成本这么高?B. 为什么软件须要很长时间才能完成?C. 为什么开发一个软件的成本这么高?D. 为什么不能在产品发布前去除软件错误?3. 软件会慢慢退化而不会磨损,其缘由在于()。
(C)A. 软件通常暴露在恶劣的环境下B. 软件错误通常发生在运用之后C. 不断的变更使组件接口之间引起错误D. 软件备件很难订购4. 大多数软件照旧是定制开发的,其缘由在于()。
(C)A. 软件组件重用是特别普遍的B. 可重用的组件太昂贵而无法运用C. 软件在不运用其他组件的状况下很简洁构造出来D. 商业组件在许多应用领域中可以得到5. 下面的()说法是正确的。
(C)A. 软件危机在20世纪70年头末期全面爆发B. 当前先进的软件工程方法已经解决了软件危机的问题C. 软件危机是指在计算机软件的开发和维护过程中遇到的一系列严峻问题D. 软件危机是指在软件产品中存在一系列的质量问题6. 软件工程的基本目标是()。
(B)A. 消退软件固有的困难性B. 开发高质量的软件C. 努力发挥开发人员的创建性潜能D. 更好地维护正在运用的软件产品7. ()是将系统化的、规范的、可定量的方法应用于软件的开发、运行和维护的过程,它包括方法、工具和过程三个要素。
软件工程第一二三章习题参考答案
![软件工程第一二三章习题参考答案](https://img.taocdn.com/s3/m/2b768574f08583d049649b6648d7c1c708a10bf7.png)
第一章软件工程概述软件是计算机程序及其有关旳数据和文档旳结合。
软件危机是指在计算机软件开发和维护时所碰到旳一系列问题。
软件危机重要包括两方面旳问题: 一是怎样开发软件以满足对软件日益增长旳需求;二是怎样维护数量不停增长旳已经有软件。
软件工程是软件开发、运行、维护和引退旳系统措施。
软件工程是指导计算机软件开发和维护旳工程学科。
软件工程采用工程旳概念、原理、技术和措施来开发与维护软件。
软件工程旳目旳是实现软件旳优质高产。
软件工程学旳重要内容是软件开发技术和软件工程管理。
软件开发措施学是编制软件旳系统措施, 它确定软件开发旳各个阶段, 规定每一阶段旳活动、产品、验收旳环节和完毕准则。
常用旳软件开发措施有构造化措施、面向数据构造措施和面向对象措施等。
习题参照答案:1) 1. 什么是软件危机?为何会出现软件危机?2)答: 软件危机是指在计算机旳开发和维护过程中所碰到旳一系列严重问题。
这些问题决不仅仅是不能正常运行旳软件才具有旳, 实际上, 几乎所有软件都不一样程度地存在这些问题。
3)出现软件危机旳原因:首先与软件自身旳特点有关, 另首先也和软件开发与维护旳措施不对旳有关。
软件不一样于硬件, 它是计算机系统中逻辑件而不是物理部件。
管理和控制软件开发过程相称困难。
软件是规模庞大, 并且程序复杂性将伴随程序规模旳增长而呈指数上升。
目前相称多旳软件专业人员对软件开发和维护尚有不少糊涂观念, 在实践过程中或多或少地采用了错误旳措施和技术, 这是使软件问题发展成软件危机旳重要原因。
总结如下:4)获得对旳旳顾客需求和对旳地描述需求很困难5)开发人员对需求旳对旳理解也有困难6)常常在没有对旳理解之前就仓促开始编程7)软件项目缺乏有效旳组织、管理和内部交流8)缺乏软件开发措施、模型和工具旳支持9)软件维护旳困难性2. 假设你是一家软件企业旳总工程师, 当你把图1.1给手下旳软件工程师们观看, 告诉他们及早发现并改正错误旳重要性时, 有人不一样意你旳观点, 认为规定在错误进入软件之前就清除它们是不现实旳, 并举例说: “假如一种故障是编码错误导致旳, 那么, 一种人怎么能在设计阶段清除它呢?”你怎么反驳他?答: 在软件开发旳不一样阶段进行修改付出旳代价是很不相似旳, 在初期引入变动, 波及旳面较少, 因而代价也比较低;在开发旳中期, 软件配置旳许多成分已经完毕, 引入一种变动要对所有已完毕旳配置成分都做对应旳修改, 不仅工作量大, 并且逻辑上也更复杂, 因此付出旳代价剧增;在软件已经完毕时再引入变动, 当然付出旳代价更高。
软件工程答案
![软件工程答案](https://img.taocdn.com/s3/m/23e71d0c16fc700abb68fce9.png)
第3章软件项目管理(习题与参考答案)[选择题]1. 软件项目管理的“4P”是()。
(C)A. people,performance,payoff,productB. people,product,performance,processC. people,product,process,projectD. people,process,payoff,product2. ()项目管理在现代软件开发中是不太重要的,因为大多数项目能够及时完成并成功交付。
(B)A. 真B. 假3. 在软件开发的各种资源中,()是最重要的资源。
(C)A. 开发工具B. 方法C. 硬件环境D. 人员4. 软件项目规划的第一步是()。
(D)A. 确定项目预算B. 选择团队的组织模型C. 确定项目的约束D. 建立项目的目标和范围5. 下面的()方法最不适合你向团队成员解释他或她为什么表现不合格。
(B)A. 个人谈话B. 项目团队会议C. 正式报告D. 电子邮件6. 功能点估算技术需要以()为基础进行问题分解。
(A)A. 信息域B. 项目进度C. 软件功能D. 过程活动7. 软件开发团队的每一个成员都应该参与计划活动,以便()。
(C)A. 降低计划的粒度B. 深入地分析需求C. 所有成员同意该计划D. 开始设计8. 在攻克技术难题时,最佳的开发团队组织模型是()。
(A)A. 民主式结构B. 主程序员式结构C. 技术管理混合式结构D. 以上所有选项都不是9. 在选择开发团队组织结构时应考虑()因素。
(E)A. 沟通的复杂程度B. 最终程序的规模大小C. 发布日期的严格程度D. 项目预算的多少E. 选项A,B和C10. 在软件开发过程中避免受挫的最佳方法之一是()。
(A)A. 给予团队成员对于过程和技术决策的更多控制权B. 给予团队成员对于过程和技术决策的更少控制权C. 向团队成员隐瞒坏消息直到事情有所改善D. 根据生产效率奖励团队成员11. 下面的()软件特性不是引起项目协调困难的一个因素。
软件工程第3章 习题
![软件工程第3章 习题](https://img.taocdn.com/s3/m/463a4fe6f111f18582d05a51.png)
第3章习题一、选择题1)下列哪个选项不是需求分析的特点A)问题确定难C)交流共识难B)需求稳定性D)完备一致难2)软件质量必须从需求分析开始,在()加以保证。
A)开发之前B)开发之后C)可行性研究过程中D)整个开发过程3)SA 方法的基本思想是A)自底向上逐步抽象B)自底向上逐步分解C)自顶向下逐步分解D)自顶向下逐步抽象4)DFD 是常用的进行软件需求分析的图形工具,其基本符号是A)输入、输出、外部实体和加工B)变换、加工、数据流和存储C)加工、数据流和数据存储和外部实体D)变换、数据存储、加工和数据流5)判定表和判定树是DFD 中用以描述加工的工具,他通常描述的对象是A)逻辑判断B)层次分解C)操作条目D)组合组件6)系统流程图用于可行性分析中的( ) 的描述A)当前运行系统B)当前逻辑模型C)目标系统D)新系统7)在程序的描述和分析中,用于指明数据来源、流向和处理的辅助图形是A)数据结构图B)DFD C)业务结构图D)其他图8)U/C 矩阵是用来进行()的方法A)系统开发B)系统分析C)子系统划分D)系统规划9)需求规格说明书的作用不应该包括BA)软件设计的依据B)用户与开发人员对软件要做什么的共同理解C)软件验收的依据D)软件可行性研究的依据10)业务流程图是描述( ) 的工具A)逻辑系统的处理过程C)某个软件运行过程B)程序系统的处理过程D)某个具体业务的处理过程11)下面关于需求分析目的叙述,哪个选项是错误A)逐一细化软件的设计步骤B)面向用户获取并分析需求C)检查和解决不同需求间的矛盾,尽量达到均衡和优化D)确定软件的边界,以及软件与环境的相互作用方式12)下列哪个选项不是结构化分析具体步骤A)构建原系统物理模型C)建立新系统物理模型B)抽象原系统逻辑模型D)进一步补充和优化13)下面关于需求报告和需求规格说明书两者之间区别的叙述,哪个选项是错误的A)用户需求报告对外,需求规格说明书对内使用B)用户需求报告是合同的产物,需求规格说明书是立项建议书的产物C)通过用户需求报告可产生需求规格说明书D)需求规格说明书从业务领域的角度定义高层的需求14)下列哪个选项不属于需求分析的任务A.确定总体目标及组织结构1附件3:阶段测试题排版格式B.深入领域分析,画出业务流程图C.确定系统逻辑模型D.确定功能需求,完成功能结构图及点列表15)下列哪个选项不属于需求分析的任务A.获取性能需求,列出性能点列表B.明确系统规模和目标C.确定系统运行环境及界面D.修正开发计划和新系统方案16)下面是关于开展需求分析工作技巧的叙述,哪个选项是错误的A) 需求分析是分析师与设计师双方进行配合的项目,需要密切交流合作。
软件工程第一二三章习题参考答案
![软件工程第一二三章习题参考答案](https://img.taocdn.com/s3/m/bf06dd92f705cc1754270941.png)
请问:
(1)为什么鲍曼拆下存储器就能摆脱计算机的干扰而独自控制宇宙飞船?我们现在遇到的软件问题有这么严重吗?
(2)如果不依靠飞行指挥中心,鲍曼怎样才知道HAL的故障预报有问题?
(3)应该怎样设计计算机系统,才能避免出现故事中描述的这类问题?
3.什么是软件工程?它有哪些本质特性?怎样用软件工程消除(至少是缓解)软件危机?
答:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
软件工程本质特性:1)软件工程关注于大型程序的构造;2)软件工程的中心课题是控制复杂性;3)软件经常变化;4)开发软件的效率非常重要;5)和谐地合作是开发软件的关键;6)软件必须有效地支持它的用户;7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。
消除软件危机的途径:为了消除软件危机,首先应该对计算机软件有一个正确的认识。必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。应该开发和使用更好的软件工具。为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。
软件工程第一二三章习题参考答案
人怎么能在设计阶段清除它呢?”你怎么反驳他?
答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件已经完成时再引入变动,当然付出的代价更高。一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是整体构架的错误。
软件工程第一二三章习题参考答案
![软件工程第一二三章习题参考答案](https://img.taocdn.com/s3/m/f0bf4734b52acfc789ebc9a8.png)
第一章软件工程概述软件是计算机程序及其有关的数据和文档的结合。
软件危机是指在计算机软件开发和维护时所遇到的一系列问题。
软件危机主要包含两方面的问题:一是如何开发软件以满足对软件日益增长的需求;二是如何维护数量不断增长的已有软件。
软件工程是软件开发、运行、维护和引退的系统方法。
软件工程是指导计算机软件开发和维护的工程学科。
软件工程采用工程的概念、原理、技术和方法来开发与维护软件。
软件工程的目标是实现软件的优质高产。
软件工程学的主要内容是软件开发技术和软件工程管理。
软件开发方法学是编制软件的系统方法,它确定软件开发的各个阶段,规定每一阶段的活动、产品、验收的步骤和完成准则。
常用的软件开发方法有结构化方法、面向数据结构方法和面向对象方法等。
习题参考答案:1.什么是软件危机?为什么会出现软件危机?答:软件危机是指在计算机的开发和维护过程中所遇到的一系列严重问题。
这些问题决不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。
出现软件危机的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
软件不同于硬件,它是计算机系统中逻辑件而不是物理部件。
管理和控制软件开发过程相当困难。
软件是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。
目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这是使软件问题发展成软件危机的主要原因。
总结如下:1)取得正确的用户需求和正确地描述需求很困难2)开发人员对需求的正确理解也有困难3)常常在没有正确理解之前就仓促开始编程4)软件项目缺乏有效的组织、管理和内部交流5)缺乏软件开发方法、模型和工具的支持6)软件维护的困难性2.假设你是一家软件公司的总工程师,当你把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意你的观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”你怎么反驳他?答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件已经完成时再引入变动,当然付出的代价更高。
软件工程第三章课后题
![软件工程第三章课后题](https://img.taocdn.com/s3/m/02fb1908caaedd3383c4d3ed.png)
一、选择题
1、产品特性可以称为质量属性,在众多质量属性中,对于开发人员来说重要的属性有哪些()
A.有效性、效率、灵活性、互操作性
B. 可维护性、可移植性、可重用性、可测试性
C. 完整性、可靠性、健壮性、可用性
D. 容错性、易用性、简洁性、正确性
2、需求包括11个方面的内容,其中网络和操作系统的要求属于()
A .质量保证 B.环境需求 C.安全保密需求 D .性能需求
3、需求分析过程应该建立3种模型,它们分别是数据模型、功能模型、行为模型。
以下几种图形中,()属于功能模型,()属于数据模型,()属于行为模型。
A.实体-联系图(ERD)
B.数据流图(DFD)
C.状态转换图(STD)
D.鱼骨图
4、常用的需求分析方法有:面向数据流的结构化分析方法(SA),面向对象的分析方法(OOA),下列()不是结构化分析方法的图形工具。
A.决策树 B.数据流图 C.数据字典 D.快速原型
二、简答题
1.软件需求分析阶段的目的是澄清用户的要求,并把双方共同的理解明确地表达成一份书面文档的称为:
2.需求分析的步骤是:
三、问答题
1、常规的需求获取的方法有哪些?
答案:
一、1.B
2. B
3. B A C
4. D
二、1.软件需求规格说明书。
2.需求获取、分析建模、文档编写、需求验证。
三、1.(1)复查现有报表、表格和过程描述(2)面谈,观察并记录商业过程(3)分发收集调查表(4)访谈(5)情景分析(6)面向数据流分析。
软件工程第三章习题及参考答案
![软件工程第三章习题及参考答案](https://img.taocdn.com/s3/m/db16cbd2c850ad02df804155.png)
第三章习题及参考答案1、用逐步求精方法解决下述得更新顺序主文件得问题。
美国某杂志社需要一个软件,以更新存有该杂志订户姓名、地址等数据得顺序主文件。
共有插入、修改与删除等3种类型得事务,分别对应于事务代码1、2与3。
也就就是说,事务类型如下:类型1:INSERT(插入一个新订户到主文件中)类型2:MODIFY(修改一个已有得订户记录)类型3:DELETE(删除一个已有得订户记录)事务就是按订户名字得字母顺序排序得。
如果对一个订户既有修改事务又有删除事务,则已对那个订户得事务排好次序了,以便使修改发生在删除之前。
2.分析图3、1所示得层次图,确定每个模块得内聚类型。
3.分析图3、2,确定模块之间得耦合类型。
在图3、2中已经给模块之间得接口编了号码,表3、1描述了模块间得接口。
4、假设您在一所职业高中工作,负责该校信息系统得建设与维护。
财务科长请您研究用学校拥有得微型计算机生成工资明细表与各种财务报表得可能性。
请详细描述您用结构化分析方法分析上述问题得过程。
用面向数据流方法设计工资支付系统得软件结构。
5.用3种方法计算图3、3所示流图得环形复杂度。
6、图3、4就是用程序流程图描绘得程序算法,请把它改画为等价得盒图。
7、某交易所规定给经纪人得手续费计算方法如下:总手续费等于基本手续费加上与交易中得每股价格与股数有关得附加手续费。
如果交易总金额少于1000元,则基本手续费为交易金额得8、4%;如果交易总金额在1000元到10000元之间,则基本手续费为交易金额得5%,再加34元;如果交易总金额超过10000元,则基本手续费为交易金额得4%加上134元。
当每股售价低于14元时,附加手续费为基本手续费得5%,除非买进、卖出得股数不就是100得倍数,在这种情况下附加手续费为基本手续费得9%。
当每股售价在14元到25元之间时,附加手续费为基本手续费得2%,除非交易得股数不就是100得倍数,在这种情况下附加手续费为基本手续费得6%。
《软件工程》(第五版)习题参考答案
![《软件工程》(第五版)习题参考答案](https://img.taocdn.com/s3/m/2f7b7c88de80d4d8d15a4fb3.png)
《软件工程》(第五版)习题参考答案
第1章 一、判断题 1、(×)软件的维护与硬件维护本质上是相同的。 2、(√)软件在运行和使用中也存在退化问题。 3、(×)软件危机的产生主要是因为程序设计人员使用了不适 当的程序设计语言。 4、(√)软件同其他事物一样,有孕育、诞生、成长、成熟和 衰亡的生存过程。 5、(×)文字处理软件 Word 属于系统软件。应用软件 6、(√)原型是软件的一个早期可运行的版本,它反映最终系 统的部分重要特性。 7、(√)软件开发过程中,一个错误发现得越晚,为改正它所 付出的代价就越大。 8、(×)快速原型模型对软件开发人员的水平要求不高。 9、(√)喷泉模型适合于面向对象的软件开发。 10、(×)面向对象开发方法的主要缺点是在适应需求变化方面 不够灵活。 二、选择题 1、软件是一种(C)。 A、程序 B、数据
D、合同文档 14、结构化分析方法是以数据流图、(D)和加工说明等描述工 具,即用直观的图和简洁的语言来描述软件系统模型。 A、DFD 图 B、PAD 图 C、IPO 图 D、DD 15、软件需求分析阶段的工作,可以分为四个方面:需求获取、 需求分析、编写需求规格说明书以及(B)。 A、阶段性报告 B、需求评估 C、总结 D、都不正确 16、数据流图用于抽象描述一个软件的逻辑模型,数据流图由一 些特定的图符构成。下面图符名称标识的图符不属于数据流图合 法图符的是(A)。 A、控制流 B、加工 C、数据存储 D、源点和终点 17、DFD 用于描述系统的(D)。 A、数据结构
软件工程(习题及参考答案)
![软件工程(习题及参考答案)](https://img.taocdn.com/s3/m/d6e9ebbb3b3567ec112d8a8f.png)
第1章概述(习题与参考答案)[判定题]1. 由于今天个人运算机不断进展壮大,人们再也不采纳软件团队的开发方式。
(×)2. 由于软件是产品,因此能够应用其他工程制品所用的技术进行生产。
(×)3. 购买大多数运算机系统所需的硬件比软件更昂贵。
(×)4. 大多数软件产品在其生命周期中不需要增强功能。
(×)5. 大多数软件系统是不容易转变的,除非它们在设计时考虑了转变。
(√)6. 一样来讲,软件只有在其行为与设计者的目标一致的情形下才能成功。
(×)[选择题]1. ()因素促使运算机系统愈来愈复杂。
(D)A. 运算机内存和存储容量上的庞大增加B. 外部输入/输出选项的加倍多样性C. 运算机体系结构方面的深刻转变D. 以上所有选项2. 下面的()再也不是现代软件工程师关注的问题。
(A)A. 什么缘故运算机硬件的本钱这么高?B. 什么缘故软件需要很长时刻才能完成?C. 什么缘故开发一个软件的本钱这么高?D. 什么缘故不能在产品发布前去除软件错误?3. 软件会慢慢退化而可不能磨损,其缘故在于()。
(C)A. 软件通常暴露在恶劣的环境下B. 软件错误通常发生在利用以后C. 不断的变更使组件接口之间引发错误D. 软件备件很难订购4. 大多数软件仍然是定制开发的,其缘故在于()。
(C)A. 软件组件重用是十分普遍的B. 可重用的组件太昂贵而无法利用C. 软件在不利用其他组件的情形下很容易构造出来D. 商业组件在很多应用领域中能够取得5. 下面的()说法是正确的。
(C)A. 软件危机在20世纪70年代末期全面暴发B. 当前先进的软件工程方式已经解决了软件危机的问题C. 软件危机是指在运算机软件的开发和保护进程中碰到的一系列严峻问题D. 软件危机是指在软件产品中存在一系列的质量问题6. 软件工程的大体目标是()。
(B)A. 排除软件固有的复杂性B. 开发高质量的软件C. 尽力发挥开发人员的制造性潜能D. 更好地保护正在利用的软件产品7. ()是将系统化的、标准的、可定量的方式应用于软件的开发、运行和保护的进程,它包括方式、工具和进程三个要素。
软件工程第三章习题及参考答案
![软件工程第三章习题及参考答案](https://img.taocdn.com/s3/m/db16cbd2c850ad02df804155.png)
第三章习题及参考答案1、用逐步求精方法解决下述得更新顺序主文件得问题。
美国某杂志社需要一个软件,以更新存有该杂志订户姓名、地址等数据得顺序主文件。
共有插入、修改与删除等3种类型得事务,分别对应于事务代码1、2与3。
也就就是说,事务类型如下:类型1:INSERT(插入一个新订户到主文件中)类型2:MODIFY(修改一个已有得订户记录)类型3:DELETE(删除一个已有得订户记录)事务就是按订户名字得字母顺序排序得。
如果对一个订户既有修改事务又有删除事务,则已对那个订户得事务排好次序了,以便使修改发生在删除之前。
2.分析图3、1所示得层次图,确定每个模块得内聚类型。
3.分析图3、2,确定模块之间得耦合类型。
在图3、2中已经给模块之间得接口编了号码,表3、1描述了模块间得接口。
4、假设您在一所职业高中工作,负责该校信息系统得建设与维护。
财务科长请您研究用学校拥有得微型计算机生成工资明细表与各种财务报表得可能性。
请详细描述您用结构化分析方法分析上述问题得过程。
用面向数据流方法设计工资支付系统得软件结构。
5.用3种方法计算图3、3所示流图得环形复杂度。
6、图3、4就是用程序流程图描绘得程序算法,请把它改画为等价得盒图。
7、某交易所规定给经纪人得手续费计算方法如下:总手续费等于基本手续费加上与交易中得每股价格与股数有关得附加手续费。
如果交易总金额少于1000元,则基本手续费为交易金额得8、4%;如果交易总金额在1000元到10000元之间,则基本手续费为交易金额得5%,再加34元;如果交易总金额超过10000元,则基本手续费为交易金额得4%加上134元。
当每股售价低于14元时,附加手续费为基本手续费得5%,除非买进、卖出得股数不就是100得倍数,在这种情况下附加手续费为基本手续费得9%。
当每股售价在14元到25元之间时,附加手续费为基本手续费得2%,除非交易得股数不就是100得倍数,在这种情况下附加手续费为基本手续费得6%。
软件工程第3章习题解答
![软件工程第3章习题解答](https://img.taocdn.com/s3/m/1499ac217fd5360cba1adb8d.png)
第3章《结构化分析》习题解答习题1银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率、密码(可选)等信息,并印出存款单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。
请用数据流图描绘本系统的功能,并用实体-关系图描绘系统中的数据对象。
解答:(1)数据流图:基本模型:第二级模型(最终结果——完整的DFD图):姓名 帐号 取款单核对1金额取款清单1存款单 存款存款清单11姓名住址 身份证号存款类型 存款日期 金额到期日期电话利率储户取款单姓名 住址 电话身份证号 存款单 填写1 nn填写1储户姓名住址 电话身份证号 填写1 n n填写1存款存款清单11姓名住址 身份证号存款类型 存款日期金额到期日期电话利率 存款单姓名 帐号取款单核对1 金额取款清单 1(2)实体关系图ER :E-R 图1:E-R 图2:E-R 图3:总E-R 图:旅客 订票 旅行社 n m姓名 性别 身份证号目的地工作单位 旅行时间 服务 合约 航空公司 n n1 1 为方便旅客,某航空公司拟开发一个机票预定系统。
旅行社把预定机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入进该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统校对无误即印出机票给旅客。
请用实体-关系图描绘本系统中的数据对象并用数据流图描绘本系统的功能。
解:总E-R 图:病人系统 生成 患者日志 n 1 姓名 性别 脉搏体温心电图血压 监护 通信 系统nm 1 1 值班护士目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还会延误抢救时机。
某医院打算开发一个以计算机为中心的患者监护系统,请画出本系统的实体-关系图和数据流图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章习题及参考答案1.用逐步求精方法解决下述的更新顺序主文件的问题。
美国某杂志社需要一个软件,以更新存有该杂志订户姓名、地址等数据的顺序主文件。
共有插入、修改和删除等3种类型的事务,分别对应于事务代码1、2和3。
也就是说,事务类型如下:类型1:INSERT(插入一个新订户到主文件中)类型2:MODIFY(修改一个已有的订户记录)类型3:DELETE(删除一个已有的订户记录)事务是按订户名字的字母顺序排序的。
如果对一个订户既有修改事务又有删除事务,则已对那个订户的事务排好次序了,以便使修改发生在删除之前。
2.分析图3.1所示的层次图,确定每个模块的内聚类型。
3.分析图3.2,确定模块之间的耦合类型。
在图3.2中已经给模块之间的接口编了号码,表3.1描述了模块间的接口。
4. 假设你在一所职业高中工作,负责该校信息系统的建设与维护。
财务科长请你研究用学校拥有的微型计算机生成工资明细表和各种财务报表的可能性。
请详细描述你用结构化分析方法分析上述问题的过程。
用面向数据流方法设计工资支付系统的软件结构。
5.用3种方法计算图3.3所示流图的环形复杂度。
6. 图3.4是用程序流程图描绘的程序算法,请把它改画为等价的盒图。
7. 某交易所规定给经纪人的手续费计算方法如下:总手续费等于基本手续费加上与交易中的每股价格和股数有关的附加手续费。
如果交易总金额少于1000元,则基本手续费为交易金额的8.4%;如果交易总金额在1000元到10000元之间,则基本手续费为交易金额的5%,再加34元;如果交易总金额超过10000元,则基本手续费为交易金额的4%加上134元。
当每股售价低于14元时,附加手续费为基本手续费的5%,除非买进、卖出的股数不是100的倍数,在这种情况下附加手续费为基本手续费的9%。
当每股售价在14元到25元之间时,附加手续费为基本手续费的2%,除非交易的股数不是100的倍数,在这种情况下附加手续费为基本手续费的6%。
当每股售价超过25元时,如果交易的股数零散(即,不是100的倍数),则附加手续费为基本手续费的4%,否则附加手续费为基本手续费的1%。
要求:(1)用判定表表示手续费的计算方法;(2)用判定树表示手续费的计算方法。
8. 画出下列伪码程序的程序流程图和盒图。
STARTIFPTHENWHILEqDOfENDDOELSEBLOCKgnENDBLOCKENDIFSTOP9.图3.5给出的程序流程图代表一个非结构化的程序,请问:(1)为什么说它是非结构化的?(2)设计一个与它等价的结构化程序。
(3)在(2)题的设计中你使用附加的标志变量flag了吗?若没用,请再设计一个使用flag的程序;若用了,请再设计一个不用flag的程序。
10. 研究下面给出的伪码程序,要求:(1)画出它的程序流程图;(2)它是结构化的还是非结构化的?说明你的理由;(3)若是非结构化的,则(a)把它改造成仅用三种控制结构的结构化程序;(b)写出这个结构化设计的伪码;(c)用盒图表示这个结构化程序。
(4)找出并改正程序逻辑中的错误。
参考答案1.答:解决任何问题之前都必须首先理解问题,对问题理解得越深入,解决起来也就越容易。
为了获得对顺序主文件更新问题的直观、具体的认识,首先设想一个典型的主文件(称为旧的主文件)、一个事务文件和更新后得到的新的主文件及异常情况报告,如图3.8所示。
为了简单起见,在图3.8中忽略了主文件和事务文件中所包含的订户地址信息。
从图3.8可以看出,更新顺序主文件系统有下述2个输入文件:①旧的主文件(由包含订户姓名、地址信息的记录组成);②事务文件。
系统还有3个输出文件:①新的主文件;②异常报告;③摘要和工作结束信息。
图3.9描绘了设想的顺序主文件更新系统的概貌。
然后用逐步求精方法设计图3.9中关键的黑盒子“更新主文件”的实现算法。
逐步求精方法实质上是“自顶向下”的设计方法,它通过不断分层细化解决问题的算法来设计软件。
它不像“各个击破”技术那样把整个问题分解为若干个重要程序相同的子问题。
在用逐步求精方法设计软件的过程中,软件的某个特定方面的重要性在一次又一次的求精中是变化的。
最初,某个问题可能无关紧要,但后来同样的问题会变得相当重要。
换句话说,可以把逐步求精方法看作是建立某个阶段内需要解决的各种问题的优先级的一种技术。
它能确保每个问题都在恰当的时间得到解决,而且在任何时刻都不需要同时解决7个以上问题。
使用逐步求精方法设计软件的难点在于,在当前的求精步骤中确定哪些是必须处理的重要事项,哪些事项应该推迟到后面的求精步骤中去处理。
作为对“更新主文件”的第一步求精,我们把它分解为3个处理框,分别称为“输入”、“处理”和“输出”,如图3.10所示。
在这个设计步骤中假设,当“处理”需要一个记录时,我们能够在那个时候输入正确的记录。
同样,我们也能够在当时把正确的记录写入到正确的文件中。
也就是说,在把逐步求精方法法运用到解决更新主文件这个问题时,我们是把输入和输出这两方面的问题暂时分离出去,集中精力设计“处理”的算法。
为了搞清楚怎样按照事务文件的指示,更新旧的主文件产生新的主文件,也就是说,为了设计出处理的算法,让我们再一次研究图3.8所示的例子。
把第一个事务记录(Brown)的关键字与第一个旧的主文件记录(Abel)的关键字相比较。
因为Brown按字母顺序排在Abel的后面,把Abel记录不加更改地写入新的主文件后,读取下一个旧的主文件记录(Brown)。
现在,事务记录的关键字与旧的主文件记录的关键字相同,又因为事务的类型是3(删除),所以必须删除Brown记录,这可通过不把Brown记录复制到新的主文件中来实现。
接下来读取下一个事务记录(Haris)和下一个旧的主文件记录(James),分别在各自的缓冲区里覆盖Brown记录,因为Haris在James之前,而且事务类型为1(插入),所以把Haris记录写到新的主文件中以实现插入。
读取下一个事务记录(Jones),因为Jones在James之后,把James记录复制到新的主文件中,然后读取下一个旧的主文件记录,在旧文件记录缓冲区中得到Jones记录。
现在事务记录关键字与旧的主文件记录关键字相同,正如从事务文件中看到的那样,先修改旧的主文件记录(Jones记录),然后把它删除,以便读取下一个事务记录(Smith)和下一个旧的主文件记录(也是Smith)。
遗憾的是,事务类型是1(插入),但是在旧的主文件中已经有Smith记录了,因此,在输入数据中有错误,将Smith记录写入异常报告中。
更确切地说,将Smith事务记录写入异常报告,而把Smith旧的主文件记录写入新的主文件。
总结上述例子中揭示出的处理过程,得到表3.2所示的处理规则。
根据表3.2所示的处理规则,可以对图3.10中的“处理”框求精,得图3.11所示的第2步求精结果。
为减少连线(特别是为了减少交叉线),在这张流程图中用标有相同字母(例如,字母A)的圆代表应该连在一起的点。
图中连到“输入”和“输出”方框的虚线表示把如何处理输入和输出的设计决定推迟到较晚的求精步骤中再做出,该图其余部分是实现“处理”的流程图,或者说是对处理事务的算法的初步求精结果。
正如刚才讲过的,已把对输入和输出问题的考虑推迟了,此外,还没有规定文件结束的条件,也没有规定遇到出错条件时应该怎样处理。
逐步求精方法的优点就在于可以把这类问题推迟到后面的求精步骤中去解决。
下一个设计步骤是求精图3.11中的“输入”和“输出”两个处理框,得到图3.12。
在这个设计步骤中仍然没有处理到文件结束的条件,也没有写入工作结束的信息,这些设计工作可以在后面的求精步骤中完成。
使用逐步求精方法设计软件时,每完成一个求精步骤都必须对这个求精步骤得出的设计结果仔细审查,没有发现错误才能进行下一个求精步骤的设计工作,如果发现了错误则应该及时纠正。
审查图3.12可以发现,该设计包含一个严重错误。
考虑图3.8中给出的数据可以发现这个错误。
假设当前的事务是2Jones,也就是修改Jones记录,并且当前的旧的主文件记录是Jones。
在图3.12的设计中,因为事务记录的关键字与旧的主文件记录的关键字相同,沿最左边的路径到达“测试事务类型”判定框。
因为当前的事务类型是“修改”,所以修改旧的主文件记录并把修改后的记录写入新的主文件。
然后读取下一个事务记录,该记录是3Jones,也就是删除Jones 记录,但是,已经把修改后的Jones记录写入新的主文件记录了。
在用逐步求精方法设计软件的过程中对每个求精步骤得出的设计结果都进行严格审查的好处是,一旦发现了错误,不必从头开始重做一遍,只需回到前一步的设计结果,从那里开始重新设计即可。
在本设计中,第二步求精的结果(见图3.11)是正确的,可以把它作为第三步求精的基础。
正如刚才讲过的,图3.12所示设计的错误在于,当事务类型为2(修改)时没有考虑下一个事务的影响,就把修改后的主文件记录写入新的主文件了。
为了改正上述错误,我们采用“前瞻一步”的策略,也就是说,只有在分析了一个事务记录的下一个事务记录之后,才能处理该事务记录。
更具体地说,当一个事务记录的类型为“修改”时,修改缓冲区中的旧主文件记录,然后读取下一个事务记录,如果刚读出的事务记录的关键字与缓冲区中的旧主文件记录的关键字不相同,则把缓冲区中已经修改过的旧主文件记录写入新的主文件;如果新读出的事务记录的关键字与主文件记录关键字相同,则依据新的事务记录的类型来处理缓冲区中的旧主文件记录。
由于事务文件是预先排好序的,当新读出的事务记录与主文件记录有相同的关键字时,也就是新读出的事务记录与前一个事务记录是针对同一个订户的事务时,新读出的事务记录的类型只可能是“修改”或“删除”(已知前一个事务记录的类型是“修改”)。
采用“前瞻一步”的设计策略,得出图3.13所示的第三步求精结果。
为简单起见,当针对同一位订户有多个事务时,仅考虑了在修改事务之后又有修改事务或删除事务的情况。
实际上,如果对事务文件先进行预处理,使得针对每位订户最多只有一个事务,则更新顺序主文件的算法可大大简化。
下面列出对事务文件可能做的一些预处理:如果针对同一个订户有多个修改事务,则仅保留最后一个修改事务(本问题中的主文件记录仅有订户姓名和地址两项信息,多次修改地址则以最后一次修改为准);若插入一位新订户记录后,又有零或多个修改事务,最后是一个删除事务,则略去这一系列事务;若对一个订户记录既有修改事务又有删除事务,则略去修改事务,仅保留删除事务;若针对一位订户既有插入事务又有修改事务,则用修改事务的内容(地址信息)更正插入事务的内容(地址信息),然后删去这个修改事务。
在第4次求精的过程中,应该考虑迄今为止被忽略的诸如打开和关闭文件这样的细节问题。