1、作者:杨乾明需求分析和规格说明方法2016/10/2需求分析和规格说明方法1需求分析和规格说明阶段的基本概念结构化分析(SA方法)概述数据流图数据词典小说明分析的步骤SA方法小结快速原型法分析阶段的其它工作2016/10/2需求分析和规格说明方法2小明(甲方)XX餐馆服务员(乙方):这里什么最好吃:给我来一碗牛肉面:少加一点,谢谢额!等一下,另外我不要大蒜:不是让你们不要放大蒜吗?怎么还有?:我们这里有拉面、牛肉面、刀削面:牛肉面需要加辣椒吗?:好嘞,来这是你要的面:你刚刚没说啊难道是我听错了2016/10/2需求分析和规格说明阶段的基本概念3小明提出问题小明不知道餐馆能做什么服务员需要代表“
2、餐馆”说明餐馆能“做什么”小明确定了需要的面食,但是小明仍然不能确定面食中的佐料有哪些服务员知道了小明的需求,同时也就确定了“做什么”同时根据服务员过去的经验,提出了小明可能关心的问题,予以确认可以看出在小明说“谢谢”这之前他与服务员的沟通是很顺利的此时只有服务员自己知道,刚刚问辣椒的时候面的佐料都已经放好了,最后的“听错了”只是为自己找台阶下而已小明比作用户,服务员比作软件人员,那么他们沟通的最基本目标是通过沟通明确出要“做什么”,不需要关注怎么做服务员在这个过程中有一个简短的分析过程就是“确认是否需要辣椒”,这个过程映射到软件层面就是“分析阶段是面向问题”,这里的问题主要依据双方过往的经历
3、和经验发现自己不能理解或者对方不能理解的事物拿出来共同讨论和确认最终结果要的是什么根据小明吃饭的最后遭遇说明,用户的要求可能来自多方面,映射到软件层面就是功能要求、性能要求、可靠性要求等等,在未明确用户各方面的要求情况下不应该也不允许立刻动手做服务员当时要是能够通过手动记录或者打单系统输出一份单据,那么这样也就没有了后续的不愉快,所以用户与软件人员沟通的产物还应该有一个具体的说明性质的并且双方能够看懂的文档最好2016/10/2需求分析和规格说明阶段的基本概念4需求分析和规格说明阶段又称为需求确定阶段和或分析阶段,其目的是澄清用户的需求。这个阶段的基本任务是:用户和软件人员双方一起来充分地理解
4、用户的要求,并把双方共同的理解明确地表达成一份书面文档需求说明书。分析阶段的两大任务就是“理解”和“表达”,分析就是理解问题,“规格说明”就是按某种标准的方式把问题表达出来2016/10/2需求分析和规格说明阶段的基本概念5作为用户和软件人员之间的合同,为双方相互了解提供基础反映出问题的结构,可以作为软件人员进行设计和编写的基础作为验收的依据,即作为选取测试用例和进行形式验证的依据注:需求说明书应该即完整、一致、精确、无二义、又要简明易懂并易于维护2016/10/2需求分析和规格说明阶段的基本概念6 这是一个忧伤的故事.小明年幼的时候家里很穷,看着电视里小朋友能玩各种玩具是非常的羡慕,其中对于
5、玩具车的偏爱,对年幼的小明来说就是遥不可及的梦想 小明虽然没有车,但是小明见过邻居家的打米机,通过柴油机带动打米机就能工作。小明虽然没有车,但是知道爸爸买回来的录音机可以插入磁带就能转动发出声音。就这样在一个罪恶的晚上,小明摔坏了爸爸的录音机,挨了一顿打,身上很疼,但是心理却很开心。小明拿着录音机中的马达电动机,拿着一根妈妈弄头发的胶圈(quan),再拿着很长时间收集的几个大小不一的玩具车轮,开始了实现他的梦想之旅.年幼的小明不知道的是当他做完这辆小车后,他已经学会了初中物理的力学知识,他还不知道的是他已经学会了一套分析问题看待问题的方法等等 为了梦想,一切的付出都是值得的。2016/10/2
6、结构化分析(SA方法)概述7小明造车的故事告诉我们看问题要看到本质“车能跑,不止是因为有轮子”那么当我们把复杂的问题抛出来以后怎么解决呢?那就是“把复杂的问题简单化,把简单的问题具体化”,这句话对应到我们软件层面就是“结构化分析”“复杂问题简单化”对应到我们的软件结构化分析就是“分解”,如何做好简单化呢?就是把大问题分解成若干小问题,然后分别解决。“简单问题具体化”对应到我们的软件结构化分析就是“抽象”,如何做好具体化呢?还得从分解说起,当我们把问题分解到足够细的时候,这时候我们一般就能看到问题的本质,然而分解后的问题大问题没了,小问题很多,这时候我们就要去做一个分层筛选,把每一个层次的重要部
7、分抓取出来,省去细节,获取所有层面最本质的属性,对于后续工作的开展再逐层添加细节2016/10/2结构化分析(SA方法)概述8 目前大多数计算机系统都是用来代替一个当前已经存在的人工数据处理系统,对于这类系统的分析过程可分为四步进行:理解当前的现实环境,获得当前人工系统的具体模型;从当前系统的具体模型抽象出当前系统的逻辑模型;分析目标系统与当前系统逻辑上的差别,建立目标系统的逻辑模型;为目标系统的逻辑模型做补充2016/10/2结构化分析(SA方法)概述9一套分层的数据流图一本数据词典一组小说明补充材料注:以上就是用SA方法获得的需求说明书包含的几部分组成数据流图:描述系统的分解,即描述系统由
8、那几部分组成,各部分之间有什么联系等;数据词典:描述系统中的每一个数据小说明:详细描述系统中的每一个加工补充材料:额外的描述系统功能的材料2016/10/2结构化分析(SA方法)概述10 如果我们打算把小明造车的实例拿来做一个类似软件层面的分析可得到如下初步的“数据流图”该“数据流图”我们也可以认为是玩具车制造厂商的设计过程2016/10/2数据流图11含义元素数据流图是SA方法中用于表示逻辑系统模型的一种工具,它从数据传递和加工的角度,以图形的方式来刻画数据流从输入到输出的变换过程:数据流,是由一组固定成分的数据组成,箭头的方向表示数据的流向,箭头的始点和终点分别代表数据流的源和目标。除了流
9、向数据存储或从数据存储流出的数据不必命名外,每个数据流必须要有合适的名字,以反映数据流的含义;:外部实体,代表系统之外的实体,可以是人、物或其它系统软件,他指出数据所需要的发源地或系统所产生的数据归属地;:对数据进行加工处理,加工是对数据进行处理的单元,它接受一定的数据输入,对其进行处理,并产生输出;:数据存储。表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等;另外*和可以分别表示与和或,在数据输入或输出的时候使用,一般情况下不建议使用,这样会增加阅读的复杂度;2016/10/2数据流图12 对于任何一个系统,在刚开始时只是将现实情况反映出来,而不是急于去想象未来的计算机系统是怎
10、么样,系统不一样,画出来的数据流图肯定不一样,但原则上都是“由外向里”进行的,“由外向里”是一种比较自然而且有条理的思考过程,通常人们观察事物的也基于此进行。第一步:画系统的输入输出,首先画系统的输入数据流和输出数据流,也就是先决定系统的范围,同样,对每一个加工来说也是先画出它们的输入输出,再考虑这个加工的内部;第二步:画系统的内部,此时需要将系统的输入输出数据流用一连串加工连接起来,一般可以从输入端逐步画到输出端,也可以反过来追溯。在数据流的组成或者值发生变化的地方应画上一个加工,他的作用就是实现这一变化2016/10/2数据流图13图形绘制材料数据玩具车模型图第三步:画加工的部分,同样用“
11、由外向里”的方式,可以继续分析每个加工的内部,如果加工的内部还有一些数据流,即可将这个加工用几个子加工代替,并且在子加工之间画出这些数据流2016/10/2数据流图14采集人员设计图数据分类马达数据车轮数据马达设计车轮设计整车设计马达设计图车轮设计图玩具车模型图材料数据车身设计车身数据车身设计图 对一个大型的系统,如果用一张数据流图画出所有的数据流和加工则图纸将变得很庞大复杂,难以理解,为了控制复杂性,SA方法采用了“分层”的技术逐层分解的方式不是一下子引进太多的细节,而是有控制的逐步增加细节,实现从抽象到具体的逐步过渡,用数据流图来描述“逐层分解”,就得到了一个分层的数据流图一套分层的数据流
12、图由顶层、底层、和中间层组成。顶层说明了系统的边界,即系统的输入和输出数据流,顶层图只有一张。底层图由一些不必再分解的加工组成,在顶层和底层之间的是中间层,中间层的数据流图描述了某个加工的分解,而它的组成部分又要进一步被分解。小系统可能没有中间层。2016/10/2数据流图15编号,为了便于管理,需要为分层的数据流图定义编号1)子图的编号就是父图中相应加工的编号2)子图中加工的编号由子图号、小数点、局部号连接而成注:顶层不需要编号,下一层可以用编号0,则图0中加工编号就是0.1、0.2、0.3等等,同时由于文档结构编写的习惯原因,我们去掉第一级的“0.”,保留1、2、3这样的一级目录,那么接下
13、来的下一层就是1.1、1.2、1.3这样的编号了,如果我们的编号层级太复杂,可以在每一个中间层分层的加工中使用最后的编号比如“.1”、“.2”“.3”,但是相对应的小说明则必须写全编号2016/10/2数据流图161 马达设计1.2 磁铁设计图0图11.1 线圈设计父图和子图的平衡,就是父图中的加工对应的输入输出,在子的数据流图中最开始的输入和最后的输出是能对应上的,这就叫平衡。有一种例外的情况就是,父图的输入输出,与子图对应不上的时候,若是子图多出了很多输入或者输出数据流,此时若是在“数据词典”中对数据的输入输出做好了定义,也就是说,几个输入或者输出数据流对应了一个输入输出数据流,此时可以认
14、为是平衡的。举个例子,我们对“马达设计”做个小小的变更马达数据=线圈数据+磁铁数据2016/10/2数据流图171 马达设计图0子图马达数据1.1 马达内部设计磁铁数据线圈数据父图图11.2马达整体设计内部数据马达设计图马达设计图局部文件,在画分层数据流图时当分层到涉及到住够细的时候,一般为最底层,这时候可能会涉及到文件存贮部分,这时候就应该画出文件,而中间层由于从“抽象”原则上来讲,并不会关注加工下面的细节,所以不必画出文件部分分解的程度,一个加工每次分解到多少个子加工,经验得出的答案是7个1)分解应自然,概念上合理、清晰2)只要不影响数据库图的“易理解性”,可言适当的多分解成几个部分,这样
15、分层图的层数可能就少些3)一般来说,在上层可言分解的快些,在下层分解的慢些,因为上层是一些综合性的描述,“易理解性”相对的来说不太重要,而下层由于跟具体,更贴近需求本身所以要慎重2016/10/2数据流图18父图和子图的输入输出数据流要“平衡”更加“抽象”原则,每张图只画出作为加工间交界面的文件和数据流,而不必画出加工内部的文件如果要了解某个加工内部的细节,可以阅读与这个加工的编号相同的一张图一个加工一般最多分解成7个子加工当每个加工都已经足够简单时,分解就可以结束2016/10/2数据流图19适当的命名 数据流图中每一成分的命名是否恰当与数据流图的易理解性有直接的关系1)为避免引起错觉,名字
16、要适合于整个数据流,而不是仅仅反应它的某些成分2)避免用空洞的名字,如“数据”“信息”“输入”“输出”,因为缺乏具体的含义3)如果发现难以为某个数据流命名,这往往是数据流图分解不当的征兆,需要从新尝试分解4)通常应先为数据流命名再为加工命名,这也反映了由外向里的思考过程5)为加工命名时,建议使用动词加名词的方式,若是涉及多个动词则建议把多个分开,分成多个加工画数据流而不是控制流 常规的框图使用的箭头大多表示的是一个动作,这样,就与数据流图的符号定义产生了对立,因此要区分开,毕竟,数据流图是从数据的角度来描述一个系统2016/10/2数据流图20先考虑稳定状态 画数据流图时先不考虑系统如何开始工
17、作,如何结束,只假定它能开始运行就是了,这是为了集中精力考虑稳定状态下的种种问题,所以将系统的开始和结束推迟到适当的时候再考虑忽略琐碎的枝节 画数据流图时,应集中精力于主要的数据流,而暂不考虑一些例外的情况、出错处理等枝节性问题,我们只需要画出这些枝节性数据流就可以了,而不必继续分析,因为这些问题对理解整个系统没有很大的影响,因此可以放心的推迟考虑随时准备重画 一句话就是错误越早发现后期的代价就越小2016/10/2数据流图21车轮设计车轮数据车轮设计图车轮数据错误数据流图从“数据”和“数据经受的加工”这两个相互补充的方面来表达一个数据处理系统;数据流图从数据的角度描述它们作为输入进入系统,经
18、受某个加工,再经受某个加工或者合并,或者分解,或者存储,最后成为输出离开系统的整个过程;经验证明,对数据处理系统来说,从数据角度观察问题,一般能够较好地抓住问题的本质,并描述出系统的概貌;数据流图只描述了系统的“分解”,它并没有表达出每个数据和加工的具体含义,这些信息需要在“数据词典”和“小说明”中表达出来;2016/10/2数据流图22小明大黄:大黄,你看我做的车,通电就能跑哦!:我用了个马达,找了四个轮子,然后用了皮筋带动齿轮,通过齿轮的转动最后带动四个车轮,然后.:废话那么多,你还玩不玩(面对大黄的问题小明其实都不知道怎么回答,特别是最后一个问题.):真的吗?小明,让我玩玩,怎么做的啊!
19、:啊,这么复杂,什么叫马达,用什么做的啊,你的轮子怎么都不一样用的什么材料啊,咦!那齿轮怎么看着好眼熟啊?好像是录音机里面的啊.2016/10/2数据词典23 小明的玩具车虽然做成功了也很好玩,小明很愿意把自己胜利的果实分享给小伙伴,希望小伙伴喜欢,可是小明并没有认真想过如何才能做好分享,就凭已经做好的玩具车是无法让别的小伙伴更深入的了解小明和小明的玩具车的.要是此时小明就明白什么叫马达,他是如何工作的,里面都有些什么组成等等,那么当他把这些都能认真讲出来的时候,也许小伙伴会更加的感兴趣,也更能明白!因此,通过小明的这段经历,我们同样类比到软件层面,我们软件结构化分析过程中仅有数据流图是不够的
20、,针对数据流图中的每一项名词术语还需要有更细致的说明和解释。我们对数据流、文件、数据项(不在被分解的数据单位)做说明解释的单元叫做“数据词典”。我们对加工做说明解释的单元叫做“小说明”。通过这两项和数据流图就构成了我们“需求说明书”的主体结构。2016/10/2数据词典24数据流图描述了系统的分解,即描述了系统由那几部分组成,各部分之间的联系,但没有说明系统中各个成分是什么含义,因此仅仅一套数据流图并不能构成系统说明书,只有为图中出现的每一个成分都给出定义之后,才是较完整地描述了一个系统。数据流图中所有名字的定义就构成了一本“词典”,当我们不知道某个名词的含义时,可以通过“词典”查阅。词典的构
21、成是按照一定的顺序的词典条目构成的,比如中文就是拼音字母首字符字母排序,这样方便查阅。词典条目与数据流图中命名、分层是对应的。接下来分别介绍词典条目的各种类型2016/10/2数据词典25数据流条目给出某个数据流的定义,它通常是列出该数据流的各组成数据项,比如我们最开始的“马达数据”中的马达就可以写成如下的形式 马达=定子+转子 定子=主磁极+换向磁极+机座+端盖+电刷装置 转子=电枢铁心、电枢绕组、换向装置、风扇、转轴 上面的定义数据流定义时使用的简单符号:+表示“与”。|表示“或”,即选择括号中的某一项。表示“重复”,即括号中的项要重复若干次,重复次数的上、下限也可在括号边上标出。()表示
22、“可选”,即括号中的项可能没有。2016/10/2数据词典26文件条目给出某个文件的定义,同数据流条目一样,文件的定义通常是列出其记录的组成数据项,还可指出文件的组织方式,如下 2016/10/2数据词典27文件名:定期账目组 成:账号+户名+地址+款额+存期组 织:按帐号递增次序排列数据项条目给出某个数据单项的定义,通常是该数据项的值类型、允许值等,例如“帐号”这个数据项的值可以是00000至99999之间的任意整数,则词典条目“帐号”可写成帐号=0000099999,又如,数据项“存期”可取1、或3、或5、或8等几个值,则词典条目“存期”可写成:存期=1|3|5|82016/10/2数据词
23、典28词典一般可用一叠卡片来构造,其建立过程如下:1)为每一个要定义的名字准备一张卡片。2)在卡片上写上这个名字及其类型(即数据流、文件、数据项或加工)。3)写上这个名字的定义。4)写上这个名字的其他特性及种种限制。5)将所有卡片按名字的词典次序排列起来。如果用户的要求有变化,则词典就要作相应的修改。因为词典的容量一般比较庞大,人工维护一本词典是很花时间也很单调乏味,可以用计算机代替人来完成这项机械而又繁琐的工作,负责这种工作的程序系统称为“词典管理程序”,或简称为“词典”。2016/10/2数据词典29SA方法的基本思想方法的基本思想:将一个大型复杂的系统逐层分解成许多个足够简单的基本加工,
24、然后分别理解每个基本加工,并为每个基本加工详尽地写下“小说明”,再将所有这些“小说明”组织起来就得到了整个系统的说明书。小说明中应精确地描述用户要求一个加工“做什么”,这包括加工的激发条件、加工逻辑、优先级、执行频率、出错处理等,其中最基本的部最基本的部分分是加工逻辑。特别应注意的是:分析阶段的任务是理解和表达“用户的要求”,而不是具体考虑系统怎么样实现。所以对一个加工应描述的是用户要求这个加工“做什么”,而不是用编程语言来描述具体的加工过程。SA方法用结构化语言、判定表和判定树这三种半形式化的方式编写小说明。一般说来,这三种方式可以比较明确地把用户的要求表达出来,用户也比较易于接受。2016
25、/10/2小说明30结构化英语是介于自然语言和形式语言之间的一种半形式语言,简单易懂。结构通常可分成外层和最内层两大层,其中外层可以有多层,相互嵌套。外层语法比较具体,最内层语法则比较灵活。外层语法用来描述控制结构,通常采用人们已熟知的几种标准结构,如顺序、选择和循环,这些控制结构将加工中的各个操作连接起来。内层语法具有以下特点:1)语态:只有祈使句一种,它能明确地表达“做什么”。2)词汇:名词都是词典中定义过的词或自定义的词。3)动词避免用handle、process等空洞的词。4)没有形容词、副词等修饰语。5)可以用一些常用的运算符、关系符等。2016/10/2小说明31加工名:马达内部设
26、计编号:1.1激发条件:收到线圈数据、磁铁数据加工逻辑:xxxx执行频率:xxxx注:英文版的结构化语言类似伪代码,篇幅较大就不予以详解,以上属于中文下的一组表格展示结构化语言的一种风格2016/10/2小说明322016/10/2小说明33 有一类问题不易用语言表达清楚,此时可用判定表来表示这个加工逻揖。例如,“检查订购单”的加工逻辑是:“如果金额超过500元,又未过期,则发出批准单和提货单;如果金额超过500元,但过期了,则不发批准单;如果金额低于500元,则不论是否过期都发出批准单和提货单,在过期的情况下还需发出通知单”。此加工逻辑可用下表表示:金额500500500500条件桩条件条目
27、状态未过期已过期未过期已过期发出批准单XXX操作桩操作条目发出提货单XXX发出通知单X判定表通常由四部分组成(见上表),其间用双线条或粗线条分开,左上部称条件桩,它列出决定一组条件的对象,右上部称条件条目,它列出各种可能的条件组合,左下部称操作桩,它列出所有的操作,右下部称操作条目,它列出在对应的条件组合下所选的操作。表的右部一般又分成许多列。结论:当需要描述的加工由一组操作组成,是否执行某些操作又取决于一组条件时,用判定表写加工逻辑将比较合适。判定表的优点:清晰易懂,只适合描述条件,描述循环则比较困难。2016/10/2小说明34判定树本质上同判定表是一样的,当用户不易接受判定表这种描述方式
28、时,我们可以用判定树的形式,判定树是一种图形表示,更易被用户理解。下面是两个判定树的例子:2016/10/2小说明35加工逻辑可以用语言、表格、图形等多种形式来描述,在使“小说明”尽可能精确易懂的前提下,分析员可根据每个加工的具体情况选用不同的描述手段。2016/10/2小说明36SA方法的基本思想:“由顶向下逐层分解”,这是软件工程中的一条基本原则。SA方法的实施步骤:先分析当前现实环境中已存在的人工系统,再考虑即将开发的软件系统。SA方法优点:简单清晰,易于学习掌握、易于使用。SA方法的薄弱环节:1)SA方法在理解和表达用户的数据需求方面比较局限,同数据库技术亦不能较好地衔接。2)SA方法在理解和表达人机界面方面是很差的,用数据流图描绘人机界面不太合适,逐层分解在这里起不了什么作用,而且SA方法通常要到最后才来考虑人机界面。3)SA方法强调分析数据流,而对时间、控制方面的描述恰恰是不精确的,所以SA方法原则上不适用于实时系统。4)在澄清、确定用户需求方面能起的作用是有限的。2016/10/2需求分析和规格说明方法37