企业级需求管理工具(关注后续开源)

企业级需求管理工具(关注后续开源)

1. 项目概述

1.1 项目简介

需求管理工具是一个基于 Flask 的企业级需求管理系统,旨在帮助团队高效管理软件需求的全生命周期。系统提供需求创建、状态流转、依赖分析、追溯矩阵等核心功能,并支持 RBAC 角色权限控制和多项目管理。

1.2 版本信息

项目 版本
Flask 3.0.0
Flask-SQLAlchemy 3.0.x
系统版本 v0.3.2

2. 功能模块介绍

2.1 核心功能模块

模块 功能描述 状态
需求管理 需求的 CRUD、状态流转、版本历史 已完成
项目管理 多项目支持、项目切换、项目成员管理 已完成
目标管理 目标创建、层级关系、需求关联 已完成
场景管理 业务场景定义、与需求关联 已完成
依赖分析 需求间依赖关系、循环检测、影响分析 已完成
追溯矩阵 需求-测试用例追溯 已完成
导入导出 CSV/JSON 格式数据导入导出 已完成
RBAC权限 角色权限控制、项目级权限 已完成

2.2 需求状态机

复制代码
草稿(draft) → 评审中(under_review) → 已批准(approved) → 实现中(implementing) → 已完成(done)
                 ↑                      ↓                     ↑
                 └─────────────────────←─────────────────────┘
                 ↑                      ↓
            已驳回(rejected) ←──────────┘
                 ↓
            退回修改 → 草稿

2.3 角色权限体系

角色 权限说明
admin 超级管理员,拥有所有权限
pm 项目经理,管理项目和成员
po 产品经理,创建和编辑需求
developer 开发人员,实现需求
tester 测试人员,编写测试用例
viewer 观察者,仅查看权限

3. 应用架构设计

3.1 架构概述

采用经典的 MVC 架构模式,结合 Flask Blueprint 进行模块化设计。

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      展示层 (View)                          │
│  templates/ (Jinja2模板) + static/ (CSS/JS/静态资源)        │
├─────────────────────────────────────────────────────────────┤
│                      控制层 (Controller)                    │
│  app.py (主应用路由) + auth.py (认证蓝图)                   │
├─────────────────────────────────────────────────────────────┤
│                      业务层 (Service)                       │
│  rbac.py (权限服务) + graph_engine.py (图分析引擎)          │
│  export_import.py (导入导出服务)                            │
├─────────────────────────────────────────────────────────────┤
│                      数据层 (Model)                         │
│  models.py (SQLAlchemy模型) + SQLite数据库                  │
└─────────────────────────────────────────────────────────────┘

3.2 核心组件职责

组件 文件 职责描述
主应用 app.py 路由定义、请求处理、业务逻辑
认证模块 auth.py 用户登录/注册/管理、会话管理
权限控制 rbac.py 角色定义、权限检查、访问控制
图引擎 graph_engine.py 依赖分析、循环检测、关键路径
数据模型 models.py 数据库表定义、ORM操作
导入导出 export_import.py 数据格式转换、批量导入导出

3.3 请求处理流程

复制代码
用户请求 → Flask路由 → 认证检查(login_required) → 权限检查(require_permission) 
    → 业务逻辑处理 → 数据库操作 → 模板渲染 → HTTP响应

4. 数据架构设计

4.1 数据库表结构

