Tips | Link |
---|---|
做業鏈接 | [2019BUAA軟件工程]第1次閱讀做業 |
我的開發流程(Personal Software Process)自身的時間開銷?各個階段邊界的界定?(書 2.3節)html
在開發過程當中按照任務清單對我的每一個階段所耗時間進行較準確的記錄是一件不容易的事,所以其自己就會帶來必定的時間開銷。其困難主要體如今各個階段邊界的肯定上。在書5.3節有:git
- 各個步驟之間是分離的,但在軟件生產過程當中的各個步驟不能這樣嚴格分離出來。
- 回溯修改很難甚至不可能,但事軟件生產的過程須要時時回溯。
在開發過程當中,開發者常會在各個階段間回溯(就我而言是這樣的)。這致使處於每一個階段的時間是十分離散的。如果每次回溯都作一次記錄並且仍是要求工程師本身收集,其帶來的時間開銷顯然是不小的。如何才能有效率地在廣泛存在回溯的開發流程中記錄各個階段的耗時呢?程序員
優化與泛化的時機。(書 3.2)github
本章節提出了幾個軟件工程師的思想誤區,其中有過早優化和過早泛化。優化和泛化是編寫一個優秀的軟件應當有的步驟。而且二者都會涉及代碼的重構。就如同修復Bug同樣,越晚的重構也會帶來更多的工做量和難度。在此過程當中仍可能出現新的Bug,於是還要進行一系列的測試。其中泛化帶來的重構可能設計更多的代碼。但過早優化和泛化又會帶來書中所講的糾結於局部忽視全局的問題。那麼在軟件開發的過程進行優化和泛化的最好時機是何時?算法
結對編程兩人的分工以及輪轉效率問題。(書 4.5節)數據庫
在書中對於結對編程有如下的描述:編程
在結對編程模式下,一對程序員肩並肩、平等地、互補地進行開發工做。他們並排坐在一臺電腦前,面對同一個顯示器,使用同一個鍵盤、同一個鼠標一塊兒工做。他們一塊兒分析,一塊兒設計,一塊兒寫測試用例,一塊兒編碼,一塊兒作單元測試,一塊兒作集成測試,一塊兒寫文檔等等。服務器
在書中對於結對編程兩角色的任務有如下的描述:網絡
- 駕駛員:寫設計文檔,進行編碼和單元測試等XP開發流程。
- 領航員:審閱駕駛員文檔;監督駕駛員開發流程的執行;考慮單元測試的覆蓋率;思考是否須要和如何重構;幫助駕駛員解決具體的技術問題;設計TDD中的測試用例。
- 駕駛員和領航員不斷輪換角色,不要連續工做超過一小時,工做一小時休息15分鐘。領航員控制時間。
通常兩人合做時,每一個人的任務是按照工做爲粒度進行分工的,好比成員A負責XXX部分的開發(包括測試),成員B負責YYY部分的開發(包括測試)。每一個成員都可以用比較大塊的時間專一於項目某一部分的開發和測試。就我而言,這種大塊、連續的時間是十分必要的,由於每次開始編程時每每須要一段前期預熱來進入狀態(按照複雜度的不一樣耗費不一樣時間)。而結對編程則是按照時間粒度進行分工的,進而這種連續的時間被打斷了——駕駛員剛剛找到手感進入狀態就換人。除此以外,在項目中也有一些不適合被打斷的工做。按照書中的駕駛員領航員的例子,貌似現實中的拉力賽沒有駕駛員和領航員在比賽中途停車換位的狀況。所以,我對於結對編程所帶來的效率的提升有必定的疑惑。electron
敏捷開發中的任務規劃與推動問題。(書 6章)
在書中,做者簡述了Scrum方法論:
- 找出完成產品須要作的事情;
- 決定當前的衝刺須要解決的事情;
- 衝刺。
在Scrum中工做被細分紅多個任務,並使用燃盡圖或看板來管理。整個過程全由團隊成員根據自身狀況認領。每一個成員的能動性成爲項目推動的必要條件。但在現實中,這每每會演變成出人意料的狀態。除了可以按照理想狀態進行的狀況,我列舉出了一下兩種極易產生的人們不肯意見到的狀況:
Scrum是靠每一個成員的能動性推進的,而Scrum大師的任務僅是在人員間傳遞信息。除此以外,是否應當有某個有必定權力的人來確保衝刺的動力,以及保證任務完成順序符合內在要求?好比PM(雖然書在這部分沒說起PM的做用)?
團隊開發中我的效績的評定(書 17.6節)。
在團隊項目中,對每一個成員的效績進行相對正確客觀的評定是至關重要的。在此以前筆者曾參加過團隊項目而且擔任過一次團隊的組長。最終提交做業時老師總會要求附加一個成員工做比例的說明文件。如何將成員的工做具體到一個比例每每是個使人頭疼的事。通過查詢,在博客中博主提出了:我的績效=0.3*工做時間+0.3*任務量+0.4*任務難度的方法。我的認爲這種方法將返工所帶來的浪費計入了效績的積極項,明顯是有失穩當的。在博客中博主提出了:我的效績=工做時間*0.5+任務量*任務難度*0.5-返工率(bug數目) 的方法。這種方法雖然考慮了返工帶來的浪費,但沒法衡量我的的工做效率。好比其餘條件不變的狀況下,僅增長工做時間就能能加效績?這使人難以信服。
歸結起來,在進行我的效績的評定時有兩大角度:過程和結果。對於結果的評定已經有目標與關鍵成果法(OKR),可以進行比較準確的評定。但如何才能將工做中的過程更準確地加入至我的效績考量中?而或是無論過程只論成果呢?
程序?軟件?(來自於Cambridge Dictionary的解釋)
程序的由來:
Ada Lovelace是第一位主張計算機不僅能夠用來算數的人,發表了第一段分析機用的算法,被公認爲史上第一位認識計算機徹底潛能的人,也是史上第一位計算機程序員。同時,爲記念Ada Lovelace而命名的Ada語言是一種表現能力很強的通用程序設計語言。它是美國國防部爲克服軟件開發危機,耗費巨資,歷時近20年研製成功的。它被譽爲第四代計算機語言的最成功表明。
軟件的由來:
按照詞義上的解釋,軟件和程序的含義相近,可是軟件的概念比程序更晚出現。在von Neumann architecture和Harvard architecture的提出以及程序存儲計算機(stored-program computer)出現以後,計算機可以將程序存儲並在內存中運行。計算機的底層硬件逐漸與程序應用分離,軟件的概念逐漸產生。根據維基百科對於軟件發展的描述有:
The very first time a stored-program computer held a piece of software in an electronic memory, and executed it successfully, was 11am, 21 June 1948, at the University of Manchester, on the Manchester Baby computer. It was written by Tom Kilburn, and calculated the highest factor of the integer 2^18 = 262,144.
在《構建之法》一書中對軟件的定義爲:軟件 = 程序 + 軟件工程。如此說來,從開發的角度來看真正意義上的軟件應當是在軟件工程的提出時誕生的。
出現背景:
20世紀下半葉出現的軟件危機,軟件開發在預算、開發時間、成品質量、需求知足度、項目管理、代碼維護等方面出現巨大問題。據維基百科描述:
硬件成長率每一年大約30%,軟件每一年只勉強以4~7%速度在成長,信息系統的交付日期一再延後,許多待開發的軟件系統沒法如期開始。1960年代軟件開發成本佔總成本20%如下;1970年代軟件成本已達總成本80%以上,軟件維護費用在軟件成本中高達65%。1986年公佈的數據,全部驗收的外包軟件中,居然只有4%可用,其他96%倒是不堪一用。大部分的企業自行開發的信息系統中,有四分之三也是功敗垂成。所以軟件維護成本居高不下,軟件產品質量低落是最主要的緣由。
1995年,Standish Group研究機構以美國境內8000個軟件項目做爲調查樣本,調查結果顯示,有84%軟件計劃沒法於既定時間、經費中完成,超過30%的項目於運行中被取消,項目預算平均超出189%。
概念的提出:
1968年秋季,NATO(北約) 的科技委員會召集了近50名一流的編程人員、計算機科學家和工業界巨頭,討論和制定擺脫「軟件危機」的對策。在那次會議上第一次提出了軟件工程(software engineering)這個概念,研究和應用如何以系統性的、規範化的、可定量的過程化方法去開發和維護軟件,以及如何把通過時間考驗而證實正確的管理技術和當前可以獲得的最好的技術方法結合起來的學科。
Software | Usage | Project |
---|---|---|
GitHub | 31 million users | 100 million |
GitLab | 100,000 organizations | ------ |
Bitbucket | 6 million users | ------ |
Bugzilla | A large number | ------ |
Trac | list of uesrs | ------ |
Concurrent Versions System (CVS)
Apache Subversion (SVN)
ClearCase
Visual SourceSafe (VSS)
Team Foundation Server (TFS)