第1次軟工做業

項目 內容
所屬課程 2019春季計算機學院軟件工程(任健)(北京航空航天大學)
做業要求 這裏
課程目標 提高本身的編程水平,拿一個合適的分數
這個做業在哪一個具體方面幫助我實現目標 對軟件工程有一個簡單的瞭解,查了不少資料

1. 快速看完整部教材,列出你仍然不懂的5到10個問題。

我以爲這本書寫的十分好,內容由易到難,按部就班,十分適合對這方面尚未什麼太多瞭解的初學者使用。我在第一遍快速閱讀本書時以爲沒有什麼太大的疑問,大部份內容都言之有理,書籍質量十分高。可是題目要求列出至少5個不懂的問題,所以我又比較仔細地讀了一遍全書,提出了這些問題:css

1. 關於結對編程和代碼複審

書中這樣提到了這樣一段話:
既然代碼複審能發現這麼多問題,有這麼好的效果,若是咱們每時每刻都處在代碼複審的狀態,那不是很好麼?事實上,極限編程(Extreme Pro-gramming)正是這一思想的體現—爲何不把一些卓有成效的開發方法用到極致(Extreme),讓咱們無時不刻地使用它們?
書中說結對編程是一種進化到極致的代碼複審,至關於無時無刻不在代碼複審。衆所周知代碼複審能找到許多問題,但是無時無刻的代碼複審真的效率更高嗎?我以爲結對編程還要面對兩我的思路不一樣,理解速度不一樣,寫代碼速度和思考的速度不一樣等問題。好比邏輯簡單,難度低,出bug機率低或者以前寫過相似的功能的部分,多人並行的效率是否更高呢?我以爲一個程序核心代碼使用結對編程,非核心部分分開編寫並測試效率是否是更高呢?html

2. 軟件開發流程(5.3章)

我以前曾經上過外系的一門選修課:系統工程概論。我認爲軟件開發也是一門系統工程,好比系統工程中常見的五個階段以及經典的V字模型:結構分解與定義,結構綜合與驗證與軟件開發過程也有相通之處。我比較好奇系統工程的方法和書中的軟件開發流程的關係,以及敏捷開發是不是比系統工程方法更先進。linux

3. 目標人羣與大膽作減法

書中在第12章中提出要找準目標人羣,同時也說你們平時都說要向某某大師或某某產品學習,把最重要的功能作好交給用戶,把那些可有可無的功能藏起來,作減法…可是作減法適應更多人羣可能也會失去原來目標人羣的興趣,例如減去了原來頗有意思的功能。在經濟管理中咱們瞭解到了有一種需求是興奮需求,能極大的刺激人們的購買慾望,但是在這裏它無疑是最容易被作減法砍掉的。那麼咱們應該如何肯定到底該減什麼?git

4. 關於創新(16章)

書中這樣提到了創新:可是統計數據代表,70%的創新者說,他們最成功的創新,是在他們的拿手領域以外發現的。蒂姆·伯納斯-李是一個物理學家,他在1989年3月提出了一個想法,想利用超文本(HyperText)實現方便的信息共享和更新。他的老闆看了以後,說"Vague, but exciting."這裏有兩個問題,一是如何保證本身的創新被採納。若是創新者的創新是在他們的拿手領域以外發現的,那麼該如何說服那些領域內大佬聽取本身的創新?第二個問題是舉例不妥。蒂姆·伯納斯-李實際上在開發超文本以前是一個軟件工程師。根據 維基百科 畢業後,伯納斯-李在多塞特郡普爾的Plessey電信公司擔任工程師。1978年,他加入多塞特郡芬當的D. G. Nash公司,替打印機編寫了排版軟件. 雖然他是物理學士學位,可是看上去他畢業之後就轉行了,而且在上學期間本身組裝了電腦。 並且他加入CERN是做爲獨立承包商而不是一個物理學士畢業生。web

5. 關於團隊(17章)

