锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

软件工程期末复习题

时间:2023-12-02 23:07:00 1218s2ac接近传感器1226s2ac接近传感器

软件工程概述
例题分析

软件是计算机系统中与硬件相互依存的另一部分,包括( A )、( B )及( C )完整集合。( A )是根据事先设计的功能和性能要求执行的指令序列。( B )数据结构使程序能够正确操作信息。( C )与程序开发、维护和使用相关的图形材料。
选择答案:
AC. ① 软件 ② 程序 ③ 代码 ④ 硬件
⑤ 文档 ⑥ 外设 ⑦ 数据 ⑧ 图表
答案:A. ②, B. ⑦, C. ⑤
分析:软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据和相关文件的完整集合。程序是根据事先设计的功能和性能要求执行的指令序列。数据是使程序能够正确操作信息的数据结构。文档是与程序开发、维护和使用相关的图形材料。需要注意的是,程序和算法有不同的含义:算法的每一个指令都必须是最基本的,必须通过有限的步骤完成,而程序没有这个要求。
在开发软件时,提高软件开发人员的工作效率至关重要( A )。软件工程中描述生存周期的瀑布模型一般包括计划、( B )、设计、编码、测试、维护等阶段可分为管理阶段( C )和( D )两步。
选择答案:
A. ① 环境的程序开发 ② 操作系统的资源管理功能
③ 程序员数量 ④ 计算机并行处理能力
B. ① 需求分析 ② 需求调查 ③ 可行性分析 ④ 问题定义
C、D.① 方案设计 ② 代码设计 ③ 概要设计 ④ 数据设计
⑤ 运行设计 ⑥ 详细设计 ⑦ 故障处理设计 ⑧ 软件系统结构设计
答案:A. ①, B. ①, C. ③, D. ⑥
分析:有适当的程序开发环境可以提供有用的工具,大大提高开发人员的工作效率。
描述软件生存周期的瀑布模型一般包括六个阶段:计划、需求分析、设计、编码、测试和运行维护。需求分析完成了软件产品在功能、性能、用户界面、运行环境、可靠性、安全性、开发资源、开发进度、开发成本等方面的需求定义。问题定义、可行性分析和需求调查可能是需求分析的一部分。
软件设计分为两个步骤:总体设计和详细设计。总体设计的目标是建立软件的系统结构,完成全局数据结构设计,同时进行处理设计、操作配置设计、错误处理设计、故障恢复设计等。详细的设计是设计每个模块的操作控制过程和局部数据结构。
例3从选择的答案中选择适当的句子,并填写以下关于软件开发过程的描述( )内。
有人将软件的开发过程分为四个阶段:
第一阶段(1950~1950年代末)被称为程序设计的原始时期( A ),也没有( B ),程序员只能用机器指令编写程序。
第二阶段(1950年代末~1960年代末)被称为基本软件期。( A ),并逐渐普及( B )编译技术的发展也有了很大的发展。
第三阶段(1960年代末至1970年代中期)被称为程序设计方法时代。在此期间,与硬件成本下降相反,软件开发成本急剧上升。人们提出( C )和( D )等程序设计方法,尽量降低软件开发成本。
第四阶段(1970年代中期~现在)被称为软件工程时期。软件开发技术不再仅仅是程序设计技术,而是包括软件开发的各个阶段,如( E )、( F )、编码、单元测试、综合测试( G )及其整体有关的各种管理技术。
选择答案:
A D:① 汇编语言 ② 操作系统 ③ 虚拟存储概念 ④ 高级语言
⑤ 结构化程序设计 ⑥ 数据库概念 ⑦ 固件 ⑧ 模块化程序设计
E G:① 使用和维护 ② 确认兼容性 ③ 确认完整性 ④ 设计
⑤ 需求定义 ⑥ 图象处理
答案:A. ①, B. ④, C. ⑤, D. ⑧, E. ⑤, F. ④, G. ①。注意,C可以交换D的答案顺序。
分析:在软件开发的早期阶段,汇编语言和高级语言尚未出现,人们只能使用机器指令来编写程序。一些指令系统可以用八进制代码书写,以便易读。后来,由于汇编语言的出现,人们摆脱了繁重的地址分配,可以用符号编程。随着高级语言的出现和普及,人们用类似自然语言的句子编写程序,大大减轻了程序员的负担。从解释执行到编译执行,高级语言的处理效率和存储利用率不断提高。
结构化程序设计和模块化程序设计是科学家为解决软件危机,借用其它领域的技术改进程序设计方法而提出来的。由于这些技术的使用,提高了程序开发的可读性、局部性、抽象性、清晰性、简单性、确定性和一致性。后来发展到软件工程阶段,明确了软件开发阶段,规范了软件开发过程,明确了各阶段的任务、应交付的成果和里程碑,使软件开发逐步工程化、标准化。

习题

【1-1】软件工程过程有哪几个基本过程活动?试说明之。
试着说明软件生存周期的概念。
试探瀑布模型软件开发方法的基本过程。
【1-4】软件工程是一种系统的软件开发、运行、维护和修复方法包含哪些要素?试着解释一下。
软件工程的基本原则是什么?试着解释一下。
【1-6】有人说:软件开发时,发现错误越晚,纠正错误的代价就越大。对吗?请解释你的回答。

习题解答

