Friday, October 12, 2018

Software Engineering Task Orders


Stage 1
(1) end-to-end test
(3) CI/CD -> cloud formation
(4) linter

Stage 2
(1) unit test
(2) cloudwatch filtering/alarm

Stage 3
(1) integration test
(2) profiling
(3) automatic document generation


開發軟體總是需要做一些軟體工程的事情,不過,通常總是有一些壓力讓我沒有辦法事事做到完美。於是我自己弄了一個排序。如果有時間的話,先做哪些、後做哪些。 stage 1 是我覺得最重要、最該先做的。 stage 2 是我覺得可以拖一下的。stage 3 是行有餘力才做的。

為什麼 stage 2 可以拖一下呢?
(*) 以 unit test 來講,如果已經有 end to end test 並且加上可以用環境變數關閉的 debugging log ,某種程度來講,也可以把該測的程式碼測到乾淨。沒有 unit test 似乎也沒有這麼嚴重了,因為已經有了替代方案了。

(*) cloudwatch 的 filtering/alarm 的話,這個通常是設計用來抓出某些本來預期不會發生的錯誤、或是超大的流量發生的情況。但是,專案剛開始發展的時候,流量有時候也不大,所以可以拖一下。在 Erlang  的設計哲學裡,這部分設計應該算是所謂的「故障曝光性質」 (failure status property) 與「持久存儲性質」 (stable storage property)  ,算是直接要設計在 programming language layer 的東西,而不是要設計在 infrastructure layer 的東西。

為什麼 stage 3 可以拖更晚呢?
(*) 專案在「探索期」的時候,對資料庫的查詢,可能會快速地一直更換,太早加上 integration test ,有時候也太費力了,因為加上去了,總是要維護吧?
(*) 如果專案沒有效能瓶頸,profiling 沒有做也還好吧?
(*) 如果專案還沒有長太大,沒有自動產生的文件,似乎也不太嚴重。