需求收集 requirements-gathering

需求收集是软件开发过程中的关键步骤,涉及系统地收集、记录和验证利益相关者的需求,以确保项目目标的清晰性和一致性,减少项目后期的变更和返工。

需求分析 0 次安装 0 次浏览 更新于 3/4/2026

name: 需求收集 description: 系统地收集、记录和验证利益相关者的需求。在开发开始之前确保清晰、完整和一致,以减少范围蔓延和返工。

需求收集

概览

有效的需求收集建立了对将要构建的内容的共同理解,防止错位和昂贵的后期更改。

何时使用

  • 项目启动和规划
  • 功能开发启动
  • 产品路线图规划
  • 系统现代化项目
  • 客户发现
  • 利益相关者对齐会议
  • 编写用户故事和验收标准

指南

1. 利益相关者发现

# 识别和分析利益相关者

class StakeholderDiscovery:
    STAKEHOLDER_CATEGORIES = [
        '最终用户',
        '业务所有者',
        '技术领导',
        '运营/支持',
        '客户',
        '监管机构',
        '集成合作伙伴'
    ]

    def identify_stakeholders(self, project):
        """映射所有利益相关者群体"""
        return {
            'primary': self.get_primary_stakeholders(project),
            'secondary': self.get_secondary_stakeholders(project),
            'tertiary': self.get_tertiary_stakeholders(project),
            'total_to_engage': self.calculate_engagement_strategy(project)
        }

    def analyze_stakeholder_needs(self, stakeholder):
        """了解每个利益相关者的需求"""
        return {
            'stakeholder': stakeholder.name,
            'role': stakeholder.role,
            'goals': self.extract_goals(stakeholder),
            'pain_points': self.extract_pain_points(stakeholder),
            'constraints': self.extract_constraints(stakeholder),
            'success_criteria': self.define_success(stakeholder),
            'engagement_frequency': self.plan_engagement(stakeholder)
        }

    def extract_goals(self, stakeholder):
        """这个利益相关者想要实现什么?"""
        return {
            'business_goals': [],  # 收入,效率,市场份额
            'technical_goals': [],  # 性能,可扩展性,可靠性
            'user_goals': [],       # 易用性,有效性
            'operational_goals': []  # 支持效率,正常运行时间
        }

    def extract_pain_points(self, stakeholder):
        """当前存在什么问题?"""
        return [
            '当前解决方案的限制',
            '集成挑战',
            '性能问题',
            '用户采用障碍',
            '运营成本'
        ]

2. 需求引出技术

引出技术:

1. 访谈(一对一)
  最适合:高级利益相关者,敏感话题
  持续时间:30-60分钟
  输出:详细需求,背景
  准备:创建问题指南,提前安排

   样本问题:
     - 你试图完成什么?
     - 目前有什么阻碍你?
     - 成功是什么样子?
     - 最重要的指标是什么?
     - 你最大的风险是什么?

---

2. 研讨会(小组会议)
  最适合:跨职能对齐,头脑风暴
  持续时间:2-4小时
  输出:共识,优先级
  准备:议程,引导指南,材料

   格式:
     - 开场(10分钟):目标和议程
     - 头脑风暴(45分钟):产生想法
     - 澄清(30分钟):理解每个想法
     - 优先级(45分钟):按重要性排名
     - 决定(30分钟):承诺优先级

---

3. 用户观察(情境查询)
  最适合:理解实际工作流程
  持续时间:2-4小时
  输出:现实工作流程,隐藏需求
  准备:获得访问权限,创建观察指南

   关注点:
     - 当前工作流程步骤
     - 痛点和变通方法
     - 任务频率
     - 错误处理
     - 协作模式

---

4. 调查问卷
  最适合:从许多人那里获得广泛输入
  持续时间:每个受访者10-15分钟
  输出:量化偏好,趋势
  准备:编写清晰的问题,选择样本

   类型:
     - 多项选择(易于分析)
     - 评分量表(优先级)
     - 开放式(发现)
     - 排名(优先级)

---

5. 文件分析
  最适合:理解现有流程
  持续时间:可变
  输出:当前状态理解
  准备:提前请求文件

   审查:
     - 流程文件
     - 系统规范
     - 用户手册
     - 事件报告
     - 竞争对手产品

3. 需求文档

// 结构化和记录需求

class RequirementsDocument {
  createRequirementStatement(requirement) {
    return {
      id: `REQ-${Date.now()}`,
      title: requirement.title,
      description: requirement.description,
      rationale: '为什么这很重要?',
      source: requirement.stakeholder,
      category: requirement.category, // 功能,非功能,约束
      priority: requirement.priority, // 必须,应该,可以,不会
      acceptance_criteria: [
        {
          criterion: '具体,可测量的行为',
          test: '如何验证'
        }
      ],
      dependencies: [],
      assumptions: [],
      constraints: [],
      estimated_effort: 'TBD',
      status: 'Draft',
      last_reviewed: new Date(),
      review_comments: []
    };
  }

