登陆注册
8724600000011

第11章 软件需求分析(1)

3.1软件需求分析概述

软件需求分析是软件过程中一个非常重要的阶段,也是决定性的一步,只有通过需求分析才能将客户对最终软件系统的功能性和非功能性要求归纳总结为严格的需求规约(Requirements Specification),从而为设计打下基础。

需求分析阶段的根本任务是理解和表达用户的需求。理解的过程包括用户需求的获取,适当的分析与综合,需求的验证等内容。表达则是将分析的结果以适当的形式加以描述。这里的描述形式一方面应该方便用户的理解,以便用户对需求加以确认,另一方面,必须较为容易地转化为设计阶段的结果。可见,需求分析与软件过程中的软件设计有着极为密切的关系。

但需求分析和设计的区别还是应该注意的。需求分析虽然与设计过程紧密衔接,甚至很多时候难以严格分界需求分析过程和设计过程,但是需求分析本质上是需要准确的回答系统做什么(What to do),而设计是回答系统怎么做(How to do)。

需求分析的常见方法有两种:一种是结构化分析(Structured Analysis),一种是面向对象的分析(Object Oriented Analysis)。结构化分析主要是以分析软件系统的数据流为主要思路,使用一套分层的数据流图及对数据流图上的各要素加以详细注解的数据字典为主要描述方式的一种方法。面向对象的分析方法主要是以面向对象的思维方式来展开对需求的分析,以面向对象的描述语言来表达需求。这里,在常用的面向对象的需求表达方式中,本书选用UML。此外,除了上述两种常见的方法外,在需求分析过程中,从软件工程方法学的角度来说,还常常使用原型法(Prototype)来快速确定需求。

需求分析过程中,要求分析员对目标软件所针对的行业背景极为熟悉。试想一下,如果要求做一套财务软件,不懂基本的财会知识显然是不行的。在这一背景下,对特定行业下的需求进行分析成了一门新学科的内容,即领域工程(Domain Engineering)。此外,随着软件可复用技术的发展,需求分析领域的可复用也受到了人们极大的关注,这就是框架(Framework)兴起的原因。

3.2软件需求分析的过程

3.2.1需求的识别

软件需求过程的第一个环节就是需求的识别,如需求诱导(Requirements Elicitation)。这一过程实质上包含了同用户充分交流,进行需求的采集,以最终确定用户所要实现的系统综合需求,即软件的需求。并提出这些需求的实现条件,以及需求应该达到的标准。也就是说,要在这一过程确定软件最终要实现什么样的功能,各种功能实现什么样的程度。

识别出的需求可以分为两大类:一类是功能性需求(Functional Requirements),一类是非功能性需求(Non—Functional Requirements)。功能性需求是指目标软件所要实现的功能,如实现数据货品入库登记、年终结账功能,就属于这类需求,这类需求一般来说比较容易确定,因为它很大程度上是用户所从事领域中比较关心的问题,所以用户能够明确的提出。但另外一类需求——非功能性需求则往往被人们所忽视。

非功能性需求一般包括以下几点内容:

性能需求。如系统的响应时间,系统对资源的消耗和系统对大量并发处理能力等。

环境需求。这主要是对软件运行时所处环境的要求。如运行软件所需要的硬件设备,网络设备等,再如支持软件运行的操作系统,数据库管理系统等软件环境。

还包括对系统的可靠性要求,安全性要求,可扩展性要求等多方面的内容,在这里不一一展开了。

3.2.2需求的分析与综合

分析与综合是两种典型的思维方式。分析的过程是从抽象到具体,从宏观到微观的过程,具体体现在结构化方法中的自顶向下,逐层加细的分析思路。但是一味的分析只能使设计人员只见树木不见森林,所以还需要适当的综合,用宏观的尺度把握系统的特性。结构化方法中的顶层数据流图,面向对象分析方法中的用例都是这样的一种综合的表述方式。

需求的分析实质上首先应该是对目标系统对应的现实系统的分析,所以首先是针对系统的分析。系统的分析主要包括3方面内容:一是系统所处环境的分析;二是系统结构的分析,包括系统的组成实体,以及实体间的关系;三是系统功能与行为的分析。这些系统分析的方法应用于软件需求分析,可以归纳为以下3方面的主要内容。

1.数据分析

数据分析主要侧重于组成系统的实体及其关系的分析。其中包括回答这样一些问题,系统由哪些实体组成,每个实体用哪些属性描述,实体之间是什么样的关系。通常用实体关系图(Entity Relation Diagram)来描述数据分析的结果,实体关系图一般由实体及其联系以及实体的属性3部分组成。

