從一段代碼的旅程到移動產(chǎn)品的質(zhì)量工具

之前看小米的"一塊鋼板的旅程"播急,我就想從代碼的旅程展開說說。不同于從項(xiàng)目流程展開尼夺,測試流程展開,那么如果產(chǎn)品大部分bugs都代碼引入的产园,我們不妨就從代碼的角度展開來說汞斧。而工具是提煉了規(guī)則,流程什燕,能力的粘勒,所以我會用工具來說明能做的事情。通過這個(gè)角度屎即,不是想說庙睡,大家就用那些工具吧, 而是工具的思路技俐,我們除了在測試環(huán)節(jié)去建設(shè)工具之外乘陪,還能做什么。

源碼開發(fā)雕擂,對于代碼來說啡邑,應(yīng)該就是它出生的一刻。能做的事情無非兩樣井赌,1谤逼,組件:用現(xiàn)成代碼來減少問題, 優(yōu)化代碼質(zhì)量,2仇穗,自測:用工具在本地測試新代碼來保證沒問題流部。先說組件,現(xiàn)成的代碼能提供什么纹坐?1.快速可維護(hù)的代碼枝冀,如butterknife; 2.更佳的性能,如Fresco更高性能的圖片緩存和展示機(jī)制, okhttp支持spdy耘子,io性能更佳的http操作api?;android-Iconics 在android使用iconfont果漾,svg,減少安裝包大泄仁摹跨晴;3. 集中管理,eventbus提供更佳的回調(diào)機(jī)制片林,當(dāng)然它不算是集中管理的經(jīng)典,但是因?yàn)槠涫褂玫姆绞揭财鸬搅思泄芾淼淖饔谩N腋胫傅募泄芾硎抢绶逊猓覀兛梢越⒁粋€(gè)線程管理器焕妙,全部的線程實(shí)例都從這里獲取,如果某些優(yōu)先級極高的操作弓摘,我們可以統(tǒng)一降低其他線程優(yōu)先級; 4.避免錯(cuò)誤, 如android-weak-handler焚鹊。

然后就是自測,因?yàn)槭窃创a開發(fā)階段韧献,所以最好要跟IDE結(jié)合末患,在ide輸出結(jié)果。這類東西android studio就提供了跟lint靜態(tài)檢查的能力锤窑,分析cyclic的能力等等璧针。像微軟這類公司,如果沒有跑fxcop渊啰,stylecop連check in都不行探橱,甚至結(jié)合svn hook來做強(qiáng)制檢查,不符合就不讓check in绘证。當(dāng)然這種自測還包括了借助工具的code review隧膏, 這里就不多介紹了。

補(bǔ)充一句嚷那,源碼開發(fā)是最容易被忽略的環(huán)節(jié)胞枕,無論是開發(fā)集成到ide的插件,高性能的庫都會非常高效率地提升質(zhì)量魏宽,而且會有以點(diǎn)打面的作用腐泻。

集成編譯

,這個(gè)階段有什么特別的湖员?有贫悄,它是代碼與功能信息連接的地方。除了編譯打包工具娘摔,如gradle窄坦,ant,NativeLibCompression等優(yōu)化打包壓縮工具之外凳寺,還能做測試鸭津,這里的測試跟后面的測試調(diào)試大有不同。正如上面提到的肠缨,代碼與功能信息連接的地方逆趋,利用測試工具來測試功能,配合代碼信息晒奕,就能更佳精準(zhǔn)地執(zhí)行測試闻书,定位問題名斟。舉個(gè)簡單的例子,這里可以做基于代碼增量信息的instrument單元測試魄眉,uiautomator等自動化測試砰盐,lint、findbugs坑律、infer等靜態(tài)檢查岩梳,也可以讓剛剛提到的測試結(jié)果與svn diff的結(jié)果結(jié)合,進(jìn)而定位問題晃择。這時(shí)冀值,不得不說所謂“天下武功唯快不破”也在這里可以體現(xiàn),如果可以做到每ci就編譯集成(持續(xù)集成)宫屠,每次集成測試都可以在10分鐘(人的注意力高度集中時(shí)間就是10分鐘)內(nèi)完成測試列疗,那么定位就可以在每個(gè)check in,甚至可以做到?jīng)]有集成通過就不讓check in激况。要做這個(gè)事情作彤,這些編譯,測試乌逐,靜態(tài)檢查都必須快起來竭讳,什么分布式,并行計(jì)算等等都不是理想浙踢,而是真真切切的需要绢慢。再拓展下大家的想象力,哪怕是Monkey測試洛波,如果能快起來胰舆,5分鐘完全上百個(gè)界面的遍歷,那么它也能被持續(xù)集成容納蹬挤,也能利用版本之間的svn diff信息來強(qiáng)化問題定位了缚窿。

