陸震
【摘要】精益管理源于制造企業(yè)豐田公司的實踐,幫助豐田公司度過危機并成長為全球最大汽車制造企業(yè)。近年來在軟件研發(fā)行業(yè)也出現(xiàn)了不少學習精益的實踐,其中有不少實踐也取得了良好效果,本文結合自己公司的精益研發(fā)實踐總結了一些經驗。
【關鍵詞】精益管理;持續(xù)集成;自動化測試;看板
1.精益管理
1.1 精益管理的內容
精益管理起源于豐田公司,精益思想打破了自工業(yè)革命起關于“批量生產”帶來企業(yè)效率的信條,圍繞整個價值鏈的“客戶價值”,“拉動”,“流動生產”并不斷“改善”,不斷消除各種浪費,采用了自動化,看板生產方式,多品種小批量生產,多技能工,改善,客戶價值和做事,以人性為中心等方法,取得了空前的成功。
1.2 精益管理在軟件研發(fā)中的實踐
精益管理在很多制造型企業(yè)中都取得了巨大成功,但是否可以也用于軟件研發(fā)的企業(yè)中?軟件生產被看作是一種知識型的工作,不少人認為知識型工作過程很難標準化,并不適合采用精益管理。
從上世紀90年代開始,以敏捷為代表的輕量型方法論開始進入軟件研發(fā)領域,精益思想隨后不久也進入了軟件研發(fā)領域。敏捷和精益思想逐步在軟件研發(fā)行業(yè)被逐步接受,參考精益制造的概念,精益軟件開發(fā)可以總結有7個原則:消除浪費,內建質量,增強學習,推遲決策,快速交付,尊重一線人員,整體優(yōu)化。
2.精益軟件開發(fā)的實踐
信息技術正逐步成為很多公司經營的重要支撐,客戶業(yè)務創(chuàng)新和發(fā)展需要軟件系統(tǒng)可以更靈活、高效、高質量、低成本的交付。為適應這種市場需求的變化,我所在的公司也開始引入精益開發(fā)的思想,對軟件研發(fā)過程進行優(yōu)化。
考慮企業(yè)具體情況,我們制定了頂層設計,痛點驅動,教練引導,自主實踐,試點先行,固化流程,量化結果,持續(xù)改進的策略。精益導入可以需要有一些基礎準備工作,例如任務流程系統(tǒng),統(tǒng)一的配置管理庫,自動化工具,人員的培訓等等,可以基于自己組織和團隊情況復用現(xiàn)有的基礎設施和實踐,結合精益思想進行持續(xù)優(yōu)化。對部分實踐活動做一些總結,重點介紹下持續(xù)集成,測試變革和看板方法的實踐。
2.1 持續(xù)集成
集成是要把整個開發(fā)的努力都整合到一起來,隨著軟件規(guī)模不斷擴大,軟件復雜度的提升,在團隊開發(fā)過程中的大部分時間里面,軟件可能都處于一種不可用的狀態(tài),等到了項目后期再去做集成時候,往往會發(fā)現(xiàn)很多問題,這種集成活動可能會持續(xù)很長時間,給項目帶來不可控制的風險。持續(xù)集成意味持續(xù)不斷的去集成產品,每當有人提交了代碼,產品狀態(tài)發(fā)生微小變化,就會自動觸發(fā)自動化的集成,集成過程中一旦發(fā)現(xiàn)構建失敗或測試失敗,就立刻停下來先修復問題,時刻保持軟件處于一種可用狀態(tài)。
持續(xù)集成可以分階段進行建設,開始建設階段可以僅僅包括代碼自動獲取,編譯,代碼靜態(tài)檢查一些簡單任務,等持續(xù)集成平臺建設完成后,可以進一步擴展重復代碼檢查、業(yè)務規(guī)范檢查、安全性檢查、復雜度檢查、單元測試、數(shù)據庫更新、版本制作、自動化測試等內容。我們還利用這個平臺,為不同團隊制定了代碼改進目標,通過定期更改持續(xù)集成的告警閾值,促使研發(fā)團隊不斷去降低圈復雜度。
2.2 自動化測試和提早測試
在軟件研發(fā)行業(yè),讓開發(fā)趕工是常見的現(xiàn)象,看似加快了速度,但往往返工率也會非常高,如果出現(xiàn)了嚴重故障,還會帶來索賠和品牌等其他方面的風險。通過下游測試環(huán)節(jié)去檢驗上游設計開發(fā)環(huán)節(jié)的方法被認為是一種低效的方法,通過內建質量的精益思想,越早發(fā)現(xiàn)故障,修復的成本越低。
我們也從兩方面做了改進:自動化和提早。通過自動化測試平臺把回歸測試用例自動化,通過持續(xù)集成的平臺把單元測試自動化,提升測試及時性和效率。提早測試有兩個方面的措施,一方面是讓開發(fā)人員提早測試,通過采用TDD(測試驅動開發(fā))模式,先寫單元測試用例,再開發(fā)代碼,另外一方面是測試提早介入,讓測試人員在需求分析和設計階段就啟動測試過程,提早編寫集成測試用例和端到端的測試用例,提早準備自動化測試用例,并用于指導開發(fā)的內部測試過程。
在對業(yè)務側代碼進行單元測試時,存在兩種不同的思路,一種是傳統(tǒng)意義的單元測試,需要大量mock將外圍依賴因素隔離,一種是按真實業(yè)務場景進行組件級的測試。前者運行速度較快,可移植性強,但是面臨業(yè)務代碼快速變化時可能用例維護成本高;后者運行速度較慢,但是穩(wěn)定性較高。計算密集型的產品可以考慮采用前一種方法,業(yè)務密集性或業(yè)務復雜的模塊可以考慮采用后一種方法,兩種方法都有其適用的適用場景。
2.3 看板方法
看板方法是來源于精益思想,致力于形成自主拉動,讓價值順暢流動起來??窗宸椒ㄗ裱牧鶄€原則(可視化,限制在制品,管理流動,規(guī)則顯式化,建立反饋,協(xié)同改進、實驗進化),將團隊工作流程和當前工作狀態(tài)可視化,讓整個團隊一起聚焦于優(yōu)先級最高的事務上;限制在制品以達到讓這些高優(yōu)先級事務盡快完成的目的;團隊共同討論每個環(huán)節(jié)的完成標準并達成了共識,在看板上明確列出來;通過每日站會及時暴露并讓整個團隊聚焦于解決問題??窗宄蔀楸┞讹L險和團隊共同決策的工具。
實踐過程中,有團隊也使用電子看板進行管理,從實際效果看,普通白板或墻面改造成的實物看板具有更好的效果,另外看板形式可以多種多樣,每個團隊都可以根據自己團隊任務情況設計不同的看板布局,任務流程,設計自己任務卡,制定完成定義,制定團隊公約,人員標簽,異常處理方式等內容,通過看板也讓每個團隊形成一種自我管理的模式,增強團隊自我驅動力??窗迮浜厦艚菀恍嵺`的方式,例如每日站會,故事點游戲,燃盡圖等手段,把開發(fā)過程變得更加透明、高效和有趣,對研發(fā)效率提升起到了積極的效果。
3.總結
精益軟件研發(fā)推進過程中,對于部分項目也遇到了一些問題,但隨著過程推移,大部分項目都發(fā)生了積極的變化,精益實踐的活動激活了團隊和個人,故障泄露率有了明顯下降,交付周期也有了明顯改善。精益思想正慢慢在我們企業(yè)的軟件研發(fā)過程中得到廣泛的應用和認可,并為企業(yè)提效工作帶來了明顯的收益。
參考文獻:
[1]Mary Poppendieck、Tom Poppendieck,2011:《精益軟件開發(fā)管理之道》,機械工業(yè)出版社
[2]希布斯(Hibbs,C.)、(美)朱(Jewett,J.)、(美)沙利文(Sullivan,M.),2009:《精益軟件開發(fā)藝術》,電子工業(yè)出版社
[3]David J.Anderson,2014:《看板方法:科技企業(yè)漸進變革成功之道》,華中科技大學出版社
[4]百度百科,http://baike.baidu.com/