【1-1】软件工程过程的基本过程活动有4步:
·P (Plan) : 说明软件规格。规定软件的功能及其运行限制;
·D (Do) : 软件开发。生成符合规格的软件;
·C (Check) : 软件确认。确认软件可以满足客户的要求;
·A (Action) : 软件演变。软件必须在使用过程中演变,以满足客户的变更要求。
1-2软件和任何事物一样,都有其生存、诞生、成长、成熟和衰落的生存过程。这就是软件的生存周期。主要分为软件项目计划、软件需求分析定义、软件设计、程序编码、软件测试、运行维护六个阶段。
(1) 软件项目计划 :在这一步中,我们应该确定软件的工作范围,分析软件风险,预测软件开发所需的资源,并建立成本和进度估算。根据相关成本和进度的限制,分析项目的可行性。
(2) 分析和定义软件需求 :在此步骤中,详细定义分配给软件的系统元素。需求可以通过以下两种方式进行分析和定义。一种是正式的信息域分析,可以用来建立信息流和信息结构的模型,然后逐渐扩展这些模型成为软件的规格描述。另一种是软件原型方法,即建立软件原型并由用户进行评估,以确定软件需求。
(3) 软件设计 :软件的设计过程分为两个步骤。第一步是总结设计,从结构设计和数据设计开始,建立程序的模块结构,定义接口,建立数据结构。此外,还应使用一些设计指南来判断软件的质量。第二步是详细设计,并考虑每个模块组件的过程描述。经审查后,将每个详细的过程描述添加到设计规范中。
(4) 程序编码 :设计完成后,使用适当的程序设计语言或CASE工具生成源程序。代码应在风格和清晰度上进行评估,并可直接追溯到详细的设计描述。
(5) 软件测试 :单元测试检查每一单独的模块部件的功能和性能。组装测试提供了构造软件模块结构的手段,同时测试其功能和接口。确认测试检查所有的需求是否都得到满足。在每一个测试步骤之后,要进行调试,以诊断和纠正软件的故障。
(6) 软件维护 :一系列修改活动是为了纠正错误,适应环境变化和功能增强。与软件维护相关的任务取决于维护类型。
1-3瀑布模型规定了各种软件工程活动,包括:制定软件项目计划、需求分析和定义、软件设计、程序编码、测试和运行维护。并规定了它们自上而下连接的固定顺序,如瀑布流水,一步一步下落。但软件开发的实践表明,上述活动并非完全自上而下,呈线性图式。实际情况是,每一项开发活动都应具
(1) 作为输入,接受上一项活动的工作对象;
(2) 利用此输入实施本活动应完成的内容;
(3) 将本活动的工作成果作为输出传递给下一项活动;
(4) 审查本次活动的实施情况。如果确认其工作,则继续进行下一项活动,否则返回前项,甚至返回前项。
软件工程包括方法、工具和工艺三个要素。
软件工程方法为软件开发提供了如何做的技术。它包括项目计划和估算、软件系统需求分析、数据结构、系统整体结构设计、算法过程设计、编码、测试和维护等各种任务。软件工程方法通常采用特定的语言或图形表达方法和一套质量保证标准。
软件工具为软件工程方法提供了自动或半自动的软件支撑环境。目前,已经推出了许多软件工具,可以支持上述软件工程方法。特别是,有人集成了许多软件工具,使其他工具可以使用工具产生的信息,从而建立了一个称为计算机辅助软件工程的工具(CASE)软件开发支撑系统。CASE将各种软件工具、开发机器和存储开发过程信息的工程数据库结合起来,形成软件工程环境。
软件工程的过程是将软件工程的方法和工具结合起来,实现计算机软件开发的合理及时的目的。该过程定义了方法使用的顺序、要求交付的文档、管理、软件开发的里程碑,以确保质量和协调变化。
在软件开发过程中,必须遵循以下软件工程原则。
·抽象 : 功能分解和过程分解采用分层抽象、自上而下、逐层细化的方法,从抽象到具体,从复杂到简单,逐渐得到问题的解决。
·信息隐蔽 : 按照信息包装、使用和实现分离的原则,将模块设计成黑箱
·模块化 : 根据模块划分系统的系统结构,使每个模块之间都有良好的接口。这有助于隐藏和抽象信息,并有助于表示复杂的系统。
·局部化 : 模块是根据抽象数据的类型和问题域的概念建立的,以确保模块之间的低耦合和高内聚。这有助于控制解的复杂性。
·确定性 : 软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。这有助于人们之间的沟通,保证整个开发工作协调一致。
·一致性 : 强调软件开发过程的标准化和统一。包括文档格式、工作流程、内外界面、系统规格描述和系统行为。
·完备性 : 在不丢失任何重要组成部分的情况下,软件系统可以完全实现系统所需的功能。
·可验证性 : 大型软件系统的开发需要上而下逐层分解。系统分解应遵循易于检查、测试和评估的原则,以确保系统的正确性。
1-6软件开发时,发现错误越晚,纠正错误的成本就越高。这是对的。1970年,GTE、TRW和IBM等三家公司对此问题做了独立研究,最后它们得到相似的结论:
阶段 需求分析 软件设计 程序编码 单元测试 验收测试 维 护
相对修复代价 0.10.2 0.5 1 2 5 20
从表中可以看出,在需求分析阶段检查和修复一个错误所需的代价只有编码阶段所需代价的1/5到1/10,而在维护阶段做同样的工作所付出的代价却是编码阶段的20倍。
软件需求分析
例题分析

