通过github提升自己-测试反馈、持续精进

如果我们仅仅是将自己的代码commitpush到github上,那么对于我们的技术不会有太多的提升。我们所做的仅仅只是将github当成了我们的网盘。

我们每发布一个版本的时候,是不是也就意味着给用户一个新的版本——持续交付。

敏捷软件开发

显然我是在扯淡,这和敏捷软件开发没有什么关系。不过我也不知道瀑布流是怎样的。说说我所知道的一个项目的组成吧:

  • 看板式管理应用程序(如trello,简单地说就是管理软件功能)
  • CI(持续集成)
  • 测试覆盖率
  • 代码质量(code smell)

对于一个不是远程的团队(如只有一个人的项目) 来说,Trello、Jenkin、Jira不是必需的:

你存在,我深深的脑海里

当只有一个人的时候,你只需要明确知道自己想要什么就够了。我们还需要的是CI、测试,以来提升代码的质量。

测试

通常我们都会找Document,如果没有的话,你会找什么?看源代码,还是看测试?

it("specifying response when you need it", function (done) {
    var doneFn = jasmine.createSpy("success");

    lettuce.get(‘/some/cool/url‘, function (result) {
        expect(result).toEqual("awesome response");
        done();
    });

    expect(jasmine.Ajax.requests.mostRecent().url).toBe(‘/some/cool/url‘);
    expect(doneFn).not.toHaveBeenCalled();

    jasmine.Ajax.requests.mostRecent().respondWith({
        "status": 200,
        "contentType": ‘text/plain‘,
        "responseText": ‘awesome response‘
    });
});

代码来源: https://github.com/phodal/lettuce

上面的测试用例,清清楚楚地写明了用法,虽然写得有点扯。

等等,测试是用来干什么的。那么,先说说我为什么会想去写测试吧:

  • 我不希望每次做完一个个新功能的时候,再手动地去测试一个个功能。(自动化测试)
  • 我不希望在重构的时候发现破坏了原来的功能,而我还一无所知。
  • 我不敢push代码,因为我没有把握。

虽然,我不是TDD的死忠,测试的目的是保证功能正常,TDD没法让我们写出质量更高的代码。但是有时TDD是不错的,可以让我们写出逻辑更简单地代码。

也许你已经知道了SeleniumJasmineCucumber等等的框架,看到过类似于下面的测试

 Ajax
   ? specifying response when you need it
   ? specifying html when you need it
   ? should be post to some where
 Class
   ? respects instanceof
   ? inherits methods (also super)
   ? extend methods
 Effect
   ? should be able fadein elements
   ? should be able fadeout elements

代码来源: https://github.com/phodal/lettuce

看上去似乎每个测试都很小,不过补完每一个测试之后我们就得到了测试覆盖率

File Statements Branches Functions Lines
lettuce.js 98.58% (209 / 212) 82.98%(78 / 94) 100.00% (54 / 54) 98.58% (209 / 212)

本地测试都通过了,于是我们添加了Travis-CI来跑我们的测试

CI

虽然node.js不算是一门语言,但是因为我们用的node,下面的是一个简单的.travis.yml示例:

language: node_js
node_js:
    - "0.10"notifications:
    email: falsebefore_install: npm install -g grunt-cli
install: npm install
after_success: CODECLIMATE_REPO_TOKEN=321480822fc37deb0de70a11931b4cb6a2a3cc411680e8f4569936ac8ffbb0ab codeclimate < coverage/lcov.info

代码来源: https://github.com/phodal/lettuce

我们把这些集成到README.md之后,就有了之前那张图。

CI对于一个开发者在不同城市开发同一项目上来说是很重要的,这意味着当你添加的部分功能有测试覆盖的时候,项目代码会更加强壮。

代码质量

jslint这类的工具,只能保证代码在语法上是正确的,但是不能保证你写了一堆bad smell的代码。

  • 重复代码
  • 过长的函数
  • 等等

Code Climate是一个与github集成的工具,我们不仅仅可以看到测试覆盖率,还有代码质量。

先看看上面的ajax类:

Lettuce.get = function (url, callback) {
    Lettuce.send(url, ‘GET‘, callback);
};

Lettuce.send = function (url, method, callback, data) {
    data = data || null;
    var request = new XMLHttpRequest();
    if (callback instanceof Function) {
        request.onreadystatechange = function () {
            if (request.readyState === 4 && (request.status === 200 || request.status === 0)) {
                callback(request.responseText);
            }
        };
    }
    request.open(method, url, true);
    if (data instanceof Object) {
        data = JSON.stringify(data);
        request.setRequestHeader(‘Content-Type‘, ‘application/json‘);
    }
    request.setRequestHeader(‘X-Requested-With‘, ‘XMLHttpRequest‘);
    request.send(data);
};

代码来源: https://github.com/phodal/lettuce

Code Climate在出现了一堆问题

  • Missing "use strict" statement. (Line 2)
  • Missing "use strict" statement. (Line 14)
  • ‘Lettuce‘ is not defined. (Line 5)

而这些都是小问题啦,有时可能会有

  • Similar code found in two :expression_statement nodes (mass = 86)

这就意味着我们可以对上面的代码进行重构,他们是重复的代码。

重构

不想在这里说太多关于重构的东西,可以参考Martin Flower的《重构》一书去多了解一些重构的细节。

这时想说的是,只有代码被测试覆盖住了,那么才能保证重构的过程没有出错。

如何通过github提升

