热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

任务分解单元测试小步快走,提高开发效率常用的几种方法

先打个招呼,我要介绍一个老朋友,熊节。介绍他的重要原因是,从“大学肄业”到ThoughtWorks总监咨询师,从业18年&#


先打个招呼,我要介绍一个老朋友,熊节。


640?wx_fmt=png介绍他的重要原因是,从“大学肄业”到ThoughtWorks总监咨询师,从业18年,他倡导的敏捷开发影响了包括我在内的一代程序员。 什么才是程序员的核心竞争力?如何提高开发效率?熊节原创,2800字,强烈安利给工作8年以下的程序员:
我是IT界“过气网红”熊节,03年我翻译了《重构》,10年2次改版,卖了80多万本。后来我进ThoughtWorks,做到总监咨询师,主导了华为、中兴的敏捷开发转型。
640?wx_fmt=png
当年我们开发一款安卓APP,用测试驱动开发的方式,不需要真机、不需要模拟器,在 JVM 上直接跑,180秒跑完 2000+个测试用例,平均每0.09秒跑一个,我们下班回家老婆孩子热炕头时隔壁的大哥们还在写Bug。  这个事情发生在2014年,也让我有了一个新思考,由2个问题构成, 第一,站在个人角度,对一个程序员来讲,996也好、职业发展也好,核心问题到底是什么? 第二,站在企业角度,为什么像华为中兴这样的大厂,给ThoughtWorks千万级预算,做敏捷开转型? 第一个问题,我觉得核心解是开发效率。 带过百人团队,熟悉我的人知道我关心的只有开发效率,方法方式是否smart,都是为开发效率服务。行的上、不行的原地踏步或者离开,这是我一直奉行的标准。 看的人多、时间长就能发现规律,1-3年求发展,3-5年求跳槽,5年以上求破瓶颈。


第二个问题我想把企业和人放在一起讲, 我不知道这些场景有多少人遇到:1.拿到一个需求,琢磨半天想不明白如何分解,不知道怎么下手;
2.一开始代码没测试,上线后,经常半夜被抓来处理问题,不要问我代码有没有坑,我自己也不知道;3.项目即将上线,又测出一堆bug,团队连夜加班修,bug越修越多,修到天亮都还没一个靠谱版本;4.新功能要改动一块老代码,不敢轻易下手改,每做点修改都很害怕。


以上无限循环。


640?wx_fmt=png
这些问题的本质是——我见过的国内80%的程序员都在凭本能在工作。
 开发效率低,要么低在需求上,要么低在质量上。这个意思能理解吗?1.对需求把握不准确,做出来的功能不是客户想要的,必然导致返工。2.质量缺乏保障,添加新功能就破坏了旧功能,必然导致返工。两个问题搞定不了,就注定会长期陷入低质量、大量返工的焦油坑。 80%的人凭本能工作,这个事怎么解决?我亲身验证的方法是用测试驱动开发(TDD)。 TDD的核心在于严格规定开发节奏:没有失败的单元测试就不能写功能代码。


他的逻辑是一次把需求理清,一次做对、消除返工,不用调试就能获得反馈,节省出的时间远大于编写测试代码而产生的工作量总和。


唯一的不爽,这是一个找虐的过程,他迫使你稳定小步前进,所以每一步都必须先想好要达到什么效果,每一步都有充分的测试覆盖。


里边三个步骤第一步任务分解:测试先行,从需求中分离关注点,然后用实例描述需求,用单元测试表达;第二步单元测试:遵循 Given-When-Then 三段式,符合极限编程原则;第三步小步快走:此处的坑在于,很多人容易一下写多,导致后面编写的用例直接就能通过,破坏了 TDD 节奏。 掌握了TDD方法,就能解决开发中的三个老大难:第一,准确把握需求,开发出来的功能一定是客户想要的;第二,保障软件质量,开发出来的代码一定是有自动化测试覆盖的。第三,通过反复训练提高开发速度与代码准确率。 如果你是工作1-3年的新人,想脱颖而出不走弯路,一定要在一开始就学会更高效的编程心法,获得更快成长曲线;如果你是工作3-5年的老鸟,想寻求技术突破,跳槽一线大厂或求职业晋升,掌握TDD就是你能拿出手和别人竞争的差异点;如果你是技术leader,想整体提高团队编程效率,这套华为、中兴掏了千万预算才换回的敏捷开发方法,大概率也适合你。


【熊节的测试驱动开发实战营】
从8月8号开始,我会和极客学院一起,把在ThoughtWorks工作13年的经验倾囊相授、亲自带队,训练出一支能在工作中熟练应用TDD的优秀团队,目标是提高40%开发效率。


参照第一期实战营结果,你的预期收益是:1.可应用到工作的测试驱动开发方法;2.完成3个项目,共计12个任务训练;3.精准框定需求&练会单元测试功能代码;4.学会重构,减少修改bug时间;5.练会测试驱动开发 提高40%工作效率。 
相比常见的线上课程,我会为结果负责,偏重训练,完成从知道到会做的阶段。 以项目“Args”为例。这个题目的复杂度跟日常开发时会接到的一个划分细致、描述清晰的需求大致相当。


640?wx_fmt=png任务六:代码“臭”不“臭”正常完成这个任务的时间是4到5小时,在6月第一期学员里,这个时间是55分钟,并且实现了100%单元测试覆盖。


给你们看看第一期学员的被虐心得(内容均来自学员打卡 后有截图),他们当中有新手也有老鸟:


“最大的收获是学习了TDD编程思维,先确立目标再行动,而且行动要一步步快速迭代,确保质量。另外就是了解carbon代码分享为图片这个开源项目,学习了idea的各种快捷键。还了解到了codingdojo这种编程方式,希望能一直坚持下去,不断提高效率(◔◡◔)”


