1.1 軟件 = 程序 + 軟件工程
書中作者舉例子解釋軟件笑诅、程序调缨、工程的關(guān)系,我也舉一個吆你。假設(shè)我現(xiàn)在想寫點博客弦叶,就搭建了一個簡易的博客編輯器。后來張三覺得很好用妇多,就問我能不能加上支持markdown的功能伤哺,李四也想用,問我能不能加上評論功能者祖,王五說他想要rss訂閱功能立莉。。七问。等等蜓耻。慢慢的就發(fā)展成為一個龐大的復(fù)雜系統(tǒng)。
一開始寫的簡易版可以理解為一個程序械巡,這些朋友就是用戶刹淌,還給我提了很多需求,現(xiàn)在這個博客軟件的功能就變得很強大了坟比。
但是,繼續(xù)開發(fā)這個軟件的工程也將變得更加困難和復(fù)雜嚷往。我要想實現(xiàn)這些朋友的需求葛账,我需要好好的設(shè)計一個合理的軟件架構(gòu),還有軟件實現(xiàn)皮仁,還要找一個管理代碼的工具籍琳,開發(fā)完之后還要軟件測試菲宴,最后可能還要同時支持多語言國際化,最最后趋急,軟件出了問題肯定都得找我喝峦,我還得維護運營。以上這系列過程就是軟件的生命周期呜达。在這周期里谣蠢,得有人負(fù)責(zé)軟件項目管理。以上這些活動都是軟件工程的核心部分查近。
軟件 = 程序 + 軟件工程
我花這么多精力做了這么好的軟件眉踱,怎么賺錢呢?先試用再交錢霜威?全免費開源谈喳?免費用但是要看我的廣告?這些都是屬于商業(yè)模式的范疇戈泼。
軟件企業(yè) = 軟件 + 商業(yè)模式
一個軟件從idea到商業(yè)要經(jīng)歷四個階段婿禽,和人類的飛天夢想類似。從紙飛機到熱氣球大猛,從萊特兄弟的飛機到現(xiàn)代化的航空業(yè)扭倾。
玩具階段:寫一個 "Hello world!"
業(yè)余愛好階段:寫一個博客系統(tǒng)
探索階段:行業(yè)創(chuàng)新出現(xiàn)新技術(shù)
產(chǎn)業(yè)階段:Windows操作系統(tǒng),電子商務(wù)系統(tǒng)
一架成熟的商用飛機要經(jīng)過很多工序胎署,幾十萬零件組裝檢測試飛等吆录。書中舉例子,頗有諷刺意味琼牧。如果一個飛機工程師在飛機工作時從引擎里爬出來說:“繼續(xù)飛吧恢筝,我搞定了【薹唬”我想這樣的飛機沒人敢坐撬槽。在軟件行業(yè)中,卻有大量的工程師以這樣的行為自豪趾撵。(我認(rèn)為這里是指很多開發(fā)者在生產(chǎn)環(huán)境中修改軟件)
以上提到的部分專有名詞:
- 需求分析(Requirement Analysis)
- 軟件架構(gòu)(Software Architecture)
- 軟件設(shè)計與實現(xiàn)(Software Design, Implementation and Debug)
- 源代碼管理(Source Code Control)
- 軟件測試(Test)
- 軟件維護(Software Comprehension)
- 服務(wù)運營(Service Operation)
- 軟件的生命周期(Software Life Cycle, SLC)
- 軟件項目管理(Project Management)
- 用戶體驗(User Experience)
- 國際化和本地化(Globalization & Localization)
1.2 軟件工程是什么
把系統(tǒng)的侄柔、有序的、可量化的方法應(yīng)用到軟件的開發(fā)占调、運營和維護上的過程暂题。
1.2.1 特殊性
復(fù)雜(Complexity)
大型軟件有超百萬行代碼,而人一次只能閱讀幾十行而已究珊。不可見(Invisibility)
源代碼經(jīng)過編譯以機器指令的方式在cpu上運行薪者,而工程師在找bug時只能看見源代碼和很少的錯誤信息,所以要靠工程師的想象力和強大的推理能力剿涮。易變(Changeability)
因為需求經(jīng)常變化言津,軟件看起來非常容易改動攻人,以為會比改動硬件容易,但實際上正確的修改軟件非常困難悬槽。服從(Conformity)
軟件需求運行在硬件上不能獨立存在怀吻,要服從系統(tǒng)中其他組建要求,還要服從用戶的要求初婆,行業(yè)的要求蓬坡。非連續(xù)性(Discontinuity)
有時小小的變化會導(dǎo)致軟件發(fā)生極大的變化
以上這些特性都是決定軟件工程的本質(zhì)問題,其他的問題例如編程語言烟逊,開發(fā)工具渣窜,存儲介質(zhì)等等都是普通特性。
1.2.2 軟件工程與計算機科學(xué)的關(guān)系
前者偏實踐宪躯,后者篇理論乔宿。計算機理論進展促進軟件工程的進展,而軟件工程的進展反過來更好的幫助計算機理論的實驗與探索访雪。
1.2.3 知識領(lǐng)域
- Software requirements
- Software design
- Software construction
- Software testing
- Software maintenance
- Software configuration management
- Software engineering management
- Software engineering process
- Software engineering models and methods
- Software quality
- Software engineering professional practice
- Software engineering economics
- Computing foundations
- Mathematical foundations
- Engineering foundations
前十二項描述軟件學(xué)科本身的知識領(lǐng)域详瑞。后面三項是基礎(chǔ)知識:計算基礎(chǔ)、數(shù)學(xué)基礎(chǔ)和工程基礎(chǔ)臣缀。
1.2.4 目標(biāo)
It's not a bug, it's a feature!
我們的目標(biāo)當(dāng)然是創(chuàng)造好軟件坝橡!
- 用戶滿意度
- 可靠性
- 可維護性
- 軟件流程的質(zhì)量
總結(jié)
通過學(xué)習(xí)軟件工程做到以下三點:
- 研發(fā)出符合用戶需求的軟件
- 在預(yù)計時間內(nèi)發(fā)布‘足夠好’的軟件
- 能證明軟件是可維護的和持續(xù)發(fā)展的