上面所说的只是一堆堆地工具,以及一堆堆的方法,真正需要的是实践。

我们需要有测试,有CI,这样我们才能提高自己。

来源: https://www.phodal.com/blog/use-github-grow-self/

来自为知笔记(Wiz)

时间: 2024-10-23 16:58:26

通过github提升自己-测试反馈、持续精进的相关文章

围绕效率提升,测试可以做什么?

大部分的研发经理心中,进度是第一位的,其次是成本,最后是质量,当然人员队伍最好稳定.天下武功,唯快不破:进度 > 成本 > 质量 > 人. 围绕效率提升,测试可以做什么?你脑海里跳出来的,应该是"自动化"或者"敏捷"吧,没错,自动化和敏捷都可以帮助提升研发效率,但是并不是只要做了都有这个作用. 下面来看看测试支持效率提升的不同段位. 一段:提升测试效率. 提升测试的效率,最有效的手段是制定测试策略.对,你没有看错,是测试策略而不是自动化! 测试策略

shell 常用文件、字符串、二元整数测试操作符-持续更新中

常用的文件测试操作符-持续更新中 -e--exist 文件存在为真 -f--file 文件存在且为普通文件为真 -d--directory 文件存在且为目录为真 -s--size 文件存在且大小不为零为真 -r--read 文件存在且可读为真 -w--write 文件存在且可写为真 -x--executable 文件存在且可执行为真 -L--link 文件存在且为链接文件则为真 f1 -nt f2--new than f1比f2新则为真 f1 -ot f2--old than f1比f2旧则为真

GHUnit使用指南(翻译自GitHub)-IOS测试框架

Installing in iOS (Xcode 5) 1:首先你要有一个项目.LOL 2:添加一个新的测试target.(关于Target是什么,请参考我的另外一篇文章)最新版Xcode 将Add Target放在顶部栏 3:选择新的target的类型 4:将GHUnit框架放到新建的target中 5:打开Objective-C categories,因为我们新建的Target默认是没有打开的,如果是原本就有的Target的话,默认是打开的.使用-ObjC打开 6:删除原有的文件 7:将ma

[课程设计]Scrum 1. 9 多鱼点餐系统开发进度(最后页面完善&amp;修复BUG&amp;用户测试反馈)

[课程设计]Scrum 1. 9 多鱼点餐系统开发进度(最后页面完善&修复BUG&用户测试) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统WEB 5.Sprint 1时间:11.14-11.23 重案组成员   姓名 学号 博客链接 Github链接 队长 黄冠锋 201406114134 http://www.cnblogs.com/hgf520/ https://github.com/crow

“ThinkSNS+”内测启动 参与测试 反馈bug 赢粉丝福利!

4月20日V1.0阶段的APP将启动内部测试,并于每周四更新,邀请大家参与产品测试! 产品研发优化阶段,为打造更好的社群软件系统,优化产品体验,为企业和创业者奠定研发基石,我们将积极汲取来自用户和市场的反馈建议! 找出bug和优化建议,发送至官方邮箱[email protected]将有机会获得官方粉丝福利: 免费插件源码,技术服务,更有现金抽奖,二次开发优惠,等着大家.详情请询028-82884828,期待您的参与! 内测申请方式 提供个人/企业联系方式及认证信息(实名ID/企业营业执照照片或

SoapUI实践:自动化测试、压力测试、持续集成

因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api.下面将研究的成果展示给大家,希望对需要的人有所帮助. SoapUI 是什么? SoapUI 是一个开源测试工具,通过 soap/http 来检查.调用.实现 Web Service 的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到 Eclipse,maven2.X,Netbeans 和 intellij 中使用. SoapUI 的安装 下载地址,最好下载最新版本安装包,因为 So

如何高效利用github提升自己

作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户,是开发者打开程序开源大门的一扇窗口,也是开发者快速提升自己的一个重要途径.本文将从两个方面介绍github的使用方式. 和逛微博.朋友圈.空间一样逛github 你在空闲时间逛微博.朋友圈.空间,人家没事的时候逛GitHub ,看看最近有哪些流行的项目,久而久之,这差距就越来越大.那么我们如何像逛微博.朋友圈.空间一样逛github呢?- 首先,和微博.朋友圈.空间一样,你要想在你的朋友圈看到别人的动态,首先你的加人家好友对

转-推荐的几个开发常用在线工具,可以提升开发效率(持续更新)

http://blog.csdn.net/kroclin/article/details/40634975 相信开发中每个人手头上面都有那么几个工具可以让你每天洋洋得意的开发软件,而这里我就将我觉得还挺不错的几款在线工具分享出来,仁者见仁啦,喜欢就拿走.还会持续更新,以后有新的我都贴上来. 1.MD5解密:http://www.cmd5.com/ 2.MD5加密:http://md5jiami.51240.com/ 3.json在线解析工具:http://json.parser.online.f

Ant+jmeter+jenkins搭建测试的持续集成

前提: Ant+jmeter 已经搭建完成并成功运行(参看ant+jmeter自动化性能测试) Jenkins在本地已经安装可运行(参看上一篇) 1.下载Jenkins安装 2.浏览器输入地址http://localhost:8080/显示界面,安装成功 3.新建一个任务并配置 构建一个自由风格的软件项目即可. 4.配置参数 旧的构建保存了你在一次构建中的所有临时文件,如果构建没有保留的必要,就勾选丢弃旧的构建,同时设置保持构建天使和保持构建的最大个数两个参数. PS:三个设置必须同时设置,否则