如何組織一場JAVA技能大練兵

近期,公司為了鍛煉開發(fā)人員技能器瘪,舉辦了一場涵蓋多個技術(shù)線的技能大練兵,我有幸受邀負責java技術(shù)方向的出題和評審工作。下面從以下幾個方面回顧下整個過程:

  • 題目設(shè)計
  • 程序要求
  • 測試方法

題目設(shè)計

題目設(shè)計主要考慮以下幾點:

  • 技術(shù)演進需求:在公司系統(tǒng)云遷移的戰(zhàn)略背景下面哼,我們的應(yīng)用即將從原來傳統(tǒng)的虛擬機部署向PAAS云環(huán)境進行大規(guī)模遷移,需要開發(fā)人員掌握云環(huán)境的開發(fā)技能扫步,應(yīng)用開發(fā)框架需要從原來的SpringMVC+dubbo升級為SpringCloud服務(wù)治理框架魔策。

  • 新老員工兼顧:目前公司的開發(fā)人員構(gòu)成中,入職一兩年的新員工超過一半河胎,題目設(shè)計需要考慮到新員工的技能水平闯袒,不宜難度過大,否則會打消新員工參與的積極性游岳。同時政敢,還需要能體現(xiàn)正真的技術(shù)實力,不能因為題目過于簡單而使得分數(shù)拉不開差距胚迫。因此喷户,題目設(shè)計要使大家都能完成基本功能,同時拿高分的難度較大访锻。

  • 解決生產(chǎn)難題:大練兵的初衷就是鍛煉開發(fā)人員技術(shù)實力褪尝,提升企業(yè)級應(yīng)用的開發(fā)技能,更好的完成日常任務(wù)期犬,最終要解決生產(chǎn)難題河哑,保障線上系統(tǒng)穩(wěn)定。類似力扣網(wǎng)上的算法題龟虎,不適合作為此次大練兵的題目璃谨。

基于以上幾點考慮,最終題目設(shè)計如下:

完成一個交易系統(tǒng):
產(chǎn)品子系統(tǒng)(product)遣总、訂單子系統(tǒng)(order)睬罗、積分經(jīng)驗子系統(tǒng)(experience)轨功,3個子系統(tǒng)完成分布式部署和調(diào)用。
業(yè)務(wù)場景:
一筆交易過程中容达,產(chǎn)品子系統(tǒng)要扣減庫存古涧,訂單子系統(tǒng)要新增訂單,積分子系統(tǒng)要有相應(yīng)的積分增加花盐。積分規(guī)則為每消費1元增加1積分羡滑。

功能要求:

完成5只接口:下單、查詢庫存算芯、查詢訂單柒昏、查詢積分、個人交易信息概覽

題目意在考察大家在完成基本功能的同時熙揍,如何保證數(shù)據(jù)的一致性职祷。

程序要求

根據(jù)前期統(tǒng)計的報名意向來看,預(yù)計會有50人左右提交比賽交付物届囚。這么多交付物如果要依靠線下演示評審打分的話有梆,周期很長,而且需要人工部署調(diào)試意系,帶來巨大的工作量泥耀。因此,必須使用自動化的方式進行打分蛔添。同時為了控制程序?qū)崿F(xiàn)范圍痰催,防止開發(fā)人員無限蔓延開發(fā)需求,增加過多考察范圍之外的擴展迎瞧,因此對程序做了以下限制:

  • 中間件限制:由于本次大練兵意在為后續(xù)的云遷移做技術(shù)儲備夸溶,因此中間件的選型必須控制在云上中間件的范圍內(nèi),因此要求使用SpringCloud+consul的服務(wù)治理框架夹攒、Nginx軟負載等中間件蜘醋,不能使用Apache、Dubbo等云上不用的中間件咏尝。

  • 數(shù)據(jù)格式:題目提供3個子系統(tǒng)中核心的數(shù)據(jù)庫表結(jié)構(gòu)压语,例如產(chǎn)品信息表、訂單信息表编检、用戶經(jīng)驗表等胎食。同時給出5個接口的上送和返回字段,所有人必須按照此格式對前提供服務(wù)允懂。

  • 組包格式:由于決定要實現(xiàn)自動化的打分程序厕怜,就必須要統(tǒng)一組包要求,包括壓縮包的目錄層級結(jié)構(gòu)、sql腳本格式粥航、nginx配置文件琅捏、start和stop腳本等。題目要求必須實現(xiàn)3個模塊(product递雀、order柄延、experience),同時提供了一個可選的其它模塊(other)缀程,參賽者可根據(jù)需要自己實現(xiàn)搜吧,如網(wǎng)關(guān)、聚合服務(wù)等功能都可以放在other模塊實現(xiàn)杨凑。other模塊組包要求同其它3個模塊一致滤奈。

