2009年8月22日 星期六

系統架構設計的開始

從零開始的時候,系統架構設計分為幾種方式:

1.分析Use case:

從需求面去設計一個系統的架構,常用的工具是use case。也就是從use case去分析出所需要的架構。要盡量知道所有的use case,需要使用activity diagram以及state chart來尋找出符合需求的use case。然後一個接著一個地去分解出子系統,並依樣畫葫蘆尋找子系統中的use case。一個主系統中單獨的一個use case可以分解出一些存在於子系統中的use case,而這些子系統中的use case正是滿足主系統中的單一user case。如果系統很大,子系統中還可以再分解出子系統。如果使用package,可以將某個(些)use case以及跟它相關的actors, activity diagrams, statecharts, and sequence diagrams通通打包起來,並賦予package名稱以便管理。

2009年8月9日 星期日

沒有版本管理,情況三

情況三:

FAE:ㄟ~Magic,上次QA發行後的版本,客戶那邊發生一些問題耶。你可不可以給我更早以前的
版本。然後給客戶更新試試看會不會當。
Magic:(心想)靠杯...忘記備份那時候的code了...。這之前又改了一堆東西,要我怎麼回溯阿....只能找小叮噹了...

Ans:如果有使用版本管理軟體,絕不會發生這個問題,因為你能夠找出送測當下所有的code,並將之抓出,然後建構出當時的環境。如果發現到舊版本不會有這個新版本的問題,那就知道可能有人改出side effect。此時就可以發揮版本管理的威力,因為你能夠利用revert之類的功能,將某些檔案回溯到某個版本,如此就可找出是誰的包。否則到時一定又要上演羅生門的戲碼,不僅沒有效率,又會降低團隊的士氣。

沒有版本管理,情況二

情況二:

喇叭主管: 我排定下禮拜要送測,請Magic蒐集大家的code,建置好系統送測。
Magic: 好。
其他人: ...。

------------------送測前一個禮拜----------------
Hero: Magic~~我改好了xxbug,幫我更新一下
Apple: Magic~~我上次給你的那個code幫我復原一下,我搞錯了不好意思...
Doramon: Magic~~我換了你新給我的環境會掛掉耶...

------------------送測前1天----------------
Apple: Magic~~我改好了xxbug,幫我更新一下
Hero: Magic~~我上次給你的那個code幫我復原一下,我搞錯了不好意思...
Doramon: Magic~~我換了你新給我的環境會掛掉耶...

------------------送測前1小時----------------
Doramon: Magic~~我改好了xxbug,幫我更新一下
Hero: Magic~~我上次給你的那個code幫我復原一下,我搞錯了不好意思...
Apple: Magic~~我換了你新給我的環境會掛掉耶...

------------------送測後----------------
Doramon: Magic~~我改好了QA測到的xxbug,幫我更新一下...
Hero: Magic~~我改好了QA測到的xxbug,幫我更新一下...
Apple: Magic~~我改好了QA測到的xxbug,幫我更新一下...

Magic: 老闆~~我要辭職!!我這禮拜一值在幫其他人放檔案、回覆、測試,連到送測前一秒鐘都還要我更新!!我每分每秒都要專注在copy檔案,中途還不能被打斷!!甚至無法上廁所!!你是要搞死我阿!!我也有bug要解阿!!可不可以找工讀生來做這件事阿!!

喇叭主管: 那請大家前一天就給Magic 穩定的code,不準再改!!

Ans:讓我來告訴你結果,就算叫主管規定最後一天就要給穩定的code,也不可能執行的。因為總是會有人最後一秒發現bug,然後拜託Magic包版本。Magic會不包嗎? 包了,累死。不包,被幹死,說見死不救。於是喇叭主管就只能眼見Magic背著黑鍋離開,換下一個人來發行軟體。喇叭主管之所以喇叭,就是拿不出任何辦法解決Magic的問題。

我來幫Magic解決...Magic需要安裝一個版本管理的server,並且教大家如何將各自的code自己放到server上,不再透過Magic去copy、管理。Magic只需要在發行的前一分鐘,將所有的code抓下來,然後建構出大家都已經放到server上的版本來跑即可。這樣子Magic就不會累死了。


沒有版本管理,情況一

情況1: 當您遭遇到同事常常會跟你哀說:

Magic :Hero你剛剛給我的fw會當機耶!!
Hero :我這邊都不會阿!!Magic你要不要再試一次阿。

Ans: 這種問題常發生,問題不外乎就是建構環境沒有同步,此時你需要寫一套工具,可以快速的將對方的版本跟你的同步。此工具需要將環境所需要的資料、執行檔,建構出跟你的一模一樣,然後將你負責的執行檔部份,在run time時期能夠顯示你的版本名稱,如此才能在對方的環境中,證明你負責的部份在你的控制範圍內。否則你的程式在對方的環境跑,根本無法知道他跑的是不是你剛剛摳給他的。還要用比對軟體來比對,這簡直是非常累人的。如果用版本管理軟體,就可以在執行期間印出版本,然後對照版本管理軟體所記錄的歷程,是否的確解掉bug。一定要這麼做,你才能脫離夢靨。

版本管理

在嵌入式系統開發過程中,有很大的部份是軟體開發。有很多人在做嵌入式系統相關產品時,完全不會想要做版本管理。不做版本管理,是你正在演奏專案失敗的序曲。因此我在這一年的工作中,深深的感受到版本管理的重要性。我在此大概分享一下為什麼版本這麼得重要。我這邊舉一些您在專案中可能會遇到的問題,那就代表你要快點使用版本管理軟體。