2.功能分析

功能分析实质上是分析系统对于环境的输入能够施加怎样的影响,这样的影响就是系统实现的功能。软件系统实现的功能很大程度上可以理解为,系统将输入转变为输出的这一过程。所以系统的功能分析通常从信息流或者数据流的角度加以考察。如取款机,输入所要取的金额,它就提取相应的现金。系统所处环境中的某一实体向该系统输入信息流,系统执行某项功能,完成相应的转换,得到输出流,最终流向系统所处环境的中某一实体。

3.行为分析

最终的目标软件系统不可能是完全孤立的,它总要与环境(如人)做一些交互,这种交互往往是通过事件触发的。如报警系统,一旦触发警铃,报警系统就会做出响应,并处于报警状态,而平时系统保持在闲置状态。行为分析的主要内容就是系统对事件的响应及系统对自身状态的变化加以分析。最为常见的表示方式,就是UML中的状态转换图。

3.2.3需求的表示

当需求分析完成后,必须将需求分析的结果清晰地描述出来,以方便用户的确认和分析员自己的复查。所以需求的表示实质上是将需求分析的结果文档化的过程。在需求的表示过程中可以综合使用各种描述方式,如SA方法中的数据流程图、数据字典、OOA方法中的Use Case图、状态转换图等。具体图表的使用,视实际情况而定,目的只有一个,清晰地描述目标系统的功能,并在最终产生一份需求规格说明(Requirements Specification)书,这就是需求分析的阶段性结果。正因为需求表示阶段的结果是需求规格说明书,所以有些教材也将需求表示阶段表示为需求规约。关于需求的表示还将在本章后面的部分详细描述。

3.2.4需求的验证

为了提高软件的质量,在第1章介绍了“V&;V”策略,该策略在需求分析阶段集中体现为需求的验证。需求验证是必不可少的环节,通过需求的验证,可以尽可能地减少需求分析环节的错误。有数据表明,软件中15%的错误就是来自于错误的需求。此外,需求分析阶段的错误若在编码调试阶段才发现,那么此时的缺陷已被放大,其查找和纠正的难度加大。而通过需求验证则很容易发现需求中的错误。

需求的验证可以从以下几个主要方面进行。

一致性(Consistency):所有的需求必须一致,任何一条需求不能和其他需求相矛盾。

完整性(Completeness):需求必须是完整的,用户需求的各个方面,包括功能性需求和非功能性需求都必须得到描述。

可行性(Feasibility):所有的功能性需求和非功能性需求是否可行,从经济可行性和技术可行性两方面衡量。

清晰性(Clarity):所有的需求是否被正确地表达,对于关键词语是否做了详细的解释。

需求的验证可以有多种方式,最基本的是分析员自己复查需求,也可以开需求验证会,邀请该领域的专家对需求报告加以评审,当然也还包括直接交付给用户,让用户最终确认需求报告的正确。

3.3结构化分析方法(SA)

3.3.1概述

软件是利用计算机技术解决现实生活中问题的一种有效方法和手段,如同其他方法和手段一样,首先必须搞清楚要解决的问题是什么,然后才能去解决它。过去总是有人忽略需求分析的重要性,在没有全面、准确和认真地完成需求分析工作之前,就急急忙忙地进行设计甚至实现工作,结果往往是事倍功半,造成不必要的多次反复,甚至给软件留下严重的后遗症。

软件需求分析阶段的工作和任务是在对问题进行调查了解的基础上,用一定的方法和手段对问题进行分析建模。需求分析的结果应该反映的是必须干什么,而不是怎么干。它的主要用途是明确需求、为用户和开发人员提供一起协商讨论的基础,作为设计和实现的依据。

3.3.2工作内容和任务

结构化软件开发方法采用结构化分析(Structured Analysis,SA)技术对问题进行分析、建模。它将问题表述为:数据流图+实体联系图的形式。其中,数据流图描述问题空间中数据变换处理之间的逻辑关系,实体联系图描述问题空间中数据存储之间的逻辑关系,同时,借用数据词典、结构化语言、判定表、判定树等工具对它们进行详细说明。因此,结构化分析工作主要包括分析确定数据流图和分析确定实体联系图。

首先,根据对问题的功能需求方面的调查了解分析建立数据流图。然后,根据对问题的数据需求方面的了解以及数据流图分析建立实体联系图。最后,根据数据流图、实体联系图以及对问题的性能、资源、可靠性、安全和保密、开发费用、开发进度等其他方面的需求确定,按照有关规范编写需求规格说明书和数据需求说明书并进行复审,完成对问题的结构化分析建模。

3.3.3如何画基本数据流图

