Story 场景树——锻练开发人员 "简单设计" 的思维力

作者:方俊賢 | 腾讯项目经理

Story 场景树, 主要是要帮助开发人员, 锻练 “简单设计” 的思维;当经过一段时间的锻练后, 开发人员就可没有 “必要” 的再使用 Story 场景树进行简单设计。因为, 开发人员已能将软件架构浮现在脑海中, 并能自然而然的思考出简单设计。

前言:

软件开发的过程中, 不做简单设计, 软件开发就永远做不好。

但是, 简单设计假如只是写写文档, 而不能指导开发, 这样的简单设计, 就只是在瞎折腾。

简单设计能指导开发, 指的是:   代码隔离:

简单设计能使开发人员, 在开发前, 有一清晰且明确的指导地图; 开发人员沿著这指导地图, 便可开发出高质量的代码。使得代码不仅能符合各个质量属性上的要求, 更能使代码具备好的 “隔离“; 不会因后续需求上的变更, 而产生新的缺陷或失败。

测试用例定义 “开发完成” 的标准:

简单设计能使开发人员, 在开发前, 便设计出测试用例; 使得开发人员可明确的定义, 每日所开发的 TASK, 完成的标准是什么? 需通过那些测试用例的场景?  

每日目标 (风险) 管理:

简单设计能使开发人员, 明确且客观的做出结论: 今天该完成的 TASK 完成了没? 假如, 没完成, 真正的问题是什么? 该寻求什么样的协助?

本文:

简单设计要如何做?

有的人是天生就会的。

而大部分的我们, 简单设计的思维, 是需要经过一段时间锻练的;不是天生就会的。

Matei Zaharia; Spark 开发的主导者。  Matei 当在用 Scala 开发 Spark 时, 并没有做所谓的简单设计。  Matei 在开发前, 会先在脑中清楚的浮现出软件的架构。  Matei 便照着脑中的软件架构, 开发完了一行又一行伟大的代码。  Matei 每次在开发完一段代码后, 便会根据代码的弱点, 设计所谓 “灾难测试” 的测试用例;测试自己所开发的代码, 在架构上的弱点为何?

敏捷开发与软件工程实践;如:Story 场景树;对 Matei 而言, 是完全没有 “必要” 的。因为, Matei “天生” 就会简单设计了。

Story 场景树, 主要是要帮助开发人员, 锻练 “简单设计” 的思维;当经过一段时间的锻练后, 开发人员就可没有 “必要” 的再使用 Story 场景树进行简单设计。因为, 开发人员已能将软件架构浮现在脑海中, 并能自然而然的思考出简单设计。

为何Story 场景树, 可帮助开发人员, 锻练 “简单设计” 的思维

 因为, Story 场景树够可视化, 够轻量级;放在ㄧ个脑袋里, 绰绰有余。

Story 场景树: 可视化、轻量级的开发人员指导地图

从图一的 Story 场景树中, 清楚的指导著开发人员在“客户租 CD” 的这个 Story 中, 总共有 3 个关注点所产生的 3 个 TASKs 需完成开发; 分别是:

  1. 获取客户租 CD 的数据 (历史数据)。
  2. 校验客户已租的 CD 片数是否已超过 3 片?
  3. 计算客户所租的 CD 需归还的日期。

开发人员亦可在图一的 Story 场景树中, 分析、标示每个将进行开发的 TASK 需调用的外部接口。

开发人员按照 Story 场景树中的 TASK, 进行代码上的隔离; 使得 Story 不会因后续某个 TASK 需求上的变更, 而使得其他的 TASKs 引入新的缺陷或失败。

例如: 开发人员从图一的场景树中很清晰的就能分析出: “TASK 获取客户租 CD 的数据 (历史数据)”“TASK计算客户所租的 CD 需归还的日期”, 需要进行代码上的隔离。因为, 开发人员希望当 “TASK计算客户所租的 CD 需归还的日期” 的运算逻辑的代码改变时, 不致于会在 “TASK 获取客户租 CD 的数据 (历史数据)” 中引入新的缺陷或失败。

当然, 代码隔离的实现方式可藉由不同的接口或是适当的引用设计模式 (Design Patterns) 来完成。

