20181113-1 版本控制報告
專案名:弾球學成語
組名:楊老師粉絲群
組長:喬靜玉
組員:吳奕瑤、公冶令鑫、楊磊、劉欣、劉佳瑞、盧帝同、張宇
一、回答問題
問題:
0、如果你的團隊來了一個新隊員,有一臺全新的機器, 你們是否有一個文件,只要設定了相應的許可權,她就可以根據文件,從頭開始搭建環境,併成功地把最新、最穩定版本的軟體編譯出來,並執行必要的單元測試? (在這過程中,不需要和老隊員做任何交流)
回答:
沒有,我們並沒有準備這樣一個文件。因為Alpha階段實現功能有限,有新成員加入的話,通過老隊員的指導(僅需一名老隊員即可),就能快速(此處快速指新隊員加入團隊後,第一次每日例會當天)使新隊員瞭解在此之前各個隊員完成了哪些功能。至於原始碼,組長會迅速把新隊員的coding.net賬號新增到我們的專案中(此處快速指新隊員加入團隊後,第一次每日例會當天),新隊員可自由拖拽全部程式碼。題目要求的文件我們團隊會盡快製作出來,在對專案的瞭解過程中,新老隊員可以共同探討研究。
1、你的團隊的原始碼控制在哪裡?用的是什麼系統?如何處理檔案的鎖定問題?
回答:
團隊專案在 coding.net 上進行託管,採用 git 的方式進行版本控制。
使用 win7 及以上系統。
團隊檔案不會鎖定,每個組員可自由簽入和簽出。這樣既保證了專案開發的效率,也便於組內成員相互交流。
2、如何看到這個檔案和之前版本的差異? 如何看到程式碼修改和工作項 (work item),缺陷修復 (bug fix) 的關係。
回答:
TortoiseGit 可以檢視某個檔案的版本變更。如圖所示選單的前3個選單項主要用於將該版本的檔案與其他版本進行對比(檢視具體做過哪些修改、修改部分會以高亮顯示)。
3、如果某個檔案在你簽出之後已經被別人修改,並且簽入了,那麼你在簽入你的修改的時候, 如何合併不同的修改(merge)? 你用了什麼工具來幫助你?
回答:
Git可以對有簡單不同的修改進行自動合併,但對於有邏輯衝突的部分將會給出conflict的提示,這時需要手動解決衝突。
4、你有20個檔案都是關於同一個功能的修改,你要如何保證這些檔案都同時簽入成功(修改的原子性),或者同時簽入不成功? 場景: 程式設計師果凍要簽入 20 個檔案,他一個一個地簽入, 在簽入完5 個 .h 檔案之後, 他發現一些 .cpp 檔案和最新的版本有衝突,他正在花時間琢磨如何合併... 這時候, 程式設計師小飛從客戶端同步了所有最新程式碼, 開始編譯, 但是編譯不成功 - 因為有不同步的 .h 檔案和 .cpp 檔案! 這時候, 別的程式設計師也來抱怨同樣的問題,果凍應該怎麼辦? 回答: 團隊尚未出現過這種情況。Git 本身就可以保證簽入時的原子性,此外簽入前儘量與組內隊員進行協商。 5、你的PC 上有關於三個功能的修改, 但是都沒有完成,有很多檔案處於半完工的狀態,這時你要緊急修改一個新的 bug,如何把本地修改放一邊,保證在乾淨的環境中修改這個 bug, 併成功地簽入你的修改 --- changelist management。 回答: 此時需要在本地建立一個新分支,在新分支上修復新 bug。 6、規範操作和自動化 你的團隊規定開發者簽入的時候要做這些事情: - 執行單元測試,相關的程式碼質量測試。 - 程式碼複審 (要有別的員工的名字) - 和這次簽入相關的issue 編號, 任務/task, 缺陷/bug 編號,等等, 以備查詢。 請問你的團隊有這樣的自動化工具讓開發者方便地一次性填入所有資訊然後提交麼? (高階功能, 程式碼提交之後, 相關bug 的狀態會改動為 “fixed”, 並且有連結指向這次簽入。) 回答: 目前還沒有。在以後的開發中會進行嘗試。 7、如何給你的原始碼建立分支? 場景:你們需要做一個演示,所以在演示版本的分支中對各處的程式碼做了一個臨時的修改, 同時,主要的分支還保持原來的計劃開發。 你們怎麼做到的? 在演示之後,演示版本的有些修改應該合併到主分支中,有些則不用,你們是怎麼做到的? 場景: 你們的軟體釋出了,有很多使用者,一天,一個使用者報告了一個問題,但是他們是用某個老版本,而且沒有條件更新到最新版本。 這時候,你如何在本地構建一個老版本的軟體,並試圖重現那個問題? 回答: 在coding.net 上可以構建新分支。 本地都構建老版本 可以用 Git 進行版本回退。 8、一個原始檔,如何知道它的每一行都是什麼時候簽入的,為了什麼目的簽入的 (解決了哪個任務,或者哪個bug)? 場景: 一個重要的軟體歷經幾年,幾個團隊的開發和維護,忽然出現在某個條件下崩潰的事故, 程式設計師果凍經過各種debug手段,發現問題是在某一個檔案中有一行程式碼似乎顯然出了問題, 但是這個模組被很多其他模組呼叫, 這行程式碼是什麼時候,為了什麼目的,經過誰簽入的呢? 如果貿然修改, 會不會導致其他問題呢? 怎麼辦? 回答: 最後簽入時會有commit的記錄保留,在此可以知道是什麼時候簽入的。簽入時會有標籤註釋,可知道簽入目的。 此外 coding.net 上會有每人每次的提交記錄。 9、如何給一個系統的所有原始檔都打上標籤,這樣別人可以同步所有有這個標籤的檔案版本? 程式碼每天都在變, 有時質量變好,有時變差,我們需要一個 Last Known Good (最後穩定的好版本) 版本, 這樣新員工就可以同步這個版本, 我們如果需要釋出,也是從這個版本開始。 那麼如何標記這個 Last Known Good 版本呢? 回答: 可以在 Last know Good版本時建立分支,需要的時候從最後一個Last know Good版本匯出,以此作為最終穩定版。 此外還可以通過大家在每日立會時的討論確定哪一個為 Last know Good版本。 10、你的專案的原始碼和測試這些程式碼的單元測試,以及其他測試指令碼都是放在一起的麼? 修改原始碼會確保相應的測試也更新麼?你的團隊是否能部署自動構建的任務? 回答: 我們團隊目前只有單元測試指令碼,沒有其他的測試指令碼,測試由各組員手動完成。 11、分析比較各種軟體構建環境: 回答: coding.net 是老師推薦的,使用感良好。目前對Github 無興趣。
二、報告
1、α階段以及β階段(第一週)checkin次數記錄
α階段checkin次數記錄 |
||||||||
日期 |
喬靜玉 |
吳奕瑤 |
劉佳瑞 |
公冶 令鑫 |
楊磊 |
楊金銘 |
張宇 |
盧帝同 |
2018.10.16 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.10.17 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.10.18 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.10.19 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
2018.10.20 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.10.21 |
2 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
2018.10.22 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
2018.10.23 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
2018.10.24 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.10.25 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
2018.10.26 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
0 |
2018.10.27 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
2018.10.28 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.10.29 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.10.30 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.11.1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
β階段(第一週)checkin次數記錄 |
||||||||
日期 |
喬靜玉 |
吳奕瑤 |
劉佳瑞 |
公冶 令鑫 |
楊磊 |
楊金銘 |
張宇 |
盧帝同 |
2018.11.14 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.11.15 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.11.16 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2018.11.17 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
2018.11.18 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
2018.11.19 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
2018.11.20 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
2、checkin log
時間 |
人員 |
message |
所屬功能 |
Oct 19 20:56:35 |
wuyy694 (吳奕瑤) |
Initial commit
|
在coding.net上建立遠端倉庫,並將小組成員加入其中;建立新的分支 |
Oct 19 22:52:35 |
gongylx (公冶令鑫) |
|
遊戲介面功能實現 |
Oct 20 22:13:49 |
Qiaojingyu(喬靜玉) |
背景音樂 |
設定介面功能實現 |
Oct 21 00:53:26 |
Qiaojingyu(喬靜玉) |
背景音樂 |
設定介面功能實現 |
Oct 21 00:58:29 |
Qiaojingyu(喬靜玉) |
更新 |
設定介面功能實現 |
Oct 21 21:54:57 |
_Zy (張宇) |
更新背景BUG |
主介面功能實現 |
Oct 22 22:15:41 |
luditong (盧帝同) |
更新Start按鈕 |
主介面功能實現 |
Oct 23 19:01:10 |
Ljr6899 (劉佳瑞) |
小球加文字功能 |
遊戲介面功能實現 |
Oct 24 22:41:24 |
Wuyy694 (吳奕瑤) |
成語變換 |
遊戲介面功能實現 |
Oct 25 00:41:13 |
_Zy (張宇) |
開始介面更新 |
主介面功能實現 |
Oct 26 23:33:05 |
Jimmy (楊金銘) |
關於我們 |
“關於我們”介面功能實現 |
Oct 27 13:52:11 |
luditong (盧帝同) |
更新遊戲介面背景+修改小球碰壁bug |
主介面功能實現 遊戲介面功能實現 |
Oct 29 22:02:45 |
Qiaojingyu(喬靜玉) |
Alpha |
主介面功能實現 遊戲介面功能實現 設定介面功能實現 “關於我們”介面功能實現 |
Nov 17 00:02:05 |
gongylx (公冶令鑫) |
add music |
新增背景音樂 |
Nov 17 22:35:15 |
yanglei749 (楊磊) |
修改背景音樂 |
更改遊戲介面圖 新增背景音樂 |
Nov 18 14:47:02 |
_Zy (張宇) |
增加暫停功能(pause) |
新增暫停功能 |
Nov 19 12:48:57 |
luditong (盧帝同) |
更新暫停 |
新增暫停功能 |
3、小組成員程式碼量貢獻
(1)資料表
小組成員 |
實際程式碼量(行) |
吳奕瑤 |
482 |
喬靜玉 |
309 |
張宇 |
217 |
公冶令鑫 |
212 |
盧帝同 |
209 |
楊磊 |
174 |
楊金銘 |
139 |
劉佳瑞 |
23 |
(2)餅狀圖