4.1.1 用户表 (users)
字段 类型 约束 说明
id INTEGER PRIMARY KEY 用户ID
username VARCHAR(80) UNIQUE, NOT NULL 用户名
password_hash VARCHAR(255) NOT NULL 密码哈希
email VARCHAR(120) UNIQUE 邮箱(可选)
role VARCHAR(20) DEFAULT 'viewer' RBAC角色
is_active BOOLEAN DEFAULT TRUE 是否激活
created_at DATETIME DEFAULT NOW 创建时间
4.1.2 项目表 (projects)
字段 类型 约束 说明
id INTEGER PRIMARY KEY 项目ID
code VARCHAR(20) UNIQUE, NOT NULL 项目编码(如 PROJ-001)
name VARCHAR(200) NOT NULL 项目名称
description TEXT 项目描述
color VARCHAR(7) DEFAULT '#0d6efd' 项目颜色标识
is_active BOOLEAN DEFAULT TRUE 是否激活
created_at DATETIME DEFAULT NOW 创建时间
4.1.3 需求表 (requirements)
字段 类型 约束 说明
id INTEGER PRIMARY KEY 需求ID
req_id VARCHAR(20) UNIQUE, NOT NULL 需求编码(如 REQ-001)
title VARCHAR(200) NOT NULL 需求标题
description TEXT 需求描述
req_type VARCHAR(20) DEFAULT 'functional' 类型
priority VARCHAR(10) DEFAULT 'medium' 优先级
status VARCHAR(20) DEFAULT 'draft' 状态
complexity VARCHAR(5) DEFAULT 'M' 复杂度
source VARCHAR(100) 需求来源
goal_id INTEGER FOREIGN KEY 关联目标
project_id INTEGER FOREIGN KEY 所属项目
created_at DATETIME DEFAULT NOW 创建时间
updated_at DATETIME ON UPDATE NOW 更新时间
4.1.4 依赖关系表 (dependencies)
字段 类型 约束 说明
id INTEGER PRIMARY KEY 依赖ID
from_req_id INTEGER FOREIGN KEY, NOT NULL 源需求
to_req_id INTEGER FOREIGN KEY, NOT NULL 目标需求
relation_type VARCHAR(20) DEFAULT 'depends_on' 关系类型
description VARCHAR(200) 描述
4.1.5 关联表
表名 用途
requirement_tags 需求与标签的多对多关系
project_members 项目成员关联(用户-项目)

4.2 ER关系图

复制代码
User 1 ─── * ProjectMember * ─── 1 Project
    │                              │
    │                              ├─ * Requirement
    │                              └─ * Goal
    │
    └─ * ReviewComment

Requirement 1 ─── * Scenario
Requirement 1 ─── * TestCase
Requirement 1 ─── * RequirementHistory
Requirement * ─── * Tag (多对多)
Requirement * ─── * Dependency * ─── * Requirement
Goal 1 ─── * Requirement
Goal * ─── * Goal (自引用层级)

4.3 核心数据模型关系

复制代码
# 项目包含需求
class Project(db.Model):
    requirements = db.relationship('Requirement', backref='project')
    goals = db.relationship('Goal', backref='project')

# 需求关联目标
class Requirement(db.Model):
    goal_id = db.Column(db.Integer, db.ForeignKey('goals.id'))
    goal = db.relationship('Goal', backref='requirements')

# 需求间依赖
class Dependency(db.Model):
    from_req_id = db.Column(db.Integer, db.ForeignKey('requirements.id'))
    to_req_id = db.Column(db.Integer, db.ForeignKey('requirements.id'))

5. 开发技术栈

5.1 技术选型

分类 技术 版本 说明
语言 Python 3.10+ 开发语言
框架 Flask 3.0.0 Web应用框架
ORM Flask-SQLAlchemy 3.0.x 数据库ORM
数据库 SQLite 3.x 轻量级数据库
模板 Jinja2 3.1.x 模板引擎
前端 Bootstrap 5.3.x UI框架
图标 Bootstrap Icons 1.10.x 图标库
图分析 NetworkX 3.1 图算法库

5.2 关键依赖说明

复制代码
# requirements.txt 核心依赖
Flask==3.0.0
Flask-SQLAlchemy==3.1.1
networkx==3.1

5.3 项目目录结构

复制代码
project/
├── app.py                 # 主应用入口
├── auth.py                # 认证蓝图
├── rbac.py                # RBAC权限控制
├── models.py              # 数据模型
├── graph_engine.py        # 图分析引擎
├── export_import.py       # 导入导出模块
├── init_db.py             # 数据库初始化
├── init_rbac.py           # RBAC初始化
├── init_project_members.py# 项目成员初始化
├── .venv/                 # 虚拟环境
├── docs/                  # 文档目录
├── static/                # 静态资源
│   ├── style.css          # 自定义样式
│   └── js/                # JavaScript文件
└── templates/             # Jinja2模板
    ├── base.html          # 基础模板
    ├── dashboard.html     # 仪表盘
    ├── auth/              # 认证相关模板
    ├── requirements/      # 需求管理模板
    ├── projects/          # 项目管理模板
    ├── goals/             # 目标管理模板
    ├── scenarios/         # 场景管理模板
    ├── tags/              # 标签管理模板
    ├── graph/             # 图视图模板
    └── users/             # 用户管理模板

