这篇文章主要分享了我基于在工作中的体会提出的优化工作流程的思路。
流程拆解
执行手册
环节 | 作用 | 指导 |
---|---|---|
需求分析 | 1. 明确项目目标 2. 定义系统功能 3. 识别潜在问题 4. 建立规格说明 5. 促进沟通协作 6. 支持变更管理 7. 保障项目成功 | 1. 集思广益:研发团队中不同职能的人员共同参与分析讨论。 2. 聚焦重点:明确需求是什么以及为什么会有需求。 3. 功能规划:确定怎么做来实现和满足需求,即提供什么功能。 4. 识别问题:提前发现潜在问题和冲突,并规划解决方案。 |
逻辑设计 | 1. 明确系统结构 2. 定义功能逻辑 3. 促进模块化设计 4. 支持团队协作 5. 降低开发风险 6. 便于测试验证 7. 指导后续迭代 | 1. 进行技术选型:根据需求分析,决定实现功能采用的技术栈。 2. 定义系统架构:根据功能规划,划分系统中的模块和组件,并明确它们之间的关系。 3. 设计业务流程:详细设计系统各个模块间的交互方式,包括数据流、控制流、处理逻辑等。 4. 定义数据模型:根据业务流程定义表示业务实体对象的逻辑结构。 |
交互设计 | 1. 提升用户体验 2. 增强可用性 3. 促进有效沟通 4. 支持情感连接 5. 引导用户行为 6. 优化信息架构 7. 支持跨平台 | 1. 明确交互逻辑:明确用户行为与交互操作的关联,最好提供交互原型。 2. 设计用户界面:为用户访问系统的入口明确样式布局,指导前端开发。 |
实现设计 | 1. 细化设计方案 2. 确保技术可行 3. 促进代码质量 4. 支持团队协作 5. 降低开发风险 6. 便于测试验证 7. 支持变更管理 8. 确保系统性能 | 1. 明确API设计:明确前后端通信接口设计,支持并行开发以提高效率。 2. 验证技术方案:通过技术分析和原型开发,评估和验证选型技术的可行性。 3. 制定编码规范:约定项目结构和代码规范,提高代码可读性和可维护性。 4. 明确DB设计:设计数据库表结构,确定业务数据的存储结构。 |
后端编码开发 | 1. 实现业务逻辑 2. 安全性保障 3. 集成第三方服务 4. 构建API 5. 实现日志和监控 | 进行业务数据管理和系统性能优化。 |
前端编码开发 | 1. 实现交互逻辑 2. 实现用户界面 3. 用户体验优化 4. 支持跨平台 5. 调用API | 根据交互设计实现交互逻辑和用户界面。 |
功能联调 | 1. 验证系统集成 2. 发现接口问题 3. 验证业务流程 4. 提升系统稳定性 5. 降低维护成本 6. 促进团队协作 7. 支持变更管理 8. 提升用户满意度 | 前后端编码开发均完成后,联结用户界面和接口服务进行功能验证,发现问题则立刻明确由前端/后端处理后返工。 |
测试规划 | 1. 明确测试目标 2. 定义测试策略 3. 确定测试资源 4. 制定测试计划 5. 风险评估管理 6. 促进团队沟通 7. 支持变更管理 8. 提高质量和效率 9. 确保项目成功 | 确保测试活动围绕项目需求和业务目标进行,确保测试活动有序、高效地进行,保障项目交付质量。 |
测试设计 | 1. 设计测试用例 2. 准备测试数据 3. 确定测试环境 4. 评估测试覆盖率 5. 促进团队协作 6. 支持缺陷预防 7. 提高质量和效率 8. 确保项目成功 | 1. 根据交互设计,结合业务场景进行端到端测试用例设计。 2. 根据API设计,结合业务场景进行接口测试用例设计,需考虑系统边界。 |
AT脚本编码 | 1. 提高测试效率 2. 减少认为错误 3. 支持复杂测试场景 4. 实现持续测试 5. 提高测试覆盖率 6. 支持回归测试 7. 节省测试成本 8. 提高测试可维护性 | 根据接口测试用例设计编写自动化测试脚本,端到端测试采用自动化测试性价比不高。 |
测试验收 | 1. 验证需求满足 2. 确保用户满意度 3. 发现潜在问题 4. 减少项目风险 5. 支持决策制定 6. 促进团队协作 7. 确保合规性 8. 提升产品质量 9. 支持变更管理 | 当功能联调完成后,执行测试用例验证开发产出是否符合预期要求,发现问题则立刻明确由前端/后端处理后返工;需要重点关注正常业务流程以外的系统边界场景。 |
注意事项
在实际业务场景中,需求往往充满了变化,所以在项目实施的过程中需要及时调整设计与实现。
研发方法论
传统的软件工程项目研发流程难以适应当代环境,这是因为:
- 市场需求快速变化
- 技术更新迭代迅速
- 用户期望不断提高
方法论 | 核心思想 | 实施指导 |
---|---|---|
精益研发 | 消除浪费、增强学习、快速交付 | 1. 识别并消除浪费:尽可能减少等待、去除不必要的工作。 2. 通过持续的反馈和实验来增强团队的学习和改进。 3. 尽可能延迟决策,以便于有更多的时间收集信息和反馈。 4. 从整体系统角度进行优化,而不是只关注局部。 |
敏捷开发 | 迭代开发、自主协作、持续改进 | 1. 通过短周期的迭代开发,快速交付可用软件,及时响应需求变化。 2. 鼓励倡导团队成员自发组织协作,提高开发效率和质量。 3. 通过持续跟进以及时获取反馈,进而基于反馈不断优化产品。 |
DevOps | 自动化、持续集成/持续交付、文化转变 | 1. 通过自动化工具和流程,提高开发、测试、部署的效率。 2. 通过持续集成实现快速迭代和持续交付。 3. 促进不同职能团队间的协作沟通,实现快速响应和持续改进。 |
在实际项目研发中,往往同时结合使用上述三者。
流程可变性
软件工程项目研发过程中,各个步骤的执行需要根据实际情况及时做出调整,但大幅度偏离规范流程会带来额外的质量风险。因此,这里对整体流程中不同步骤的可变性做了划分。
可变性 | 步骤 | 说明 |
---|---|---|
强 | 实现设计(除API设计) 后端编码开发 前端编码开发 AT脚本编码 | 变化对项目整体进展影响不大,在进入后续步骤执行时,可没有顾虑地进行不向前兼容的变化。 |
弱 | 需求分析 逻辑设计 测试规划 交互设计 测试设计 API设计 功能联调 测试验收 | 后续步骤强依赖于这些步骤,变化容易影响项目整体进程;在进入后续步骤执行时,尽量只进行增量变化。 |
设计文档
软件工程项目研发过程中,不同阶段的设计都需要产出相应的文档,好的文档应当兼具信息完整和内容精简、保证有效性和易用性,从而便于项目团队成员高效地获取和利用信息,推动项目顺利进行。
- 在进入后续流程执行前,文档必须包含该阶段用于指导下游工作所需的一切细节。
- 在单个迭代周期交付前,文档尽量包含当前实现所有必要细节,以便于后续改动参考。
- 在某一环节设计中,不影响系统架构和其它环节的部分,不需要包含在文档中。
文档 | 评审时必须包含 |
---|---|
逻辑设计 | 功能需求、系统架构、技术选型、业务流程、数据模型 |
交互设计 | 交互逻辑、用户界面 |
实现设计 | API设计、DB设计 |
测试设计 | 测试用例、质量目标 |
职责分工
我所在公司目前的分工如下:
- 后端工程师:负责需求分析、逻辑设计、实现设计、后端编码开发,与前端工程师协作完成功能联调。
- 前端工程师:负责前端编码开发,与后端工程师协作完成功能联调。
- 测试工程师:负责测试规划、测试设计、AT脚本编码、测试验收,参与需求分析。
- 产品设计师:负责包含UX设计和UI设计在内的全部交互设计,参与端到端测试验收。
我设想中的合理分工如下:
- 后端工程师:参与需求分析、逻辑设计,负责实现设计、后端编码开发,与前端工程师协作完成功能联调。
- 前端工程师:参与需求分析、UX设计、UI设计,负责前端编码开发,与后端工程师协作完成功能联调。
- 测试工程师:参与需求分析、负责测试规划、测试设计、AT脚本编码、测试验收。
- 产品设计师:负责UI设计,参与UX设计、端到端测试验收。
- 产品经理:负责需求分析,主导逻辑设计、UX设计。
当研发团队中缺乏产品经理时,其职能被分散给了其它岗位,降低了项目实施的效率和质量。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。