【问题标题】:How to document non-functional requirements (NFRs) in a story/feature?如何在故事/功能中记录非功能性需求 (NFR)?
【发布时间】:2013-10-11 07:26:03
【问题描述】:

Specification By Example book 声明可以使用示例指定非功能性需求(通常称为 NFR)。

一位同事还告诉我,可以使用 SBE 故事指定非功能性需求,格式如下:

Scenario: ...
   Given ...
   When ...
   Then ...

以下是来自wikipedia 的功能性和非功能性需求示例:

系统可能需要向用户显示 数据库中的记录数。这是功能要求。如何 最新的这个数字需要是非功能性要求。如果 数字需要实时更新,系统架构师 必须确保系统能够更新显示的 在可接受的短间隔内记录计数 记录变化。

问题 1:非功能性需求能否指定为故事?

问题 2:是否应将非功能性需求指定为故事?

问题 3:故事会是什么样子?

【问题讨论】:

    标签: bdd specifications user-stories


    【解决方案1】:

    我会通过一个例子来给出答案。

    假设您的团队已经实现了以下故事:

    Scenario: User can log in to the website
       Given I have entered my login credentials
       When I submit these credentials
       Then I get navigated to my home screen
    

    回答问题 1) - 可以将非功能性需求指定为故事吗?

    项目利益相关者给了你一个 NFR,内容如下:

    对于所有网站操作,用户不应再等待 5 个 秒响应。

    您可以为此创建一个故事,如下所示:

    Scenario: User can log in to the website in a timely fashion
       Given I have entered my login credentials
       When I submit these credentials
       Then I get navigated to my home screen
       And I should have to wait no longer than the maximum acceptable wait time
    

    请注意,我没有强制指定“5”秒,而是保持场景声明性,而是指定“等待时间不超过可接受的最大等待时间”。

    回答问题 2) - 是否应将非功能性需求指定为故事?

    NFR 应该绝对被指定为一个故事。

    创建故事将允许估计此任务的复杂性(以便团队可以确定相对于过去的故事的难度),此外,团队可以将故事分解为任务(可以以小时为单位进行估算,因此如果团队可以在当前的 sprint 中实现这个故事,你可以确定)。

    因此,在我设计的示例中,团队可能已经实现了登录代码,但他们随后会确定如何实现登录时间不得超过 5 秒的要求。您还将允许能够探索这个问题的反面,即如果登录时间超过 5 秒会发生什么?例如

    Scenario: User encounters a delay when logging in to the website
           Given I have entered my login credentials
           When I submit these credentials
           And I wait for over the the maximum acceptable wait time
           Then the Production team is informed
           And the problem is logged
           And I get navigated to my home screen
    

    最后,关于问题 3) - 故事会是什么样子?

    我在答案 1) 和 2) 中详细说明了故事的样子

    【讨论】:

      【解决方案2】:

      Q1:是的,他们绝对可以。 查看that 描述在用户故事中处理非功能性需求的文章。

      第二季度。从我的角度来看,如果您能够创建它们,那么以这种方式保存和跟踪它们真的很值得。但引用this的文章

      没有神奇的敏捷实践可以帮助您发现 NFR。这 第一步是承担责任。 NFR 可以表示为 User 如果团队发现这有助于保持这些可见性,则故事。 但是,请注意,出现此类故事可能会引发问题 对它们进行的工作优先于更明显的特征。

      第三季度。看看第一季度提到的文章。

      【讨论】:

      • 非常感谢您的回答。不幸的是,您在第一季度的链接已损坏。能否请您提供文章的标题,以便我找到它?
      【解决方案3】:

      我认为 NFR 的界限仍未得到所有人的完全认同。考虑这样一个故事:“作为经理,我的员工必须在 5 秒内得到所有回复,以避免雇用第二个数据输入人员并增加 50,000 美元的工资支出。”我认为这是一个功能齐全的业务需求,以及任何关注最终用户体验的性能需求。

      我将“传统”NFR 归类为受影响的人不在最终用户或利益相关者组织中的故事。 “作为支持人员,我需要网站流量日志来帮助我解决问题,”或“作为软件维护人员,我需要块架构图来帮助我进行更改。”像在任何用户故事中一样包含角色有助于确定优先级。如果您对此有任何疑问,它还有助于确定该 NFR 的利益相关者。

      NFR 可能包括性能的某些方面,至少是那些不影响最终用户的方面。 “作为系统管理员,我想为数据库分配不超过 10GB 的磁盘空间,以便使用 SQL Express 并避免昂贵的 SQL Server 许可证。”

      考虑一个典型的 NFR,它可能只声明“数据库限制为 10GB”。这是一个没有意义或理由的任意数字,没有办法质疑它。拥有类似故事的角色和解释可以帮助每个人理解 NFR 有正当理由,所以当你优先考虑它们时,你可以提出聪明的问题。他们引发了这样的对话:“我需要将表空间扩展到 20GB,但是系统管理员有关于数据库大小的 NFR。SQL Server 许可证真的要花多少钱?天哪,这么多?好吧,我将对一些表进行非规范化并节省几 GB 以适应它。”

      【讨论】:

        【解决方案4】:

        正如@bensmith 和@siemic 所示,是的,您可以将 NFR 捕获为故事。

        应该你用这种方式捕捉它们吗?

        我认为您不想将 NFR 作为常规专题报道的一部分。

        大多数 NFR 适用于不止一个故事。 “系统必须响应”意味着每个故事都需要定义最长等待时间。 “系统不得消耗超过 10GB 的磁盘空间”意味着每个故事都需要考虑磁盘空间。故事中的“和”列表即使在微不足道的情况下也会变得难以管理。

        如果产品负责人和团队都对此感到满意,您可能希望将 NFR 捕获为独立的故事。

        例如:

        Given I have a PC with at least a dual core processor 
          and 8GB of RAM
          and a gigabit connection to the system
        when I interact with the system
        then I never have to wait more than 5 seconds for a response
         and 90% of attempts respond within 1 second
        

        这提供了明确的要求和可衡量的目标。您只需确保每个故事都考虑到所有 NFR。

        【讨论】:

        • 为每个故事都有一个 NFR 场景可能有点矫枉过正,但对于系统的关键部分(例如网站主页)而言,捕获 NFR 要求具有真正的价值。您还说“故事中的“和”列表在即使是微不足道的情况下也变得难以管理。”,如果你发现这个问题,你可能没有正确地写你的故事。
        【解决方案5】:

        我认为你需要看看一些事情, NFR 应遵循应用程序、软件、产品等的生命周期。应定期涵盖备份和恢复方案,应在生产和开发中测量安全扫描和性能。 许多 NFR 需要来自开发组以外的团队的验证,因此不应期望编写脚本或代码来验证。因此,显然安全性、性能、可扩展性、弹性等可以而且应该在开发阶段或在代码投入使用之前进行测试。 大多数 NFR 都可以写成故事,但正如我所说,我认为并不是所有的 NFR 都需要开发工作来覆盖它们。 问候 马丁

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          • 2013-05-04
          • 1970-01-01
          • 2020-09-15
          • 1970-01-01
          • 2019-07-29
          相关资源
          最近更新 更多