需求工程(Requirements Engineering,RE)是应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的一门学科。
RE分为系统需求工程(针对由软硬件共同组成的整个系统)和软件需求工程(专门针对纯软件部分)。
RE是一个不断反复的过程,可以划分为:需求获取,需求分析,需求规格编写,需求验证,需求变更管理。
软件需求分析的地位和作用:
软件需求分析是软件开发过程中的第一步,其目标是掌握软件需求分析方法和技能,能够对实施的项目进行高质量的需求分析,从而提高软件需求分析和软件开发能力。 通过对软件需求分析的学习,能够有效的应用软件需求的基本原理和方法,结合具体的开发项目,做出正确的需求分析和规范的需求分析文档等。
软件工程(Software Engineering)是针对软件产品的一系列工程化的方法。 软件生命周期:包括可行性分析与开发项目计划、需求分析、设计(概要设计和详细设计)、编码、测试、维护等活动。
软件测试 : 对软件质量的好坏是非常重要,软件测试是软件质量保证的关键元素 。
测试目标:
1.测试是一个为了寻找错误而运行程序的过程。
2. 一个好的测试用例:是指很可能找到迄今为止尚未发现错误的用例。 3. 一个成功的测试:是指揭示了迄今为止尚未发现错误的测试。
一般的测试原则如下 :
所有的测试都应追溯到用户需求。 测试开始前,应该进行测试计划。
找出有疑点的模块,并进行彻底的测试。
软件维护的定义 :在软件运行/维护阶段对软件产品进行的修改是所谓的维护。
维护的类型有四种:改正性维护、适应性维护、 完善性维护、预防性维护
需求的层次:业务需求,用户需求,功能需求以及份额功能需求
为什么要需求分析
需求分析就是分析软件用户的需求是什么.简言之就是——分析软件用户的需求,细致的进行、调查,把用户“做什么”的要求,最终转换为一个完全的、精细的软件逻辑模型。并写出软件的需求规格说明。准确地表达用户的要求.
需求分析之所以重要,就因为:它具有决策性,方向性,策略性的作用, 它在软件开发的过程中,具有举足轻重的地位. 在一个大型软件系统的开发中,它的作用要远远大于程序设计. 因此,一定要对需求分析具有足够的重视
Requirement Analysis:
Requirement Development:Elicitation(提出)、Analysis(分析) 、Specification(规格说明)、Validation(确认)
Requirement Management:变更控制、版本控制、需求跟踪、需求状态跟踪
软件需求活动:
Elicitation Requirement 提出需求 Analysis Requirement 分析需求 Transmission Requirement 转换需求 Validating Requirement 确认需求 Evolvement Requirement 变更需求
不好的需求: 用户参与不足、用户需求扩展、有歧义的需求、镀金问题、抽象的需求、忽略了某类用户、不准确的计划。
需求陈述特征:完整性、正确性、可行性、必须性、优先级、无歧义、可验证性
需求规格说明特征:完整性、一致性、可修改性、可跟踪性。
“用户” 是一种泛称,它可细分为: “客户”(customer) “最终用户”(the end user) “间接用户”(或称为关系人)。
掏钱买软件的用户称为客户,而真正操作软件的用户叫最终用户。客户与最终用户可能是同一个人也可能不是同一个人。
客户是掏钱买软件的人,所以他是“上帝”与客户打交道的主要目的是:一是获取需求,二是签合同。 即使最终用户不是上帝,也算是“上帝”的“亲戚”,同样怠慢不得。重视“间接用户”,千万别“大意失荆州” 。
Good Practices for Requirements Engineering: 1) Knowledge 知识
2) Requirements Elicitation 需求获取 3) Requirements Analysis 需求分析
4) Requirements Specification 编写规格说明 5) Requirements Validation 需求验证 6) Requirements Management 需求管理 7) Project Management 项目管理
需求分析员 又叫:系统分析员、需求工程师、需求经理、分析员
需求分析员:
是对软件项目设计的需求进行收集、分析、记录和验证等工作的主要承担者。 是用户群体和软件开发团队之间进行需求沟通的桥梁。 是收集和传播的中心角色。
需求分析员的任务:1)定义业务需求 2)确定项目承担者和用户类别3)获取需求4)分析需求5)编制需求规格说明书6)为需求建模7)主持对需求的验证8)引导对需求的优先级划分9)管理需求
需求分析员技巧:1)倾听的技巧2)交谈和提问的的技巧3)分析能力4)协调的能力5)观察能力6)写作能力7)组织能力8)建模能力9)人际交往能力10)创造力
项目视图: 描述了产品所涉及的各个方面和最终所具有的功能。
项目范围:描述了产品应包括的部分和不应包括的部分。 说明了在包括的部分与不包括的部分之间的界线。
项目视图和范围文档,包括: 业务机遇的描述、项目的视图和目标、 产品适用范围和局限性的陈述、客户的特点、项目优先级别和项目成功因素的描述。
关联图 :确定了通过某一接口与系统相连的外部实体, 有时,称为“端点”。以及,外部实体和系统之间的数据流和物流 。我们把关联图,作为结构化分析方法,形成数据流图的最高抽象层。
为了征求客户的意见,必须采取以下几步:明确项目用户需求的来源。 明确使用该产品的不同类型的用户。 与产品不同用户类的代表进行沟通。 遵从项目的最终决策者的意见。
软件需求的典型来源:1. 访问并与有潜力的用户探讨2. 把对目前的或竞争产品的描述,写成文档3. 系统需求规格说明4. 对当前系统的问题分析,并增强要求5. 市场调查和用户问卷调查6. 观察正在工作的用户7. 用户工作的情景分析8. 事件和响应
用户代表:在获取用户需求时,要挑选合适的用户,来代表各类用户的需求。即:选择用户代表 。
用户代表:必须参加整个软件开发
在用户代表的参与下,广泛了解不同用户类和不同的专业层次的需求。
用户代言人:每一个工程项目,都包括为数不多的关键参与者,这些参与者来自相关的某方 我们称这些人为:用户代言人或项目协调者 用户代言人,可能是软件公司的一员
用户代言人:必须对应用领域有彻底的了解,并在软件方面具有足够的经验。
《用户需求说明书》与《软件需求规格说明书》的主要区别与联系: 前者主要采用自然语言(和应用域术语)来表达用户需求,其内容相对于后者而言比较粗略,不够详细。
后者是前者的细化,更多地采用计算机语言和图形符号来刻画需求,产品需求是软件系统设计的直接依据。
两者之间可能并不存在一一影射关系,因为软件开发商会根据产品发展战略、企业当前状况适当地调整产品需求,例如用户需求可能被分配到软件的数个版本中。 软件开发人员应当依据《软件需求规格说明书》来开发当前产品。
需求获取 :
是软件工程的核心任务 。
是在问题及其最终解决方案之间架设桥梁的第一步。
一旦理解了需求,分析者、开发者和客户就能探索出描述这些需求的多种解决方案 在软件开发中,最重要、最关键,也是最困难、最易出错。 只有通过客户和开发者的合作,才能成功。 并不是客户所说的需求的简单誊本。
在需求获取的过程中,可能会发现以前的产品范围定义存在误差,不是太大就是太小 。如果范围太大,此时获取过程,将会拖延。如果范围太小,那么用户会提出很重要,但是又在当前产品范围之外的需求,以致不能提供一个令人满意的产品。需求的获取,应该把重点放在“做什么”。
使用实例: 为表达用户需求,提供了一种方法,而这一方法必须与系统的业务需求相一致。 一个使用实例 描述了系统和一个外部“执行者”的交互顺序,这体现执行者完成一项任务,并给某人带来益处。
执行者:是指一个人,或另一个软件应用,或一个硬件,或其它一些与系统交互以实现某些目标的实体。
可以使用多种方法来确定使用实例: 1) 首先,明确执行者和他们的角色。2) 然后,确定业务过程。3) 确定系统所能反映的外部事件,然后,把这些事件与参与的执行者和特定的使用实例联系起来。4) 以特定的说明形式表达业务过程或日常行为 5) 有可能从现在的功能需求说明中,获得使用用例。
业务规则:每个商业公司都有一套公司的正策、行业法规和标准。对业务的某个方面进行定义或约束的语句称为业务规则。
软件需求规格说明 也称:功能规格说明、 需求协议 、系统规格说明
它精确地阐述了一个软件系统必须提供的功能和性能,以及所要考虑的限制条件。 它是一个软件系统成功的基础
编写软件需求规格说明,有三种方法: 1.用好的结构化和自然语言编写文本型文档 2.建立图形化模型方法3.编写形式化规格说明
编写优秀的需求文档,没有固定的方法,一般是根据经验进行。应考虑以下几点:
1.保持语句和段落的简短。2.采用主动语态的表达方式。3.编写具有正确的语法、拼写和标点的完整句子。4.使用的术语与词汇表中所定义的应该一致。5.需求陈述应该具有一致的样式。6.为了减少不确定性,避免模糊的、主观的术语。7.使用比较性的词汇。
高质量需求文档,所具有的特征: 完整性、 一致性、必要性、明确性、可验证性、可更改性、可跟踪性。
数据流图:1.是结构化系统分析的基本工具。2.确定了系统的转化过程、系统所操纵的数据或物质的存储。3.可以在一个抽象的广泛范围内表示系统。4.是分层次的,高层数据流图提供一个整体的统览,是对软件需求规格说明的精确、详细叙述的补充。5.描述了功能需求怎样和使用户相结合。6.反馈的信息,有助于理解所探讨的任务流,进行提炼加工。
状态转换图:1.为状态提供了一个简洁、完整、无二义性的表示。 2.表示处理结果可能的状态转换。3.有助于开发者理解系统的预期行为。
对话图(dialog map)一种状态转换图:1.对话图在较高的抽象层次上表示用户界面的设计,它展示了系统的对话元素及这些元素之间的导航连接,但没有展示详细的屏幕设计。2.在对话图中将每个对话元素表示为一个状态(用矩形框表示),将每个允许的导航选项表示为一个转换(用箭头表示)。触发用户界面导航的条件表示为转换箭头上的文本标签。3.是表示用例中所描述的参与者与系统之间的交互的很好的方法。
类图(class diagram)是用图形方式叙述面向对象分析所确定的类以及它们之间的关系。 利用面向对象方法开发的产品并不需要特殊的需求开发方法。当考虑如何将问题域对象映射到系统对象,并进一步细化每个类的属性和操作时,面向对象技术可以方便需求开发到设计阶段的转换
决策表:应用表格的形式进行需求表达。 决策树:采用一种树形结构表达需求。
软件质量属性或质量引述是系统非功能性需求的一部分。
非功能需求(none-functional requirements):描述系统展现给用户的行为和执行的操作等。包括:产品必须遵循的标准、规范和合约,外部界面的具体细节,性能要求,设计或实现的约束条件??
质量属性 包括许多产品特性,根据不同的设计,可把质量属性分类: 一种方法,是把在运行时,可识别的特性与那些不可识别的特性区分开。 另一种方法,是把对用户很重要的可见特性与对开发者和维护者很重要的不可见特性区分开。
对开发者具有重要意义的属性有: 使产品易于更改、验证,并易于移植到新的平台上,从而可以间接地满足客户的需要的属性 。
对用户重要的属性:有效性、高效性、灵活性、完整性、互操性、可靠性、健壮性、可用性、可维护性、可移植性、可重用性、可测试性。
定义质量属性:
必须根据用户对系统的期望,来确定质量属性。 分析员根据每一个属性设计出许多问题。
这些问题的回答有助于分析员决定哪些质量特性是最重要的。 然后,分析员与用户一起,为每一属性确定需求。
软件需求复习重点



