什麼開發方法,
不都是來看流星跟隕石嗎?
(看阿!是流星.jpg)
不不不,我們先不討論那個,
雖然實際上真的會遇到,
就算是真的再專心使用某幾種方法,
人麻!
江湖再走,總有遇到的時候。
不過總要認識開發步驟,
才能明確知道你需要什麼步驟,
又有什麼步驟被跳過了,
生死寂滅是不可避免的,
而軟體同樣也有,
我們稱之為軟體開發生命週期(Software Development Life Cycle,SDLC),
而這個有眾多的步驟,可能會因為在意的東西不一樣會有著不同的側重點,
或是拆分得更為細緻,
但都會在一個範疇內,總體而言就是:
規劃、開發、測試、部署、運營、維護和最終淘汰(或迭代)
規劃:
在一個業務近來首先要做的就是規劃,
不論是分析該項業務,
常見的
改動範圍、時間、人力、緊急度,
依照需求的不同與完善程度,
討論的也會越發深入,
安全性評估、能用某些資源等等,
甚至會越發牽扯到其他部門,
例如是否合法,或是某項新技術的引入,
有時候技術引入不單單只是因為嘗試練習或好用,
也有可能基於業務考量需要宣傳等等。
說到這裡,
大部分人也能明白,
在規劃中絕大多數討論的內容就是專案管理三角形,
也就是所謂的成本、範疇、時間
開發:
在這就是軟體工程師的範疇,
但不代表著,喔!就是IT來打打Code,
理論上到了這裡需求都已經出現了明顯的方向,
但還是會有很多職類在這邊分工。
設計:
這邊通常會是SA(System Arcjotects)
看狀況會有SD(System Designer)、數據庫工程師(Database Administrator ,DBA、Database Engineer,DBE)、安全性工程師(SE)等等一海票的工程師出來一起討論。
編碼:
接著一個專案,就會被拆成一小塊的碎片供眾多PG(Programmer)進行,
通常會被分成前端工程師與後端工程師兩大塊,
兩者相輔相乘,沒有哪個特定比較厲害,
當然也是有我全都要的全端,或是在做完設計後再接著編碼的。
測試、部署、運營、維護和最終淘汰(或迭代)
也極度重要,
不過大多能從字面上猜測到意思,
我這就不說細節。
這邊也有許多的人員會作業,
在這邊稍微提一下很重要的QA部門,
不論是品質保證(Quality Assurance,QA)與品質管制(Quality Control,QC)
這兩個職別也非常重要,
稍微解說一下,從字面上也能了解到一定的意思,
QA主要集中在事前,確保生產出來的產品(Code)有達到保證。
QC主要集中在事後,確保生產出來的產品,品質是有控制的。
可能有些人會認為,明明有QA證明產品能用了,
為什麼還要有QC,這不是額外花費嗎?
但其實QC是很重要的,
軟體其實是一種很不穩定的產品,
在很多狀況是在正流程難以發現的,
例如最討厭的邊界效益,就常常會需要完善的壓力測試才能發現。
也有許許多多,我所沒提到的職業也在這些步驟裡,
不過真的細細寫下來過於龐大,
甚至也有在我認知之外的。
而且也不是每一次都有著那麼詳細的流程,
依據專案的大小,或是因為某些原因,可能會跳過一下步驟,
突然出現一項緊急的事物,被眼花撩亂的工作搞混自己要做什麼?
那麼作為軟體工程師,
在這龐大的循環中要怎麼堅守本心,
確保自己能在這之中堅定不疑的完成工作呢?
沒錯,就是定義,
如果定義好各個狀況,
把絕大部分事情清楚定位流程,
就能解決大部分在開發中遇到的意外,
非常令人感謝的是,
早有許多前輩整理過,
也就是我們所要討論的軟體開發方法論
曾有人說過"未知是最令人恐懼的事物。"
而軟體開發方法論,
則是帶領我們把未知變成已知的道路。
-------筆者在寫這段的時候,有稍微看過前輩的內容
https://medium.com/3pm-lab/how-to-manage-unexpected-product-change-requests-abce9ed6bd13
【產品團隊甘苦談】如何處理各種「隕石開發」的緊急要求?
https://ithelp.ithome.com.tw/articles/10185179
[Day01]資安x軟體開發生命週期x原始碼檢測