软件工程基础第3章需求分析问题什么是需求?如何获取需求?如何表达用户的需求?谁负责完成需求分析?本章目标了解需求分析的任务及过程了解需求获取方法理解功能性需求和非功能性需求掌握结构化需求分析的方法能阅读和理解需求分析说明书,并掌握编写文档的要领。团队成员的责任分析人员:主要负责与客户交互和需求。开发人员:主要负责设计、实现和单元测试。测试人员:主要负责功能、性能和系统测试。项目经理:主要负责持续的项目团队的跟踪并关注关键的交付产物。本章内容一、需求分析概述二、需求分析任务三、与用户沟通获取需求的方法四、分析建模与规格说明五、实体-联系图六、数据规范化七、状态转换图八、其他图形工具九、验证软件需求需求分析定义?需求分析是指开发人员要准确地理解用户的要求,进行细致的调查分析,将用户非形式化的需求陈述转化为完整的需求定义,再由需求定义转化为相应的软件需求规格说明书(即需求分析的结果)的过程。需求分析是理解、分析和表达“系统必须做什么”的过程。需求分析是为目标系统建立一个概念模型,是对需求的抽象描述。需求分析概述需求分析做什么?准确地回答”系统必须做什么?”这个问题;对系统提出完整、准确、清晰、具体的要求;写出软件需求规格说明书;用户要很好地参与到需求分析过程中来;(需求要不断迭代)分析系统的”数据模型”、细化的“逻辑模型”和“行为模型”;(关键所在)IsWhatNotHow需求分析概述需求分析的重要性(1)许多大型应用系统的失败,最后均归结到需求分析:要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客户配合不好,导致客户对需求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。(2)需求分析报告是客户、软件开发人员、软件测试人员和项目管理人员四者共同工作的基线,是项目测试的准则,是供方交付产品和需方验收产品的依据。(3)需求分析要占用整个软件开发时间或工作量的30%左右。(4)需求获取中的错误,属于软件开发中的早期错误,将给项目成功带来极大风险,会在后续的设计和实现中进行发散式的传播。根据以上四项原因,常常派经验最丰富的人员去作项目需求。需求分析概述本章内容一、需求分析概述二、需求分析任务三、与用户沟通获取需求的方法四、分析建模与规格说明五、实体-联系图六、数据规范化七、状态转换图八、其他图形工具九、验证软件需求需求分析的任务具体任务:确定对系统的综合要求(系统需要什么?)分析和设计系统的数据要求在可行性分析的基础之上分析和设计系统的功能模型分析和设计描述软件动态变化的行为模型(系统的状态是如何改变的)编写软件需求规格说明书,可能需要修正系统开发计划编写初步软件测试计划功能要求性能要求可靠性和可用性要求出错处理要求接口要求约束逆向要求扩展要求基本的、核心的。定义系统做什么。时间、存储量、安全性。反应系统工作时的特性。故障率、可用时间对环境错误应该如何响应用户(界面)、硬件、软件、通信限制条件、精度、工具和语言对系统可能的扩充或修改系统不应该做什么,用于澄清事实。1、确定系统的综合要求需求分析的任务讨论要建立一个图书管理系统,用户提出如下要求,请分析以下描述,它们是否属于图书管理系统的用户需求?如果是需求,它是哪种需求?普通读者必须注册成合法用户才可以使用该系统。用户可以预订目前借不到的图书资料。用户不希望自己的借阅记录被他人查阅。系统通过ADO与图书资料数据库连接,并从图书资料数据表中获得图书资料的基本信息。系统应该具有良好的可扩展性。软件系统的本质是对数据进行处理。通常要求建立完整的概念模型(E-R模型)数据字典缺乏直观性(考虑图形化描述复杂数据的组成)必要时需要对数据模型进行规范化(范式)阶段性成果:E-R图层次方框图或Warnier图2、分析和设计系统的数据要求需求分析的任务确定了系统综合要求和数据要求,可导出详细的系统功能模型。阶段性成果:细化后并经过多次校验的数据流图(DFD)与数据流图相辅相存的数据字典(DD)概要性的描述主要加工的处理算法(IPO)3、分析和设计系统的功能模型需求分析的任务4、分析和设计系统的行为模型确定系统的动态变化的方式,采用状态转换图来描述。阶段性成果:状态转换图(STD)需求分析的任务5、编写需求规格说明书和开发计划根据上述的阶段性成果,汇总为“软件需求规格说明书”,以提交评审在可行性分析的基础上,较准确地估计系统的开发成本和进度修正开发计划需求分析的任务需求分析的任务--举例走访客户,调研业务流程记录调研过程资料馆长和馆员分析师配合调研分析师需求分析,绘制数据流图(结构化方法)、用例图(面向对象方法),数字字典等书写需求分析规格说明书分析师馆长和馆员交流图书馆的需求分析流程修改开发计划需求分析的任务总结:通俗地说,需求分析的任务就是准确地定义未来系统的目标,确定为了满足用户需求的系统必须做什么。用需求规格说明书规范的形式准确地表达用户的需求。需求分析阶段关键在于“理解”和“表达”。“理解”是开发人员对系统需求的理解(1)挖掘用户需求;(2)修正需求。“表达”是对理解用逻辑模型描述出来,一方面能让用户看懂,另一方面能让程序员理解。需求分析任务总结:物理模型到逻辑模型举例•问题描述:学校教材科根据业务的需要,建立一个学校教材购销管理系统,提高教材采购、销售和信息管理的效率。学生张秘书301购书单王会计302张秘书301赵保管303学生购书证明发票领书单书学生审查有效性购书单开发票开领书单发书学生有效购书单发票领书单书学生审查并计算金额购书单打印领书单学生已交款证明领书单2)去掉具体模型中的非本质因素,抽象出当前系统的逻辑模型1)通过对现实环境的调查研究,获得当前系统的具体模型3)分析当前系统与目标系统的差别,建立目标系统的逻辑模型。本章内容一、需求分析概述二、需求分析任务三、与用户沟通获取需求的方法四、分析建模与规格说明五、实体-联系图六、数据规范化七、状态转换图八、其他图形工具九、验证软件需求需求获取是否彻底与成功,直接关系到软件开发的成败。需求获取为什么难?(1)用户需求具有动态性,即需求的不稳定性:在整个软件生命周期内,需求会随着时间的进展而有所变化。(2)用户需求具有模糊性:由于用户的需求表达不很清楚也不够明确。与用户沟通获取需求的方法1、需求获取技术需求获取的关键在于通过与用户的沟通和交流,收集和理解用户的各项要求。需求获取技术–用户面谈–问卷调查–现场考察–数据流图(基于用例的方法)–简易的应用规格说明技术–原型化方法访谈与用户沟通获取需求的方法与用户沟通获取需求的方法一、访谈1)用户面谈–一种理解商业功能和商业规则的最有效方法面谈过程需要认真的计划和准备–面谈之前确立面谈目的确定要包括的相关用户确定参加会议的项目小组成员建立要讨论的问题和要点列表复查有关文档和资料确立时间和地点通知所有参加者有关会议的目的、时间和地点与用户沟通获取需求的方法信息收集中的主要问题主题对用户来说的问题商业过程和操作是什么?你要干什么?商业过程应该怎样完成?如何完成它?或需要哪些步骤?需求什么样的信息?你要使用哪些信息?你要使用什么样的表单或报告?与用户沟通获取需求的方法一、访谈2)问卷调查可用于确认假设和收集统计倾向数据问卷需要快速回答,允许匿名方式在完成最初的面谈和分析后,作为一项协作技术可以收到良好的效果。与用户沟通获取需求的方法一、访谈3)现场观察商业过程和工作流程掌握用户如何实际使用一个系统以及到底用户需要哪些信息,最好的办法是亲自观察用户是如何完成实际工作的。一般方法对办公室进行快速浏览,了解布局、工作流程总体情况。观察用户是如何实际完成他们的工作,理解用户实际使用计算机系统和处理事务的细节。像用户一样接受训练和做实际工作,发现关键问题和瓶颈。与用户沟通获取需求的方法2、面向数据流的自顶向下求精(结构化分析)数据是需求分析的起点系统分析员一定要搞清楚数据的细节分析的对象:高层数据流图(什么阶段得到的?)主要目标:把数据流和数据存储定义到元素级别(不可分解为止)数据的来源、去向、数据结构定义等2、面向数据流的自顶向下求精从数据流图的输出端着手分析,这是因为系统的基本功能是产生这些输出的关键原因。输出数据决定了系统必须具有的最基本的组成元素(包括功能、数据结构等)。自顶向下,逐层细化的方法与用户沟通获取需求的方法与用户沟通获取需求的方法2、面向数据流的自顶向下求精可行性分析中给出了数据流图的分析方法,其目的主要是导出较高层次较粗糙的数据流图为了准确地收集需求,采用本章的从数据流图的输出向输入的回溯方法。与用户沟通获取需求的方法2、面向数据流的自顶向下求精回溯过程中需要回答两个问题输出数据的组成?输出数据的来源?深入调查外部输入或系统生成与用户沟通获取需求的方法加工:fgk输入数据输出数据输入数据:x,y输出数据:a,b,c,da=f(x,y)b=g(x)c=?d=k(w)结论:1.缺乏一个得到输出数据c的加工2.缺少一个输入数据例子-回溯分析法与用户沟通获取需求的方法2、面向数据流的自顶向下求精回溯时常遇到的问题:为了得到某个数据元素需要用到数据流图中还没有的数据元素,或者得出这个数据元素要用的算法尚不完全清楚。因此,需要向用户等有关人员请教,使分析员对目标系统的认识更深入具体,更多的数据元素被划分出来,更多的算法搞清楚了。把分析过程中得到的数据元素记录在数据字典中,把对算法的简明描述记录在IPO图中,并添加到数据流图的适当位置上。数据流图是帮助用户复查需求的极好工具;分析员向用户解释数据的来源(组成和处理,反映了分析员对系统已有的认识。)用户要及时纠正和补充分析员的认识它验证了已知的元素,补充了未知的元素,填补了文档中的空白;分析员对系统的认识是一个螺旋式上升的过程。与用户沟通获取需求的方法需求分析的过程示图与用户沟通获取需求的方法面向数据流方法的分析举例仓库管理员采购员定货系统事务定货报表来源、数据组成是什么?来源:由哪个加工产生或从哪个文件读出?数据组成:查数据字典确定包括哪些数据项?面向数据流方法的分析举例名字:定货报表别名:定货信息描述:每天一次送给采购员的需要定货的零件表定义:定货报表=零件编号+零件名称+定货数量+目前价格+主要供应商+次要供应商位置:定货报告定货信息库存清单逐一确定元素的来源面向数据流方法的分析的应用仓库管理员采购员1处理事务2产生报表事务定货报表库存清单D1定货信息D2123465包含零件编号、名称、目前价格形成定货数量面向数据流方法的分析举例仓库管理员采购员1.1接收事务2产生报表事务定货报表库存清单D1定货信息D21.2更新库存1.3处理定货事务库存信息12356487供应商信息D33、简易的应用规格说明技术前两种方法中,用户比较被动本技术是一种面向团队的需求收集方法,是一种主流技术它提倡用户与开发者密切合作、共同标识问题、提出解决方案,确定基本需求与用户沟通获取需求的方法初步访谈待解决问题的范围和方案分别写产品需求召开讨论会是否需要这个功能点以及对需求进行组合针对每个议题制定一统一的需求列表分会讨论单独议题需求列表的讨论汇总需求完整的需求规格说明书与用户沟通获取需求的方法简易的应用规格说明技术流程要求开发者与用户不分彼此,齐心协力,密切合作3、简易的应用规格说明技术4、快速原型法快速建立起来的旨在演示目标系统主要功能的可运行的程序。它是最准确、有效和强大的需求分析技术。基本特性:快速:快速的提供给用户一个可运行的软件;容易修改:根据用户的要求可迅速构建新的原型;与用户沟通获取需求的方法本章内容一、需求分析概述二、需求分析任务三、与用户沟通获取需求的方法四、分析建模与规格说明