【例1】软件需求分析阶段的工作,可以分为以下4个方面:对问题的识别、分析与综合、编写需求分析文档以及( )。
供选择的答案:
A. 总结 B. 阶段性报告 C. 需求分析评审 D. 以上答案都不正确
答案: C.
分析:作为需求分析阶段工作的复查手段,在需求分析的最后一步,应该对功能的正确性、完整性和清晰性,以及其它需求给予评价。一般,评审的结果都包括了一些修改意见,待修改完成后再经评审通过,才可进入设计阶段。
【例2】各种需求方法都有它们共同适用的( )。
供选择的答案:
A.说明方法 B.描述方式 C. 准则 D.基本原则
答案: D.
分析:虽然各种分析方法都有独特的描述方法,但所有的分析方法还是有它们共同适用的基本原则。这些基本原则包括:
需要能够表达和理解问题的信息域和功能域;
要能以层次化的方式对问题进行分解和不断细化;
要分别给出系统的逻辑视图和物理视图。
【例3】在结构化分析方法中,用以表达系统内数据的运动情况的工具有( )。
供选择的答案:
A. 数据流图 B. 数据词典 C. 结构化英语 D. 判定表与判定树
答案: A.
分析:数据流图从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程,所以,它不是描述数据的静态结构,而是描述数据流的传递和变换。数据词典主要用于定义数据和控制对象的细节,结构化英语、判定表和判定树主要用于描述加工规格说明,都不是表达数据在系统内运动情况的工具。
【例4】在结构化分析方法中用状态―迁移图表达系统或对象的行为。在状态―迁移图中,由一个状态和一个事件所决定的下一状态可能会有( )个。
供选择的答案:
A. 1 B. 2 C. 多个 D. 不确定
答案: C.
分析:在状态―迁移图中,由一个状态和一个事件所确定的下一状态可能会有多个。实际会迁移到哪一个状态,是由更详细的内部状态和更详细的事件信息来决定的,此时在状态―迁移图中可能需要使用加进判断框和处理框的记法。状态―迁移图的优点:第一,状态之间的关系能够直观地捕捉到,这样用眼睛就能看到是否所有可能的状态迁移都已纳入图中,是否存在不必要的状态等。第二,由于状态―迁移图的单纯性,能够机械地分析许多情况,可很容易地建立分析工具。
【例5】在结构化分析方法中用实体―关系图表达系统中的对象及其关系。在实体―关系图中,表达对象的实例之间的关联有三种类型:一对一联系、( )联系、多对多联系。
供选择的答案:
A. 多对一 B. 一对多
分析:使用实体―关系图,可以建立系统中各个数据对象及对象之间的关系。对象的实例间的关联称为“基数”,共有3种类型的基数:一对一,一对多,多对多。它反映了现实世界中实体之间的联系,多对一的情况可以归入一对多的关联中去。
【例6】 软件需求分析的任务不应包括( A )。进行需求分析可使用多种工具,但( B )是不适用的。在需求分析中,分析员要从用户那里解决的最重要的问题是( C )。需求规格说明书的内容不应当包括( D )。该文档在软件开发中具有重要的作用,但其作用不应当包括( E )。
供选择的答案:
A. ① 问题分析 ② 信息域分析 ③ 结构化程序设计 ④ 确定逻辑模型
B. ① 数据流图 ② 判定表 ③ PAD图 ④ 数据词典
C. ① 要让软件做什么 ② 要给该软件提供哪些信息
③ 要求软件工作效率如何 ④ 要让软件具有什么样的结构
D. ① 对重要功能的描述 ② 对算法的详细过程性描述
③ 软件确认准则 ④ 软件的性能
E. ① 软件设计的依据 ② 用户和开发人员对软件要“做什么”的共同理解
③ 软件验收的依据 ④ 软件可行性分析的依据
答案:A. ③, B. ③, C. ①, D. ②, E. ④
分析:软件需求分析的任务是通过与用户的合作,了解用户对待开发系统的要求;根据对用户要求的系统所在的信息域的调查、分析,确定系统的逻辑模型;并对求解的问题做适当的分解,使之适合于计算机求解。需求分析的结果是软件需求规格说明书。
结构化程序设计是在详细设计和编码阶段所采用的技术,而不是需求分析阶段要采用的技术。在需求分析阶段,分析人员可以用数据流图描述系统的数据流的变换和流向,用数据词典定义在数据流图中出现的数据流、数据文件、加工或处理,用判定表表示复杂条件和动作组合的情况。但PAD图是在详细设计阶段使用的描述加工逻辑的工具,不适用于需求分析。此外,软件需求分析阶段只确定软件系统要“做什么”,完成对重要功能、性能、确认准则的描述,至于“怎么做”由后续的设计阶段完成,对算法的详细过程性描述也是在设计阶段给出。软件可行性分析应在需求分析之前,所以需求分析规格说明不能成为可行性分析的依据。
【例7】原型化方法是用户和软件开发人员之间进行的一种交互过程,适用于( A )系统。它从用户界面的开发入手,首先形成( B ),用户( C ),并就( D )提出意见,它是一种( E )型的设计过程。
供选择的答案:
A. ① 需求不确定性高的 ② 需求确定的 ③ 管理信息 ④ 决策支持
B. ① 用户界面使用手册 ② 用户界面需求分析说明书
③ 系统界面原型 ④ 完善的用户界面
C. ① 改进用户界面的设计 ② 阅读文档资料
③ 模拟用户界面的运行 ④ 运行用户界面原型
D.① 同意什么和不同意什么 ② 使用和不使用哪一种编程语言
③ 程序的结构 ④ 执行速度是否满足要求
E.① 自外向内 ② 自顶向下 ③ 自内向外 ④ 自底向上
答案:A. ① B. ③ C. ④ D. ① E. ①
分析:通常,原型是指模拟某种产品的原始模型。在软件开发中,原型是软件的一个早期可运行的版本,它反映最终系统的部分重要特性。
使用原型的原型化方法特别适用于需求不确定性较高的软件系统的开发。它的基本思想是根据用户给出的基本需求,通过快速实现构造出一个小型的可执行的模型,满足用户的基本要求,这就是系统界面原型。让用户计算机上实际运行这个用户界面原型,在试用的过程中得到亲身感受和受到启发,做出反应和评价,提出同意什么和不同意什么。然后开发者根据用户的意见对原型加以改进。随着不断试验、纠错、使用、评价和修改,获得新的原型版本,如此周而复始,逐步减少分析和通信中的误解,弥补不足之处,进一步确定各种需求细节,适应需求的变更,从而提高了最终产品的质量。
它是一种自外向内型的设计过程。
习题
【2-1】在软件需求分析时,首先建立当前系统的物理模型,再根据物理模型建立当前系统的逻辑模型。试问:什么是当前系统?当前系统的物理模型与逻辑模型有什么差别?
【2-2】软件需求分析是软件工程过程中交换意见最频繁的步骤。为什么交换意见的途径会经常阻塞?
【2-3】你认为一个系统分析员的理想训练和基础知识是什么?请说明理由。
【2-4】可行性研究主要研究哪些问题?试说明之。
【2-5】信息和信息结构有什么区别?有没有不存在信息流的系统?有没有不存在信息结构的系统?
【2-6】软件需求分析的操作性原则和需求工程的指导性原则是什么?
【2-7】数据流图的作用是什么?它有哪些基本成份?
【2-8】考务处理系统的分层数据流图如下图所示。
该考务处理系统有如下功能:
①对考生送来的报名表进行检查;
② 对合格的报名表编好准考证号码后将准考证送给考生,并将汇总后的考生名单送给阅卷站;
③ 对阅卷站送来的成绩表进行检查,并根据考试中心指定的合格标准审定合格者;
④ 填写考生通知单(内容包含考试成绩及合格∕不合格标志),送给考生;
⑤ 按地区、年龄、文化程度、职业、考试级别等进行成绩分类统计及试题难度分析,产生统计分析表。
(1) 图©中,加工1.1的输入数据流是( A ),输出数据流是( B ),图(b)中,加工2的输出数据流是( C ),它是由( D )和( E )组成。
供选择的答案:
A E. ① 统计分析表 ② 报名表 ③ 准考证 ④ 考生通知单
⑤ 合格报名表 ⑥ 难度分析表 ⑦ 错误成绩表 ⑧ 分类统计表

(2) 图(d)中的文件“试题得分表”是否在图(b)中漏掉了? 回答是(  F  )。

供选择的答案:
F. ① “试题得分表”没有在图(b)中画出,是错误的。
② “试题得分表”是图(b)中加工的内部文件,不必在图(b)中画出。
③ “试题得分表”是多余的。
【2-9】Petri网可以描述计算机软件系统的执行。现有一个程序如下(类似于Pascal语言)
L : S1;
WHILE P1 DO
BEGIN
IF P2 THEN S2
ELSE S3;
COBEGIN
S4;
S5;
S6;
COEND
END;
GOTO L;
其中,P1和P2为逻辑表达式,S1S6是单个执行语句,COBEGIN和COEND是并行执行开始和并行执行结束(即S4,S5和S6语句并行执行)。试用Petri网描述这段程序的执行过程。
【2-10】数据词典的作用是什么?它有哪些基本词条?
【2-11】传统的软件开发模型的缺陷是什么?原型化方法的类型有哪些?原型开发模型的主要优点是什么?
【2-12】试简述原型开发的过程和运用原型化方法的软件开发过程。
【2-13】软件需求分析说明书主要包括哪些内容?
【2-14】阅读下列关于开发人事管理系统的交互式工作方式的叙述,再回答问题。
某大企业最近决定采用高性能微机开发人事管理系统,将四台联机终端分置于人事处的三个科室。该系统可供操作员和程序员使用,也可供人事处负责人和主管人事的副厂长等查询人事信息用。人事管理系统通过录入人事数据和修改、删除等操作,产生和更新各类人事文件,通过搜索这些文件进行各类人事信息的查询。
该企业有3000多个工人、干部和技术人员,大体可分成机关科室、生产车间、后勤服务和开发研制部门等几类部门。厂领导决定由计算机应用科来负责协调和开发应用系统。计算机应用科科长指示系统工程师张某负责进行系统分析。
考虑到人事处有大量的查询信息要求、频繁的人事信息修改和文件存档、查阅等特点,计算机应用科决定认真设计人机交互界面,首先设计好在终端上的交互式会话的方式。
系统工程师张某通过调查收集到如下10条意见:
(1)某程序员认为:系统在屏幕格式、编码等方面应具有一致性和清晰性,否则会影响操作人员的工作效率。
(2)某操作人员认为:在交互式会话过程中,操作人员可能会忘记或记错某些事情,系统应当提供HELP功能。
(3)某操作人员认为:既然是交互式会话,那么对所有的输入都应当作出响应,不应出现击键后,计算机没有任何反应的情况。
(4)某操作人员认为:在出错的时候,交互式会话系统应当给出出错信息,并且尽可能告诉我们出错的性质和错在什么地方。
(5)某程序员认为:终端会话也应当符合程序员编制程序时的习惯,这样可以更高效地维护人事管理系统。
(6)教育科干部甲认为:应当对操作员进行一些必要的培训,让他们掌握交互式会话系统的设计技巧,有助于提高系统的使用效率。
(7)教育科干部乙认为:尽管操作人员的指法已经强化训练但在交互式会话时应尽可能缩短和减少操作员输入的信息,以降低出错概率。
(8)某程序员认为:由于本企业中有很多较大的文件,文件的查找很费时间,交互式会话系统在响应时间较长时应给予使用者以提示信息。
(9)人事处干部丙认为:我们企业的人事资料相当复杂,格式非常之多,希望交互式系统使用十分清晰的格式,并容易对输入数据中的错误进行修改。
(10) 人事处干部丁认为:人事管理系统应当具有相当的保密性和数据安全性,因此在屏幕上显示出的信息应该含混一些,以免泄密。
系统工程师张某对上述调查情况和其他要求作了分析后,发现收集到的10条意见中有3条意见是不能接受的,写出编号并各用40字以内叙述理由。