640?wx_fmt=jpeg——小白


“FizzBuzz练了大概15遍左右,最后控制在10min内,重新拆解细分后,敲代码时确实更清晰,体会:子任务的拆解很有用,第一次比较粗粒度,第二次梳理了类关系,还要继续练。”


640?wx_fmt=png
——Paige


“终于做完了最后一题,自我觉得可读性可以了,总结一下收获:1. 编码节奏和思路更清晰了,原来想很久才敢动手,现在5分钟提交一次,而且有单元测试保证,根本不用担心出错。2. 对任务的拆分有了更深刻的理解,真正落实成一行行测试。拆分了需求以后,保证了每一步都很小,同时也保证功能很单一,很难出现那种动不动几十行并且逻辑很复杂的代码。3. 有了单元测试保证,下一步追求更简洁,可读性更高的代码。感觉这么多天没有白练,编码能力有了很大的进步,感谢这个训练营,拯救了一个以为会写代码的我,以后会在工作中更多的尝试TDD,估计这辈子都离不开它了。”640?wx_fmt=png——林泽欢


“一份需要重构重构再重构的作业,已经基本掌握并熟练使用TDD的节奏,接下来就是学会如何写出舒服的代码!!!继续Kata!!”
——斜杠工程师


“从刚开始的蠢蠢欲动再到持之以恒,确实学到了很多东西,框定需求,识别坏代码,测试先性,marse rover时间花的比较多,代码里还充斥着switch,加强重构。”
——阿贵


“1. 去除重复代码  2. 分割常量抽取  3. 函数替换循环  不断优化,不断改进!”640?wx_fmt=png——陈宇明


“熊老师,我要给你生猴子!”——某不知名男学员


640?wx_fmt=png学员打卡&作业点评记录


事实上,如果不是一对一的电话调研,我很难相信第一期的同学里有这么多高手——·     前百度教育事业部高级Java工程师 陆羽·     极客学院技术总负责人 Kevin·     学而思web开发工程师  李坤·     小米金融高级前端工程师 李志明·     华为高级 C++开发工程师  孟广明·     飞羽科技有限公司CTO 小白·     支付宝小程序  高级Python工程师秋叶·     阿里巴巴-java工程师  李若舟·     拉勾网Python工程师-zhangwl·     ……640?wx_fmt=jpeg通过考核由极客学院颁发证书 
除此之外我们还邀请了华为、ThoughtWorks、腾讯、阿里巴巴的HR驻场,为优秀学员提供内推机会。 目标:①完成全部任务,反复训练,练会驱动测试开发(TDD)②获得能应用到工作的驱动测试开发技能&经验③肉眼可见的大幅度提高编程效率


第二期8月8日正式开营,我会把你绑定在极客学院官网学习系统,系统内有图文、视频教学,需要提交作业,需要依次解锁12个任务。你可以根据自己的实际情况灵活安排学习时间,我全程会在微信群内伴随大家,有班主任负责监督打卡,所有直播均可回放。 根据第一期经验,你完成全部任务预计需要21天。学习有效期1年,支持随时反复观看。


只要您具备初级开发基础,无论您从事的是前端还是后端开发都可以报名,以下是具体内容:


640?wx_fmt=png


640?wx_fmt=png稳定的步伐才能带来长期效益。这也是ThoughtWorks、Google、Facebook、eBay、Pivotal、华为、腾讯、阿里大厂越来越重视敏捷开发,把相关考题放进面试的本质原因。


如你所见,这是一套可以真正落地实操的课程。你的代价是99元,和一起投入训练的宝贵时间,你将和来自各大IT公司的中高层开发者一起,共同成长,你的选择将让你成为未来中国互联网的中坚力量!
640?wx_fmt=png往期线下聚会 你能找到我吗?


不管你是工作1-3年的新人,3-5年的进阶开发者,还是技术leader,你都能通过实战营训练大幅度提高开发效率,尽早加入高手行列,获得更多青睐和更高薪资。
 第二期我希望人数控制在1000人以内,尤其是对刚入行1-3年的新人,我今年40岁,你们还年轻,只有当你真正经过训练,成为更有价值的程序员时,才会真正理解我现在说的话。


限时报名参加1.   直播+项目+答疑+训练,【TDD训练营】限时优惠99 ¥,原价 ¥129。
2.   8月8号开营,限时优惠,扫码海报立即购买。


640?wx_fmt=jpeg限时扫码,一顿饭钱,就能真的提高开发效率,为自己买单。

推荐阅读
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 如何撰写初级和高级前端开发者的专业简历
    如何撰写初级和高级前端开发者的专业简历 ... [详细]
  • 观察 | 求职体验:收到录用通知的公司通常不深究技术细节,而那些详细追问的公司往往没有后续进展
    观察 | 求职体验:收到录用通知的公司通常不深究技术细节,而那些详细追问的公司往往没有后续进展 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 作为国内首家专注于小顺序范畴的后端云效劳,晓得云正式开启3.0设计——全平台Serverless效劳。「晓得云」cloud.minapp.com,诞生于2017年8月8日,是国内第 ... [详细]
  • uniapp 框架简介和生命周期
    介绍:uni-app使用vue的语法小程序的标签和API。也就是和这些语法同样作用的框架.生命周期,分为应用生命周期和页面生命周期,和小程序的基本一致.流程开发规范为了实现多 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
  • 文|Tech星球(微信ID:tech618)尹非凡一位微信的产品经理告诉Tech星球,据传,在小程序刚做出来的时候,张小龙认 ... [详细]
author-avatar
天边的云YEAH_988
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有