Story 场景树; 锻练开发人员 “简单设计” 的思维力

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

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

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

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

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

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

3. 每日目标 (风险) 管理:

简单设计能使开发人员, 明确且客观的做出结论: 今天该完成的 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 条评论
登录 后参与评论

相关文章

来自专栏安恒信息

见招拆招 六招轻松抓住代维违规的“黑手”

所谓“代维”,是指企业将自己的IT系统外包给第三方进行包括系统配置、日常运维、系统管理等管理权限的操作。让专业的人干专业的事,这可以使企业本身从繁重的IT运维中...

3155
来自专栏大数据挖掘DT机器学习

如何科学地蹭热点:用python爬虫获取热门微博评论并进行情感分析

甩锅の声明 1.本数据节选自新浪热门微博评论,不代表本人任何观点 2.本人不接受任何非技术交流类批评指责(夸我可以) 3.本次分析结果因技术问题存在一定误差(...

9045
来自专栏即时通讯技术

一篇文章get微信开源移动端数据库组件WCDB的一切!

微信团队已于2017年06月09日正式开源了微信自用的移动端数据库组件 WCDB(WeChat Database),详见《[资讯] 微信正式开源移动端数据库组件...

1023
来自专栏Sorrower的专栏

OpenEmu:一个让你在Mac上爽快体验任天堂的模拟器

2823
来自专栏申龙斌的程序人生

搞定GTD - 掌控流程之五:行动

完美的计划而不行动不如没有计划,流程的最后一步就是要马上行动。新的一天开始时,事情和头绪非常多,该干哪一项呢?实际上答案非常简单,相信你的感觉、你的直觉。 在大...

3629
来自专栏Crossin的编程教室

那些年,他们一起用的python

今天去网上搜索了下,有哪些网站或应用使用了python,挑选了其中比较有名的一些在这里分享给大家。这其中有一些是用python进行开发,有一些在部分业务或功能上...

3456
来自专栏Java架构

两个月拿到N个offer,看看我是如何做到的

北京-三年经验-Java,在金三银四这两个月期间(在五月初还去面试了几家,主要是三四月份期面试剧居多),我跳槽面试,前前后后我面试十五家公司,最终,成功拿到了o...

2615
来自专栏jessetalks

初探领域驱动设计(1)为复杂业务而生

概述   领域驱动设计也就是3D(Domain-Driven Design)已经有了10年的历史,我相信很多人或多或少都听说过这个名词,但是有多少人真正懂得如何...

3796
来自专栏腾讯Bugly的专栏

微信iOS收款到账语音提醒开发总结

一、背景 为了解决小商户老板们在频繁交易中不方便核对、确认到账的痛点,产品MM提出了新版本需要支持收款到账语音提醒功能。这篇文章总结了开发过程中遇到的坑和一些小...

4456
来自专栏SDNLAB

SDN技术分享(十):GoogleFiber的宽带接入速率控制解决方案

本次分(zhuang)享(bi)呢,主要探讨一个新兴SP客户的案例。 G家,这是非传统的SP。我们一起来看一下G家的市场策略以及使用的关键技术. 内容比较多,我...

48613

扫码关注云+社区

领取腾讯云代金券