在17章中講了團隊合做的幾個階段,好比假團隊什麼的。那麼在實際遇到了假團隊時應該主動走人或者撕破臉嗎?會不會錯失磨合成真團隊的機會,或者讓本身在他人口中的名聲變差?仍是說應該撐下去等着呢?這個期限又是多少?編程

2. 請問 「軟件」 和 「軟件工程」 這些詞彙是如何出現的 - 什麼時候、何地、何人?

Tukey's 1958 paper "The Teaching of Concrete Mathematics" contained the earliest known usage of the term "software" found in a search of JSTOR's electronic archives, predating the OED's citation by two years.
The earliest known publication of the term "software" in an engineering context was in August 1953 by Richard R. Carhart, in a Rand Corporation Research Memorandum.
根據 維基百科 的內容,軟件這個單詞早在上世紀五十年代就已經出現。Richard R. Carhart 或 John Tukey 被認爲是最先提出該概念的人。
而根據 這篇博客 中的內容,
你是在這段期間發明了「軟件工程」一詞嗎?
A:軟件在這個計劃的初期還被看成初初學步的孩子通常對待,徹底不像其餘工程學科;例如像硬件工程那樣的受到重視,並且在你們的眼光中他就像是藝術、魔術通常,而不是一門科學。
我一直以來堅信這項發明流着藝術與科學的血液,雖然當時不多人是這麼想。所以,我致力於爲軟件以及那些發明者爭取應有的正統性與尊重,因此我開始使用「軟件工程」這樣的字眼來將之與硬件還有其餘工程學類作出區別。
當我第一次使用這樣的語詞時,你們都以爲有些可笑,甚至有很長一段時間被看成笑話。他們常笑我極端的想法。但最終,軟件學科確實獲得了應有的尊重!

Margaret Hamilton 被認爲是軟件工程一詞的發明者,她1969年左右開發阿波羅11號程序時發明了該詞。
然而,根據 維基百科 中的內容,軟件工程這個詞可能還有其餘許多發明者。
The origins of the term "software engineering" have been attributed to various sources. The term "software engineering" appeared in a list of services offered by companies in the June 1965 issue of COMPUTERS and AUTOMATION and was used more formally in the August 1966 issue of Communications of the ACM (Volume 9, number 8) 「letter to the ACM membership」 by the ACM President Anthony A. Oettinger;, it is also associated with the title of a NATO conference in 1968 by Professor Friedrich L. Bauer, the first conference on software engineering. Margaret Hamilton is the person who came up with the idea of naming the discipline, 「software engineering」, as a way of giving it legitimacy. At the time there was perceived to be a "software crisis".The 40th International Conference on Software Engineering (ICSE 2018) celebrates 50 years of "Software Engineering" with the Plenary Sessions' keynotes of Frederick Brooks and Margaret Hamilton.
我更傾向於這些詞彙是一個羣體在交流時自發造成的共識,是一個羣體的共同產物,而沒有一個特定的創造者。服務器

3. 【附加題】:你們知道了軟件和軟件工程的起源,請問軟件工程發展的過程當中有什麼你以爲有趣的冷知識和故事?

我想到了Ken Thompson 在UNIX和編譯器插入後門的故事了。我講故事的水平比較低,所以就直接引用別人講的故事了。
Ken爺爺有段佳話:裝了UNIX的PDP-11最先被安裝在Bell Lab裏供你們平常使用。很快你們就發現Ken爺爺總能進入他們的賬戶,得到最高權限。Bell Lab裏的科學家都心比天高,固然被搞得鬱悶無比。因而有高手怒了,跳出來分析了UNIX代碼,找到後門,修改代碼,而後從新編譯了整個UNIX。就在你們都覺得「這個世界清淨了」的時候,他們發現Ken爺爺仍是垂手可得地拿到他們的賬戶權限,百思不解後,只好繼續鬱悶。誰知道這一鬱悶,就鬱悶了14年,直到Ken爺爺得到圖靈獎以後,發表本身獲獎感言時道出個其中原因。原來,代碼裏的確有後門,但後門不在Unix代碼裏,而在編譯Unix代碼的C編譯器裏。每次C編譯器編譯UNIX的代碼,就自動生成後門代碼。而整個Bell Lab的人,都是用Ken爺爺的C編譯器。
參考來源: Ken Thompson的故事 , The Ken Thompson Hack 網絡

