前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Story 场景树; 锻练开发人员 “简单设计” 的思维力

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

原创
作者头像
Ken Fang 方俊贤
发布于 2018-04-21 02:51:28
发布于 2018-04-21 02:51:28
1.7K0
举报

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

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

简单设计能指导开发, 指的是: 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.假如, 没完成, 真正的问题是什么? 该寻求什么样的协助?

结论:

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

永远只会用手写代码的开发人员, 产生的代码从一出生 (第一个版本), 就发育不全 (缺陷百出)。毫无疑问的, 随著时间的推移, 病只会越来越重 (缺陷、失败越来越多) 。

将能锻炼 “简单设计思维” 的方法、工程实践, 放在永远只会用手写代码的开发人员的面前时, 所会发生的场景, 就宛如是图二中, 那位拉车的…

拉车的永远说...我很忙。

拉车的永远说...先证明轮子对我是有价值的,我才会考虑用轮子。

拉车的永远说...我现在牛逼的很,为什么要用轮子?

[图二: 拉车的: 我很忙…]

人生是选择题, 不是是非題; 做出什么样的选择? 便过著怎么样的人生; 产出什么样的代码。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
软件开发的过程中, 一定需要简单设计?
Ken Fang 方俊贤
2018/01/05
5760
软件开发的过程中, 一定需要简单设计?
“产品级敏捷” 的这条路; 逐步的形成一高效的产品开发生态系统
2015. 7.1, 我在杭州…. 这一路走来真的是相当的不容易; 这一周多来, 大夥跟著我这个 “疯子顾问”, 经历了不停的交流,辩论, 实践, 验证, 深度思考◦ 终于, 踏上了产品级敏捷的这条路
Ken Fang 方俊贤
2018/01/05
9780
“产品级敏捷” 的这条路;  逐步的形成一高效的产品开发生态系统
敏捷开发下的软件架构设计与持续优化
《敏捷开发下的软件架构设计与持续优化》一文主要讲述了在敏捷开发中,如何通过可视化、轻量级的“场景树”和可持续优化产品代码(架构)的平台,实现软件架构设计和持续优化的方法。强调了团队间的协作、用户需求映射到软件架构的重要性,以及通过单元测试发现并优化软件架构缺陷的价值。
Ken Fang 方俊贤
2018/01/05
8530
精益敏捷开发: 轻量级度量
本文阐述了精益敏捷开发中的轻量级度量方法,通过测试用例先行和逐步提升效率两个维度来驱动团队在开发过程中兼顾效率和质量。同时,通过平均等待时间这一指标来衡量开发效率和质量,以指导项目经理进一步优化开发流程和团队管理。
Ken Fang 方俊贤
2018/01/04
1.1K0
嵌入式软件测试笔记5 | 开发人员需要做哪些测试?
虫无涯
2023/06/15
2430
敏捷开发下, 如何将需求分析,架构(软件)设计,开发与测试,一气呵成式的结合且高效的完成 ?
敏捷开发下,如何将需求分析、架构(软件)设计、开发与测试一气呵成式的结合且高效的完成?通过场景树这一轻量级的实践,可以确认开发人员是否真有能力将用户的需求转化为可执行的代码,并确认了开发人员已有清晰的思路,知道如何将需求转化为可执行且可测试的代码。另一方面,场景树可以使开发人员轻松且直接的完成User Story设计模式的选定、中的实体与值对象设计以及测试用例纬度与测试数据的设计。
Ken Fang 方俊贤
2018/01/04
1K0
敏捷开发下, 如何将需求分析,架构(软件)设计,开发与测试,一气呵成式的结合且高效的完成 ?
如何通过3个简单步骤成为高级开发人员
来自Dev的德国程序员透露:在过去的 12 个月里,帮助了 80 多名开发人员实施了一个更有效的提高技能的策略,让他们对自己的技术能力充满信心,更快地晋升到高级职位,并获得更多收入:
用户8949263
2022/04/08
3240
产品级敏捷
2017.3.4, 深圳, Ken Fang 前言: 产品开发最危险的一件事便是: 开发人员往往是在无知的情况下, 写代码。 产品开发最不可思议的一件事便是: 开发人员开发汽车; 测试人员
Ken Fang 方俊贤
2018/01/05
1.2K0
产品级敏捷
Cloud Native-产品级敏捷 2.0: 打造服务化的架构, 使得产品能随著时间、版本的演进, 而能不断的提升其价值与对用户正面的影响力
Ken Fang 方俊贤
2018/01/05
6840
Cloud Native-产品级敏捷 2.0: 打造服务化的架构, 使得产品能随著时间、版本的演进, 而能不断的提升其价值与对用户正面的影响力
敏捷开发真正的重点不是 User Story 的拆分, 而是开发人员的能力
谈到敏捷开发, 许多人纠结的第一个问题便是: User Story 如何的划分? 更有不少人, 一遇到在 User Story 上有延迟交付或交付的质量不佳时, 便说是因为 User Story 的拆
Ken Fang 方俊贤
2018/01/05
1.3K0
微服务架构设计 第六步: 微服务的 User Stories 的分析、设计与定义完成
《微服务架构设计》第六步:微服务的UserStory的分析和定义
Ken Fang 方俊贤
2018/01/05
1.1K0
微服务架构设计 第六步: 微服务的 User Stories 的分析、设计与定义完成
[译] 如何成为一名优秀的初级开发人员
回想起来,我仍然记得成为初级开发人员的第一天,走过灯火通明的小隔间,脑袋里塞满了SAP、算法、数据结构、SQL和C++,甚至知识管理和项目管理等更广泛的主题。我拥有所有的知识,而我唯一没有的就是有信心在需要的地方使用这些知识。
云水木石
2020/02/18
3720
开发人员为什么要写测试用例?
作为一名开发人员,你可能会发现周围的开发并不太喜欢写测试用例,甚至有些同学根本不写测试用例,认为写测试用例完全是浪费时间,或者是测试用例只是测试的事情。
程序员小航
2023/02/16
6000
开发人员为什么要写测试用例?
软件开发的简单设计观
很多时候,人们习惯把“简单”跟“容易”理解成一个意思。简单和复杂多用于形容事物或人的属性或状态,容易和困难一般形容达到某种目标的过程。生活中经常听到这样的感慨:「人活简单点真难啊!」、「系统一不小心就搞复杂了」。这些感慨背后流露出一种心愿 -- 保持简单。
ThoughtWorks
2024/03/07
1310
软件开发的简单设计观
微服务产品级敏捷设计的初衷
微服务产品级敏捷设计,旨在将敏捷开发与软件工程无缝结合,使团队能够持续改进,并致力于打造一个永远幸福的团队文化与永远世界第一的产品。通过将开发与测试人员视为快速交付版本的工具,鼓励他们持续改进并遵循客户至上的原则。微服务产品级敏捷设计将团队和产品的价值追求与交付速度完美结合,实现快速交付和持续改善,从而充分发挥软件工程以及敏捷开发的优势。
Ken Fang 方俊贤
2018/01/05
8270
微服务产品级敏捷设计的初衷
当团队所有的开发人员都能按照 User Story 所估算的人天交付时, 是不是就能保证版本交付的质量?
当团队所有的开发人员都能按照User Story所估算的人天交付时, 是不是就能保证版本交付的质量? 答案有时是否定的。因为开发人员只是将能在User Story所估算的人天内能提交代码当成是自身唯一的工作,所以普遍常见的情况便是:一个User Story估算需8人天,开发人员往往是先东晃晃,西玩玩个6、7天,等到最后一刻再提交代码,应付了事。同时,团队在管理上也存在问题,因为团队的Team Backlog往往看不到“技术债务”与“自我学习”的working items,只看得到各方的扯皮,看不到一丝的专业。因此,别再只是按照敏捷的教科书,将User Story所估算的人天当成是“绝对值”。这样的作法至多只是使开发人员在毫无目标的情况下,做到时间管理,准时提交代码;却往往是提交一堆问题单的代码。开发人员与测试人员能自主的协作和使开发人员做好“目标管理”,而不是时间管理,才能使开发人员,开发的效率与提交代码的质量获得明显的提升。
Ken Fang 方俊贤
2018/01/05
4920
CMMi, RUP (Rational Unified Process)与产品级敏捷在工程实践上有何不同?
本文对比了CMMi, RUP 和产品级敏捷在工程实践上的不同。CMMi和RUP着重于“垂直型”的专业分工,而产品级敏捷则关注“水平型”的专业协作。CMMi和RUP的工程实践往往不需要考虑彼此之间的组合,而产品级敏捷则强调将不同的软件工程实践与程序语言(框架)进行组合,以使团队中的不同角色可以共同协作。产品级敏捷的每个实践背后都有业界认可的各种工程实践和程序语言(框架)作支撑,并且每个实践都支撑不同角色、不同地域的扁平化的高度团队协作。
Ken Fang 方俊贤
2018/01/05
8160
软件测试人员每天的工作日常
王豆豆现在每天9点左右从家里出发,9点半左右到公司,到公司之后王豆豆首先用养生壶煮一壶好茶,工作忙碌时也要记得多喝水,然后一边听着煮茶声一边写着当天的工作计划,工作计划主要包括当天工作内容、学习计划和总结。 计划并不是每天都能完成,在工作结束之后根据实际完成内容标注和总结,同时写当天遇到的问题,方便第二天跟踪,写工作计划的好处就是可以随时查询每天都做了什么,这些是每天的固定的工作内容,软件测试人员每天的工作内容会根据项目的实际情况而有所不同。 王豆豆今天就以测试阶段分析一下软件测试人员每天基本工作内容,总的
王豆豆
2018/06/08
1.4K1
优秀软件开发人员的态度
软件开发是一门艺术,而不仅仅是一门科学。您可以了解软件开发的所有技术细节,但您需要对编码充满热情,并将其视为一种非常擅长的艺术。如果你是这样的人,我将向你介绍成为“伟大的开发者”的旅程。伟大的开发者的目标,就像我给他/她所说的那样,是让他/她的艺术尽可能美丽,并使其成为最好的。
FunTester
2019/09/17
8830
关于敏捷开发的26个心得
  我收集各式各样的至理名言。最近我一直在研究敏捷软件开发;有收获吗?下面就是能够指导敏捷软件开发团队的26条核心原则。 用例一完全能够运行后再开发用例二。厨房里有一种说法正好可以印证这个问题:“做好一盘菜后你再做下一盘”. 对于软件开发来说一个最大的问题就是人们喜欢并行开发多个任务。因为不可避免的,我们设计的功能中总会有一部分会被放弃砍掉,如果提前开发,很可能做无用功。 一次只开发一个用例(或很少几个用例,这根据你的开发团队的大小而定);让这个用例功能完整; 让相应的测试用例都能通过;相应的文稳都补齐;
用户1289394
2018/02/28
7770
推荐阅读
相关推荐
软件开发的过程中, 一定需要简单设计?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档