6. 概要设计

6.1 核心业务流程

6.1.1 需求创建流程
复制代码
sequenceDiagram
    participant User as 用户
    participant App as app.py
    participant Model as models.py
    participant DB as SQLite

    User->>App: POST /requirements/create
    App->>App: 生成唯一 req_id
    App->>Model: 创建 Requirement 对象
    Model->>DB: INSERT INTO requirements
    Model->>Model: 记录变更历史
    Model->>DB: INSERT INTO requirement_history
    DB-->>Model: 返回成功
    Model-->>App: 返回需求对象
    App-->>User: 重定向到详情页
6.1.2 状态流转流程
复制代码
sequenceDiagram
    participant User as 用户
    participant App as app.py
    participant Model as models.py
    participant DB as SQLite

    User->>App: POST /requirements/{id}/transition
    App->>Model: 验证状态转换合法性
    alt 合法转换
        Model->>Model: 更新状态
        Model->>Model: 记录状态变更历史
        Model->>DB: UPDATE requirements SET status=?
        DB-->>Model: 返回成功
        App-->>User: 成功消息
    else 非法转换
        App-->>User: 错误消息
    end
6.1.3 依赖分析流程
复制代码
用户请求 → graph_engine.py → 构建图 → 执行分析 → 返回结果
    ├─ 循环检测 (detect_cycles)
    ├─ 影响分析 (impact_analysis)
    ├─ 优先级一致性检查 (check_priority_consistency)
    └─ 关键路径分析 (calculate_critical_path)

6.2 API 接口设计

6.2.1 需求管理接口
接口 方法 权限 描述
/requirements GET 登录用户 获取需求列表
/requirements/create POST REQ_CREATE 创建需求
/requirements/<int:id> GET 登录用户 获取需求详情
/requirements/<int:id>/edit POST REQ_EDIT 编辑需求
/requirements/<int:id>/delete POST REQ_DELETE 删除需求
6.2.2 图分析接口
接口 方法 权限 描述
/api/graph/data GET 登录用户 获取图数据
/api/graph/impact/<int:req_id> GET 登录用户 影响分析
/api/graph/priority-check GET 登录用户 优先级检查
/api/graph/critical-path GET 登录用户 关键路径
6.2.3 导入导出接口
接口 方法 权限 描述
/export/csv GET EXPORT 导出CSV
/export/json GET EXPORT 导出JSON
/import/upload POST IMPORT 上传文件
/import/confirm POST IMPORT 确认导入

6.3 权限控制设计

复制代码
# 权限定义 (rbac.py)
class Permission(Enum):
    REQ_CREATE = 'req_create'
    REQ_EDIT = 'req_edit'
    REQ_DELETE = 'req_delete'
    PROJECT_CREATE = 'project_create'
    PROJECT_EDIT = 'project_edit'
    PROJECT_DELETE = 'project_delete'
    IMPORT = 'import'
    EXPORT = 'export'

# 角色权限映射
class Role(Enum):
    ADMIN = 'admin'    # 所有权限
    PM = 'pm'          # 项目管理权限
    PO = 'po'          # 需求创建/编辑权限
    DEVELOPER = 'developer'  # 部分编辑权限
    TESTER = 'tester'  # 测试用例权限
    VIEWER = 'viewer'  # 只读权限

7. 部署方法

7.1 开发环境部署

7.1.1 环境要求
  • Python 3.10+

  • pip 包管理工具

  • Git

7.1.2 步骤
复制代码
# 1. 初始化数据库
python init_db.py

# 2. 初始化RBAC权限
python init_rbac.py

# 3. 运行开发服务器
python app.py

7.2 生产环境部署

7.2.1 使用 Gunicorn
复制代码
# 安装 Gunicorn
pip install gunicorn

# 启动生产服务器
gunicorn -w 4 -b 0.0.0.0:5000 app:app
7.2.2 使用 Docker
复制代码
# Dockerfile
FROM python:3.10-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 5000

CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"]

7.3 配置说明

