神刀安全网

一场有趣的 TDD 编程之旅

暑假收假上课俩周了,发现自己再不写这篇文章去记录这场有趣的 TDD 编程之旅的话会成为遗憾的,便再次动起了键盘。。
这个暑假,在西邮的计算机学院 IT 实训中心,发生了这么一段有趣的故事。

首先故事起源于 2015 年 ThoughtWorks 公司围绕公司内部的“卓越女生计划”,与西安邮电大学合作创办了西邮卓越女生实验室。当时的纳新宣传海报语着实吸引到了我,大致在说:只招女生,培养女性编程能力,打破编程行业女性不能胜任编程的传统思维。

一分钟了解 ThoughtWorks

确实,回想自己在大一这一年的编程感悟 —— 调 BUG,熬夜,盯电脑。。这些都太苦太累,不自觉的会想到这并不适合柔弱的女生,更别说女生能像男程序员一样有着做出一个产品拯救世界的欲望。但这个宣传语让我重新思考了现实,我们不能一味地觉得别人适不适合什么而干涉,应该由 TA 们自己去决定自己的爱好。

所以呢,这是当时在西邮卓越女生实验室纳新宣传结束,实验室装修竣工后的微信推送,满满的爱。顺便将卓越女生计划的 Logo 保存了起来,分享到这里。

ThoughtWorks 西安邮电大学暑期特训营(2016)报名宣传

一场有趣的 TDD 编程之旅

什么是 TDD

当然要先讲讲 TDD 的概念,这里引用了百度百科对 TDD 的解释:

TDD 是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。

可见一个完整的 TDD 编程过程中,首先要确定好要开发的函数并为该函数起好相应的能够直观反应函数功能的函数名,之后为每个函数编写出“测试代码”。每当一个函数的单元测试编写完成后,再开发真正的“产品代码”,然后运行测试程序,如果测试通过,那么这个”产品代码”也就符合要求,加之以重构来优化代码后,一个模块也就开发完成。

在这里,我们把画出来的函数功能示意图叫做 pipeline 图,把写测试程序直到执行测试的过程叫做 tasking ,从而总结出的基于 pipeline 的 tasking 流程是:画功能图(draw a pipeline) -> 写单元测试(write task) -> 编码(programming) -> 执行测试查看是否完成开发(tasking)。

一场有趣的 TDD 编程之旅

为什么我们要如此之麻烦的去写只有程序员会用到的测试代码,而不只是关注于真正产品中跑的”产品代码”呢?因为软件工程界有这么一段广为流传的名言:

代码是给人看的,只不过偶尔在机器上跑一下。

可见程序员的大部分时间是去看代码,去调试 Bug,去优化代码结构的,”偶尔”运行一下程序验证结果,再次投入到开发中。以测试为驱动的重要性这时就体现了 —— 将程序的缺陷可视化,使缺陷能够降低到最小;对后期的系统集成联调或集成测试和系统测试也会很顺利。

浅谈单元测试的意义

暑假编程之旅开始

07月18日第一天,西邮 IT 实训中心中的一个大教室就坐满了经过一轮在线 JavaScript 技术测试筛选的同学。这个做题系统分“逻辑题”和“编程题”两大模块,由于现在注册已关闭并且通过的同学无法再次看到当时做过的题,这里直接分享整个答题系统的 Github 源代码。

在线 JS 测试系统 — Github 仓库

一场有趣的 TDD 编程之旅
当总结的时候再看这些脸庞便是如此的亲切

且在这次培训中,学校以西邮为主,年级以大三(准大四)为主,性别以女生为主。。

一场有趣的 TDD 编程之旅

一场有趣的 TDD 编程之旅

前四周的学习阶段

正如报名时强调的”高强度训练”、”魔鬼式训练”一样,前四周每天都有新知识要去学,每天都有独特的作业要去做,班内的分组也在不停的变,最终很多同学都互相合作过,气氛融洽。以下列出了前四周学习的一些要点,图文并茂。

  • 最早学到的是 pipeline 的“画图”哲学思想,不止是编程,我们可以将生活中遇到的任何疑难问题去分解成一个个小的可验收的挑战(像“今晚我了解了一点 JavaScript”就是不可验收的,而“今晚我完成了 JavaScript 中用 map 高阶函数实现数字数组的遍历 +1”则是可验收的)。这时,疑难不再是疑难,而是一个个可小步解决的问题。

即使再难的问题也是由小问题堆积的

