2008-08-21 69 views
5

我加入了一個可以在產品上工作的團隊。這款產品已經存在了大約5年左右的時間,並且使用了ASP.NET WebForms。它的原始架構隨着時間的推移而逐漸消失,整個解決方案中的事情變得相對混亂。這絕不是可怕的,但絕對可以使用一些工作;你都知道我的意思。在現有系統上進行可重構性重構

自從6個月前加入項目團隊以來,我一直在進行一些重構。其中一些重構很簡單,提取方法,拉方法提升等。一些重構更具結構性。後面的變化讓我感到緊張,因爲沒有一套全面的單元測試來陪伴每個組件。

整個團隊都需要通過重構進行結構變更,但是我們的項目經理表達了一些擔心,我們沒有足夠的測試來重構,因爲我們沒有引入迴歸錯誤進入系統。他希望我們先寫更多的測試(針對現有架構),然後執行重構。我的觀點是系統的類結構過於緊密,無法編寫足夠的測試,而在執行我們的重構時使用更多的「測試驅動」方法可能會更好。我的意思不是針對現有組件編寫測試,而是針對特定功能需求編寫測試,然後重構現有代碼以滿足這些需求。這將允許我們編寫可能在系統中具有更長壽命的測試,而不是編寫一堆「丟棄」測試。

有沒有人有任何經驗,最好的行動是什麼?我有自己的想法,但希望聽到社區的一些意見。

回答

5

你PM的擔憂是有效的 - 確保你在進行任何重大的重構之前獲得下測試系統。

我強烈建議您獲取一份Michael Feather的書Working Effectively With Legacy Code(以「Legacy Code」羽毛表示任何未經單元測試覆蓋的系統)。對於如何以安全的方式來分解您所說的聯接和依賴關係,這不會冒着引入迴歸錯誤的風險,這充滿了很好的想法。

祝您好運,重構計劃;根據我的經驗,這是一個令人愉快且極具挑戰性的過程,您可以從中學到很多東西。

2

你能重新平行嗎?我的意思是用TDD重寫要重構的部分,但保留現有的代碼庫。那麼當你的新測試滿足你的PM需求時,逐步淘汰現有的代碼?

0

就折騰出第二個建議,對於遺留代碼,一個優秀的書,讓我大開眼界的是,幾乎所有的舊/糟糕/不可測試代碼可以口角有效地開展工作!

1

我也想在建議由Martin Fowler參觀Refactoring網站拋出。他從字面上寫這本書的東西。

至於引入的單元測試代入公式,我發現最好的方法是找一個頂級組件並確定所有這對混凝土的對象外部依賴性,並與接口替換它們。一旦你這樣做了,編寫針對你的代碼庫的單元測試會容易很多,並且你可以一次完成一個組件。更好的是,你不必扔掉任何單元測試。

單元測試ASP.Net可能會非常棘手,但也有很多的框架,使人們更容易做的。 ASP.Net MVCWCSF等等。

0

完全同意Ian Nelson的回答。此外,我會開始獲取一些「高級」測試(功能或組件測試)以保持用戶的觀點的行爲。這一點可能是您PM的最重要關注點。