測試調(diào)試,這個(gè)階段時(shí)是大家最不容易遺忘的焰扳,80%的精力都在這里倦零,建設(shè)的工具也最多。這里的工具兩類吨悍,度量類的和分析類的扫茅。之前我寫過一篇《假如不是BAT,專項(xiàng)測試怎么做》,里面就提到過育瓜。這里不想多說葫隙,簡單介紹幾個(gè)特別的,思路可以借鑒和拓展的躏仇,

1. tPacketCapture手機(jī)無root抓包恋脚,這個(gè)應(yīng)用的特點(diǎn)就是用了vpn的方式來配合抓包腺办,大家仔細(xì)想像,當(dāng)大家頭痛為什么要root了才能抓包的時(shí)候慧起,有木有想過這個(gè)思路呢菇晃? 在這個(gè)思路底下,純手機(jī)端的無root的弱網(wǎng)模擬蚓挤,蓋包,丟包驻子,都不是夢呀灿意。

2. MAT,LeakCanary崇呵,AllocationTracer缤剧,android-hprof-tools,dumpsys meminfo這些都是內(nèi)存測試分析的工具域慷。一大堆工具荒辕,能給我們什么思路呢?我們不妨從程序犹褒,代碼抵窒,時(shí)間,規(guī)則這三個(gè)維度來看待我們的工具叠骑,android-hprof-tools優(yōu)化抓取hrof速度的李皇,與MAT快照分析配合使用,獲取的信息是靜態(tài)的代碼信息宙枷,例如MAT獲取是類名掉房,對象數(shù),引用關(guān)系等慰丛,這里沒有時(shí)間的概念和信息卓囚,但是在代碼之上,可以分析問題诅病。而AllocationTracer就是在代碼信息上哪亿,加上了時(shí)間的概念,可以稱為動態(tài)的代碼信息睬隶,這里分析的問題就必須跟時(shí)間是相關(guān)的锣夹,例如GC, 垃圾回收觸發(fā)的時(shí)機(jī)對程序流暢度的影響。另外一個(gè)維度苏潜,隱匿了代碼的信息银萍,那就是程序的信息,這里top恤左,meminfo贴唇,gc日志是代表搀绣,主要用來發(fā)現(xiàn)問題,因?yàn)橄鄬p量戳气,持續(xù)時(shí)間可以更長链患。最后就是規(guī)則,在代碼信息之上融合了規(guī)則的測試工具瓶您,會自動發(fā)現(xiàn)問題麻捻,最經(jīng)典的就是leakcanary了。按照這個(gè)思路呀袱,大家不妨可以想想其他的專項(xiàng)工具贸毕,不要覺得沒得想,最起碼現(xiàn)在看來“代碼+時(shí)間+規(guī)則” = allocation tracer + 規(guī)則的工具夜赵,起碼我至今還沒有發(fā)現(xiàn)明棍。