数据流图(Data Flow Diagram,DFD)是一种最常用的结构化分析工具,它从数据传递和加工的角度,以图形的方式刻画系统内的数据运动情况。

数据流表示数据的流动情况;加工表示对数据的加工处理过程,它的名字应能简明扼要地表明所完成的是什么加工;数据存储在数据流图中起着保存数据的作用,指向数据存储的数据流可以理解为写数据,从数据存储引出的数据流可以理解为读数据,双向数据流可以理解为修改数据;数据的源点或终点,表示图中出现数据的始发点或终止点,它在图中的出现仅仅是一种符号,并不需要以软件的形式进行设计和实现。在数据流图中,如果有两个以上数据流指向一个加工或从一个加工中引出,则这些数据流之间往往存在一定的关系。通常用一些符号表示这种关系。

在画数据流图时,以下几个问题值得注意。

1.是画数据流图而不是画程序框图

对于很多人来说,通过学习计算机语言已经比较熟悉程序框图了,在画数据流图时很容易将它们搞混。程序框图是从对数据进行加工的角度描述系统的,其箭头是控制流,表示的是对数据进行加工的次序,它用于描述“怎样解决问题”;数据流图则是从数据的角度来描述系统的,其箭头是数据流,表示的是数据的流动方向,它用于描述是“什么问题”。

2.数据流及加工的命名

通常是先为数据流命名,然后再为加工命名。在给数据流命名时,应避免使用像“数据”、“输入”之类的缺乏具体含义的名字;在给加工命名时,理想的做法是由一个具体的及物动词加一个具体的宾语构成一个名字,如果必须用两个动词,则可以考虑将这个加工再分解成两个加工。在命名时,所取的名字应适合整个数据流或加工,而不是仅仅反映它的某些成分。如果发现某个数据流或加工难以命名,那么很可能是数据流图分解不当造成的,此时应该考虑重新分解数据流图。

3.分层数据流图

对于比较复杂的实际问题,在数据流图上常常出现十几个乃至几十个、上百个加工,这样的数据流图看起来很不清楚。采用层次结构的数据流图则能很好地解决这个问题。

它的输入输出反映了系统与外界环境的关系或接口,仅用图是不能表明数据的加工要求的,需要进一步细化。在画分层数据流图时应考虑以下几个问题。

1)编号

为便于管理和阅读,要对每个层次上的图及其加工进行编号。层次编号自上而下分别为顶层图(系统图)、0层图、1层图,等。各层图的关系为父子关系,下层图为子图,上层图为父图。子图的编号就是其父图中相应加工的编号;子图中加工的编号由子图号、小数点和局部号组成。在这种编号中,图号中的小数点的个数就是该图所在的层次号,最后一个小数点前的号码就是其父图的编号。父图和子图的数据平衡子图是父图的细化,因此,子图的输入、输出数据流应和父图中相应加工的输入、输出数据流一致。

2)分解的程度

对一个加工进行细化分解,一次分解成两个或三个加工,可能需要的层次过多;但分解得过多又让人难以理解。根据心理学的研究成果,人们能有效地同时处理问题的个数不超过7个。因此,一个加工每次分解细化出的子加工个数一般不要超过7个。当所分解出的子加工已十分简单时,就可停止这种分解过程。

同类推荐
  • 不懂PowerPoint就当不好经理

    不懂PowerPoint就当不好经理

    经理人如何用PowerPoint,来规划部门的发展,如何用PowerPoint来表达自己的经营主张?本书为各类经理人提供了从入门到提高,从原理到实战的一系列知识,相信本书将让演示文稿为经理人的管理效能加分!
  • EDA技术

    EDA技术

    根据课堂教学和实验操作的要求,以提高实际工程设计能力为目的,深入浅出地对EDA技术相关知识作了系统和完整的介绍,相关知识作了系统和完整的介绍。
  • 条形码技术与应用

    条形码技术与应用

    条形码是一种可供电子仪器自动识别的标准符号,是由一组黑白相间、粗细不同的条、空符号按一定编码规则排列组成的标记,用以表示一定的信息,确认某个物体或规定它的移动,能正确快速地为产、供、销各环节在采集、处理和交换信息时提供标识。
  • 体感交互技术

    体感交互技术

    本书提出了体感计算的研究,探讨了基于体验性认知的个性化电子学习方式,并且分析了面向儿童的艺术创造体验,在体感虚拟化身的帮助下,用户可以通过身体运动,促进情感心智的全面发展,
  • 数字博物馆研究与实践:2009

    数字博物馆研究与实践:2009

    本书汇集了“2009年北京数字博物馆研讨会”与会代表提交的60余篇论文和演讲报告、应用案例,分为数字博物馆(科技馆)发展研究探讨、数字博物馆(科技馆)多样性发展模式、数字技术在博物馆(科技馆)展陈中的应用、数字博物馆(科技馆)建设实践、数字博物馆(科技馆)实现技术和数字博物馆调研报告等六个部分。本书内容囊括了对数字博物馆(科技馆)建设宏观层面的全局思考以及微观层面的具体实践。在宏观层面,介绍了数字博物馆(科技馆)在国内外的发展现状与趋势,通过剖析典型案例,探讨数字博物馆(科技馆)建设的意义、目标、作用、建设原则、要素、特征及目前建设工作中存在的现实问题与对策。