习题解答

【2-1】所谓当前系统可能是需要改进的某个已在计算机上运行的数据处理系统,也可能是一个人工的数据处理过程。当前系统的物理模型客观地反映当前系统实际的工作情况。但在物理模型中有许多物理的因素,随着分析工作的深入,有些非本质的物理因素就成为不必要的负担,因而需要对物理模型进行分析,区分出本质的和非本质的因素,去掉那些非本质的因素即可获得反映系统本质的逻辑模型。所以当前系统的逻辑模型是从当前系统的物理模型抽象出来的。
【2-2】软件需求分析过程中,由于最初分析员对要解决的问题了解很少,用户对问题的描述、对目标软件的要求也很凌乱、模糊,再加上分析员和用户共同的知识领域不多,导致相互间通信的需求。首先,由于分析员和用户之间需要通信的内容相当多,业务知识上的不足,表达方式的不足,可能对某些需求存在错误解释或误解的可能性,造成需求的模糊性。其次,用户和分析员之间经常存在无意识的“我们和他们”的界限,不是按工作需要组成统一的精干的队伍,而是各自定义自己的“版图”,并通过一系列备忘录、正式的意见书、文档,以及提问和回答来相互通信。历史已经证明,这样会产生大量误解。忽略重要信息,无法建立成功的工作关系。
【2-3】系统分析员处在用户和高级程序员之间,负责沟通用户和开发人员的认识和见解,起着桥梁的作用。一方面要协助用户对所开发的软件阐明要求,另一方面还要与高级程序员交换意见,探讨用户所提要求的合理性以及实现的可能性。最后还要负责编写软件需求规格说明和初步的用户手册。

为能胜任上述任务,分析员应当具备如下的素质:
(1) 能够熟练地掌握计算机硬、软件的专业知识,具有一定的系统开发经验。
(2) 善于进行抽象的思维和创造性的思维,善于把握抽象的概念,并把它们重新整理成为各种逻辑成分,并给出简明、清晰的描述。
(3) 善于从相互冲突或混淆的原始资料中抽出恰当的条目来。
(4) 善于进行调查研究,能够很快学习用户的专业领域知识,理解用户的环境条件。
(5) 能够倾听他人的意见,注意发挥其它人员的作用。
(6) 具有良好的书面和口头交流表达能力。
【2-4】可行性研究主要做4个方面的研究:
经济可行性 :进行成本∕效益分析。从经济角度判断系统开发是否“合算”。
技术可行性 :进行技术风险评价。从开发者的技术实力、以往工作基础、问题的复杂性等出发,判断系统开发在时间、费用等限制条件下成功的可能性。
法律可行性 :确定系统开发可能导致的任何侵权、妨碍和责任。
方案的选择 :评价系统或产品开发的几个可能的候选方案。最后给出结论意见。
【2-5】什么是信息?广义地讲,信息就是消息。宇宙三要素(物质、能量、信息)之一。它是现实世界各种事物在人们头脑中的反映。此外,人们通过科学仪器能够认识到的也是信息。信息的特征为:可识别、可存储、可变换、可处理、可传递、可再生、可压缩、可利用、可共享。我们通常讲的信息域就是对信息的多视角考虑。信息域包含3个不同的视图:信息内容和关系、信息流和信息结构。为了完全理解信息域,必须了解每一个视图。
信息结构:它是信息在计算机中的组织形式。一般表示了各种数据和控制对象的内部组织。数据和控制对象是被组织成n维表格,还是组织成有层次的树型结构? 在结构中信息与其它哪些信息相关? 所有信息是在一个信息结构中,还是在几个信息结构中? 一个结构中的信息与其它结构中的信息如何联系? 这些问题都由信息结构的分析来解决。
信息流:表示数据和控制在系统中传递时的变化方式。输入对象首先被变换成中间信息(数据或控制),然后再变换成输出结果信息。沿着变换路径,可能从已有的数据存储(如磁盘文件或内存缓冲区)中引入附加的信息。对数据进行变换是程序中应有的功能或子功能。两个变换功能之间的数据传递就确定了功能间的接口。
所以,没有信息流的系统相当于没有功能的系统,这样的系统的存在是毫无意义的。而没有信息结构的系统是没有信息的系统,这样的系统不是计算机能够处理的系统。
【2-6】所有的需求分析方法都与一组操作性原则相关联:
必须理解和表示问题的信息域。
必须定义软件将完成的功能。
必须表示软件的行为(作为外部事件的结果)。
必须对描述信息、功能和行为的模型进行分解,能够以层次方式揭示其细节。
分析过程应当从要素信息转向细节的实现。
通过使用这些原则,分析员可以系统地处理问题。首先检查信息域以便更完整地理解目标软件的功能,再使用模型以简洁的方式表达目标软件的功能和行为,并利用自顶向下、逐层分解的手段来降低问题的复杂性。在这些处理过程中,因处理需求带来的逻辑约束和因其它系统元素带来的物理约束需要通过软件要素和视图的实现加以检验和确认。
除此以外,Davis建议了一组针对“需求工程”的指导性原则:
在开始建立分析模型之前应当先理解问题。如果问题没有很好理解就急于求成,常常会产生一个解决错误问题的完美的软件。
强力推荐使用原型。这样做可以使用户了解将如何与计算机交互,而人们对软件质量的认识常常是基于对界面“友好性”的切身体会。
记录每一个需求的起源和原因。这是建立对用户要求的可追溯性的第一步。
使用多个视图,建立系统的数据、功能和行为模型。这样做可帮助分析员从多方面分析和理解问题,减少遗漏,识别可能的不一致之处。
给需求赋予优先级。因为过短的时限会减少实现所有软件需求的可能性。因此,对需求排定一个优先次序,标识哪些需求先实现,哪些需求后实现。
注意消除歧义性。因为大多数需求都是以自然语言描述,存在叙述的歧义性问题,造成遗漏和误解。采用正式的技术评审是发现和消除歧义性的好方法。
遵循以上原则,就可能开发出较好的软件需求规格说明,为软件设计奠定基础。
【2-7】数据流图可以用来抽象地表示系统或软件。它从信息传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程,同时可以按自顶向下、逐步分解的方法表示内容不断增加的数据流和功能细节。因此,数据流图既提供了功能建模的机制,也提供了信息流建模的机制,从而可以建立起系统或软件的功能模型。
数据流图的基本成份有4种:

【2-8】答案:A. ② B. ⑤ C. ① D. ⑥ E. ⑧ F. ②
其中,D与E的答案可互换。
应注意的问题:
① 适当地为数据流、加工、文件、数据的源∕汇点命名。名字应反映该元素的实际含义,避免空洞的名字。如数据、信息处理、计算等名字都不好。
② 画数据流时不要夹带控制流。数据流图中各种数据的加工没有考虑时序关系,引入控制流后,加工之间就有了时序关系,这与画数据流图不考虑实现细节的初衷相违背。
③ 一个加工的输出数据流不要与该加工的输入数据流重名,即使它们的组成成分相同。例如图©中加工1.1的输入数据流“报名表”与输出数据流“合格报名表”。
④ 允许一个加工有多个数据流流向另一个加工,也允许一个加工有两个相同的输出数据流流向两个不同的加工。
⑤ 保持父图与子图的平衡。就是说,父图与它的子图的输入数据流与输出数据流应当在数量与名字上都相同。特别的是,如果父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,但子图中这几个数据流中的数据项合起来正好是父图中的那个数据流,这时它们还算是平衡的。例如,图(b)中加工2的输出数据流“统计分析表”是由“难度分析表”和“分类统计表”组成,那么图(b)与图(d)仍满足父图与子图平衡的条件。
⑥ 在自顶向下的分解过程中,若一个文件首次出现时只与一个加工有关,那么这个文件应作为这个加工的内部文件而不必画出。例如,图(d)中的文件“试题得分表”就是图(b)中加工的内部文件,所以在图(b)中没有画出。
⑦ 保持数据守恒。就是说,一个加工的所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工产生的数据。
【2-9】采用条件∕事件网(C∕E网,C―Condition, E―Event)式Petri网。其定义如下:
①当事件e激发时条件c开始成立,则称c是e的后继。此关系用“”表示;
②当事件e激发时条件c消失成立,则称c是e的前驱。此关系用“”表示;
③当事件e激发时条件c不受影响,则c和e之间没有前驱、后继关系,无边。
根据定义,给定程序的C∕E网如下:

【2-10】分析模型中包含了对数据对象、功能和控制的表示。在每一种表示中,数据对象和控制项都扮演一定的角色。为表示每个数据对象和控制项的特性,建立了数据词典。数据词典精确地、严格地定义了每一个与系统相关的数据元素,并以字典式顺序将它们组织起来,使得用户和分析员对所有的输入、输出、存储成分和中间计算有共同的理解。
在数据词典的每一个词条中应包含以下信息:
① 名称:数据对象或控制项、数据存储或外部实体的名字。
② 别名或编号。
③ 分类:数据对象?加工?数据流?数据文件?外部实体?控制项(事件∕状态)?
④ 描述:描述内容或数据结构等。
⑤ 何处使用:使用该词条(数据或控制项)的加工。
【2-11】传统软件生存期范型的典型代表是“瀑布模型”。这种模型的核心是将软件生存期划分为软件计划、需求分析、软件设计、编码、测试和运行维护等阶段,根据不同阶段工作的特点,运用不同的方法、技术和工具来完成该阶段的任务。软件开发人员遵循严格的规范,在每一阶段工作结束时都要进行严格的阶段评审和确认,以得到该阶段的一致、完整、正确和无歧义性的文档资料,并以它们做为下一阶段工作的基础。
传统思想强调每一阶段的严格性,尤其是开发初期要有良好的软件规格说明,主要是源于过去软件开发的经验教训,即在开发的后期或运行维护期间来修改不完善的规格说明要付出巨大的代价。但是,要想得到一个完整准确的规格说明不是一件容易的事。特别是对于一些大型的软件项目,在开发的早期用户往往对系统只有一个模糊的想法,很难完全准确地表达对系统的全面要求,软件开发人员对于所要解决的应用问题认识更是模糊不清。经过详细的讨论和分析,也许能得到一份较好的规格说明,但却很难期望该规格说明能将系统的各个方面都描述得完整、准确、一致,并与实际环境相符。很难通过它在逻辑上推断出(不是在实际运行中判断评价)系统运行的效果,以此达到各方对系统的共同理解。随着开发工作向前推进,用户可能会产生新的要求,或因环境变化,要求系统也能随之变化;开发人员又可能在设计与实现的过程中遇到一些没有预料到的实际困难,需要以改变需求来解脱困境。因此规格说明难以完善、需求的变更、以及通信中的模糊和误解,都会成为软件开发顺利推进的障碍。尽管在传统软件生存期管理中通过加强评审和确认,全面测试,甚至依靠维护阶段能够缓解上述问题,但不能从根本上解决这些问题。
为了解决这些问题,逐渐形成了软件系统的快速原型的概念。由于运用原型的目的和方式不同,原型可分为以下两种不同的类型:
① 废弃型:先构造一个功能简单而且质量要求不高的模型系统,针对这个模型系统反复进行分析修改,形成比较好的设计思想,据此设计出更加完整、准确、一致、可靠的最终系统。系统构造完成后,原来的模型系统就被废弃不用。
② 追加型或演化型:先构造一个功能简单而且质量要求不高的模型系统,作为最终系统的核心,然后通过不断地扩充修改,逐步追加新要求,最后发展成为最终系统。
建立快速原型进行系统的分析和构造,有以下的优点:
① 增进软件者和用户对系统服务需求的理解,使比较含糊的具有不确定性的软件需求(主要是功能)明确化。由于这种方法能在早期就明确了用户的要求,因此可防止以后由于不能满足用户要求而造成的返工,从而避免了不必要的经济损失,缩短了开发周期。
② 软件原型化方法提供了一种有力的学习手段。通过原型演示,用户可以亲身体验早期的开发过程,获得关于计算机和被开发系统的专门知识。软件开发人员也可以获得用户对系统的确切要求,学习到应用范围的专业知识。
③ 使用原型化方法,可以容易地确定系统的性能,确认各项主要系统服务的可应用性,确认系统设计的可行性,确认系统作为产品的结果。因而它可以作为理解和确认软件需求规格说明的工具。
④ 软件原型的最终版本,有的可以原封不动地成为产品,有的略加修改就可以成为最终系统的一个组成部分,这样有利于建成最终系统。
【2-12】原型的开发和使用过程叫做原型生存期。下图是原型生存期的模型及其细化。
① 快速分析 :在分析者和用户的紧密配合下,快速确定软件系统的基本要求。
② 构造原型 :根据基本规格说明,尽快实现一个可运行的原型系统。
③ 运行和评价原型 :用户试用原型,考核评价原型的特性。纠正过去交互中的误解和分析中的错误,增补新的要求,提出全面的修改意见。
④ 修正和改进 :根据修改意见进行修改。如果用修改原型的过程代替快速分析,就形成了原型开发的迭代过程。在一次次的迭代过程中不断将原型完善,以接近系统的最终要求。
⑤ 判定原型完成 :经过修改或改进的原型,达到参与者一致认可,则原型开发的迭代过程可以结束。为此,应判断有关应用的实质是否已经掌握,判定的结果有两个不同的转向,一是继续迭代验证,一是进行详细说明。
⑥ 判断原型细部是否说明 :判断组成原型的细部是否需要严格地加以说明。
⑦ 原型细部的说明 :通过文件加以说明那些不能通过原型说明的项目。
⑧ 判定原型效果 :考察新加入的需求信息和细部说明信息,看其对模型有什么影响? 是否会影响模块的有效性? 如果模型受到影响,则要进行修正和改进。
⑨ 整理原型和提供文档
快速原型方法的提出使得传统的软件生存期在思想方法上受到了影响。如果只是在局部运用原型化方法,若将原型开发过程用于软件生存期的某一个阶段内,那么传统的软件生存期依然不变,只是阶段内部的软件定义或开发活动采用了新的方法。但若原型开发过程代替了传统生存期中的多个阶段,则软件开发过程就成为一种新的形式。

