2008-08-21 29 views
5

Tôi đã tham gia một nhóm hoạt động trên một sản phẩm. Sản phẩm này đã được khoảng 5 năm hoặc lâu hơn, và sử dụng ASP.NET WebForms. Kiến trúc ban đầu của nó đã phai mờ theo thời gian, và mọi thứ trở nên vô tổ chức tương đối trong suốt giải pháp. Nó không có nghĩa là khủng khiếp, nhưng chắc chắn có thể sử dụng một số công việc; bạn đều biết những gì tôi có ý nghĩa.Tái cấu trúc để kiểm tra trên hệ thống hiện có

Tôi đã thực hiện một số phép tái cấu trúc kể từ khi tham gia nhóm dự án khoảng 6 tháng trước. Một số trong những refactorings là đơn giản, Extract Method, Pull Method Up, vv Một số các refactorings có nhiều cấu trúc. Những thay đổi sau này làm tôi lo lắng vì không có bộ kiểm thử đơn vị toàn diện để đi cùng với mọi thành phần.

Toàn đội đang trên tàu vì cần phải thay đổi cấu trúc thông qua tái cấu trúc, nhưng Giám đốc dự án của chúng tôi đã bày tỏ một số lo ngại rằng chúng tôi không có các xét nghiệm đầy đủ để thực hiện tái cấu trúc với sự tự tin rằng chúng tôi không giới thiệu lỗi hồi qui vào hệ thống. Ông muốn chúng tôi viết nhiều bài kiểm tra đầu tiên hơn (chống lại kiến ​​trúc hiện có), sau đó thực hiện các phép tái cấu trúc. Lập luận của tôi là cấu trúc lớp của hệ thống quá chặt chẽ để viết các bài kiểm tra đầy đủ, và sử dụng một phương pháp Test Driven hơn trong khi chúng ta thực hiện các phép tái cấu trúc của chúng ta có thể tốt hơn. Ý tôi là điều này không phải là viết các bài kiểm tra đối với các thành phần hiện có, nhưng viết các bài kiểm tra cho các yêu cầu chức năng cụ thể, sau đó tái cấu trúc mã hiện có để đáp ứng các yêu cầu đó. Điều này sẽ cho phép chúng tôi viết các bài kiểm tra có thể có tuổi thọ lâu hơn trong hệ thống, thay vì viết một loạt các bài kiểm tra 'vứt bỏ'.

Có ai có kinh nghiệm nào về hành động tốt nhất là gì không? Tôi có những suy nghĩ của riêng mình, nhưng muốn nghe một số ý kiến ​​từ cộng đồng.

Trả lời

5

Các quan tâm của PM của bạn là hợp lệ - hãy đảm bảo rằng hệ thống của bạn được kiểm tra trước khi thực hiện bất kỳ phép tái cấu trúc chính nào.

Tôi thực sự khuyên bạn nên lấy một bản sao cuốn sách của Michael Feather Working Effectively With Legacy Code (bằng "Mã kế thừa" có nghĩa là bất kỳ hệ thống nào không được kiểm tra đơn vị đầy đủ). Điều này là chock đầy đủ các ý tưởng tốt cho làm thế nào để phá vỡ những khớp nối và phụ thuộc bạn nói, một cách an toàn mà sẽ không có nguy cơ giới thiệu lỗi hồi quy.

Chúc may mắn với chương trình tái cấu trúc; theo kinh nghiệm của tôi, đó là một quá trình thú vị và công nghệ mà từ đó bạn có thể học được rất nhiều.

2

Bạn có thể nhân tố lại song song không? Những gì tôi có nghĩa là viết lại các mảnh bạn muốn tái cấu trúc bằng cách sử dụng TDD, nhưng để lại các cơ sở mã hiện tại tại chỗ. Sau đó, loại bỏ mã hiện tại khi các thử nghiệm mới của bạn đáp ứng nhu cầu cho PM của bạn?

0

Chỉ cần đưa ra một đề xuất thứ hai về Làm việc hiệu quả với Bộ luật cũ, một cuốn sách tuyệt vời thực sự mở mắt của tôi về thực tế rằng hầu như bất kỳ mã cũ/crappy/untestable có thể được wrangled!

1

Tôi cũng muốn đưa ra đề xuất truy cập trang web Refactoring của Martin Fowler. Anh ta đã viết cuốn sách này về những thứ này. Theo như giới thiệu phương pháp tốt nhất tôi đã tìm thấy là tìm một thành phần cấp cao nhất và xác định tất cả các phụ thuộc bên ngoài nó có trên các đối tượng cụ thể và thay thế chúng bằng các giao diện. Một khi bạn đã làm điều đó sẽ dễ dàng hơn nhiều khi viết các bài kiểm tra đơn vị dựa vào cơ sở mã của bạn và bạn có thể làm điều đó một thành phần tại một thời điểm. Thậm chí tốt hơn, bạn sẽ không phải vứt bỏ bất kỳ bài kiểm tra đơn vị nào.

Kiểm tra đơn vị ASP.Net có thể phức tạp, nhưng có rất nhiều khung làm cho việc này trở nên dễ dàng hơn. ASP.Net MVCWCSF để đặt tên một vài.

0

Hoàn toàn đồng ý với câu trả lời từ Ian Nelson. Ngoài ra, tôi sẽ bắt đầu nhận được một số bài kiểm tra "cấp cao" (các bài kiểm tra chức năng hoặc thành phần) để duy trì hành vi từ điểm nhìn của người dùng. Điểm này có thể là mối quan tâm quan trọng nhất đối với PM của bạn.

Các vấn đề liên quan