聊聊GITHUB上的那些小工具01——代碼質量

GITHUB 2016年融資2.5億美金,估值達到20億。 這已經妥妥進入一個小獨角獸的範疇了。GITHUB價值究竟有多大?或者說潛力還有多少?小編也給不出,小編大膽猜一個,將來市值200億刀沒有任何問題咯。

言歸正傳,GITHUB的發展,跟隨而來的是整個圍繞GITHUB生態的發展。 目前GITHUB上已經湧現出一大批優秀的小工具——小而美、理念先進、簡單易用、省時省力……所以小編特地寫了一系列的文章來介紹其中的一部分,希望讀者可以從中獲取到需要的知識,提高眼界。

GITHUB上的小工具,大概分成這麼幾類:

  • 代碼質量
  • 持續集成
  • 依賴管理
  • 本地化
  • 監控
  • 項目管理
  • 安全

代碼質量 ——測試覆蓋率

Codecov

Coverage

測試覆蓋率工具主要是兩家:Codecov和Coverage。Coverage是洛杉磯威尼斯的兩個年輕人,開了一家軟體公司,整天想著怎麼消除人類的未測試代碼。 Codecov也是一家很小的公司,在美國威斯康星的一個年輕人。我看到codecov說自己被10W社區同胞喜歡(loved by 100k awesome developers)。 應該都是github扶植的項目。

測試覆蓋率(Test Coverage)工具是什麼?

其實就是可視化的方法告訴大家什麼代碼被測試了,什麼沒有被測試到——鼓勵大家讓更多的代碼被測試到。

我們來看看Codecov提供的公式:

coverage = hits / (hit + partial + miss)

  • hit 指被測試套件執行到的代碼。
  • partial 指代碼沒有被測試套件完整執行(有沒有執行到的分支)
  • miss 就是源代碼沒有被測試套件執行。

Coveralls

洛杉磯威尼斯的兩個年輕小伙搞的一家公司。 他們的公司簡介上這麼寫:

我們Coveralls的工程師們不辭疲憊地推進人類的革命事業——和沒有測試的代碼鬥爭!

這家公司到底掙不掙錢? 對開源項目免費,對其他項目收費。

這是Facebook/react的測試覆蓋率

這是說facebook/react在coveralls.io上立項是2015年12月21日,目前總共216個文件,迄今完成了2518次構件,測試覆蓋率的勳章是87%。

Codecov

個人感覺功能上,Codecov和Coveralls大同小異。 但在文檔&技術支持上,codecov做得更好。 從上圖看出codecov還是獲得了很多大公司的支持, 但其實是一個非常小的團隊。 我能找到的資料非常少。只知道他們是美國威斯康星州的一個不到10人的團隊。

測試覆蓋率多少算好?看看Martin Fowler的說法:

總是有人問我統計測試覆蓋率的時候要關注什麼樣的價值,或者說是不是為了以自豪的方式宣告他們的覆蓋級別? 這樣的論述沒有談到點子上。測試覆蓋率是非常有用的工具,可以找到沒有測試的代碼。但在充當一個數字統計,或者告訴別人你的測試做的有多麼好上,測試覆蓋率沒有太大的用途。

讓我們看看這樣的陳述:在沒有達到87%的測試覆蓋率之前不可以發布。我聽到人說:你應該使用TDD,而且必須獲得100%的測試覆蓋率。有一個明智的傢伙說過:「我期望高水平的測試覆蓋,有時候經理們期望1,但有微秒的差異。」

如果你確定一個確定水平的測試覆蓋率,程序員們會傾向於實現它。問題在於高的測試覆蓋率只是一個數字,太容易用低劣的測試手法實現。最荒謬的是,有人的測試不會報錯(小編:為了追求高的測試覆蓋率)。即便不考慮這種情況也會有大量的測試浪費在根本不會出錯的地方,讓你沒有精力放在需要測試的地方。

