顯示廣告
隱藏 ✕
※ 本文為 windows2k.bbs. 轉寄自 ptt.cc 更新時間: 2016-01-15 10:33:50
看板 Soft_Job
作者 Wolfken ()
標題 Re: [請益] 這些軟體工程的方法在台灣的普及度?
時間 Wed Jan 29 14:30:09 2014


※ 引述《Wolfken ()》之銘言:
: 目前軟體工程最紅的新方法大概就是DevOps/Continuous Delivery
: 想問一下目前有沒有人的公司正在使用或是想要使用這幾個東西:
: DevOps
: Continuous Delivery
: Continuous Integration
: Test-Driven Development
: 其實前三個應該是同一套的東西,涵蓋的範圍大小不同而已

我想還是定義一下何謂Continuous Integration,Continuous Delivery跟DevOps好了
其中最核心應該是Continuous Integration(CI)

CI想解決的問題是,一般傳統的軟體專案,大部分時間都是各個開發者自行在自己的
電腦上開發,等到搞定了才commit到version control。沒有人會在自己的code搞定
之前去跑跑看跟其他人的code整起來會不會出問題,所以大部分的時間裡,如果把各
個開發者自己電腦上在開發的code包括進來,整個軟體都是處在不能動或是有問題的
狀態,直到接近結尾要release時才會真的穩定下來。


但問題就出在結尾,大家都不先試試看整起來有沒有問題,等到寫了一大堆code,
再去跟其他人也是一大堆的code來整合,通常就會有一堆問題,然後就是無盡的debug
。但因為新code在這種狀況下量很大,debug的複雜度相當高,要花的時間也很長。
這問題即使使用Agile也是無法解決,因為Agile大家還是自己在自己電腦上開發到一
定程度才會commit。


CI或是CD的中心思想就是,如果一件事很麻煩很痛苦,那就把它拆成很多件小事,然
後每天做,甚至一天做好幾次。所以顧名思義,持續整合(CI)就是要每天跟其他人的
code做整合,甚至一天做好幾次。每次都只有幾行到幾十行的code要整合,當然複雜
度就小很多。理念上是這樣,但怎麼落實到實際操作就是一件相當困難的事,需要整
個流程跟使用的系統都大幅調整才有辦法。你的code就不是一個完全版的東西,甚至
連動都還不能動,別人的code也差不多,怎麼能辦到天天整合,甚至一天整好幾次?

CI/CD提出的方法就是基於一個叫做pipeline的東西。所謂pipeline就是從code commit
到version control開始,到真正deploy到production環境中間的流程,包括build test
publish跟deploy。pipeline有四個phase: commit, automated acceptance, manual

test跟release。前兩個phase就是CI,四個phase全包就是CD。pipeline的想法是,把
所有能夠自動化的東西統統自動化,真的不行再去手動做,所以還是有一個手動測試的
phase。基本的要求是unit test跟functional test的自動化測試coverage都要有80%

以上。這麼一來所有人的新code都能隨時跑這些自動化測試,確定自己的code跟大系統
整合起來是沒問題的。也因為大量自動化,所以從code commit到最終deploy只需按一
個按鈕就搞定,而且在一兩小時內搞定。一個CI/CD很重要的指標在於,一行新的code

從commit到使用者實際看到要花多少時間。傳統的方式可能是幾星期甚至更久,但CI/CD

是幾小時。

CI的兩個phase是大量自動化的重點所在。commit phase包括build跟unit test,還有少
量基本的functional test。基本要求是在15分鐘內完成,所以當新code進來時,可以快
速的利用unit test確認沒有問題。通過commit phase的build會進入automated

acceptance phase,這邊是functional test主要跑的地方,要求是30~60分鐘內要跑完。

除了自動化以外,CI的重點是圍繞在自動化pipeline建立一套流程跟紀律,並且搭配新

的文化和想法。舊的方法是build永遠都是處於紅燈(fail)狀態,直到最後要release才
會變綠燈。CI要求build永遠是綠燈,只要任何新code讓它變成紅燈,所有人要停下手
邊的工作,馬上去修正它。這是從Toyota的stop the line學來的,Toyota的產線工人

只要發現問題,可以馬上要求整個生產線停下來,先去處理這個問題。如果commit phase

出問題,開發者有十分鐘可以修正,十分鐘修正不了就是roll back。acceptance phase
出問題則有25~30分鐘。

其他的CI守則包括:
- 不能commit到有問題的build: build只要紅燈,version control就鎖住,任何人
都不能commit。
- 開發者commit前必須在local跑過commit phase的自動化測試
- 開發者commit後必須在電腦前等到commit phase過了才能離開進行下一項工作,所以
commit按下去就去喝下午茶半小時,回來可能會被電到很慘
- 永遠不在build fail時放著不管回家: 這當然不是說要加班到修好為止,是說下班
前一小時就盡量別commit code了
- 永遠不把過不了的test comment掉
- 誰的code讓build fail,那個人就要有肩膀扛下所有責任,並把問題解決
- Test-Driven Development: 除了在code完成時跑自動化測試以外,同樣重要的是使用
test-driven development,在開發過程中不斷確認目前新加的幾十行code是沒問題的
,不要等到寫了上千行,要來commit時,跑下去才發現一堆都fail,這也是在自己電
腦上進行持續整合的方法。一直跟別人的新code整合實際操作上有困難,那麼至少一
直確認你的新code都能通過測試。


