什麼是軟體開發
軟體開發是根據使用者要求建造出軟體系統或者系統中的軟體部分的過程。
軟體開發是一項包括需求捕捉,需求分析,實作和測試的系統工程
軟體開發有哪些困難?
軟體開發的本質困難
複雜性
不可見性
可變性
一緻性
The Mythical Man-Month 人月神話Frederick P.Brooks.J:
對本質難題的進一步分析
三個本質難題因項目而異
四大學質難題互相促進
本質難題的變化帶動軟體方法(過程)演變
軟體項目管理和軟體過程管理

軟體發展三大階段
軟硬體一體化階段(50年代~70
年代)
軟體完全依附于硬體
軟體作坊
軟體成為獨立的産品(70年代~90年代)
網絡化和服務化(90年代中期迄今)
軟體完全依附于硬體
軟體應用典型特征
軟體支援硬體完成計算任務
功能單一
複雜度有限
幾乎不需要需求變更
·軟體開發典型特征
◆硬體太貴
◆團隊以硬體工程師和數學家為主
軟體作坊
·軟體應用典型特征
功能簡單
規模小
很多非專業領域的人員湧入軟體開發領域
進階程式語言出現
質疑權威文化盛行
典型軟體過程和實踐
“Code and fix”
軟體成為獨立産品
軟體應用特征
擺脫了硬體束縛(OS)
功能強大
規模和複雜度劇增
個人電腦出現 –> 普通人成為軟體使用者
·需求多變
·相容性要求
來自市場的壓力
·方法之一:形式化方法
·方法之二:結構化程式設計和瀑布模型
網絡化和服務化
·軟體應用特征
◆功能更複雜,規模更大使用者數量急劇增加(這會帶來什麼問題?)
◆快速演化和需求不确定
◆分發方式的變化(SaaS)
疊代式:大型軟體系統的開發過程也是一個逐漸學習和交流的過程,軟體系統的傳遞不是一次完成,|而是通過多個疊代周期,逐漸來完成傳遞。
更深化的網絡化和服務化
軟體應用典型特征
随處可見(pervasive)
使用者需求多樣性進一步凸顯
軟體産品和服務的地位變化
錯綜複雜的部署環境
近乎苛刻的使用者期望
多:功能豐富
快:快速使用,及時更新
好:穩定,可靠
省:使用者的獲得成本低,最好免費
◆空前強大的開發和部署環境——XaaS
·IaaS
·PaaS
·SaaS,FaaS,etc.
盛行開源和共享文化
盛行靈活
軟體工程的潛在支撐力量獲得了長足進步(AI,
Bigdata,Cloud,etc.)
典型軟體過程和實踐—DevOps
·方法論基礎是靈活軟體開發、精益思想以及看闆
Kanban方法。
·以領域驅動設計為指導的微服務架構方式
大量虛拟化技術的使用
·一切皆服務XaaS(Xas a Service)的理念指導
·建構了強大的工具鍊,支援高水準自動化
The Three Ways-The First Way
·概念
充分了解工作流(開發-運維客戶)
流量最大化(小批量、縮小任務間隔、缺陷控制)
不斷為了整體目标的實作而優化工作流
·部分關鍵實踐和方法
持續建構、內建以及傳遞;
按需建立環境;
限制半成品(WIP);
建構支援順利變更的安全系統;看闆(任務可視化)
The Three Ways-The Second Way
概念
價值流(開發-運維-客戶)的快速持續回報
避免問題再次發生
(或者快速發現和修複)
從源頭上保證品質
部分關鍵實踐和方法
适時停止生産線
持續改進
建構自動化測試套件,確定代碼随時可部署
Dev和Ops共享目标和pain
遠端監測手段(自動化)