不管是传统开发模式还是时下推崇的敏捷开发模式,都要从源头——业务需求开始着手,缺少了需求获取分析环节或本环节做的不够好,由此造成的错误会随着软件迭代的步伐,逐步被放大,近而造成巨大的损失。有时金钱成本尚可接受,但由此造成的时间成本、机会成本则是无法估量的。
为什么选取"商场停车业务"作为需求原型呢,有两个考量:一是场景熟知度比较高,业务理解上不存在很大障碍;二是能将我们所要表达的微服务特性融入进去,业务复杂度较低,便于上手开发,门槛太高反而不利于技术实践。
下面随着课程的步伐,一步一步深入进去吧。
相信大家经常去商场购物,不管你有没有停过车,商场的停车场不会是个陌生的存在,本次实操就是以商场停车收费为业务原型开展。业务需求相对简单(实际业务要比案例中功能更复杂),主要是要能通过简单的业务功能掌握到我们关心的微服务技术栈即可。
主要干系人就是商场物业管理部,提出的原始需求如下:
业务场景很清晰,也比较常见(实际场景中,本系统应当与其它系统打通,数据共享,便于数据分析、统计挖掘等,实际功能同样比这个更复杂些),本次就以如上的简单需求,结合微服务技术栈,来一次从 0 到 1 的完整性开发实践。
Scrum 敏捷开发实践,在国内应用的时间也不算短,不少企业已经成功应用于产品迭代开发中,本次实战会融入敏捷思想,来指导这次的微服务开发实战。本文的需求分析工作多数情况下是由 PO(产品经理)完成。
按传统的瀑布研发模式来走,流程大致时需求分析,输出需求分析文档,而后进行概要设计、详细设计(数据库设计),并输出对应的文档,后续再进行编码工作。
敏捷中提倡可工作的文档高于详尽的文档,所以无须严格按照传统的模块输出一堆文档,能表述清楚、能与团队成员正确传达即可。
(图片来源于网站http://agilemanifesto.org/)
基于原始需求,由 PO 输出用户故事列表形成需求池 Product Backlog,每个迭代中从中按优先级顺序,放入不同的迭代中形成 Sprint Backlog,同时分解故事为任务(故事的粒度要比任务粗,是一组功能的组合),由组员一起将任务工作量估算并认领。任务工作量汇总后,就形成了当前迭代的总工作量,基于燃尽图,随着时间的延长以及工作进度的推进,可以清晰的从燃尽图中看到任务的完成情况。可以借助于看板,将故事任务以不同色块的 3M 便利贴贴在白板上,画出待办列表、进行中列表、已完成列表,任务完成后由组员调整位置。
(工具绘制)
(图片来源于敏捷中文网)
为了提高工作效率,一般会借助对应的敏捷开发工具完成,比如 Teambition、JIRA、禅道等等,里面针对敏捷的各个环节都有很好的支持,相信能帮助大家节省不少成本。
依据原始停车需求,整合分析后可归集为六个业务模块:
以上述需求归集情况,罗列几个代表性的用户故事,取代传统的需求文档。约定:商场停车系统以下简称为系统
基于以上故事,将故事拆解成较细的任务,拿第一个 User Story 举例。
1.1 商场系统中绑定手机号,通过手机验收码,确定是本人手机。
1.2 完善个人信息,可以保存个人姓名、生日等信息
1.3 录入车辆车牌信息,后期出场车牌识别后,自动计算车辆停车费
罗列出故事的具体任务后,开发人员针对任务情况,进行工作量评估,敏捷估算工作量常用用部分斐波那契数列(小时数):0 ,1 ,2 ,3 ,5 ,8, 13, 21 等,建议不超过 8 时,超过 8 意味着需要进一步分拆,争取在一天内可以完成一个任务。估算需要选取一个基准复杂度,比如一次 DB 交互为 1,在此基础上,分析每个故事的复杂度,结合前面的工作量估算方法就可以给某个任务确定预估工时数。
有朋友会比较担心,万一预估的时间少了完不成怎么办,其实这只是初步预估,在实际执行时,以实际执行为准,没有一个敏捷团队的迭代燃尽图会像理想状态一般燃烧。
实操过程中不少小伙伴存在一个误区:关注花费过的时间,而不是关注剩余工作时间,燃尽图中显示是剩余工时数量。
基于需求情况,找出核心的业务流程,指导后期的核心业务开发。
小结:
本篇带你结合 Scrum 敏捷思想进行产品需求的分析,由 PO 人员整理用户故事、核心业务流程,由开发人员认领故事,分解故事为具体任务,并预估工作量,录入敏捷辅助工具中,为期开发人员介入作好准备工作。