一场有趣的 TDD 编程之旅
Tasking 图最终很棒的思路逻辑

要带着具体问题去提问,没有具体问题而去提问是没有仔细思考的表现。

  • “逃离舒适区,进入学习区”,老师刚开课就这样说过。经过这一假期从“畏惧英语”到较为熟练的翻阅英文博客和文档;从恐惧新知识害怕遇到新问题到学会化简疑难,步步击破 —— 更让我们了解了“逃离舒适区”的意义。毕竟,留在舒适区只会带来更多的懒惰,进入学习区又不至于让自己到达痛苦区,才是最好的成长状态。
一场有趣的 TDD 编程之旅
逃离舒适区

  • 学会总结和分享 —— 总结是一个能凝聚又能升华思想的过程,而分享是将这份独特的体验带给别人,有时候影响别人就是这么简简单单。正如面对面去讨论去分享一样,把自己的感悟写成文章去传播也更能传递快乐和想法(这也是我为什么一定要抽出时间来写这篇文章的原因所在)。
一场有趣的 TDD 编程之旅
总结 -> 分享

话说,有时觉得总结并分享,也算敏捷开发中持续交付里必不可少的一部分吧。只不过这时候交付的对象就是每一个感兴趣的读者了。

有趣的插曲回忆

破冰游戏

首先是破冰游戏,在我们第一天还不熟知和自己一同来学习的同学时,这个游戏大大缓解了尴尬、拘谨的气氛,将我们快速带到了一个“和谐”的交流状态。

规则是这样的:每两个不认识的人站在一起,一个充当乌鸦,另一个充当乌龟。这时主持游戏的老师会讲一段有关乌鸦和乌龟的故事,当喊道乌鸦时,乌鸦快速合掌,乌龟快速躲闪;当喊道乌龟时,乌龟快速合掌,乌鸦快速躲闪。就看谁被闪避的慢而被拍打的次数多了。游戏过程中由于老师读故事的语速忽快忽慢我们的心情还是挺波动的。

在女生很多我们男生很少的情况下,我还是随机到了一个大三学长,玩游戏的过程中了解到他熟识我熟识的一个学长,还不算太尴尬。遗憾的是,下午还是第二天他就退出特训了。可能并不是所有程序员都喜欢“敏捷开发”这样及时交流的“编程社交气氛”吧。

快捷键竹签

第二个插曲回忆是为期好几周的每天早上,由一个去年经过相同培训而入职的可爱学姐准时让我们抽竹签,每个竹签上都是一个 WebStorm 上的快捷键中文简介,我们要说出自己竹签上快捷键简介对应的具体快捷键,说不出来就把这个快捷键回去抄 50 遍。。当时觉得挺恐怖的,要背那么多快捷键,回首发现惩罚的确不是目的,能记住快捷键的重要性并切身实践才是我们学习到的。况且还能化成对学姐的回忆呢(开课四周后学姐就去印度了)。。

一场有趣的 TDD 编程之旅
少年,不如来抽只签吧!

刚说到学姐去印度,是因为 ThoughtWorks 公司会把全球11个国家每一位校招来的毕业生送到印度 ThoughtWorks University 体验不一样的软件工程开发经历,同时也是 ThoughtWorks 公司凝聚全球分部团结力的一项重要“牵手线”。恰好写文的最近 ThoughtWorks 校园招聘推出了一篇文章,让自己心动不已:

我要去印度参加一场精神与世界的狂欢!

邮编转换条码

最早的四周学习阶段便是围绕“邮编转换条码”系统作为练手项目,同时贯彻了基于 pipeline 的 tasking 方法的整个过程。这里是老师设计出的转换图。最终的功能是能够通过 api 请求从前端想后端发送邮编返回相应条码或发送条码返回相应邮编。

邮编转换条码 — Github 仓库

一场有趣的 TDD 编程之旅
邮编转换条码的设计图

团队共同学习

第三个学习到的便是和团队一起解决一个全新的知识点 —— 用 5W2H 七何分析法先去拆解难点,再将每一个知识点分配个组内成员,尽可能一个知识点有两位成员,让这两位成员可以互相探讨,结对编程。最终在规定探讨时间之后组内统一总结,分享,提问。

这次培训我们用到的是 Trello ,当时火热的讨论情况从下图便能看到端倪。

一场有趣的 TDD 编程之旅
原来再难的知识也可以这么拆解下去

红与黑的游戏

红与黑的游戏一生只有一次,而我们将这”唯依”一次奉献到了这里。

