习题三参考答案
一、填空题
1. 需求分析
2. 新系统的目标,“做什么”
3.功能需求,性能需求,环境需求,用户界面需求
4.客户说不清楚 分析人员和用户理解有误
5.数据流 数据存储 加工 源和终点
6.“做什么”,加工规则
7.数据流图,数据字典,描述加工逻辑的结构化语言,判定表,判定树
8. 各个成分的具体含义,逻辑模型,需求说明书
9. 结构化语言 判定表 判定树
10. 数据处理方面,“做什么”,静态模型,控制模型
二、选择题
1.D 2.C 3.A 4.D 5.C 6.A 7.C 8.D 9.C 10.D
三、简答题
1.需求分析阶段的基本任务是什么?需求分析的难点主要表现在哪几个方面?
需求分析的基本任务是要准确地定义新系统的目标,为了满足用户需要,回答系统必须“做什么”的问题。本阶段要进行以下几方面的工作.
(1)问题识别。双方确定对问题的综合需求,这些需求包括.
①功能需求.所开发的软件必须具备什么样的功能,这是最重要的。
②性能需求.待开发的软件的技术性能指标。如存储容量、运行时间等限制。 ③环境需求.软件运行时所需要的软、硬件(如机型、外设、操作系统、数据库管理系统等)的要求。
④用户界面需求.人机交互方式、输入输出数据格式等等。
另外还有可靠性、安全性、保密性、可移植性、可维护性等方面的需求,这些需求一般通过双方交流、调查研究来获取,并达到共同的理解。
(2)分析与综合,导出软件的逻辑模型。分析人员对获取的需求,进行一致性的分析检查,在分析、综合中逐步细化软件功能,划分成各个子功能。这里也包括对数据域进行分解,并分配到各个子功能上,以确定系统的构成及主要成分,并用图文结合的形式,建立起新的系统的逻辑模型。
(3)编写文档。
①编写“需求规格说明书”,把双方共同的理解与分析结果用规范的方式描述出来,作为今后各项工作的基础。
②编写初步用户使用手册,着重反映被开发软件的用户功能界面和用户使用的具体要求,用户手册能强制分析人员从用户使用的观点考虑软件。
③编写确认测试计划,作为今后确认和验收的依据。
④修改完善软件开发计划。在需求分析阶段对待开发的系统有了更进一步的了解,所以能更准确地估计开发成本、进度及资源要求,因此对原计划要进行适当修正。
需求分析的困难主要体现在以下几个方面.
问题的复杂性。因用户需求所涉及的因素繁多引起,如运行环境和系统功能等等。
交流障碍。需求分析涉及人员较多,如软件系统用户、问题领域专家、需求
工程师和项目管理员等,这些人具备不同的背景知识,处于不同的角度,扮
演不同角色。造成了相互之间交流的困难。
不完备性和不一致性。由于各种原因,用户对问题的陈述往往是不完备的,
其各方面的需求还可能存在着矛盾,需求分析要消除矛盾,形成完备及一致
性的定义。
需求易变性。用户需求的变动是一个极为普遍的问题,即使是部分变动,也
往往会影响到需求分析的全部,导致不一致性和不完备性。
为了克服上述困难,人们主要围绕着需求分析的方法及自动化工具(如CASE技
术)等方面进行研究。
2.画数据流图的步骤是什么?画数据流图应该注意什么事项?
解答如下.
(1)画数据流图的步骤.
为了表达较为复杂问题的数据处理过程,用一张数据流图是不够的。要按照问题的层次结构进行逐步分解,并以一套分层的数据流图反映这种结构关系。
① 首先画系统的输入输出,即先画顶层数据流图。顶层流图只包含一个加工,用以表示被开发的系统,考虑该系统有哪些输入数据,这些输入数据从哪里来;有哪些输出数据,输出到哪里去。这样就定义了系统的输入、输出数据流。顶层图的作用在于表明被开发系统的范围以及它和周围环境的数据交换关系。顶层图只有一张。
② 画系统内部,即画下层数据流图。一般将层号从0开始编号,采用自顶向下、由外向内的原则画0层数据游戏图时,一般根据当前系统工作情况,并按新系统应有的外部功能,分解顶层流图的系统为若干子系统决定每个子系统间的数据接口和活动关系。画更下层数据流图时,则分解上层图中的加工,一般沿着输入流的方向,凡数据流的组成或值发生变化的地方则设置一个加工,这样一直进行到输出数据流(也可以输出流到输入流方向画)。如果加工的内部还有数据流,刚对此加工在下层图中继续分解,直到每一个加工足够简单,不能再分解为止,不再分解的加工称为基本加工。
(2)画数据流 时要注意的事项.
在软件的系统分析之前,系统的技术负责要制订一个系统的标准。其内容之一就是画数据流图的规范。画数据流图时要注意以下几点.
①命名。不论数据流、数据存储还是加工,合适的命名使人们易于理解其含义。数据流的名字代表整个数据流的内容,而不仅仅是它的某些成分,不便用缺乏具体含义的名字,如“数据”、“信息”等,加工名也应反映整个处理的功能,不使用“处理”,“操作”这些笼统的词。
②画数据流而不是控制流。数据流图反映系统“做什么”,不反映“如何做”因此箭头上的数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序。
③一般不画物质流。数据流反映能用计算机处理的数据,并不是实物,因此对目标系统的数据流图一般不要画物质流。
④每个加工至少有一个输入数据流和一个输出数据流,反映出此加工数据的来源与加工的结果。
⑤加工点的编号。如果一张数据流图中的某个加工点分解成另一张数据流图时,则上层图为父图,直接下层图为子图。子图应编号,子图上的所有加工也应编号,子图的编号就是父图中相应加工的编号,加工的编号由子图号、小数点及局部符号组成。
⑥父图和子图的平衡。子图的输入输出数据流同父图相应加工的输入输出数据流必须一
致,此即父图与子图的平衡。有时考虑平衡可忽略一些枝节性的数据流(如出错处理)。父图与子图的平衡,是分层数据流图中的重要性质,保证了数据流图的一致性,便于分析人员的阅读与理解。
⑦局部数据存储。在分层处理的过程中,当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。一个局部数据存储只要当它作为某些加工的数据接口或某个加工特定的输入或输出时,就把它画出来,这样有助于实现信息隐藏。
⑧提高数据流图的易理解性。注意合理分解,要把一个加工分解成几个功能相对独立的子加工,这样可以减少加工之间的输入、输出数据流的数目,增加数据流图的可理解性。分解时要注意子加工的独立性,还应注意均匀性,特别是画上层数据流时,要注意将一个问题划分成几个大小接近的组成部分,这样做便于理解;不要在一张数据流图中,某些加工已是基本加工,某些加工还要分解好几层。
3.描述加工逻辑有哪些工具?
加工逻辑也称为“小说明”,描述加工逻辑一般用以下三种工具.结构化语言、判定
表、判定树。
(1)结构化语言。结构化语言是介于自然语言(英语或汉语)和形式语言之间
的一种半形式语言。它是在自然语言基础上加了一些限定,使用有限的词汇和有限的语句来描述加工逻辑,它的结构可分为外层和内层两层.
①.外层.用来描述控制结构,采用顺序、选择、重复三种基本结构。
a. 顺序结构。是一组实例语句、选择语句、重复语句的顺序排列。祈使语句指至
少包含一个动词及一个名词,指出要执行的动作及接受动作及接受动作的对象。
b. 选择结构。一般用IF-THEN-ELSE-ENDIF、CASE-OF-ENDCASE等关键字。 c. 重复结构。一般用DO-WHILE-ENDDO、REPEAT-UNTIL等关键字。
②.内层。一般是采用祈使语句的自然语言短语,使用数据字典中的名词和有限的自定义词,其动词含义要具体,尽量不用形容词和副词来修饰。还可使用一些简单的自述运算和逻辑运算符号。
⑵判定表。在有些情况下,数据流图中的某个加工的一组动作依赖于多个逻辑条件的取值。这时,用自然语言或结构化的语言都不易清楚地描述出来。而用判定表就能够清楚地表示复杂的条件组合与应做的动作之间的对应关系。
判定表由四部分组成,如图4-2所示。
判定表能够把在什么条件下系统应该做什么动作准确无误地表示出来,但不能描述循环的处理特性,循环处理还需结构化语言。
⑶判定树。判定树是判定表的变形,一般情况下它比判定表更直观,且易于理解和使用。
4.什么是结构化分析方法?该方法使用什么描述工具?具有什么样的优缺点。
结构化分析方法是面向数据流进行需求分析的方法。它是一种建模活动,该方法使用简单易读符号,根据软件内部数据传递、变换的关系,自顶向下逐层分解,描绘出满足功能要求的软件模型。
结构化分析的主要思想是采取自顶向下的逐层分解的分析策略,即面对一个复杂的问
题,分析人员不可能一开始就考虑到问题的所有方面以及全部细节,采取的策略往往是分解,把一个复杂的问题划分成若干个小问题,然后再分别解决,将问题的复杂性降低到人可以掌握的程度。分解可分层进行,先考虑问题最本质的方面,忽略细节,形成问题的高层概念,然后再逐层添加细节,即在分层过程中采用不同程度的“抽象”级别,最高层从问题最抽象,而低层的较为具体。
结构化分析方法利用图形等半形式化的描述方式表达需求,简明易懂,用它们形成需求说明书中的主要部分。这些描述工具是.
(1) 数据流图。
(2) 数据字典。
(3) 描述加工逻辑的结构化语言、结构表、判定树。
其中,“数据流图”描述系统的分解,抒描述系统由哪几个部分组成,各部分之间有什么联系等等。“数据字典”定义了数据流图中每一个图形元素。结构化语言、判定表或判定树则详细描述数据流图中不能被再分解的每一个加工。
结构化分析方法的优点.结构化分析方法是软件需求分析中公认的,有成效的,技术成熟,使用广泛的一种方法,它较适合于开发数据处理类型软件的需求分析。该方法利用图形等半形式化工具表达需求,简明,易读,也易于使用,为后一阶段的设计,测试,评价提供了有利条件。
结构化分析的缺点.
(1)传统的SA方法用于数据处理方面的问题,主要工具DFD体现了系统“做什么”的功能但它仅是一个静态模型,没有 反映处理的顺序,即控制流程。因此,不适合描述实时控制系统。
(2)20世纪60年代末出现的数据库技术,使许多大型数据处理系统中的数据都组织成数据库的形式,SA方法使用DFD在分心与描述“数据要求”反面是有局限的,DFD应与数据库技术中的实体联系图(ER图)结合起来(如同IDEF1信息模型相结合一样)。ER图能增加对数据存储的细节以及数据与数据之间,数据与处理过程之间关系的理解,还解决了在DD中所包含的数据内容表示问题,这样才能完整的描述拥护对系统的需求。
(3)对于一些频繁的人机交互的软件系统,如飞机定票,银行管理,文献检索等系统,拥护最关心的是如何使用它,输入命令,操作方式,系统响应方式,输出格式等等,都是用户需求的重要方面,DFD不适合描述人机界面系统的需求。SA方法往往对这一部分用自然语言做补充。
(4)描述软件需求的精确性有待于提高。
5.传统的软件开发模型的缺陷是什么?原型化方法的类型有哪些?原型化开发模型的主要优点是什么?
传统软件生存期范例的典型代表是“瀑布模型”。这种模型的核心是将软件生存期划分为软件计划、需求分析、软件设计、编码、测试和运行维护等阶段,根据不同阶段工作的特点,运用不同的方法、技术和工具来完成该阶段的任务。软件开发人员遵循严格的规范,在每一个阶段工作结束时都要进行严格的阶段评审和确认,以得到该阶段一致、完整、正确和无歧义性的文档资料,并以它们作为下一阶段工作的基础。
传统思想强调每一阶段的严格性,尤其是开发初期要有良好的软件规格说明,主要是源于过去软件开发的经验教训,即在开发的后期或运行维护期间来修改不完善的规格说明不是一件容易的事。特别是对于一些大型的软件项目,在开发的早期用户往往对系统只有一个模糊的想法,很难完全准确地表达对系统的全面要求,软件开发人员对于所要解决的问题认识更是模糊不清。经过详细的讨论和分析,也许能得到一份较好的规格说明,但却很难期望该
规格说明能将系统的各个方面都描述得完整、准确、一致,并与实际环境相符。很难通过它在逻辑上推断出(不是在实际运行中判断评价)系统运行的效果,以此达到各方对系统的共同理解,因此,很难保证每个阶段特别是定义阶段是正确的、完整的。
随着开发工作向前推进,用户可能会产生新的要求,或因环境的变化,要求系统也能随之变化,开发人员又可能在设计和实现的过程中遇到一些没有预料到的实际困难,需要以改变需求来摆脱困境。因此,规格说明难以完善需求的变更,以及通信中的模糊和误解,都会成为软件开发顺利推进的障碍。尽管在传统软件生存期管理中通过加强评审、确认和全面测试,甚至依靠维护阶段能够缓解上述问题,但不能从根本上解决这些问题。
为了解决这些问题,逐渐形成了软件系统的快速原型的概念。由于运用原型的目的和方式不同,原型又可分为以下三种不同的类型.
(1)探索性原型.这类原型是问题域中某些子系统或用户需求的某些子部分的可操作模型,它不涉及软件的实现方法。其主要作用是澄清应用领域和用户需求的某些疑难问题,并方便用户对开发人员的需求分析工作进行评价、纠错和确认。
(2)实验性原型.对于重要的用户目标和关键算法,开发人员可以生成实验性原型,以验证问题求解方案的可行性,比较各种方案的优劣,并征询用户对这些方案的功能和性能的意见.
(3)进化性原型.进化性原型不仅用来理解问题、试验求解方案,而且用作目标软件系统的基础,在后续开发过程中逐步进化为最终的软件产品。
建立快速原型进行系统的分析和构造,有以下的优点.
(1)增进软件开发人员和用户对系统服务需求的理解,使比较含糊的具有不确定性的软件需求(主要是功能)明确化。由于这种方法能在早期就明确了用户的要求,因此可以防止以后由于不能满足用户要求而造成的返工,从而避免了不必要的经济损失,缩短了开发周期。
(2)软件原型化方法提供了一种有力的学习手段。通过原型演示,用户可以亲身体验早期的开发过程,获得关于计算机和被开发系统的专门知识。软件开发人员也可以获得用户对系统的确切要求,学习到应用范围的专业知识。
(3)使用原型化方法,可以容易地确定系统的性能,确认各项主要系统服务的
可应用性,确认系统设计的可行性,确认系统作为产品的结果。因而它可以作为理解和确认软件需求规格说明的工具。
(4)软件原型的最终版本,有的可以原封不动地成为产品,有的略加修改就可以成为最终系统的一个组成部分,这样有利于建成最终系统。