热门推荐
  • 主宰天国

    主宰天国

    当我闭上眼,便是黑暗。当我睁开眼,便是光明。若我振臂一呼、遥相一指,天国之中,我为主宰!
  • 大汉最强外戚

    大汉最强外戚

    秦汉相争数十年,以只凭勇武从而众叛亲离的项羽自刎乌江,以礼贤下士委曲求全但心有天下之志的汉高祖刘邦做了天下落下了这段波澜壮阔历史桥段的华丽大幕。但是殊不知夺得锦绣如画江山的高皇帝刘邦极其后代皇帝却迎来一个只能和亲忍让却无法凭借大汉军事力量制裁的敌人——匈奴!后代因为祖上世代经商的缘故成为华裔,但是从小就十分仰慕自己祖国那源远流长文化和万世不落的辉煌荣光的熊武在刚刚拿到国籍满心欢喜回国的那一刻的时候就遭遇了空难,结果就凉凉了……醒来的时候已经是汉景帝元年了……
  • 如果天国也曾悲伤

    如果天国也曾悲伤

    她的爱情里,有两个男生。帅气得如漫画美少年的原澈野,灿烂得如耀眼阳光的许翼!从天国归来的澈野,对她一次次的伤害。他要她痛!却不料,她的坚定善良逐渐融化了他心底痛苦的秘密……失明后远走美国归来的许翼,即使深爱,却一再对她疏远,甘心成全她和自己的对手。到底是什么样的秘密让原澈野性情大变?又是什么样的秘密,挡在了她和许翼之间?当真相一层层剥开,她终于明白了,即使是美好的天国,也有着无法诉说的悲伤……
  • 那一抹希望的光芒

    那一抹希望的光芒

    同样的世界,同样的末日。恐惧蔓延整个世界,在绝望中灭亡亦或打破黑暗寻找生机。而这个世界的你能活多久?
  • 万灵武霸

    万灵武霸

    为了让村人过上平静祥和的生活,大荒里走出一名少年悠祥,不管前路漫漫如何崎岖,带着村人的期望毅然踏入人区,追求武道巅峰之路,一场狂风暴雨就此拉开了帷幕……一块刻有万种生灵的骨头一段不为人知的历史空白是人为?还是天成?当真相浮出水面时,一场大征讨开始!感谢阅文书评团提供书评支持!
  • 下雨了没伞

    下雨了没伞

    那个少年该走了,过往云烟,就留岁月回首,愿你走出半生,归来仍是少年。
  • 私密空间

    私密空间

    学霸疯子乔掌握了人体信息的提取和控制、意识控制、思维透视和摄像。看穿邪恶城府,看透美人情怀,操控人类行动,治疗人生痛苦……一切,有不是问题。简单地说:他的最大的成就是,他找到了怎么样把一个人变成另一个人的方法。他在巨大成功的时候,他却被一个一直关注他的魔幻学校的邪恶势力所控制,受尽折磨。但是,他却一直坚持自己的做人底线。经过艰苦的斗争,他终于打败了邪恶势力。接着,他建立自己的真正为人类事业的魔幻学校。作品相关是有关疯子乔的成长为学霸的离奇经历。标签:天才成长异能特殊技能天下霸业
  • 残鳞

    残鳞

    “不会的,”赵帅一见林峰那样,摇了摇头,“今天早上警察给我录口供的时候,说是见到几个男子从里面落荒而逃才发现我们的。我想,黄毛男子在我把他打飞之后,见警察来了就跑了。”
  • 大目干连冥间救母变文

    大目干连冥间救母变文

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。
  • 真爱黑白配钟声幸福

    真爱黑白配钟声幸福

    某女穿越到真爱黑白配的电视剧里,成为了刚刚在机场跟周震分手哭泣到死的梁小舒,成为小舒后接受了原主的感情跟所有的记忆,也知道弟弟小凯死去的真相,故事开始了