图(a)表示了使用原型方法的软件生存期模型。原型开发过程处于核心,表示可在生存期的任何阶段中引入原型开发过程,也可合并若干阶段,用原型开发过程代替。图(b)详细描述了在各个阶段可能引入原型开发过程的软件开发过程。其中在原型开发过程的最后加上了一个“是否构造新原型”的判断,这是针对在系统开发的过程中有可能为不同的目的而要使用多个原型的情况而设。
① 辅助或代替分析阶段 :在分析阶段利用快速原型方法可以得到良好的需求规格说明。在整体上仍然采用传统的模式,但使用原型化方法来补充和完善需求说明以达到一致、准确、完整、无多义性地反映用户要求,从而代替了传统的仅由复审和确认来提高需求规格说明质量的方法。并能在早期克服潜在的误解、遗漏和错误,尽量不让潜在的问题遗留到开发的后期,减少将来维护的代价。
② 辅助设计阶段 :在设计阶段引入原型,可根据需求分析得到的规格说明进行快速分析,得到实现方案后立即构造原型,通过运行,考察设计方案的可行性与合理性。在这个阶段引入原型,可以迅速得到完善的设计规格说明。原型可能成为设计的总体框架,也可能成为最终设计的一部分或补充的设计文档。
③ 代替分析与设计阶段 :这时不再遵循传统的严格按阶段进行软件开发的要求,而是把原型方法直接应用到软件开发的整体过程。在实施原型开发的过程中,不再考虑完善的需求说明,把分析、定义和设计交织在一起,通过原型的构造、评价与改进的迭代过程,逐步向最终系统的全面要求靠近。由于在分析的同时也考虑了设计与实现的要求,能更有效地确定系统的需求和设计规格说明。
④ 代替分析、设计和实现阶段 :在软件开发环境的支持下,通过原型生存期的反复迭代,直接得到软件的程序,交付系统测试。这属于进化型的原型开发,由初始的基本需求得到最初的原型开始,一直进化到软件的整体系统,并满足用户的一切可能的要求。
⑤ 代替全部定义与开发阶段 :这是典型的进化型原型开发方法。完全摆脱了传统的软件生存期模式,通过反复的原型迭代过程,直接得到最终的软件产品。系统测试作为原型评价工作的一部分,融入原型的开发过程。
【2-13】软件需求规格说明是分析任务的最终产物,通过建立完整的信息描述、详细的功能和行为描述、性能需求和设计约束的说明、合适的验收标准,给出对目标软件的各种需求。
软件需求规格说明的框架如下:
Ⅰ. 引言 A.系统参考文献 B.整体描述 C.软件项目约束
Ⅱ. 信息描述 A.信息内容表示 B.信息流表示 ⅰ数据流 ⅱ控制流
Ⅲ. 功能描述 A.功能划分 B.功能描述 ⅰ处理说明 ⅱ限制∕局限 ⅲ 性能需求
ⅳ 设计约束 ⅴ 支撑图 C.控制描述 ⅰ控制规格说明 ⅱ 设计约束
Ⅳ. 行为描述 A.系统状态 B.事件和响应
Ⅴ. 检验标准 A.性能范围 B.测试种类 C.期望的软件响应 D.特殊的考虑
Ⅵ. 参考书目
Ⅶ. 附录
【2-14】不能接受的3条意见是 (5)、(6)、(10)。人机交互界面首先考虑的是用户如何使用起来方便,与编程习惯、设计技巧无关。此外,屏幕上信息应很清晰易懂,安全保密与屏幕显示无关。

软件设计
例题分析

