CONFIDENTIAL软件工程与项目案例教程(三)2北京亚思晟科技有限公司主要内容1、软件需求分析概述2、软件需求分析过程3、项目案例3北京亚思晟科技有限公司3.1软件需求分析概述需求分析是整个项目开发流程的第一个环节,它是在用户和软件开发组之间建立对用户的共同理解,由软件开发组进行分析、精化并详细描述后,按文档规范编写出《软件需求规格说明书》(SoftwareRequirementSpecification,SRS)的过程。软件需求分析特别重要。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中简单步骤,但在过去十几年中越来越多的人认识到它是整个过程中最关键的一个过程。只有通过软件需求分析,才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。许多大型应用系统的失败,最后均归结到需求分析的失败:要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客户配合不好,导致客户对需求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。特点:(1)用户与开发人员很难进行交流(2)用户的需求是动态变化的(3)系统变更的代价呈非线性增长4北京亚思晟科技有限公司3.2软件需求分析过程3.2.1什么是软件需求从根本上讲,软件需求就是为了解决现实世界中的特定问题,软件必须展现的属性。软件需求的组成关系如下图5北京亚思晟科技有限公司软件需求的属性包括可验证性、优先级、唯一性和定量化。可验证性可验证性是软件需求的基本属性。软件需求必须是可验证的,否则软件的评审和测试就没有相应的依据。优先性软件需求具有优先级,应该能够在有限的资源(资金、人员、技术)情况下进行取舍。唯一性软件需求应唯一地标识出来,以便在软件配置管理和整个软件生命周期中进行管理。定量化软件需求应尽可能地表述清楚,没有二义性,进行适当的量化,应避免含糊、无法测试、无法验证的需求出现。软件质量的可靠性和用户界面的友好性等非功能性需求的量化尤为重要。例如,系统应支持2000个并发用户,系统回应时间应低于10秒,这就是需求的量化。3.2软件需求分析过程6北京亚思晟科技有限公司3.2.2需求过程中的角色如下图所示:角色名称描述用户指直接操作软件的人员,他们通常具有不同的业务角色,有不同的业务需求。客户指软件开发的委托方或软件市场的目标客户。市场分析人员对于没有具体客户的通用软件,市场分析人员将提供市场需要,并对实际客户进行模拟系统分析师对于类似的项目,系统分析师将对以前系统进行评估,判断是否存在重用的可能3.2软件需求分析过程7北京亚思晟科技有限公司3.2.3需求过程迭代软件需求分析是一个不断认识和逐步细化的过程。该过程将软件计划阶段所确定的软件范围(工作范围)逐步细化到可详细定义的程度,并分析出各种不同的软件元素,然后为这些元素找到可行的解决办法。需求过程要适应客户和项目的环境,并作为配置项纳入配置管理。当前的软件业面临着巨大竞争压力,要求软件企业有更低的构建成本和更短的开发周期。有些项目受环境的影响很大,有些项目是对原有项目的升级,有些项目客户要求在指定的架构下完成。在项目初期,客户不能完全确定需要什么,对计算机的能力和限制不甚了解,所以需求过程很难是一步到位的过程。随着项目的深入,需求将随时间变化而发生变化。因此,需求过程是一个迭代的过程,每次迭代提供更高质量和更详细的软件需求。这种迭代会给项目带来一定的风险,上一次迭代的设计实现可能会因为需求不足而被推翻。但是,系统分析师应根据项目计划,在给定的资源条件下得到尽可能高质量的需求。3.2软件需求分析过程8北京亚思晟科技有限公司3.2.4需求的来源(1)系统目的(2)行业知识(3)软件涉众(4)运行环境(5)组织环境软件涉众:应充分考虑不同软件涉众的需求,如果只强调某一角色的需求,忽略其他角色的需求,往往将导致软件系统的失败。系统分析师应从不同涉众的角度去识别、表述他们的需求。用户的文化差异、客户的组织结构,常常会是系统难以正常实施的原因。3.2软件需求分析过程9北京亚思晟科技有限公司3.2.5需求获取的方法(1)实地参加(2)开调查会(3)请专人介绍(4)面谈(5)设计调查表请用户填写(6)查阅记录3.2软件需求分析过程10北京亚思晟科技有限公司3.2.6软件需求的表达如何有效地表达软件需求?我们这里建议使用用例建模技术。用例建模技术是10多年来最重要的需求分析技术,在保障全球各类软件的成功开发中发挥了极其重要的作用.实践证明,用例技术是迄今为止最为深刻,准确和有效的系统功能需求描述方法.功能需求是指系统输入到输出的映射以及它们的不同组合,任何功能必然要通过外部环境与系统之间的交互才能完成,因此,我们可以在内容和形式上把用例和系统的功能需求等同起来。用例建模技术不同于结构化功能分解的特点有:1)显式地表达用户的任务目标层次,突出系统行为与用户利益间的关系;2)通过描述执行实例情节(交互行为序列、正常/非正常事件流)能够完整地反映软件系统用以支持特定功能的行为;3)以契约(前/后置条件等)的形式突出了用户和系统之间常常被忽略的背后的关系;4)部署约束等非功能需求与系统行为直接绑定,能够更准确地表达此类需求。3.2软件需求分析过程11北京亚思晟科技有限公司基于用例的需求表达体系如下图3-2所示基于用例的需求表达体系3.2软件需求分析过程12北京亚思晟科技有限公司1、用例图(1)用例图概述用例建模技术离不开用例图。在UML中,用例图又叫做用况图,有时又称为UseCase图。它用于定义系统的行为、展示角色(系统的外部实体,即参入者)与用例(系统执行的服务)之间的相互作用。用例图是需求和系统行为设计的高层模型,它以图形化的方式描述外部实体对系统功能的感知。用例图从用户的角度来组织需求,每个用例描述一个特定的任务,如表3-2所示。表3-2用例图概述名称图例说明角色角色名称代表与系统交互的实体。角色可以是用户、其他系统或者硬件设备。在用例图中以小人表示。图4-7中的“图书管理员”、“读者”和“系统管理员”是与系统进行交互的角色。用例用例名称定义了系统执行的一系列活动,产生一个对特定角色可观测的结果。在用例图中以椭圆表示。“一系列的活动”可以是系统招待的功能、数学计算或其他产生一个结果的内部过程。活动是原子性的,即要么完整的执行,要么全不执行。活动的原子性可以决定用例的粒度。用例必须向角色提供反馈。图4-7中的“用户管理”、“图书管理”、“借还登记”等表示用例关联------------表示用户和用例之间的交互关系。用实线表示用例关系《引申类型》-----------------用例与用例之间的关系。用带箭头的虚线表示。用例之间的关系,可以用引申类型进行语义扩展,如《include》等。3.2软件需求分析过程13北京亚思晟科技有限公司用例模型可以在不同层次上建立,具有不同的粒度。(2)用例层次我们把用例划分为3个目标层次:概要层,用户目标层和子功能层,并通过引入巧妙的Why/How技术帮助分析者找到合适的目标层次,从而可以有效地把握用例的粒度(真正的用例最终应落实到用户目标层)。值得注意的是,我们在实践中应该尤其关注用户目标层用例.引入概要层用例的主要目的是为了包含一个或多个用户目标层用例,为系统提供全局功能视图,提出子功能层用例则是为了表达用户目标层用例的具体实现步骤。(3)用例范围根据范围的不同,用例可分为业务用例和系统用例两种1)业务用例-在业务中执行的一系列动作,这些动作为业务的个体主角产生具有可见价值的结果-实质是业务流程-可以分为核心业务用例,支持业务用例,管理业务用例-主要包括业务角色,业务活动,业务实体,业务规则2)系统用例-是系统执行的一系列动作,这些动作将生产特定主角可观测的结果值-主要包括系统角色和系统的一系列的交互过程3.2软件需求分析过程14北京亚思晟科技有限公司3.2软件需求分析过程如果某个SuD或者用例的范围包含了人以及由人组成的团队,部门,组织的活动,那么针对这个SuD写出的用例必然是业务用例;如果该SuD仅仅是一些软件,硬件,机电设备或由它们组成的系统,并不涉及到人的业务活动,那么根据这个SuD写出来的就是系统用例。(4)用例关系1)角色和角色之间-继承关系:表示子类角色将继承父类角色在用例中所能担任的角色2)角色和用例之间-使用关系:表示角色将使用用例提供的服务3)用例和用例之间-包含关系:通常是指一个大的用例包含了几个小的用例,几个小的用例组成一个大的用例。-扩展关系:基于扩展点之上的两个独立用例,扩展用例为基本用例的实例增添新的行为,其实质是扩展事件流的延伸,两个用例本身都是独立的。-继承关系:父用例可以特化形成一个或多个子用例,这些子用例代表了父用例比较特殊的形式。子用例继承父用例的所有结构、行为和关系。15北京亚思晟科技有限公司3.2软件需求分析过程表现几种关系的实例如下图3-3:图3-3用例关系实例16北京亚思晟科技有限公司3.2软件需求分析过程用例编号:(用例编号)用例名称:(用例名称)用例描述:(用例描述)前置条件:(描述用例执行前必须满足的条件)后置条件:(描述用例执行结束后将执行的内容)基本事件流(主事件流):(描述常规条件下,系统执行的步骤)1、步骤1、、、、2、步骤2、、3、步骤3、、、4、、、、、扩展事件流(分支事件流):(描述其他情况下,系统执行的步骤)2a、扩展步骤2a、、、、2a1、扩展步骤2a1、、、异常事件流:(描述在异常情况下可能出现的场景)2、用例描述用例模型除了绘制用例图外,还要对用例进行描述,也就是详细展开每个用例的内容。用例描述可以是文字性的,也可以用活动图进行说明。文字性的用例描述模板如表3-3所示。以“借书登记”为例,其具体的用例描述如表3-4所示。右表用例描述模板17北京亚思晟科技有限公司3.2软件需求分析过程用例编号:3.1用例名称:借书登记用例描述:图书管理员对读者借阅的图书进行登记。读者借阅图书的数量不能超过规定的数量。如果读者有过期未还的图书,不能借阅新图书。前置条件:读者取得借阅的图书。主事件流:1、读者请求借阅图书。2、检查读者的状态。3、检查图书的状态。4、标记图书为借出状态。5、读者获取图书。扩展事件流:2a、如果用户借阅数量超过规定数量,或者有过期未还的图书,则用例终止。3a、如果借阅的图书不存在,则用例终止。异常事件流:无右表借书登记用例描述18北京亚思晟科技有限公司3.2软件需求分析过程3、用例优先级(1)为什么要设定需求的优先级每一个具有有限资源的软件项目必须理解所要求的特性、使用实例和功能需求的相对优先级。设定优先级意味着权衡每个需求的业务利益和它的费用,以及它所牵涉到的结构基础和对产品的未来评价。项目经理必须权衡合理的项目范围和进度安排、预算、人力资源以及质量目标的约束。设定优先级有助于项目经理解决冲突、安排阶段性交付,并且做出必要的取舍。当客户的期望很高、开发时间短并且资源有限时,必须尽早确定出所交付的产品应具备的最重要的功能。建立每个功能的相对重要性有助于规划软件的构造,以最少的费用提供产品的最大功能。当采用渐增式开发方式时,设定优先级就特别重要,因为在开发过程中,交付进度安排很紧,并且日期不可改变。必须排除或推迟一些不重要的功能。(2)系统分析员的态度和做法在需求分析阶段,分析人员应该明确的提出需求的优先级和处理策略,并在软件需求规格说明书中明确说明。应当在项目的早期阶段设定优先级,这有助于逐步作出相互协调的决策,而不是在最后阶段匆忙决定。19北京亚思晟科技有限公司3.2软件需求分析过程你评价优先级时,应该看到不同需求之间的内在联系,以及它们与项目业务需求的一致性。在判断出需求的低优先级之前,如果开发人员已经实现了将近一半的特性和功能,那这将是一种浪费,这个责任应该由分析人员承担。(3)设定优先级的方法与在客观世界人们对事务的分类习惯与方法相