在很多方面,測試需要深思熟慮的技能。TDD非常有用,但是還不足以幫助你進行優質的測試。如果你好好設計測試,你會期望測試覆蓋率在80%-90%之間。你會懷疑任何測試覆蓋率達到100%的項目——這會有一種寫測試是為了讓測試覆蓋率開心的感覺。

代碼質量——Code Review和檢測

想像這樣一個場景,你每提交一行代碼——然後推送到伺服器之後,有一個機器人就開始閱讀你的每一行代碼,然後把可以的部分給你標註出來,再發個消息給你:

您好!您的代碼文件xxx/bbb/ccc.js 中第339行發現一個疑似XXX的問題。 n

這個消息你的領導當然知道,但他不會來煩你,然後你偷偷改了。 另外一個話題是說,這樣的工具能替代人么?

目前有三個小團隊在github上搞這塊:Codebeat, Codacy和 Code Climat

Codebeat

Codacy

Code Climat

Codebeat是一個波蘭的小團隊,你加入他們的話可以遠程辦公,還可以享受在華沙的辦公室。不知道中國人行不行~ (估計不行,據說關係一直不好,而且波蘭人好像說波蘭語)。 這個團隊更加偏向於交互領域的語言,比如說前端的js,ts,還有ios的oc還有swift等等。 Codacy是個葡萄牙里斯本的團隊!這個團隊相對規模會大一些,我看他們招聘的角色就有9中,裡面還有可視化的組;這個團隊說葡語,我覺得我有希望。 Code Climat是紐約的一個團隊,我看已經拿到了A輪。

Codbeat

也是一個小團隊,codebeat定位是「手機和Web上的自動化review工具」。

你是不是已經厭倦了手工抓取代碼來找到一個小小的問題——讓codebeat帶你飛!Codebeat是一款支持多種語言的靜態代碼分析工具,被全球web和移動端的很多開發者使用。現在還提供了基於swift的樣式分析。

其實是這樣,

你把github上的項目和codebeat關聯上之後,它會很萌地幫你掃描你代碼的質量問題。 所以說這不僅僅是一個code review,更多的是幫助你發現一些問題。

Codacy

標語是為你code review節省時間。一個葡萄牙團隊,在里斯本辦公。

這家公司更加強調大數據分析:

我們從全世界的開發者每天寫數以億計的代碼,讓我們的工作和生活每天都在進步。他們每天承受著巨大的壓力,讓軟體發布一次比一次快。未來的工程師們不願意再重蹈覆轍。這就是codacy的目標,在code review和代碼監控這個層面,這個平台每天為工程師們節省數以千小時計的時間。

codacy在給每一個代碼文件打分

這裡Codacy在給每一個代碼文件打分,這樣就方便以後來修改。 這裡小編非常有感觸,就是再給團隊代碼Review的時候會看到很多不好的代碼,但是你不能馬上要求修改,因為業務壓力嘛——而且人家願不願意改還兩說。所以說有這樣一個工具把質量標註出來,是非常方便地。

Code Climat

這是一個紐約的團隊,大家知道紐約是個非常高傲的城市。另外思路更廣闊一些,提出了一些很有意思的概念吧——標語是「給工程師們的洪荒之力」。

這張圖看上去叫做技術負債(嚇人!),藍色的柱狀圖是補救時間、綠色的是負債率。~ ——

所謂的技術負債就是說:

  • 主人!這裡找到了相同的代碼!
  • 主人!嘻嘻嘻,xxx()函數一共200行代碼——
  • 主人!這行代碼沒有被測試到!
  • 。。。

這些都是可檢測的技術負債,以後用人工智慧的手段可能還會檢測出很多問題。 這裡不展開了。

PS 看看人家產品的顏值~


待續


推薦閱讀:

一個git客戶端可以使用不同的郵箱賬號生成多個ssh key以使用多個伺服器,且相互間不影響?
如何有效利用GitHub student pack中的工具?

TAG:GitHub | 开源项目 | 软件测试 |