【例1】从下列有关系统结构图的叙述中选出正确的叙述。
(1) 系统结构图中反映的是程序中数据流的情况。
(2) 系统结构图是精确表达程序结构的图形表示法。因此,有时也可将系统结构当作程序流程图使用。
(3) 一个模块的多个下属模块在系统结构图中所处的左右位置是无关紧要的。
(4) 在系统结构图中,上级模块与其下属模块之间的调用关系用有向线段表示。这时,使用斜的线段和水平、垂直的线段具有相同的含义。
答案: (4)
分析:系统结构图反映的是系统中模块的调用关系和层次关系,谁调用谁,有一个先后次序(时序)关系。所以系统结构图既不同于数据流图,也不同与程序流程图。数据流图仅描述数据在系统中如何流动,如何处理和存储,它不考虑时序关系。图中的有向线段表示了数据流。程序流程图描述程序中控制流的情况,即程序中处理的执行顺序和执行序列所依赖的条件,图中的有向线段(流线)表示的是控制流,从一个处理走到下一个处理。但在系统结构图中的有向线段表示调用时程序的控制从调用模块移到被调用模块,并隐含了当调用结束时控制将交回给调用模块。
如果一个模块有多个下属模块,这些下属模块的左右位置可能与它们的调用次序有关。例如,在用结构化设计方法依据数据流图建立起来的变换型系统结构图中,主模块的所有下属模块按逻辑输入、中心变换、逻辑输出的次序自左向右一字排开,左右位置不是无关紧要的。所以只有最后的一个叙述是正确的。
【例2】软件的开发工作经过需求分析阶段,进入( A )以后,就开始着手解决“怎么做”的问题。常用的软件设计方法有( B )、( C )、( D )和( E )等方法。
供选择的答案:
A B.① 程序设计 ② 设计阶段 ③ 总体设计 ④ 定义阶段
⑤ SD方法 ⑥ SP方法
C. ① Jackson方法 ② 瀑布法 ③ 快速原型法 ④ 回溯法
D E. ① LCP(Wanier)方法 ② 递归法 ③ Parnas方法
④ 自下而上修正 ⑤ 逐步求精法 ⑥ 检测校正法
答案:A. ②, B. ⑤, C. ①, D. ①, E. ③。其中,D与E的答案可互换。
分析:进入设计阶段之后,就开始着手解决“怎么做”的问题。一般把设计阶段的工作分成两步:即概要设计和详细设计。在概要设计阶段应着重解决实现需求的程序模块划分问题,在详细设计阶段则要决定每个模块的具体算法。
常见的软件概要设计方法有三大类:
以数据流图为基础构造模块结构的结构化设计方法(SD);
以数据结构为基础构造模块结构的Jackson方法和LCP(Wanier)逻辑构造方法;
以对象、类、继承和通信为基础的面向对象设计方法(OOD)。
此外,以信息隐蔽为原则的Parnas方法虽然没有给出系统化的设计方法,但它提出了一组原则,要求预先估计未来生存周期中可能发生的种种情况,并采取相应措施以提高软件系统的可维护性和可靠性。
这里对面向数据结构的Jackson方法和LCP方法再多说几句。
Jackson方法是一种典型的面向面向数据结构开发软件的方法。它的基本思想是首先根据实际问题,给出处理问题所需要和产生的数据结构,一旦搞清了问题的输入∕输出数据结构,就可以以简单的方式直接导出程序的处理结构,然后应用Jackson的描述符号,将这个处理结构转换为程序的过程性描述。
LCP方法是另一种面向数据结构的方法,它也要先给出用Wanier图表示的处理问题所需要和产生的数据结构,再在Wanier图上直接将数据结构转换为加工处理的形式化表示,最后生成描述加工过程的伪代码,进行验证和优化。
【例3】请将下述有关模块独立性的各种模块之间的耦合,按其耦合度从低到高排列起来。
① 内容耦合 ② 控制耦合 ③ 非直接耦合 ④ 标记耦合
⑤ 数据耦合 ⑥ 外部耦合 ⑦ 公共耦合
答案:③、⑤、④、②、⑥、⑦、①
分析:参看“内容提要”中有关模块独立性的介绍。
【例4】请将下述有关模块独立性的各种模块内聚,按其内聚度(强度)从高到低排列起来。
① 巧合内聚 ② 时间内聚 ③ 功能内聚 ④ 通信内聚
⑤ 逻辑内聚 ⑥ 信息内聚 ⑦ 过程内聚
答案: ③、⑥、④、⑦、②、⑤、①
分析:在状态―迁移图中,由一个状态和一个事件所确定的下一状态可能会有多个。实际会迁移到哪一个状态,是由更详细的内部状态和更详细的事件信息来决定的,此时在状态―迁移图中可能需要使用加进判断框和处理框的记法。状态―迁移图的优点:第一,状态之间的关系能够直观地捕捉到,这样用眼睛就能看到是否所有可能的状态迁移都已纳入图中,是否存在不必要的状态等。第二,由于状态―迁移图的单纯性,能够机械地分析许多情况,可很容易地建立分析工具。
【例5】在结构化分析方法中,用实体―关系图表达系统中的对象及其关系。在实体―关系图中,表达对象的实例之间的关联有三种类型: 一对一联系、( )联系、多对多联系。
供选择的答案:
A. 多对一 B. 一对多
答案:B
分析:使用实体―关系图,可以建立系统中各个数据对象及对象之间的关系。对象的实例间的关联称为“基数”,共有3种类型的基数:一对一,一对多,多对多。它反映了现实世界中实体之间的联系,多对一的情况可以归入一对多的关联中去。
【例6】 软件需求分析的任务不应包括( A )。进行需求分析可使用多种工具,但( B )是不适用的。在需求分析中,分析员要从用户那里解决的最重要的问题是( C )。需求规格说明书的内容不应当包括( D )。该文档在软件开发中具有重要的作用,但其作用不应当包括( E )。
供选择的答案:
A. ① 问题分析 ② 信息域分析 ③ 结构化程序设计 ④ 确定逻辑模型
B. ① 数据流图 ② 判定表 ③ PAD图 ④ 数据词典
C. ① 要让软件做什么 ② 要给该软件提供哪些信息
③ 要求软件工作效率如何 ④ 要让软件具有什么样的结构
D. ① 对重要功能的描述 ② 对算法的详细过程性描述
③ 软件确认准则 ④ 软件的性能
E. ① 软件设计的依据 ② 用户和开发人员对软件要“做什么”的共同理解
③ 软件验收的依据 ④ 软件可行性分析的依据
答案:A. ③ B. ③ C. ① D. ② E. ④
分析:软件需求分析的任务是通过与用户的合作,了解用户对待开发系统的要求;根据对用户要求的系统所在的信息域的调查、分析,确定系统的逻辑模型;并对求解的问题做适当的分解,使之适合于计算机求解。需求分析的结果是软件需求规格说明书。
结构化程序设计是在详细设计和编码阶段所采用的技术,而不是需求分析阶段要采用的技术。在需求分析阶段,分析人员可以用数据流图描述系统的数据流的变换和流向,用数据词典定义在数据流图中出现的数据流、数据文件、加工或处理,用判定表表示复杂条件和动作组合的情况。但PAD图是在详细设计阶段使用的描述加工逻辑的工具,不适用于需求分析。此外,软件需求分析阶段只确定软件系统要“做什么”,完成对重要功能、性能、确认准则的描述,至于“怎么做”由后续的设计阶段完成,对算法的详细过程性描述也是在设计阶段给出。软件可行性分析应在需求分析之前,所以需求分析规格说明不能成为可行性分析的依据。
【例7】原型化方法是用户和软件开发人员之间进行的一种交互过程,适用于( A )系统。它从用户界面的开发入手,首先形成( B ),用户( C ),并就( D )提出意见,它是一种( E )型的设计过程。
供选择的答案:
A. ① 需求不确定性高的 ② 需求确定的 ③ 管理信息 ④ 决策支持
B. ① 用户界面使用手册 ② 用户界面需求分析说明书
③ 系统界面原型 ④ 完善的用户界面
C. ① 改进用户界面的设计 ② 阅读文档资料
③ 模拟用户界面的运行 ④ 运行用户界面原型
D. ① 同意什么和不同意什么 ② 使用和不使用哪一种编程语言
③ 程序的结构 ④ 执行速度是否满足要求
E. ① 自外向内 ② 自顶向下 ③ 自内向外 ④ 自底向上
答案:A. ①, B. ③, C. ④, D. ①, E. ①
分析:通常,原型是指模拟某种产品的原始模型。在软件开发中,原型是软件的一个早期可运行的版本,它反映最终系统的部分重要特性。
使用原型的原型化方法特别适用于需求不确定性较高的软件系统的开发。它的基本思想是根据用户给出的基本需求,通过快速实现构造出一个小型的可执行的模型,满足用户的基本要求,这就是系统界面原型。让用户计算机上实际运行这个用户界面原型,在试用的过程中得到亲身感受和受到启发,做出反应和评价,提出同意什么和不同意什么。然后开发者根据用户的意见对原型加以改进。随着不断试验、纠错、使用、评价和修改,获得新的原型版本,如此周而复始,逐步减少分析和通信中的误解,弥补不足之处,进一步确定各种需求细节,适应需求的变更,从而提高了最终产品的质量。它是一种自外向内型的设计过程。

习题