  categorizeRequirements(requirements) {
    return {
      functional: requirements.filter(r => r.category === 'Functional'),
      non_functional: requirements.filter(r => r.category === 'Non-Functional'),
      constraints: requirements.filter(r => r.category === 'Constraint'),
      prioritized: this.prioritizeRequirements(requirements)
    };
  }

  prioritizeRequirements(requirements) {
    // MoSCoW方法:必须,应该,可以,不会
    return {
      must: requirements.filter(r => r.priority === 'Must'),
      should: requirements.filter(r => r.priority === 'Should'),
      could: requirements.filter(r => r.priority === 'Could'),
      wont: requirements.filter(r => r.priority === 'Won\'t')
    };
  }

  validateRequirements(requirements) {
    const issues = [];

    requirements.forEach(req => {
      // 检查完整性
      if (!req.acceptance_criteria || req.acceptance_criteria.length === 0) {
        issues.push({
          requirement: req.id,
          issue: '缺少验收标准',
          severity: 'High'
        });
      }

      // 检查清晰度
      if (req.description.length < 20) {
        issues.push({
          requirement: req.id,
          issue: '描述太模糊',
          severity: 'High'
        });
      }

      // 检查模糊词语
      const ambiguousWords = ['quickly', 'easily', 'user-friendly', 'efficient'];
      if (ambiguousWords.some(word => req.description.includes(word))) {
        issues.push({
          requirement: req.id,
          issue: '包含模糊语言',
          severity: 'Medium'
        });
      }
    });

    return {
      valid: issues.length === 0,
      issues: issues,
      recommendations: this.getRecommendations(issues)
    };
  }
}

4. 需求验证和签署

需求审查清单:

完整性:
  [ ] 所有利益相关者需求已记录
  [ ] 功能需求已定义
  [ ] 非功能需求已指定
  [ ] 约束已识别
  [ ] 假设已记录
  [ ] 明确排除

清晰度:
  [ ] 需求具体且可测量
  [ ] 无模糊语言
  [ ] 验收标准清晰
  [ ] 技术团队理解
  [ ] 商务团队同意

可行性:
  [ ] 需求技术上可行
  [ ] 时间线现实
  [ ] 资源需求已识别
  [ ] 风险评估已完成
  [ ] 依赖关系已识别

可追溯性:
  [ ] 每个需求追溯到利益相关者需求
  [ ] 每个需求链接到用户故事
  [ ] 每个需求连接到测试

验证:
  [ ] 利益相关者审查已完成
  [ ] 商务批准已获得
  [ ] 技术可行性已确认
  [ ] 签署已收到

---

签署:

业务领导: ____________________ 日期: ________
技术领导: ____________________ 日期: ________
项目经理: ____________________ 日期: ________

需求基线建立:2025年2月1日
批准用于:开发规划
变更控制流程:激活

5. 需求可追溯性矩阵

可追溯性矩阵:

利益相关者需求 → 需求 → 用户故事 → 测试用例

---

利益相关者:CFO(成本降低)
需求:通过降低30%的运营成本

需求:
  REQ-101: 系统必须自动扩展基础设施
  REQ-102: 必须支持多区域部署
  REQ-103: 数据库查询必须在<500ms内完成

用户故事:
  US-201: 作为运维工程师,我可以自动扩展资源
  US-202: 作为用户,我可以访问任何区域的服务

测试用例:
  TC-301: 验证在80%容量时触发自动扩展
  TC-302: 验证<100ms区域间延迟

---

利益相关者:VP产品
需求:提高用户参与度25%

需求:
  REQ-104: 移动优先响应式设计
  REQ-105: 支持推送通知
  REQ-106: 离线优先能力

相关指标:
  - 日活跃用户+25%
  - 会话持续时间+40%
  - 用户留存+15%

最佳实践

✅ 做

  • 早期让所有关键利益相关者参与
  • 书面记录需求
  • 使用具体、可测量的语言
  • 定义验收标准
  • 使用MoSCoW方法优先排序
  • 获得利益相关者签署
  • 创建可追溯性矩阵
  • 定期审查需求
  • 区分必须有和希望有
  • 记录假设和约束

❌ 不做

  • 依赖记忆或口头协议
  • 没有利益相关者输入就创建需求
  • 使用模糊语言(快速,容易等)
  • 跳过非功能需求
  • 忽略约束和依赖关系
  • 过度记录琐碎细节
  • 匆忙完成需求阶段
  • 未经利益相关者同意就构建
  • 未经流程就进行范围变更
  • 忘记边缘情况和错误条件

需求收集提示

  • 使用原型澄清需求
  • 会议前书面审查需求
  • 找一个利益相关者代表
  • 使用视觉图表表示复杂工作流程
  • 通过模拟演示测试需求理解