所以CI不是工具,而是一個方法,包括流程 紀律 團隊成員思考模式 組織架構 文化,
當然有許多工具幫忙讓這件事比較容易作到,最有名的就是Jenkins,但其實沒工具
也是能做CI,而用了Jenkins也不等於就是CI,很多公司以為用了Jenkins甚至買了幾
套CD或是DevOps的工具就叫在做CI了,事實上CI的重點從來就不是工具,只用了工具
而沒有用到它核心的方法,那跟傳統的方法根本也沒有差別。


CD包括的就更廣,想解決的問題也更全面,然後DevOps則是再拓展到把operation也包
括進來,不過這些就要再花更多篇幅來講了,暫時就先不說了。

Note: 必須要講得更清楚的是,最早的CI其實是Extreme Programming的一部分,當時
只有Test-Driven Development,還沒有pipeline的概念。而很多人做CI就只做半套,
把Test-Driven Development拿掉,就變成好像CI=nightly build。後來在2010年Jez
Humble提出CD的時候,因為他本身就很愛XP,所以將CI拿出來加強,加入了pipeline
跟其他的一些東西,成為了CD的前半段核心部分。所以現在講的CI其實都是CD版本的
CI,並不是當初最原始XP版本的CI了。


--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.165.198.156
※ 編輯: Wolfken         來自: 118.165.198.156      (01/29 14:31)
ohb:1F 01/29 14:47
bndan:看到認真解釋就該給推了 但CI的部份 能合80%的公司 CODE水準2F 01/29 14:59
bndan:在低也有一定水準...(我說穩定度)
lovdkkkk:推4F 01/29 15:08
mrbigmouth:推5F 01/29 15:22
SecretWhale:推6F 01/29 15:45
onthesea:原po真好心推7F 01/29 17:26
summerleaves:認真推8F 01/29 17:29
typepeter:Push9F 01/29 21:07
idiot1129:推10F 01/29 21:24
ntddt:認真推~11F 01/29 23:51
ApacheHunter:推~12F 01/30 02:26
viper9709:推~寫得很不錯13F 01/30 10:51
arenda:讚14F 01/30 11:03
hopashin:推15F 01/30 11:34
kewang:推這篇!16F 01/30 16:47
SACkings55:大為解惑 大推17F 01/31 00:04
jason2debug:受教了,感謝原po大分享18F 01/31 22:30
※ 編輯: Wolfken         來自: 118.161.33.79        (01/31 23:55)
gd03:大推19F 02/10 00:22
plsear: 朝聖20F 12/20 21:05
changyuheng: 好像沒看到 DevOps 的定義21F 12/21 22:29

--
※ 看板: FW 文章推薦值: 0 目前人氣: 0 累積人氣: 2755 
※ 本文也出現在看板: ott BadApple dinos terievv
作者 Wolfken 的最新發文:
  • +3 Re: [討論] 非資訊公司的資訊單位 - Soft_Job 板
    作者: 114.36.238.49 (台灣) 2018-07-11 12:49:19
    最近幾年剛好也加入台灣的硬體廠做軟體 分享一下為什麼一堆硬體廠高喊轉型跨足軟體,煞有其事發新聞稿,大舉徵才數百人 做到現在卻沒一家成功的原因 總結兩個原因,高層認知與決心不足,公司文化不對 首先,軟體 …
    4F 3推
  • +10 Re: [新聞] 軟體界「書同文車同軌」 綠委籲政府推動 - Soft_Job 板
    作者: 114.36.251.66 (台灣) 2017-01-08 18:33:44
    以下都是我夢到的,如有雷同純屬巧合 昨天晚上突然夢到強者我朋友 強者我朋友在一家全球知名科技公司上班 他跟我說該公司幾年前實施了用OpenOffice全面替換Office的策略 從此以後公司內部要買O …
    26F 10推
  • +18 Re: [請益] 為什麼台灣沒轉型成功? - Tech_Job 板
    作者: 36.224.98.110 (台灣) 2015-11-20 22:05:18
    其實應該是因為一轉很容易,二轉很難 一轉的模式很簡單,搭上全球化列車,吸引外資,做代工產業 這種模式在二戰結束開始就是這樣搞,先是日本製造業 然後台灣跟韓國製造業跟後來的電子製造業,接下來中國,接下來 …
    44F 18推
  • +6 Re: [面試] 一些台商外商軟體公司 - Soft_Job 板
    作者: 203.196.98.32 (日本) 2015-06-11 13:04:17
    : : : : 35 其實global職缺不會比較難,只不過面試的內容有很大的不同,面試問的東西也比較多 之前有去面試幾間國外頂尖的公司(FLAG之類的),雖然最後on site沒過關,但是準備的 過 …
    23F 6推
  • +35 [外絮] Ibaka的快速復原是正常的嗎? - NBA 板
    作者: 118.165.199.201 (台灣) 2014-05-31 01:37:13
    作者本身是藥劑師,工作是研究藥,也有在大學教藥學,所以是有專業知識的 他說根據經驗,Grade 2 strain NBA從來沒有人一個月內回來過,更別說兩星期 要是雷霆隊醫有什麼神奇療法,其他隊隊醫 …
    65F 36推 1噓
點此顯示更多發文記錄
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