热门标签 | 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限时扫码,一顿饭钱,就能真的提高开发效率,为自己买单。

推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 【MEGA DEAL】Ruby on Rails编码训练营(97%折扣)限时特惠!
    本文介绍了JCG Deals商店提供的Ruby on Rails编码训练营的超值优惠活动,现在只需29美元即可获得,原价为$1,296。Ruby on Rails是一种用于Web开发的编程语言,即使没有编程或网页设计经验,也能在几分钟内构建专业的网站。该训练营共有6门课程,包括使用Ruby on Rails进行BDD的课程,使用RSpec 3和Capybara等。限时特惠,机会难得,赶快行动吧! ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
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社区 版权所有