4. 上網調查一下目前流行的源程序版本管理軟件和項目管理軟件都有哪些, 各有什麼優缺點?

目前流行的源程序版本管理軟件有 Git, SVN, Microsoft TFS, Mercurial, Trac 等。因爲我沒有使用過Git之外的工具,下面的內容優缺點的部分主要是對網上資料的整理和總結。app

使用人數估計

我找到了StackOverflow公佈的 2017 2018 年的調查數據,其中包括了對於所使用的版本管理工具的調查。我沒有找到原始數據,所以以截圖的形式給出。
2018-all.PNG
2018-prof.PNG
2017-all.PNG
2017-prof.PNG
由圖中可見不管是不是專業開發者,Git的用戶遙遙領先並不斷增長,而其餘版本管理工具都比較少。可見Git確實有其出衆之處。less

優缺點

維基百科:版本控制軟件比較 中列舉了詳細的各類版本控制軟件比較,包括支持功能,維護狀態,用戶界面,歷史與用戶等等,然而有些過於專業了。

Git

一個常見的版本控制軟件
優勢主要有:

  • 分支切換快,分支都在本地保存,適合小實驗。
  • 支持普遍,被大量現代IDE支持,使用起來方便。
  • git更加分佈式,容災好。

缺點有:

  • 保密性不夠好,容易不當心泄露程序中的帳號,密碼,開發機路徑等,而刪除這些敏感信息時要把每一個commit都檢查一遍。
  • 分佈式一樣致使了敏感信息一旦被clone,就會在某處留下備份。

SVN

優勢:

  • 對中文支持好,操做簡單,使用沒有難度,美工人員,產品人員,測試人員,實施人員均可輕鬆上手。
  • 使用界面統一,功能完善,操做方便。
  • 有嚴格的權限管理

缺點:

  • 不適合代碼管理(適合項目管理)
  • 使用中心服務器,容災較差。

Microsoft TFS

優勢:

  • TFS是一個應用軟件生命週期管理(ALM)軟件,是一個軟件研發平臺產品,其功能覆蓋了軟件研發過程當中的全部環節(包括源代碼管理)和全部角色
  • 比SVN更加易用
  • 支持代碼評審,bug追蹤等複雜功能
  • 支持Git等,有擴展性

缺點:

  • 搭建複雜,硬件需求較高

    Mercurial

    優勢:
  • 更輕鬆的管理。
  • 採用分佈式系統,更健壯。
  • 對網絡的依賴性更低。

缺點:

  • Mercurial倉庫中尚不支持Pack操做,當倉庫中小文件很是多的時候,分散存儲會致使空間浪費
  • 以Revlog方式存儲的changelog,子版本與父母版本之間是經過Revlog字段p1和p2進行連接的,有被篡改的風險。
  • Mercurial一開始的設計是不支持分支操做的,若是須要分支,就須要從新克隆Mercurial倉庫。

Trac

優勢:

  • 很是靈活

缺點

  • 功能較弱

題目中還提到了Github, Bitbucket, Bugzilla, Rational, Apple XCode等。其中Github和Bitbucket是網絡源代碼託管服務,區別是更加註重於公開倉庫與私有倉庫,Bugzilla是用於軟件缺陷的追蹤管理網絡程序。Rational 好像是一個IBM開發的專有軟件,考慮到IBM軟件如SPSS的模式,這應該是一個專業性很強的平臺。Apple XCode好像是一個IDE,支持主流版本管理系統。
參考資料:SVN和Git 介紹,區別,優缺點,適用範圍總結,比較TFS與SVN,你必須知道的10點區別,管理軟件的優缺點,Mercurial與TortoiseHg簡介,分佈式版本控制系統Mercurial介紹與使用小記,CVS,GIT,Mercurial和SVN比較,分佈式版本管理工具的內涵【二】Mercurial篇

相關文章
相關標籤/搜索