一个完整的软件生存周期是以需求为出发点。软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。
需求开发:
需求管理:
需求开发和需求管理是相辅相成的,需求开发是主线、目标,需求管理是支持、保障。
需求分类:从不同的角度有不同的分类方式,每一种分类方式都提供一个对需求进行理解的视角。
软件需求包括三个不同的层次(分类):业务需求、用户需求和功能及非功能需求。
业务需求:表示组织或客户高层次的目标,通常来自项目投资人、购买产品的客户、实际用户的管理者、市场营销部门或产品策划部门。业务需求描述组织为什么要开发一个系统,即组织希望达到的目标。使用前景和范围文档来记录业务需求,这份文档有时也被称作项目轮廓图或市场需求文档
用户需求:描述用户的目标,或用户要求系统必须能完成的任务
功能需求:规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求。
业务需求(整体全局)
用户需求(用户视角)
系统需求(计算机化)
另一种分类方式:
另有一说:软件需求包括功能需求、非功能需求、设计约束三个主要部分。
软件需求的基本特征:可验证性。
理想情况下,每一项用户、业务需求和功能需求都应具备下列性质:
需求开发的过程有四个主要活动:
需求获取有很多方法:
用户访谈:用户访谈是最基本的一种需求获取手段,其形式包括结构化和非结构化两种。用户访谈是通过1对1(或1对2,1对3)的形式与用户面对面进行沟通,以获取用户需求。用户访谈具有良好的灵活性,有较宽广的应用范围。但是,也存在着许多困难,例如,用户经常较忙,难以安排时间;面谈时信息量大,记录较为困难;沟通需要很多技巧,同时需要系统分析师具有足够的领域知识等。另外,在访谈时,还可能会遇到一些对于企业来说比较机密和敏感的话题。因此,这看似简单的技术,也需要系统分析师具有丰富的经验和较强的沟通能力。
采样:是指从种群中系统地选出有代表性的样本集的过程,通过认真研究所选出的样本集,可以从整体上揭示种群的有用信息。对于信息系统的开发而言,现有系统的文档(文件)就是采样种群。当开始对一个系统做需求分析时,查看现有系统的文档是对系统有初步了解的最好方法。但是,系统分析师应该查看哪些类型的文档,当文档的数据庞大,法——研究时,就需要使用采样技术选出有代表性的数据。采样技术不仅可以用于收集数据,还可以用于采集访谈用户或者是采集观察用户。在对人员进行采样时,上面介绍的采样技术同样适用。通过采样技术,选择部分而不是选择种群的全部,不仅加快数据收集的过程,而且提高效率降低开发成本。采样技术使用数理统计原理,能减少数据收集的偏差。但是,由于采样技术基于统计学原理,样本规模的确定依赖于期望的可信度和已有的先验知识,很大程度上取决于系统分析师的主观因素,对系统分析师个人的经验和能力依赖性很强,要求系统分析师具有较高的水平和丰富的经验。
联合需求计划:为了提高需求获取的效率,越来越多的企业倾向于使用小组工作会议来代替大量独立的访谈。联合需求计划(Joint Requirement Planning,JRP)是一个通过高度组织的群体会议来分析企业内的问题并获取需求的过程,它是联合应用开发(Joint Application Development,JAD)的一部分。
需求分析是一种软件工程活动,它在系统级软件分配和软件设计间起到桥梁的作用,需求分析使得系统工程师能够刻画出软件的功能和性能,指明软件和其他系统元素的接口,并建立软件必须满足的约束。
需求分析允许系统分析师细化软件的分解,并建立将被软件处理的数据、功能和行为模型。最后,需求规约为开发者和客户提供了软件开发完成后质量评估的依据。需求分析为软件设计师提供可被翻译成数据、架构、界面和过程设计的模型。
需求分析的任务是发现、求精、建模和规约的过程,包括详细地细化由系统工程师建立并在软件项目计划中明确的软件范围,创建所需数据、信息和控制流及操作行为的模型,此外,还要分析可选择的解决方案,并将它们分配到各软件元素中去。
在需求分析阶段要得到详细的规约是不可能的。客户可能并不能精确地肯定需要什么,开发者可能不能肯定可用什么特定的方法来适当地完成功能和性能。
需求抽取和分析的过程
数据流图,是SA方法中的重要工具,是表达系统内部数据的流动并通过数据流描述系统功能的一种方法。
DFD还可被认为是一个系统模型,在信息系统开发中,如果采用结构化方法,则一般将DFD作为需求规格说明书的一个组成部分。用例模型描述一组用例、参与者及它们之间的关系。
通常使用数据字典作为该工具的补充说明:
面向数据流的分析方法:结构化分析方法。
面向对象分析,主要活动
以上各个OOA过程总体来说是一个反复进行,不断完善的过程,以建立基本模型为中心,进行需求模型、基本模型、辅助模型的建立、修复与完善。
需求定义的过程也就是形成需求规格说明书的过程,通常有两种需求定义的方法:严格定义方法和原型方法。
严格定义方法,也称为预先定义,需求的严格定义建立在以下基本假设之上:
原型化的需求定义过程是一个开发人员与用户通力合作的反复过程。从一个能满足用户基本需求的原型系统开始,允许在开发过程中提出更好的要求,根据用户的要求不断地对系统进行完善,它实质上是一种迭代的循环型的开发方式。
使用原型方法时需注意几个问题:
需求验证的四种基本方法是检查,演示,测试和分析。这四种方法本质上是分层的,因为每种方法都会越来越严格地验证产品或系统的要求:
需求验证原则
根据 IREB 教学大纲,考虑以下四个需求验证原则可以提高验证结果的质量:
需求管理是一个对系统需求变更、了解和控制的过程,通常包括定义需求基线、处理需要变更和需求跟踪方面的工作。需求管理过程与需求开发过程相互关联,当初始需求导出的同时就启动需求管理计划,一旦形成需求文档初稿,需求管理活动就开始。
需求管理强调:控制对需求基线的变动;保持项目计划与需求的一致;控制单个需求和需求文档的版本情况;管理需求和联系链,或者管理单个需求和其他项目可交付产品之间的依赖关系;跟踪基线中的需求状态。
关于需求管理过程域内的原则和策,可以参考:
需求管理的活动包括:
一个大型的软件系统的需求总是有变化的。对许多项目来说,系统软件总需要不断完善,一些需求的改进是合理的而且不可避免,要使得软件需求完全不变更,也许是不可能的,但毫无控制的变更是项目陷入混乱、不能按进度完成,或者软件质量无法保证的主要原因之一。一个好的变更控制过程,给项目风险承担者提供正式的建议需求变更机制,可以通过变更控制过程来跟踪已建议变更的状态,使已建议的变更确保不会丢失或疏忽。需求变更管理过程:
但工具应该具有以下几个特性,以支持需求变更过程:
有些商业需求管理工具内置有简单的变更建议系统。这些系统可以将提议的变更与某一特定的需求联系起来,这样无论什么时候,只要有人提交一个相关的变更请求,负责需求的每个人都会收到电子邮件通知。
一个大型软件系统的需求通常是会发生变化的。在进行需求变更时,可以参考以下的需求变更策:
需求跟踪包括编制每个需求与系统元素之间的联系文档,这些元素包括别的需求、体系结构、其他设计部件、源代码模块、测试、帮助文件和文档等。跟踪能力信息使变更影响分析十分便利,有利于确认和评估实现某个建议的需求变更所必须的工作。利用需求跟踪能力链(traceability link)可以跟踪一个需求使用的全过程,也就是从初始需求到实现的前后生存期。跟踪能力是优秀需求规格说明书的一个特征,为了实现跟踪能力,必须统一地标识出每一个需求,以便能明确地进行查阅。
客户需求向前追溯到软件需求。这样就能区分出开发过程中或者开发结束后,由于客户需求变更受到影响的软件需求,这也就可以确保软件需求规格说明包括所有客户需求。
从软件需求回溯响应的客户需求。这也就是确认每个软件需求的源头。如果使用实例的形式来描述客户需求,那么客户需求与软件需求之间的跟踪情况就是使用实例和功能性需求。从软件需求向前追溯到下一级工作产品。由于开发过程中系统需求转变为软件需求、设计、编码等,所以通过定义单个需求和特定的产品元素之间的(联系)链,可以从需求向前追溯到下一级工作产品。这种联系链告诉我们每个需求对应的产品部件,从而确保产品部件满足每个需求。从产品部件回溯到软件需求。说明每个部件存在的原因。如果不能把设计元素、代码段或测试回溯到一个需求,可能存在画蛇添足的程序。然而,如果这些孤立的元素表明一个正当的功能,则说明需求规格说明书漏掉一项需求。
需求跟踪矩阵RTM