摘要
BMAD-METHOD框架的开发流程是其核心价值所在,通过Scrum Master和Developer两个关键AI代理的协同工作,实现了高效、有序且质量可控的软件开发过程。该流程基于敏捷开发理念,采用故事驱动的开发方式,确保每个功能点都能得到充分的关注和实现。本文将深入解析BMAD-METHOD的开发工作流,探讨Scrum Master和Dev Agent的职责分工、协作机制以及整个开发周期的执行细节。
正文
1. 引言
在传统的软件开发中,开发阶段往往面临需求变更频繁、沟通成本高、质量难以保证等问题。BMAD-METHOD框架通过AI代理团队的方式,重新定义了开发流程,将人类开发者的经验和AI的效率完美结合。
BMAD-METHOD开发流程的核心特点包括:
- 故事驱动:以用户故事为基本开发单元,确保功能实现的完整性和可追溯性
- 角色分工明确:Scrum Master负责故事准备,Developer负责代码实现
- 质量内建:通过内置的检查机制和QA代理确保代码质量
- 流程标准化:通过预定义的工作流确保开发过程的一致性
2. BMAD-METHOD开发工作流概述
BMAD-METHOD的开发工作流是一个循环的过程,从规划阶段产出的文档开始,通过Scrum Master代理将大块的规划文档分解为具体的故事,再由Developer代理逐一实现这些故事。
3. Scrum Master代理详解
Scrum Master(SM)代理是BMAD-METHOD开发流程的"组织者"和"准备者",负责将规划阶段产出的史诗和架构文档转化为具体、可执行的开发故事。
3.1 核心职责
Scrum Master代理的核心职责包括:
- 故事准备:从分片的史诗文档中提取下一个待开发的故事
- 上下文整合:将架构文档中的技术细节整合到故事中
- 任务分解:将用户故事分解为具体的开发任务
- 质量保障:确保故事包含足够的信息供开发者实现
3.2 工作流程
Scrum Master代理的工作流程严格按照[create-next-story](file:///e%3A/Dify/BMAD-METHOD/bmad-core/tasks/create-next-story.md)任务执行:
class ScrumMasterAgent:
def __init__(self):
self.name = "Bob"
self.role = "Scrum Master"
def create_next_story(self, epic_files, architecture_docs, previous_story=None):
"""
创建下一个开发故事
"""
# 1. 识别下一个待准备的故事
next_story_info = self.identify_next_story(epic_files, previous_story)
# 2. 收集故事需求和前一个故事的上下文
story_requirements = self.gather_requirements(next_story_info, previous_story)
# 3. 收集架构上下文
architecture_context = self.gather_architecture_context(architecture_docs, story_requirements)
# 4. 验证项目结构一致性
self.verify_project_structure(architecture_context)
# 5. 填充故事模板
story = self.populate_story_template(next_story_info, story_requirements, architecture_context)
# 6. 完成故事草稿并审查
self.complete_story_draft(story)
return story
def identify_next_story(self, epic_files, previous_story):
"""
识别下一个故事
"""
# 检查是否存在已完成的故事
if previous_story and previous_story["status"] != "Done":
raise Exception(f"前一个故事未完成: {previous_story['id']}")
# 确定下一个故事编号
if not previous_story:
# 第一个故事
return {"epic": 1, "story": 1, "title": self.get_story_title(1, 1)}
else:
# 根据前一个故事确定下一个
return self.calculate_next_story(previous_story)
def gather_architecture_context(self, architecture_docs, story_requirements):
"""
收集架构上下文
"""
context = {
"tech_stack": architecture_docs["tech_stack"],
"project_structure": architecture_docs["project_structure"],
"coding_standards": architecture_docs["coding_standards"],
"data_models": self.extract_relevant_data_models(architecture_docs, story_requirements),
"api_specs": self.extract_relevant_apis(architecture_docs, story_requirements),
"component_specs": self.extract_relevant_components(architecture_docs, story_requirements)
}
return context
3.3 故事模板结构
Scrum Master代理创建的故事遵循标准模板,包含以下关键部分:
- 故事陈述:清晰描述要实现的功能
- 验收标准:定义功能完成的标准
- 开发笔记:包含实现所需的技术细节
- 任务列表:具体的开发任务和子任务
- 文件列表:涉及的文件清单
4. Developer代理详解
Developer(Dev)代理是BMAD-METHOD开发流程的"实现者",负责将Scrum Master准备的故事转化为实际的代码。
4.1 核心职责
Developer代理的核心职责包括:
- 代码实现:根据故事要求编写代码
- 测试编写:为实现的功能编写测试用例
- 调试修复:发现和修复代码中的问题
- 文档更新:更新相关文档和注释
4.2 工作流程
Developer代理严格按照[develop-story](file:///e%3A/Dify/BMAD-METHOD/bmad-core/agents/dev.md)命令执行:
class DeveloperAgent:
def __init__(self):
self.name = "James"
self.role = "Full Stack Developer"
def develop_story(self, story):
"""
开发故事
"""
# 1. 按顺序执行任务
for task in story["tasks"]:
self.execute_task(task)
# 编写测试
self.write_tests(task)
# 执行验证
self.run_validations(task)
# 更新任务状态
if self.all_validations_pass(task):
task["completed"] = True
# 2. 更新故事状态
story["status"] = "Ready for Review"
# 3. 执行检查清单
self.execute_checklist(story)
return story
def execute_task(self, task):
"""
执行具体任务
"""
# 实现任务逻辑
implementation = self.implement_logic(task)
# 创建必要的文件
for file_path in task["required_files"]:
self.create_file(file_path, implementation)
# 集成到现有代码中
self.integrate_code(implementation)
return implementation
def write_tests(self, task):
"""
为任务编写测试
"""
# 根据任务类型确定测试类型
if task["type"] == "unit":
self.write_unit_tests(task)
elif task["type"] == "integration":
self.write_integration_tests(task)
elif task["type"] == "e2e":
self.write_e2e_tests(task)
def run_validations(self, task):
"""
运行验证
"""
# 运行代码检查
linting_result = self.run_linting()
# 运行单元测试
unit_test_result = self.run_unit_tests()
# 运行集成测试
integration_test_result = self.run_integration_tests()
return {
"linting": linting_result,
"unit_tests": unit_test_result,
"integration_tests": integration_test_result
}
5. 开发流程中的质量保障机制
BMAD-METHOD在开发流程中内置了多种质量保障机制,确保代码质量和功能正确性。
5.1 任务级验证
每个任务完成后都会进行验证:
class TaskValidator:
def __init__(self):
self.dev = DeveloperAgent()
def validate_task(self, task):
"""
验证任务完成情况
"""
validations = []
# 1. 代码质量检查
code_quality = self.check_code_quality(task)
validations.append(("代码质量", code_quality))
# 2. 测试覆盖率检查
coverage = self.check_test_coverage(task)
validations.append(("测试覆盖率", coverage))
# 3. 功能正确性验证
functionality = self.verify_functionality(task)
validations.append(("功能正确性", functionality))
# 4. 性能检查
performance = self.check_performance(task)
validations.append(("性能", performance))
return validations
5.2 故事级检查清单
每个故事完成后执行检查清单:
class StoryChecklist:
def __init__(self):
self.checklist = [
"所有任务已完成",
"所有测试通过",
"代码符合编码标准",
"文档已更新",
"文件列表完整",
"变更日志已记录"
]
def execute_checklist(self, story):
"""
执行故事检查清单
"""
results = {}
for item in self.checklist:
results[item] = self.verify_item(item, story)
return results
6. 开发流程中的协作机制
BMAD-METHOD通过多种机制实现Scrum Master和Developer代理之间的有效协作。
6.1 标准化故事格式
通过标准化的故事格式确保信息传递的准确性:
class StoryTemplate:
def __init__(self):
self.template = {
"title": "",
"status": "Draft",
"story": "",
"acceptance_criteria": [],
"dev_notes": {
"previous_insights": [],
"data_models": [],
"api_specifications": [],
"component_specifications": [],
"file_locations": [],
"testing_requirements": [],
"technical_constraints": []
},
"tasks": [],
"subtasks": [],
"file_list": [],
"change_log": [],
"dev_agent_record": {
"debug_log": [],
"completion_notes": [],
"status": "Draft"
}
}
6.2 状态管理
通过清晰的状态管理确保流程的有序进行:
class StoryStatusManager:
def __init__(self):
self.valid_transitions = {
"Draft": ["In Progress"],
"In Progress": ["Ready for Review", "Draft"],
"Ready for Review": ["Done", "In Progress"],
"Done": []
}
def update_status(self, story, new_status):
"""
更新故事状态
"""
current_status = story["status"]
if new_status in self.valid_transitions[current_status]:
story["status"] = new_status
story["change_log"].append({
"from": current_status,
"to": new_status,
"timestamp": self.get_current_time()
})
return True
else:
raise Exception(f"无效的状态转换: {current_status} -> {new_status}")
7. 开发流程实践示例
以下是一个完整的开发流程实践示例:
# 示例:用户注册功能的开发流程
class UserRegistrationDevelopment:
def __init__(self):
self.sm = ScrumMasterAgent()
self.dev = DeveloperAgent()
self.qa = QAAgent()
def develop_user_registration(self):
"""
开发用户注册功能
"""
# 1. Scrum Master准备故事
story = self.sm.create_next_story(
epic_files=["1-authentication.epic.md"],
architecture_docs=self.load_architecture_docs(),
previous_story=None
)
# 2. 用户审批故事
if not self.user_approves_story(story):
return "用户未批准故事"
# 3. Developer实现故事
implemented_story = self.dev.develop_story(story)
# 4. QA审查(可选)
if self.user_requests_qa_review():
qa_results = self.qa.review_story(implemented_story)
if qa_results["gate"] == "FAIL":
# 需要开发者修复
return self.dev.develop_story(implemented_story)
# 5. 标记故事完成
implemented_story["status"] = "Done"
return implemented_story
# 实际开发任务示例
class UserRegistrationTask:
def __init__(self):
self.task = {
"id": "1.1.1",
"description": "实现用户注册API端点",
"subtasks": [
{
"id": "1.1.1.1",
"description": "创建用户模型",
"files": ["models/user.py"]
},
{
"id": "1.1.1.2",
"description": "实现密码加密",
"files": ["utils/encryption.py"]
},
{
"id": "1.1.1.3",
"description": "创建注册路由",
"files": ["routes/auth.py"]
},
{
"id": "1.1.1.4",
"description": "编写单元测试",
"files": ["tests/test_auth.py"]
}
]
}
def implement(self):
"""
实现用户注册任务
"""
# 实现用户模型
user_model = """
class User:
def __init__(self, username, email, password):
self.username = username
self.email = email
self.password = self.encrypt_password(password)
def encrypt_password(self, password):
# 密码加密实现
import hashlib
return hashlib.sha256(password.encode()).hexdigest()
"""
# 实现注册路由
auth_route = """
from flask import Flask, request, jsonify
from models.user import User
app = Flask(__name__)
@app.route('/register', methods=['POST'])
def register():
data = request.get_json()
user = User(data['username'], data['email'], data['password'])
# 保存用户到数据库
save_user_to_db(user)
return jsonify({"message": "用户注册成功"}), 201
"""
return [user_model, auth_route]
总结
BMAD-METHOD的开发流程通过Scrum Master和Developer代理的分工协作,实现了高效且有序的软件开发过程。该流程的关键优势包括:
- 职责清晰:Scrum Master专注于故事准备,Developer专注于代码实现
- 质量内建:通过标准化模板和检查机制确保质量
- 流程可控:通过状态管理和验证机制确保流程有序进行
- 协作高效:通过标准化的信息传递机制实现高效协作
这种开发流程不仅提高了开发效率,还确保了代码质量和功能的正确性,为AI辅助的软件开发提供了一个可靠的框架。
参考资料
- BMAD-METHOD GitHub仓库
- BMAD-METHOD官方文档
- BMAD-METHOD用户指南
- [Scrum Master代理文档](file:///e%3A/Dify/BMAD-METHOD/bmad-core/agents/sm.md)
- [Developer代理文档](file:///e%3A/Dify/BMAD-METHOD/bmad-core/agents/dev.md)
- [create-next-story任务文档](file:///e%3A/Dify/BMAD-METHOD/bmad-core/tasks/create-next-story.md)
- 核心架构文档
404

被折叠的 条评论
为什么被折叠?