当然由于这个游戏的独特性,说出来规则只能让没有参与过的读者失去那唯一的一次“人生体验”,但是将当时两个组的“相爱相杀”过程实例化成有趣的图是可以分享出来的~大体每个人都会在这个游戏中找到自己的人生定位和人生感悟吧。

一场有趣的 TDD 编程之旅
红与黑的游戏一生“唯依” (:ェ 」∠)

软件项目实训

最后两周的项目实训阶段用到了前四周所学的一切,所学的一切,所学的一切。从编程语言到软件工程思想再到团队合作,实训阶段每一点的实践都是对当时学习阶段的检验。好在有团队的存在,我们每个人的不足之处都能及时在每天早上的站会和交流中暴露出来,团队的成员就能快速帮助对方,高效协作地开发。

首先放出自己绘制的脑图(发现已经深深的爱上了用脑图去思考),整理了这个暑假学到的知识点,不只是编程,还包括文化和名言~

一场有趣的 TDD 编程之旅
ThoughtWorks 西邮暑期培训要点

学到了很多是吧,当绘制这幅脑图时也用了不是很长的时间,却再每次回首后收获满满。

实训开始重新分组,每个新小组组内想出一个项目灵感,去说服作为投资人的老师。我们组组内想到了两个灵感 ——我的 “社团(纳新)管理网站系统”和学姐的一个“在线点餐网站系统”不分上下,却在和“投资人”商谈的过程中发现每一个灵感都有自己的不足,最终选择了另一位组员酝酿很久但之前没有提出来的“唯依蛋糕网站系统”。

唯依蛋糕网站系统的初衷很有趣,每一个用户在这个网站上只能实名绑定另一位用户,一生只能给对方一个人买“唯依”蛋糕(一年只能买一次),可以随时分享心情。这个灵感的品牌文化理念很独特,对于那些分手,离婚的用户是一个不小的“否定”,更能用一种文化理念感染每个人的爱情观。对于卖方来说,配送独特富有内涵的蛋糕也平添一份情义。“面向中高端用户”,我们如是说。

于是我们组用脑图的观念快速设计出了“唯依”网站的几大核心要点,从技术页面布局到商业用户痛点。

一场有趣的 TDD 编程之旅
最初的唯依网站设计灵感

最初的想法很美好,但毕竟两周的时间我们做不了太多的功能,再加上“唯依”的会员制度、认证体系等等功能很费时间,我们最终做出的其实是 —— 在线卖蛋糕系统。。这里放出组内做的 React 页面的概要布局。

一场有趣的 TDD 编程之旅

而这两周的团队合作中,每个团队都继续使用 Trello 进行项目推进,贯彻落实了敏捷开发、结对编程的思想。每完成一个用户故事卡,就能在老师(投资人)那里领取15万,而每天由于“假想的”日常工资、水电费要扣除25万元,甚是紧张 —— 毕竟我们每个小组刚开始都是做不出卡片的,一百万多的初始资金很快就变成六位数了。

一场有趣的 TDD 编程之旅
一张用户故事卡价值 15 w。。

暑假就要结束了,培训也要结课了,在我们对整个暑假对自己和老师和培训方式等等的回忆中,更多的是 Well,就算有 Suggestion ,也是希望这种培训能多办,多去影响更多的人~

一场有趣的 TDD 编程之旅
倒数第二天对这个假期的回顾中,更多的 Well!

而我们这个暑假的喜怒哀乐都集中在了。。WebStorm 界面中:

一场有趣的 TDD 编程之旅
喜怒哀乐的聚集地。。 —— WebStorm

来看看图吧,尽在不言中

一场有趣的 TDD 编程之旅

一场有趣的 TDD 编程之旅

一场有趣的 TDD 编程之旅
猜猜哪个是我嘿

结营,写文写仓库留念

故事永远会结束,而记忆不会。为了不让自己忘记经历的,足以改变自己人生的这一切,除了这篇文章外,也放到了 Github 仓库中,有兴趣的不要忘记点赞(Star)或克隆(Clone)哦~

ThoughtWorks西邮暑期培训训练集 — Github 仓库

一场有趣的 TDD 编程之旅

合影中女生很多,而对于女性适不适合编程的看法,可以用我看到的这一句形容:

她们并不知道她们不喜欢电脑

一场有趣的 TDD 编程之旅
那就进去点 Star 吧!

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 一场有趣的 TDD 编程之旅

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址