【3-1】逐步求精、分层过程与抽象等概念之间的相互关系如何?
【3-2】完成良好的软件设计应遵循哪些原则?
【3-3】如何理解模块独立性?用什么指标来衡量模块独立性?
【3-4】模块独立性与信息隐蔽(反映模块化有效程度的属性)有何关系?
【3-5】模块的内聚性程度与该模块在分层结构中的位置有关系吗?说明你的论据。
【3-6】耦合性的概念和软件的可移植性有什么关系?请举例说明你的论述。
【3-7】从供选择的答案中选出正确的答案填入下列叙述中的( ) 内。
模块内聚性用于衡量模块内部各成份之间彼此结合的紧密程度。
(1) 一组语句在程序中多处出现,为了节省内存空间把这些语句放在一个模块中,该模块的内聚性是( A )的。
(2) 将几个逻辑上相似的成分放在同一个模块中,通过模块入口处的一个判断决定执行哪一个功能。该模块的内聚性是( B )的。
(3) 模块中所有成分引用共同的数据,该模块的内聚性是( C )的。
(4) 模块内的某成份的输出是另一些成份的输入,该模块的内聚性是( D )的。
(5) 模块中所有成份结合起来完全一项任务,该模块的内聚性是( E )的。它具有简明的外部界面,由它构成的软件易于理解、测试和维护。
供选择的答案:
A E: ① 功能内聚 ② 信息内聚 ③ 通信内聚 ④ 过程内聚
⑤ 巧合内聚 ⑥ 时间内聚 ⑦ 逻辑内聚
【3-8】从供选择的答案中选出正确的答案填入下面的( )中。
块间联系和块内联系是评价程序模块结构质量的重要标准。联系的方式、共用信息的作用、共用信息的数量和接口的( A )等因素决定了块间联系的大小。在块内联系中,( B )的块内联系最强。
SD方法的总的原则是使每个模块执行( C )功能,模块间传送( D )参数,模块通过( E )语句调用其它模块,而且模块间传送的参数应尽量( F )。
此外,SD方法还提出了判定的作用范围和模块的控制范围等概念。SD方法认为,( G )应该是( H )的子集。
供选择的答案:
A: ① 友好性 ② 健壮性 ③ 简单性 ④ 安全性
B: ① 巧合内聚 ② 功能内聚 ③ 通信内聚 ④ 信息内聚
C: ① 一个 ② 多个
D: ① 数据型 ② 控制型 ③ 混合型
E: ① 直接引用 ② 标准调用 ③ 中断 ④ 宏调用
F: ① 少 ② 多
G H:① 作用范围 ② 控制范围
【3-9】从供选择的答案中选出应该填入下列关于软件设计的叙述的( )内的正确答案。
在众多的设计方法中,SD方法是最受人注意的,也是最广泛应用的一种,这种方法可以同分析阶段的( A )方法及编程阶段的( B )方法前后衔接,SD方法是考虑如何建立一个结构良好的程序结构,它提出了评价模块结构质量的两个具体标准——块间联系和块内联系。SD方法的最终目标是( C ),用于表示模块间调用关系的图叫( D )。
另一种比较著名的设计方法是以信息隐蔽为原则划分模块,这种方法叫( E )方法。
供选择的答案:
A B:① Jackson ② SA ③ SC ④ Parnas ⑤ SP
C: ① 块间联系大,块内联系大 ② 块间联系大,块内联系小
③ 块间联系小,块内联系大 ④ 块间联系小,块内联系小
D: ① PAD ② HCP ③ SC ④ SADT ⑤ HIPO ⑥ NS
E: ① Jackson ② Parnas ③ Turing ④ Wirth ⑤ Dijkstra
【3-10】递归模块(即自己调用自己的模块)的概念如何能够与本章所介绍的设计原理与方法相适应?
【3-11】举例说明你对概要设计与详细设计的理解。有不需要概要设计的情况吗?
【3-12】软件详细设计工具可分为三类,即:图示工具、设计语言和表格工具。图示工具中,( A )简单而应用广泛、( B )表示法中,每一个处理过程用一个盒子表示,盒子可以嵌套。( C )可以纵横延伸,图形的空间效果好。
( D ) 是一种设计和描述程序的语言,它是一种面向( E )的语言。
供选择的答案:
A C:① NS图 ② 流程图 ③ HIPO图 ④ PAD图
D: ① C ② PDL ③ RPOLOG ④ PASCAL
E: ① 人 ② 机器 ③ 数据结构 ④ 对象
【3-13】如何用PDL语言来实施逐步求精的设计原理?
【3-14】从供选择的答案中选出应该填入下列关于软件设计的叙述的( )内的正确答案。
在完成软件概要设计,并编写出相关文档之后,应当组织对概要设计工作的评审。评审的内容包括:
分析该软件的系统结构、子系统结构,确认该软件设计是否覆盖了所有已确定的软件需求,软件每一成份是否可( A )到某一项需求。分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足( B )和( C )的要求。模块( D )是否在其( E )之内。
供选择的答案
A: ① 覆盖 ② 演化 ③ 追溯 ④ 等同 ⑤ 连接
B: ① 多功能 ② 高内聚 ③ 高耦合 ④ 高效率 ⑤ 可读性
C: ① 多入口 ② 低内聚 ③ 低耦合 ④ 低复杂度 ⑤ 低强度
D E:① 作用范围 ② 高内聚 ③ 低内聚 ④ 取值范围 ⑤ 控制范围

习题解答

【3-1】“自顶向下,逐步求精”是Niklaus Wirth提出的设计策略:即将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。
这样的结构实际就是一个模块的分层结构,即分层的过程。在实施时,采用抽象化的方法,自顶向下,给出不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。而在较低的抽象层次上,则采用过程化的方法。在描述问题的解法时,我们可以配合使用面向问题的术语和面向现实的术语。但最后在最低的抽象层次上,我们应使用能够直接实现的方式来描述这个解法。
【3-2】软件设计既是过程又是模型。设计过程是一系列迭代的步骤,使设计人员能够描述被开发软件的方方面面。设计模型体现了自顶向下、逐步细化的思想,首先构造事物的整体,再逐步细化,引导人们构造各种细节。为了给软件设计人员提供一些指导,1995年Davis提出了一系列软件设计的原则如下,其中有些修改和补充:
·设计过程不应受“隧道视野”的限制。一位好的设计者应当考虑一些替代的手段。根据问题的要求,可以用基本的设计概念,如抽象、逐步求精、模块化、软件体系结构、控制层次、结构分解、数据结构、软件过程、信息隐蔽等,来决定完成工作的资源。
·设计应能追溯到分析模型。由于设计模型中每一单个成份常常可追溯到多个需求上,因此有必要对设计模型如何满足需求进行追踪。
·设计不应当从头做起。系统是使用一系列设计模式构造起来的,很多模式很可能以前就遇到过。这些模式通常被称为可复用的设计构件。可以使用它们代替那些从头开始做的方法。时间短暂而资源有限!设计时间应当投入到表示真正的新思想和集成那些已有的设计模式上去。
·设计应当缩短软件和现实世界中问题的“智力差距”,就是说,软件设计的结果应尽可能模拟问题领域的结构。
·设计应具有一致性和集成性。如果一个设计从整体上看像是一个人完成的,那它就是一致的。在设计工作开始之前,设计小组应当定义风格和格式的规则,如果仔细定义了设计构件之间的接口,则该设计就是集成的。
·使用上述的基本的设计概念,将设计构造得便于将来的修改。
·应将设计构造得即使遇到异常的数据、事件或操作条件,也能平滑地、轻松地降级。设计良好的计算机程序应当永不“彻底停工”,它应能适应异常的条件,并且当它必须中止处理时也能以从容的方式结束。
·设计不是编码,编码也不是设计。即使在建立程序构件的详细的过程设计时,设计模型的抽象级别也比源代码要高。在编码级别上作出的唯一设计决策是描述如何将过程性设计转换为程序代码的小的实现细节。
·在开始着手设计时就应当能够评估质量,而不

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章