Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

Chapter4:Requirements Engineering

4.1 User / System Requirements

  • Topic covered:
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

  • Requirements engineering

    需求工程:是建立服务Service和限制Constraints的一个过程。

    Service:客户需要系统提供什么样的功能?

    Constraints:系统在开发和运行过程中受到的限制。

    Requirements:是在需求过程活动中产生的功能和限制的描述。

  • What is a requirement?

    这种需求描述。涵盖了从高层次抽闲的语句上的描述,到非常详细的数学上的功能定义。也就是说,需求的描述可以是自然语言的描述也可以是数学上的精确的定义。

    之所以需要比较高层的抽象,采用自然语言、一般的图表来陈述。这需要客户和开发团队的对高层概念的理解,同时可能是

    也有可能是合同投标的基础,因为大家都可以理解。

    详细的数学定义:包括了数学模型,专业的建模语言,主要是为了开发者详细描述功能和约束条件,设计和开发才能够满足准确的功能和性能上的要求。这也是客户和开发团队签合同的基础。

  • 一个领域的专家对软件需求描述到什么样的程度?

    抽象到什么样的程度?抽象是有不同的粒度的。粗细。红色字体部分:

    需求应该对还没有开发的软件,有足够的抽象来定义。

    一方面是,需求的描述要让投标方(开发团队)和客户都能理解。

    另一方面,详细和准确的合同定义,是合同条约的基础。并且也为软件做完后,交付后如何验证提供依据。

  • 两方面的需求

    用户需求和系统需求。

    用户需求:自然语言 + 图表 来描述系统提供的功能和限制。是为客户需要产生的。

    系统需求:更详细的描述。定义的是实现什么?可能是合同的一部分。

    不同:

    系统能生成月报表,能展示处方药的价格。

    哪些人需要的?读者是谁?

  • 用户需求和系统需求是哪些人需要的,读者是谁?

Client managers不会关注系统细节,developers会关注。

后面讲到a b 测试, 用于最终用户检验:软件是否满足了他们的需求

4.2 Functional and non-functional requirements

4.2.1 What is NR&NFR ?

前面提到的Service和Constrains。Service就是Function requirements;Constrains就是Non-functional requirements
Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记
域需求,应用域的概念,某个领域对系统的约束。

4.2.2 Functional Requirements

  • 介绍:
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

  • 例子:对MHC-PMS的功能性需求的描述:
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记
    ​ 这些描述是不准确的,自然语言表达的,模糊的,只适合用户需求的描述。

  • 需求如果不能带来准确的描述的话,就会有歧义imprecision

    比如ppt12里对“search”的理解不同。

  • 需求的完整性complete和一致性consistency

    • 所有需要的功能都被列出了。
    • 所有的需求描述不相互冲突。
    • 实际上,完全满足完整性和一致性的文档是不可能的,往往需要寻找平衡点。

4.2.3 Non-functional Requirements

  • 介绍

    定义了系统的属性properties和限制constrains【比如可靠性、响应时间等】

    开发过程中的限制【比如你要用特定的IDE】

    非功能需求可能比功能性需求更重要。

  • Types of non-functional requirements

    Product R:产品本身的限制。

    Organizational R:开发机构的策略上、过程上的需求限制。环境上、运行操作中、开发过程中的。行业标准等。

    External R:来自外部的对系统本身和开发过程中的限制。行业监管的、道德文化的、法律层面的。
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

  • 可能影响到系统的整体结构。
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

  • 例子:
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

  • 用一些度量指标来测试目标的非功能性需求满足度

    • 涉及到verify这个过程:非功能性需求比较难被verify,所以我们需要有一些指标的描述来特使目标产品的费功能性需求。变成一个:Testable non-functional requirements

    ​ ppt20例子

    • 非功能性度量指标
      Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记
      这些只是一些举例,运用时要根据实际情况进行合适的修改和选择。

4.3 Requirements Engineering

4.3.1 RE processes

  • RE processes 需求工程过程

    需求工程过程,会因为应用域、人员、开发机构等的不同,有很大的区别。

    但是,所有的过程都有一些通用的活动

    需求过程是迭代的过程的集合,上述活动是交替进行的。

  • A spiral view of the RE process
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

4.3.2 Requirements elicitation and analysis

  • 需求的导出和分析【也称需求发现】

    工作人员和用户一起工作,发现应用域需求【service and constrains】

    设计的人员:最终用于、管理人员、维护人员、行业专家、贸易伙伴等,都称之为:stakeholders:系统的相关人员、拥有者、参与者。

    从不同的stakeholders角度看,每种角色需要哪些功能和性能上的要求。
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

  • Problems of requirements analysis with stakeholders:

    stakeholders可能不知道他们真正想要的是什么【比如学历比较低】

    也会经常使用他们自己的术语来描述需求。

    不同的stakeholders会有相冲突的需求。【比如管理者和最终用户】

    机构的策略政策可能会影响到系统需求

    新的stakeholders出现或者环境改变,使得需求变化。

  • 所以,Requirements elicitation and analysis 就必须要包含一些stages来尽量解决上述的问题,这是一个循环迭代的过程
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

  • 例子:stakeholders in MHC-PMS
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

  • Interviewing

    确立了stakeholders,下面就要进行一系列的活动和stakeholders交流。
    Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记
    承上启下:

    interview常用于挖掘需求,但是interview对于理解行业领域需求【必须要有特定的知识背景才能理解需求】并不是一个好的方式,这就需要用另一种方法:ethnography【花时间观察实际工作从而理解特定行业知识理解需求】

  • Ethnography

    • A social scientist spends a considerable time observing and analyzing how people actually work.

    • 观察实际工作模式能帮助理解已经存在的工作过程,但是不太容易识别出:要加入系统中的,系统的新的特性。

    • 那么如何来挖掘出系统里要加入的新的特性呢?可以结合Ethnography 和 prototype。

      原型可以帮助导出需求。原型建立了用户可以看得到的系统的初步轮廓,会启发用户的思维,提出更加精确的需求。
      Chapter4:Requirements Engineering:SE_Notes《软件工程》笔记

  • 总结:
    先确立stakeholders,然后用interviewing或者ethnography的方法来获取需求。

    Interviewing用于一般的系统开发

    ethnography用于专业领域性较强的系统开发,且常和prototype结合。