复制代码
# app.py 关键配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///requirements.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = 'your-secret-key-here'

8. 启动方法

8.1 开发模式启动

复制代码
# 方法1:直接运行
python app.py

# 方法2:使用 Flask CLI
flask run --debug

# 方法3:指定端口
flask run --host=0.0.0.0 --port=8080

8.2 访问地址

启动后访问:http://localhost:5000

8.3 默认管理员账户

系统初始化后创建默认管理员:

  • 用户名:admin

9. 代码规范

9.1 Python 代码规范

  • 遵循 PEP 8 规范

  • 使用 4 空格缩进

  • 函数/方法名使用 snake_case

  • 类名使用 PascalCase

  • 常量使用 UPPER_CASE

9.2 SQLAlchemy 规范

  • 模型类名使用单数形式(如 User,非 Users

  • 表名使用复数形式(如 users

  • 外键命名:{关联表名}_id(如 project_id

  • 使用 backref 定义反向关联

9.3 模板规范

  • 模板文件使用 .html 扩展名

  • 继承 base.html 基础模板

  • 使用 {% block %} 定义可扩展区域

  • 变量命名使用 snake_case


10. 测试指南

10.1 单元测试

复制代码
# 示例测试结构
import unittest
from app import app
from models import db, User

class TestUserManagement(unittest.TestCase):
    def setUp(self):
        app.config['TESTING'] = True
        app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
        self.client = app.test_client()
        with app.app_context():
            db.create_all()
    
    def tearDown(self):
        with app.app_context():
            db.session.remove()
            db.drop_all()
    
    def test_user_creation(self):
        # 测试用户创建逻辑
        pass

10.2 运行测试

复制代码
# 运行所有测试
python -m unittest discover

# 运行指定测试
python -m unittest tests.test_auth

11. 常见问题

11.1 数据库连接问题

问题:SQLite 数据库文件权限不足

解决方案

复制代码
chmod 644 requirements.db

11.2 依赖安装问题

问题:NetworkX 安装失败

解决方案

复制代码
pip install --no-cache-dir networkx

11.3 启动问题

问题:端口被占用

解决方案

复制代码
# 查看占用端口
netstat -ano | findstr :5000

# 使用其他端口
flask run --port=8080

12. 附录

12.1 需求状态说明

状态码 显示名称 说明
draft 草稿 需求初稿,待完善
under_review 评审中 提交评审,等待审核
approved 已批准 评审通过,可开始实现
rejected 已驳回 评审未通过,需修改
implementing 实现中 开发人员正在实现
done 已完成 需求已实现并验收

12.2 优先级说明

优先级 说明
critical 关键需求,必须实现
high 高优先级,重要需求
medium 中优先级,一般需求
low 低优先级,可选需求

12.3 复杂度说明

复杂度 说明
S 简单,1-2天工作量
M 中等,3-5天工作量
L 复杂,1-2周工作量
XL 非常复杂,2周以上

相关推荐
a1117762 小时前
Web3D 在线3D模型骨骼动画编辑器(开源 Reze Studio)
前端·3d·开源·html
XW-ABAP2 小时前
ABAP Dynamic Report Extraction and ADBC CRUD Practical Solution (V2)
开源
0pen12 小时前
ZygiskNext 源码解析(一):总体架构与启动链路
android·开源·zygote
冬奇Lab12 小时前
一天一个开源项目(第84篇):free-claude-code —— 零费用运行 Claude Code 的代理黑魔法
人工智能·开源·claude
xlecho18 小时前
从单一语言到全域全栈,AI凭全能实力,淘汰旧时代语言工程师
人工智能·后端·开源
Lethehong1 天前
别被代码吓跑!普通人3步搞定AI视频神器——Pixelle-Video - AI 全自动短视频引擎(附避坑)
人工智能·开源·自动化·蓝耘元生代·蓝耘maas
qcx231 天前
知识沉淀 | 2026 年 LLM 评测体系 & 主流开源模型架构全景
架构·开源
X54先生(人文科技)1 天前
ELR核心文明支柱的超长期推演报告
人工智能·开源·ai写作·零知识证明
Hello__77771 天前
开源鸿蒙 Flutter 实战|关于页面完善全流程实现
flutter·开源·harmonyos