本次題目主要的考察難點是如何保證數(shù)據(jù)的一致性。但是由于測試環(huán)境是同網(wǎng)段的機器撩满,內(nèi)網(wǎng)測試環(huán)境非常穩(wěn)定蜒程,在正常的程序運行過程中,很難發(fā)生數(shù)據(jù)不一致的情況伺帘。如何產(chǎn)生使數(shù)據(jù)可能不一致的事件搞糕,是本次出題的重點。

因此除了以上幾個限制曼追,本次大練兵還引入了一個大殺器:chaos-monkey。

chaos-monkey:是由netflix開源的一款軟件汉规,它能在生產(chǎn)系統(tǒng)中隨機產(chǎn)生異常事件礼殊,包括超時、程序異常针史、宕機等晶伦。chaos-monkey的想法源自于“混沌工程”。

混沌工程啄枕,是一門對系統(tǒng)進行實驗的學(xué)科婚陪,旨在了解系統(tǒng)對應(yīng)生產(chǎn)環(huán)境各種混亂狀況的能力,建立對系統(tǒng)的信心频祝。通過開展混沌工程方面的實驗泌参,可以測試出系統(tǒng)是否存在缺陷,從而了解系統(tǒng)在混亂的生產(chǎn)條件下如何表現(xiàn)常空。

chaos-monkey的原則沽一,避免大多數(shù)失效的主要方式就是經(jīng)常失效。通過經(jīng)常在生產(chǎn)環(huán)境制造故障漓糙,以保證生產(chǎn)環(huán)境的彈性铣缠。

本次比賽提供了chaos-monkey的jar包和配置,要求參賽者必須引入,以模擬超時或者異常蝗蛙,從而引發(fā)數(shù)據(jù)不一致蝇庭,測試程序的健壯性。

測試方法

測試主要分為兩步驟:自動部署和自動測試捡硅。

服務(wù)拓撲圖如下:

服務(wù)拓撲.png

自動部署

所有選手的交付物都提交到統(tǒng)一的ftp目錄哮内,因此從ftp中遍歷文件并觸發(fā)部署即可。

流水線步驟如下:

for(遍歷ftp上的包)
    清除redis緩存
    執(zhí)行題目提供的sql建表語句病曾,初始化數(shù)據(jù)庫
    從FTP獲取壓縮包牍蜂,并解壓
    If(有nginx配置文件)
        替換nginx配置文件,并重載
    else
        分發(fā)默認的nginx配置文件泰涂,并重載
    執(zhí)行鋪底數(shù)據(jù)腳本
    For(遍歷服務(wù)個數(shù))
        按規(guī)則將各個服務(wù)壓縮包分發(fā)至各服務(wù)節(jié)點
        if(存在額外的init.sql)   
            執(zhí)行init.sql
        執(zhí)行服務(wù)的啟動腳本start.sh
    運行測試腳本鲫竞,收集測試結(jié)果,計算分數(shù)逼蒙,并輸出到CSV文件
    停止各服務(wù)

通常情況下从绘,自動部署使用Jenkins實現(xiàn)。但是Jenkins不支持循環(huán)遍歷是牢,一個job只能完成一個參賽者的部署和測試僵井。如果每個參賽者一個job,不能保證每個job配置的正確性驳棱,并且由于只有一套評審環(huán)境批什,每個人一個job的話,不能保證job的串行執(zhí)行社搅,多個job同時執(zhí)行會相互影響驻债。因此決定自己編寫部署腳本,僅在部署完成后形葬,需要測試時觸發(fā)測試job合呐,由測試job完成測試和打分。部署腳本監(jiān)聽測試job的狀態(tài)笙以,測試完成后淌实,再開始執(zhí)行下個參賽者的部署流程。

自動化測試

公司本來就具備完善的Robot Framework自動化測試基礎(chǔ)設(shè)施猖腕,本次測試直接使用即可拆祈。由于部署程序已經(jīng)在程序啟動前完成了數(shù)據(jù)庫和緩存的初始化,因此測試程序僅需讀取測試數(shù)據(jù)并向Nginx發(fā)起調(diào)用即可谈息。

由于要測試程序異常時缘屹,數(shù)據(jù)的一致性,因此要在測試開始之前開啟chaos-monkey侠仇,在執(zhí)行寫入數(shù)據(jù)的邏輯后(即下單接口)轻姿,關(guān)閉chaos-monkey犁珠,再開始查詢,通過查詢各個接口的數(shù)據(jù)并于寫入的數(shù)據(jù)相比對互亮,驗證數(shù)據(jù)的一致性犁享,并打分,步驟如下:

1.開啟各服務(wù)的chaos-monkey功能豹休;

2.執(zhí)行寫數(shù)據(jù)的測試腳本炊昆,即調(diào)用數(shù)百次下單接口;

3.關(guān)閉各服務(wù)的chaos-monkey功能威根;

4.執(zhí)行單個數(shù)據(jù)查詢接口凤巨,驗證每個接口的可用性,并記錄分數(shù)洛搀;

5.執(zhí)行組合驗證邏輯敢茁,驗證多個服務(wù)的數(shù)據(jù)一致性,并記錄分數(shù)留美。

每個參賽者的測試執(zhí)行完成后彰檬,要將計算的分數(shù)寫入?yún)R總到csv文件中。拿到最終的csv文件后谎砾,即可利用excel實現(xiàn)按照成績排序逢倍。

思考

通過本次大練兵,有以下幾點思考:

  • 工具建設(shè)要持續(xù)投入:工具建設(shè)可使用最小的成本景图,獲取最大的收益较雕。此次練兵,開發(fā)部署流水線和自動化測試腳本各投入1人挚币,僅在2周內(nèi)使用業(yè)余時間就完成了開發(fā)和測試郎笆,比人工部署、演示忘晤、測試的成本要低得多。同時工具可重復(fù)執(zhí)行激捏,每次修改完后自動觸發(fā)设塔。日常的開發(fā)和測試過程應(yīng)盡可能多的使用工具去做回歸測試,避免人為疏忽引起的分析遺漏而沒回歸覆蓋远舅。
  • 環(huán)境問題不容忽視:每個人都能在自己的環(huán)境中跑通程序闰蛔,但是在評審環(huán)境中,有些程序卻無法運行图柏。因此在日常測試過程中序六,我們除了程序本身的正確性以外,還需關(guān)注環(huán)境差異可能帶來的問題蚤吹。這里順帶吐槽一下例诀,如果公司能使用docker等容器技術(shù)随抠,將會提升我們的版本質(zhì)量,降低因環(huán)境不同而出錯的概率繁涂。
  • 規(guī)范意識有待提高:雖然題目中已經(jīng)將組包格式拱她、程序端口等做了要求,也已將注意點通知到所有人扔罪,但是還是有很多人沒有遵守秉沼,導(dǎo)致測試程序跑分較低。這反映出大部分開發(fā)人員的特點矿酵,只管悶頭寫代碼唬复,卻忽視了規(guī)范要求,導(dǎo)致日后返工全肮,甚至產(chǎn)生線上故障敞咧,導(dǎo)致嚴重的后果。建議大家在日常編碼之前倔矾,提前熟悉并遵守規(guī)范和要求妄均,避免走彎路。

最后哪自,感謝大家對我的容忍丰包。2021,愿所有程序都不出bug壤巷!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邑彪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胧华,更是在濱河造成了極大的恐慌寄症,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矩动,死亡現(xiàn)場離奇詭異有巧,居然都是意外死亡,警方通過查閱死者的電腦和手機悲没,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門篮迎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人示姿,你說我怎么就攤上這事甜橱。” “怎么了栈戳?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵岂傲,是天一觀的道長。 經(jīng)常有香客問我子檀,道長镊掖,這世上最難降的妖魔是什么乃戈? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮堰乔,結(jié)果婚禮上偏化,老公的妹妹穿的比我還像新娘。我一直安慰自己镐侯,他們只是感情好侦讨,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苟翻,像睡著了一般韵卤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崇猫,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天沈条,我揣著相機與錄音,去河邊找鬼诅炉。 笑死蜡歹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的涕烧。 我是一名探鬼主播月而,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼议纯!你這毒婦竟也來了父款?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瞻凤,失蹤者是張志新(化名)和其女友劉穎憨攒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阀参,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡肝集,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛛壳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片包晰。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖炕吸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情勉痴,我是刑警寧澤赫模,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蒸矛,受9級特大地震影響瀑罗,放射性物質(zhì)發(fā)生泄漏胸嘴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一斩祭、第九天 我趴在偏房一處隱蔽的房頂上張望劣像。 院中可真熱鬧,春花似錦摧玫、人聲如沸耳奕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屋群。三九已至,卻和暖如春坏挠,著一層夾襖步出監(jiān)牢的瞬間芍躏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工降狠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留对竣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓榜配,卻偏偏與公主長得像否纬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芥牌,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

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