如何通过github提升自己
如何通過github提升自己
如果我們僅僅是將自己的代碼commit、push到github上,那么我們對于我們的技術不會有太多的提升。我們所做的僅僅只是將github當成了我們的網盤。
每發布一個版本的時候,是不是也就意味著給用戶一個新的版本——持續交付。
對應的badge分別是:
- CI狀態(Travic-CI)
- 代碼質量(0~4.0)(Code Climate)
- 測試覆蓋率(Code Climate)
于是,這個庫的狀態就很清楚了。(ps: 看上去,我就是這一堆工具的廣告代理商,可惜他們都是免費的。)
敏捷軟件開發
顯然我是在扯淡,這和敏捷軟件開發沒有什么關系。不過我也不知道瀑布流是怎樣的。說說,我所知道的一個項目的組成:
- 看板式管理應用程序(如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是不錯的,可以讓我們寫出邏輯更簡單地代碼。
也許你已經知道了Selenium、Jasmine、Cucumber等等的框架,看到類似于下面的測試
Ajax? specifying response when you need it? specifying html when you need it? should be post to some whereClass? respects instanceof? inherits methods (also super)? extend methodsEffect? should be able fadein elements? should be able fadeout elements代碼來源: https://github.com/phodal/lettuce
看上去似乎每個測試都很小,補完一個個的測試我們就會得到了測試覆蓋率
| 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,這樣我們才能提高自己。
總結
以上是生活随笔為你收集整理的如何通过github提升自己的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我早年在Google学到的10条经验
- 下一篇: 不懂技术的人不要对懂技术的人说这很容易实