2009-03-27 27 views
7

Làm cách nào để đảm bảo mã vẫn hoạt động sau khi tái cấu trúc (tức là sau khi thay đổi tên biến)?Cách đảm bảo mã vẫn hoạt động sau khi tái cấu trúc (Ngôn ngữ động)

Trong ngôn ngữ tĩnh, nếu một lớp được đổi tên nhưng lớp giới thiệu khác thì không, thì tôi sẽ gặp lỗi biên dịch.

Nhưng trong ngôn ngữ động không có mạng an toàn như vậy và mã của bạn có thể bị hỏng trong khi tái cấu trúc nếu bạn không đủ cẩn thận. Bạn có thể sử dụng kiểm tra đơn vị, nhưng khi bạn đang sử dụng mocks nó là khá khó khăn để biết những thay đổi tên và kết quả là, nó có thể không giúp đỡ.

Cách giải quyết vấn đề này?

Trả lời

17

Trước khi bắt đầu tái cấu trúc, bạn nên tạo các thử nghiệm để có thể kiểm tra những gì bạn sẽ thay đổi - nếu bạn nói các bài kiểm tra đơn vị sẽ không đủ, hoặc sẽ khó tạo, thì bằng mọi cách tạo ra cao hơn kiểm tra mức độ thậm chí có thể excersising toàn bộ sản phẩm của bạn.

Nếu bạn có các công cụ bảo vệ mã cho ngôn ngữ của mình, hãy sử dụng chúng để đo lường chất lượng của các thử nghiệm mà bạn đã tạo - sau khi đạt được giá trị hợp lý cao và các thử nghiệm được cập nhật và mở rộng bạn sẽ có thể làm bất cứ điều gì với mã của bạn rất hiệu quả và chắc chắn rằng mọi thứ sẽ không đi sai hướng.

+0

+1: Tái cấu trúc thử nghiệm. Do đó tất cả các thời gian. –

1

Mã của bạn có thể bị hỏng trong quá trình tái cấu trúc ngay cả với ngôn ngữ được biên dịch. Dựa vào đó một mình sẽ giúp bạn gặp rắc rối. Thử nghiệm tự động là cách tốt nhất để đảm bảo rằng chương trình hoạt động như mong muốn.

Nếu bạn nói ngôn ngữ động nào bạn đang sử dụng, chúng tôi có thể cung cấp một số lời khuyên về các công cụ có thể giúp bạn thử nghiệm. Tất cả mọi thứ có thể được kiểm tra.

EDIT:

Bạn trả lời và cho biết bạn sử dụng PHP và Python.

Nếu đây là ứng dụng web, hãy sử dụng selenium để tạo các thử nghiệm trong trình duyệt. Lúc đầu, bạn chỉ cần Selenium IDE. Đặt tất cả các bài kiểm tra của bạn vào một Bộ thử nghiệm duy nhất để bạn có thể dễ dàng thực hiện tất cả các bài kiểm tra đó. Khi danh sách phát triển, bạn có thể bắt đầu nhìn vào Selenium RC và Selenium Grid.

10

Tôi đã dạy một lớp về các bài kiểm tra đơn vị, tái cấu trúc và vân vân, và điều này có lẽ là điều mà hầu hết mọi người gặp khó khăn. Tái cấu trúc là không phải chỉ cần thay đổi mã. Nó đang thay đổi mã mà không thay đổi hành vi chức năng bên ngoài. Đó là một điểm rất quan trọng.

Nói cách khác, bạn cần phải có một số cách để xác minh rằng hành vi chức năng bên ngoài vẫn còn nguyên vẹn sau khi tái cấu trúc. Thiếu cái nhìn sâu sắc về thiêng liêng tôi thấy bài kiểm tra đơn vị rất hữu ích cho điều đó. Trong cuốn sách về Tái cấu trúc, Martin Fowler nhấn mạnh việc sử dụng các bài kiểm tra tự động cho việc xác minh này.

Nếu mã của bạn được phát triển bằng TDD, bạn sẽ có bộ kiểm tra cần thiết khi được phát triển trong quá trình phát triển mã. Nếu bạn cần mã tái cấu trúc mà không có thử nghiệm nào có sẵn, cách tiếp cận tốt nhất của bạn sẽ là thiết lập các kiểm tra tự động trước khi bạn thực hiện bất kỳ thay đổi nào đối với mã. Tôi nhận thấy rằng việc thiết lập các kiểm tra cho mã hiện có có thể khó khăn, nhưng bạn sẽ học được rất nhiều về mã trong khi làm như vậy.

Bạn cũng có thể muốn kiểm tra Bruce Eckel's essay on strong typing versus strong testing vì nó thảo luận về phản hồi bạn nhận được từ trình biên dịch so với phản hồi bạn nhận được từ bộ thử nghiệm của mình.

+0

+1: Kiểm tra đơn vị tốt hơn về toàn bộ. –

0

1) Để sử dụng Python PyUnit cho PHP phpunit. 2) Cách tiếp cận TDD là tốt nhưng cũng thực hiện kiểm tra sau khi viết mã là chấp nhận được. 3) Cũng sử dụng các công cụ tái cấu trúc có sẵn cho IDE của bạn, chúng chỉ thực hiện tái cấu trúc an toàn. Trong Python Bạn có dây (đây là thư viện nhưng có phần bổ trợ cho hầu hết các IDE). 4) sách tốt là: 'Test-Driven Development bằng ví dụ' nhất 'Expert Python Lập trình' Tarek Ziade (giải thích cả TDD và tái cấu trúc)

google tdd và cơ sở dữ liệu để tìm một cuốn sách tốt về cách tiếp cận TDD để phát triển cơ sở dữ liệu.

Thêm thông tin cho mocks bạn đang sử dụng. AFAIK mocks là cần thiết chỉ khi cơ sở dữ liệu hoặc mạng có liên quan. Nhưng thông thường kiểm tra đơn vị nên bao gồm pice nhỏ của mã (một lớp duy nhất) đôi khi hai lớp học vì vậy không có mockup cần thiết !!

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