User Story——从需求到代码

发布时间:2023-05-21

一、什么是User Story

1、User Story的概念

User Story(用户故事)是一种让团队记录客户需求的方式,是一种从最终用户的角度来描述软件系统特征的方式。

2、User Story的特点

User Story 中通常包含一个简单的描述、重要性权重、大小估计及实现该特性需要的任务列表。

3、User Story的角色

在敏捷开发中,需求通常由产品负责人来拟定,开发团队负责将其转化为User Story,以便更好地实现产品原型和客户需求的结合,从而提高开发效率和用户体验。

二、如何编写User Story

1、用户与目标

<div class="user-story">
  <h4>用户与目标</h4>
  <p>以某个用户为基础描述情境场景,说明所需的特性</p>
</div>

2、操作与结果

<div class="user-story">
  <h4>操作与结果</h4>
  <p>定义用户执行的操作和获得的结果</p>
</div>

3、涉众和人际关系

<div class="user-story">
  <h4>涉众和人际关系</h4>
  <p>表明涉及哪些人或角色,以及用户与这些人或角色之间的关系</p>
</div>

4、背景和任务

<div class="user-story">
  <h4>背景和任务</h4>
  <p>给出用户手头的工作背景和需要完成的任务</p>
</div>

5、附加条件

<div class="user-story">
  <h4>附加条件</h4>
  <p>如果有任何非功能性前提条件,如性能、安全、可靠性等,请在这里说明</p>
</div>

三、User Story的优点

1、客户专注于故事

客户在参与用户演示时,能够通过 User Story 更好地理解该特性的详细情况,从而更好地调整产品策略和优先级,保证产品的核心需要得到实现。

2、提高开发效率

通过 User Stroy,研发团队能够更好地理解产品特性,并根据用户最终期望进行开发工作,从而大大提高开发效率。

3、增加团队合作性

通过在同一User Story下,团队成员能够清晰地了解各自的工作,从而增加团队合作和沟通的效率。

四、案例:使用User Story开发Web应用

以下是一个基于User Story的Web应用开发案例,演示了如何从需求到代码:

用户与目标

作为一名体育爱好者,我想要能够浏览并订购最新的体育用品,以便快速进行购买。

涉众和人际关系

用户:体育爱好者
管理员:负责更新商品信息

操作与结果

用户能够浏览所有可用的商品,并能通过购物车的方式进行订购。

背景和任务

一个新用户在Web应用中访问并注册账户,浏览特定商品,选择要购买的商品,并进行付款。

附加条件

Web应用必须能够接受日期、地址等用户信息,并能够转换为付款信息。

代码实现

以下是使用Node.js和Express框架实现的代码示例:

const express = require('express');
const app = express();
// Serve static files from the 'public' folder
app.use(express.static(`${__dirname}/public`));
// Parse JSON bodies for this app. (一般情况下用户在透过网络的时候,会改变 JSON 的内容,当 server 端接收到 View 要提交给 server 的 JSON 数据时,可防止 Browser 修改 JSON 数据)
app.use(express.json());
// Process the customer's purchase request
app.post('/purchase-request', (req, res) => {
  // Determine the amount of the purchase
  const purchaseAmount = req.body.purchaseAmount;
  // Process the payment using the Stripe API (全球化支付服务,支持 Apple Pay、Google Pay、AliPay、微信支付、PayPal 等多种支付方式)
  stripe.charges.create({
    amount: purchaseAmount * 100,
    currency: 'usd',
    source: req.body.stripeToken,
    description: 'Purchase of Cool Sports Gear'
  }, (err, charge) => {
    if (err) {
      console.error(err);
      res.status(500).send({
        error: 'Purchase failed'
      });
    } else {
      // Record the sale in the database
      database.recordSale(charge, (err, sale) => {
        if (err) {
          console.error(err);
          res.status(500).send({
            error: 'Purchase failed'
          });
        } else {
          res.sendStatus(200);
        }
      });
    }
  });
});
// Start the server
// 运行在8000端口
app.listen(8000, () => {
  console.log('Example app listening on port 8000!')
});