天天看點

團隊作業Week14

團隊作業Week14

0. 在吹牛之前,先回答這個問題: 如果你的團隊來了一個新隊員,有一台全新的機器, 你們是否有一個文檔,隻要設定了相應的權限,她就可以根據文檔,從頭開始搭建環境,并成功地把最新、最穩定版本的軟體編譯出來,并運作必要的單元測試? (在這過程中,不需要和老隊員做任何交流)

  這個原本是沒有的,在這裡介紹一下:

  需要配置的環境并不複雜。本地需配置好jdk(1.8)+android studio(1.5及以上版本) + android sdk(API23)即可。之後通過TFS的源代碼管理功能,将主分支映射到本地,将項目添加到android studio即可編譯運作。

1. 你的團隊的源代碼控制在哪裡?用的是什麼系統?如何處理檔案的鎖定問題?

  場景: 程式員果凍正在對幾個檔案進行修改,實作一個大的功能, 這時候,程式員小飛也要改其中一個檔案,快速修複一個問題。怎麼辦?

  一個代碼檔案被簽出 (check out) 之後,另一個團隊成員可以簽出這個檔案,并修改,然後簽入麼?

有幾種設計,各有什麼優缺點?

  例如,簽出檔案後,此檔案就加鎖,别人無法簽出; 或者, 所有人都可以自由簽出檔案

  TFS提供了一個很友善的功能。點選右鍵-簽出進行修改,彈出如是界面。選擇了對應的“鎖類型”後,可以自動加鎖,其他團隊成員也可以簽出,但是不能簽入。

  還有其它的方法,比如為其他團隊成員建立一個分支,并在各自的分支上進行修改,最後合并分支。

團隊作業Week14
2. 如何看到這個檔案和之前版本的差異? 如何看到代碼修改和工作項 (work item),缺陷修複 (bug fix) 的關系。

  場景: 程式員果凍看到某個檔案被修改了,他怎麼看到這個檔案在最近的修改究竟改了哪些地方?

  場景: 程式員果凍看到某個檔案在最新版本被改動了100 多行, 那麼和這100多行對應的其他修改在什麼檔案中呢? 這個修改是為了解決哪些問題而作的呢? 那些問題有工作項 (work item,issue),或者bug 來跟蹤麼?

場景1:可以通過将伺服器端代碼和本地代碼進行比較的方式,檢視修改的部分。

團隊作業Week14

場景2:可以在簽入時在注釋中較長的描述添加的功能/修改的BUG。也可以将更改與工作項關聯。

團隊作業Week14
3.如果某個檔案在你簽出之後已經被别人修改,并且簽入了,那麼你在簽入你的修改的時候, 如何合并不同的修改(merge)? 你用了什麼工具來幫助你?

  一個比較好的方法是:當多個成員需要對同一部分代碼進行修改時,為每一個人單獨建立一個分支,最後将分支進行合并。

團隊作業Week14

  也可以将使用“比較的功能”,找出最新代碼中新添的部分,再将自己的修改添加進去并簽入。

團隊作業Week14
4.你有20個檔案都是關于同一個功能的修改,你要如何保證這些檔案都同時簽入成功(修改的原子性),或者同時簽入不成功?

從程式設計習慣的角度:應該在本地完成全部的修改,并編譯通過後,再統一簽入到伺服器端。

從團隊合作方式的角度:可以為這些檔案統一關聯一個标簽,便于管理。還可以在簽出之前建立一個新的分支。

5. 你的PC 上有關于三個功能的修改,但是都沒有完成,有很多檔案處于半完工的狀态,這時你要緊急修改一個新的 bug,如何把本地修改放一邊,保證在幹淨的環境中修改這個 bug, 并成功地簽入你的修改 --- changelist management。

修改一件任務量較大、周期較長的任務時,在全部完成之前不要将部分代碼進行簽入。此外,可以為這項任務單獨建立一個分支。

團隊作業Week14

6. 如何給你的源代碼建立分支?

  場景:你們需要做一個示範,是以在示範版本的分支中對各處的代碼做了一個臨時的修改, 同時,主要的分支還保持原來的計劃開發。 你們怎麼做到的? 在示範之後,示範版本的有些修改應該合并到主分支中,有些則不用,你們是怎麼做到的?

  場景: 你們的軟體釋出了,有很多使用者,一天,一個使用者報告了一個問題,但是他們是用某個老版本,而且沒有條件更新到最新版本。 這時候,你如何在本地建構一個老版本的軟體,并試圖重制那個問題?

  使用TFS建立分支:

  場景1:将示範分支合并到主分支時,可以手動選擇需要添加的變更集。這時選擇我們所需的修改即可

團隊作業Week14
團隊作業Week14

  場景2:可以在曆史資訊中找到以往的變更集,在相應的變更集上進行復原,就能重制當時的代碼。

團隊作業Week14

7.一個源檔案,如何知道它的每一行都是什麼時候簽入的,為了什麼目的簽入的 (解決了哪個任務,或者哪個bug)?

場景: 一個重要的軟體忽然出現崩潰的情況, 程式員果凍經過各種debug手段,發現問題是在某一個檔案中有一行代碼似乎顯然出了問題,但是這個子產品被很多其他子產品調用,這行代碼是什麼時候,為了什麼目的,經過誰簽入的呢?如果貿然修改,會不會導緻其他問題呢? 怎麼辦?

  簽入時,會在注釋中描述本次修改的功能,或者關聯workitem,一目了然地明白其功能。在源代碼管理中,可以檢視每個檔案的曆史梗概,得知每次簽入的時間和目的。

  場景:通過檢視曆史紀錄,檢視修改這子產品的成員是誰,可以詢問他的意見或者請他來調試這一子產品。

團隊作業Week14
團隊作業Week14

8. 如何給一個系統的所有源檔案都打上标簽,這樣别人可以同步所有有這個标簽的檔案版本?

  代碼每天都在變, 有時品質變好,有時變差,我們需要一個 Last Known Good (最後穩定的好版本) 版本, 這樣新員工就可以同步這個版本, 我們如果需要釋出,也是從這個版本開始。那麼如何标記這個 Last Known Good 版本呢?

  原來TFS自帶了标簽功能~~~

  可以給整個分支、整個路徑添加标簽,或者給某個檔案單獨添加标簽。用标簽查找功能,即可擷取這個标簽關聯到的全部代碼。

  在這個場景中,通過一系列的測試,得到了一個相對穩定的版本後,應該及時對目前分支添加标簽。

9. 你的項目的源代碼和測試這些代碼的單元測試,以及其他測試腳本都是放在一起的麼? 修改源代碼會確定相應的測試也更新麼?你的團隊是否能部署自動建構的任務?

  在簽入之前,程式員能否自動在自己的機器上運作自動測試,以保證本地修改不會影響整個軟體的品質?

  在程式員送出簽入之後,伺服器上是否有自動測試程式, 完成編譯,測試,如果成功,就簽入,否則,就取消簽入?

  團隊是否配置了伺服器,它自動同步所有檔案,自動建構,自動運作相關的單元測試,碰到錯誤能自動發郵件給團隊

這方面我們做的有所欠缺,不過這到問題給我們提出了很好的參考意見。後期我們會着手伺服器的配置。