發(fā)布運(yùn)營,發(fā)布就是研發(fā)流程外了寇僧,我們的質(zhì)量保證不是應(yīng)該在研發(fā)流程內(nèi)徹底保證么摊腋?事實(shí)上,臣妾做不到呀嘁傀。用戶環(huán)境很復(fù)雜的兴蒸,就以上次有個(gè)同學(xué)問我,國際網(wǎng)絡(luò)測試要怎么辦心包。我也只能厚著臉皮說类咧,發(fā)布運(yùn)營上做文章,做可以定位問題的數(shù)據(jù)上報(bào)蟹腾。沒錯(cuò)痕惋,研發(fā)流程內(nèi)可以做一些相關(guān)質(zhì)量保障,但投入產(chǎn)出比太低了娃殖,想想值戳,難不成你要飛去美國做測試,當(dāng)然炉爆,方便一點(diǎn)的就是買deviceanywhere的服務(wù)來做測試堕虹。如果能考慮灰度發(fā)布,那事情就簡單多了芬首。一方面赴捞,可以用applause提供的眾測服務(wù)。另一方面郁稍,光“測”不夠赦政,因?yàn)樵谶h(yuǎn)端定位問題是充滿悲劇的事情,必須要有遠(yuǎn)程定位問題的能力。定位信息有了恢着,那征服“自定定位分析”桐愉,那為什么不動態(tài)運(yùn)營一把呢? 最經(jīng)典的就是網(wǎng)絡(luò)路由出口的問題掰派,不同出口的網(wǎng)速到不同的地方从诲,不同的運(yùn)營商,天差地別靡羡,如果發(fā)現(xiàn)a出口不行系洛,是不是自動動態(tài)劃同一區(qū)域同一運(yùn)營商可以試一下b出口呢?如果可以略步,是不是可以動態(tài)調(diào)整過來呢碎罚?這里有太多太多事情可以做了。上面說的必經(jīng)是網(wǎng)絡(luò)策略纳像,那除了網(wǎng)絡(luò)之外,對于功能拯勉,可以用ABTest, 如facebook的airlock, 監(jiān)控工具可以用眾多的APM(此處不列舉)竟趾, 有bug可以用hotfix工具nuwa。

總結(jié)宫峦,容易遺忘的源碼開發(fā):效率最高岔帽;唯快不破的編譯集成:聯(lián)合代碼信息;用力最多的測試調(diào)試:時(shí)間+代碼+程序+規(guī)則导绷;發(fā)布運(yùn)營:創(chuàng)造最接近用戶的測試調(diào)試環(huán)境犀勒。

PS: qcon2016, 再次去了,分享的題目就是大家遺忘已久但大有可為的Monkey, 大家多多關(guān)注

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妥曲,一起剝皮案震驚了整個(gè)濱河市贾费,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌檐盟,老刑警劉巖褂萧,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異葵萎,居然都是意外死亡导犹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門羡忘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谎痢,“玉大人,你說我怎么就攤上這事卷雕〗谠常” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵爽蝴,是天一觀的道長沐批。 經(jīng)常有香客問我纫骑,道長,這世上最難降的妖魔是什么九孩? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任先馆,我火速辦了婚禮,結(jié)果婚禮上躺彬,老公的妹妹穿的比我還像新娘煤墙。我一直安慰自己,他們只是感情好宪拥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布仿野。 她就那樣靜靜地躺著,像睡著了一般她君。 火紅的嫁衣襯著肌膚如雪脚作。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天缔刹,我揣著相機(jī)與錄音球涛,去河邊找鬼。 笑死校镐,一個(gè)胖子當(dāng)著我的面吹牛亿扁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸟廓,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼从祝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了引谜?” 一聲冷哼從身側(cè)響起牍陌,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎煌张,沒想到半個(gè)月后呐赡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骏融,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年链嘀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片档玻。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怀泊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出误趴,到底是詐尸還是另有隱情霹琼,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站枣申,受9級特大地震影響售葡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忠藤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一挟伙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧模孩,春花似錦尖阔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至块茁,卻和暖如春齿坷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背数焊。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工胃夏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昌跌。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像照雁,于是被迫代替她去往敵國和親蚕愤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理饺蚊,服務(wù)發(fā)現(xiàn)萍诱,斷路器,智...
    卡卡羅2017閱讀 134,659評論 18 139
  • 今天整理了兒子的小小衣柜污呼,收拾起來也不難裕坊,一邊探索,一邊整理燕酷。首先我的審美觀是比較差的籍凝。平時(shí)也邋遢習(xí)慣了,所以...
    益西卓瑪閱讀 187評論 0 0
  • 小隱隱于野,大隱隱于市酱讶。最好的修行在生活里退盯,在每一天鍋碗瓢盆的碰撞中,在彈去器物灰塵的時(shí)刻。锃亮如新的地板渊迁、樓梯慰照、...
    千尋瀑日記閱讀 545評論 4 3
  • 簡單介紹一下,這是本人在17k小說網(wǎng)上以Cinda1997為筆名的一部作品哦琉朽。因?yàn)橹案降谄哒戮蜎]有繼續(xù)了毒租,現(xiàn)在...
    暴躁空想家閱讀 854評論 0 0