更重要的是 : 开发人员亦可从图一的 Story 场景树中, 设计每个将进行开发的 TASK 所需的“测试用例”; 当开发人员能设计出 TASK 相对应的测试用例时, 所代表的意义不仅是开发人员已能充分的理解了需求, 更说明了开发人员已能从 TASK 相对应的测试用例中, 明确的定义出 “TASK 完成的标准”

当开发人员已能从 TASK 相对应的测试用例中, 明确的定义 “TASK 完成的标准” 时, 开发人员便能明确且客观的做出结论: 

  1. 今天该完成的 TASK 完成了没?
  2. 假如, 没完成, 真正的问题是什么? 该寻求什么样的协助?

结论:

拥有 “简单设计思维” 的开发人员, 永远是在用 “脑” 驱动著手, 产生一行又一行伟大的代码。之所以称之为一行又一行伟大的代码, 是因为, 每一行代码永远都是能随著时间的推移, 而能持续的演进; 演进的过程中, 却依然保持著健康、强壮。伟大的代码就宛如是拥有强健生命的有机体。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开源项目

码云周刊:谷歌 Chrome 新功能曝光;GitLab 称有 707 位用户超 5000 个项目丢失数据;下一代PC是这样的

1、2017 码云招聘-被窝已暖,漂洋过海来睡我 好吧,我承认这是一则寻人启事! 既然来了,何不今日将咱们彼此之间纯洁的革命友谊升华一下?外面冷我已将被窝暖好...

33411
来自专栏java一日一条

程序员遇到Bug时的30个反应

开发应用程序是一个非常有压力的工作。没有人是完美的,因此在这个行业中,代码中出现bug是相当普遍的现象。面对bug,一些程序员会生气,会沮丧,会心烦意乱,甚至会...

693
来自专栏人称T客

微软何时不再“阳萎” 看Nadella上任一年后憋了哪些大招

微软新任CEO Satya Nadella去年上任时,祭出“移动至上,云端优先”(mobile first and cloud first)的新政策,至今抛出了...

3855
来自专栏Java学习网

你需要每天写代码吗?

你需要每天写代码吗? 就像运动员每天锻炼一样,每天练习写代码可以成就更优秀的你。 最近我看过的博客,基本上每篇都有提到,“你需要每天写代码”。什么主题不重要,关...

2707
来自专栏Crossin的编程教室

几个以前发过、回复过很多次、比较有用的学习资源

最近事情有些多,所以“每周一坑”偶尔不得不跳票一下,各位莫急哈。 既然来都来了,说几个经常被问到的资源,应该还是不少人需要的。已经看过的就忽略。有其他好资源欢迎...

28311
来自专栏SAP梦心的SAP分享

【域控管理】域控的必要性

题记:本来域控这玩意儿跟我没有半毛钱关系,毕竟我是做应用类的,域控纯属系统管理范畴。 以前在TTE和LDS,公司里有使用域控,几年来以使用者的角度在观察,觉得这...

2395
来自专栏斑斓

如何在咨询项目开展Inception

本文通过我在咨询工作中的真实案例讲解了如何将敏捷开发的Inception与可视化咨询手段结合。2014初,我作为咨询师为客户提供咨询服务,负责一个新项目的敏捷咨...

3114
来自专栏北京马哥教育

原创投稿 | 乐乐快跑的运维学习基础大纲

乐乐快跑,马哥门徒,马哥教育原创作者联盟成员,专注于运维领域知识分享,强于知识体系构建。 各位朋友大家好,乐乐快跑今天给大家分享下运维的学习规...

4649
来自专栏JackeyGao的博客

多监控平台统一 | Hawkeye

近年来出现越来越多的监控平台, 每一个监控平台都是其擅长的地方, 比方说 zabbix 监控收集, 并监控基础服务。 grafana 监控平台可以很好的展示数据...

1543
来自专栏钱曙光的专栏

一周极客热文:2014最受欢迎的10种编程语言

从10个重要的信息源(包括IEEE Xplore,谷歌和GitHub)中选取了12个重点指标,评选出了2014最流行的编程语言。(具体排名请看上图) 下面是小编...

1945

扫码关注云+社区