Thêm các bài kiểm tra đơn vị vào một dự án C, kế thừa


12

Tiêu đề nói lên tất cả. Công ty của tôi đang sử dụng lại một dự án phần mềm kế thừa cho một thiết bị vi điều khiển, được viết hoàn toàn bằng chữ C.

Có những phần rõ ràng là sai và cần thay đổi, và xuất phát từ nền tảng C # / TDD Tôi không thích ý tưởng tái cấu trúc ngẫu nhiên các công cụ không có kiểm tra để đảm bảo rằng chức năng vẫn không thay đổi. Ngoài ra, tôi đã thấy rằng các lỗi khó tìm đã được giới thiệu trong nhiều trường hợp thông qua những thay đổi nhỏ nhất (đó là điều mà tôi tin rằng sẽ được khắc phục nếu sử dụng thử nghiệm hồi quy). Rất nhiều sự cẩn thận cần phải được thực hiện để tránh những sai lầm này: thật khó để theo dõi một loạt các quả cầu xung quanh mã.

Để tóm tắt:

  • Làm thế nào để bạn thêm các bài kiểm tra đơn vị vào mã được ghép chặt chẽ hiện có trước khi tái cấu trúc?
  • Bạn khuyên dùng công cụ gì? (ít quan trọng hơn, nhưng vẫn tốt đẹp để biết)

Tôi không trực tiếp tham gia viết mã này (trách nhiệm của tôi là một ứng dụng sẽ tương tác với thiết bị theo nhiều cách khác nhau), nhưng sẽ rất tệ nếu các nguyên tắc lập trình tốt bị bỏ lại nếu có cơ hội sử dụng chúng.

Câu trả lời:


7

Lấy một bản sao làm việc hiệu quả với Bộ luật kế thừa của Michael Feathers. Nó có nghĩa là để đối phó với các tình huống như vậy. Mặc dù nó tập trung nhiều hơn vào các ngôn ngữ OO như C ++ và Java, tôi tin rằng nó vẫn có thể giúp bạn rất nhiều.

Có vẻ như một phần của nó (hoặc một bài viết nháp sớm) thậm chí còn có sẵn miễn phí tại đây .


+1, cảm ơn. Nhưng, tôi tin rằng tôi khá giỏi trong việc tái cấu trúc mã OO với nhiều mã OO hơn. Những gì tôi không biết là làm thế nào để kiểm tra mã thủ tục và tái cấu trúc mã thủ tục với mã thủ tục ít được kết hợp.
Groo

@Groo, cuốn sách không phải là về tái cấu trúc mỗi se. Đó là về cách chuyển đổi một loạt mã spaghetti mà không có bất kỳ thử nghiệm đơn vị nào thành một bó mã (hơi ít spaghetti) được bao phủ tốt với các thử nghiệm đơn vị. Mã này rất khó kiểm tra, vì vậy bạn cần phải cấu trúc lại trước để làm cho nó có thể kiểm tra được; tuy nhiên, như bạn đã đề cập, tái cấu trúc mà không có kiểm tra đơn vị là rủi ro, vì vậy đây là một tình huống bắt 22. Cuốn sách hướng dẫn bạn cách thực hiện các thay đổi nhỏ nhất, an toàn nhất cho mã cho phép bạn bao quát nó bằng các bài kiểm tra đơn vị, do đó sau đó bắt đầu tái cấu trúc nó một cách nghiêm túc.
Péter Török

Cuốn sách đó là một gợi ý hay và nó bao gồm C cùng với các ngôn ngữ OO.
ThomasW

7

Về kỹ thuật, có lẽ cuốn sách Michael Feathers trong câu trả lời của Péter Török sẽ khá toàn diện. Nếu bạn không muốn đi đến cuốn sách, tôi đề nghị một quy trình gồm ba bước:

  1. kiểm tra mã không thể kiểm tra và sao chép các phần nhỏ của chức năng của mã đó thành các chức năng có thể kiểm tra được. Điều quan trọng là các chức năng mới có hành vi rõ ràng tương đương với chức năng bạn đang cố gắng sao chép - Tôi không thực sự ủng hộ việc viết bài kiểm tra đơn vị xung quanh mã kế thừa, vì vậy bạn cần hết sức cẩn thận và giới hạn phạm vi của mình, trong để duy trì sự tự tin trong việc tái cấu trúc.
  2. viết các bài kiểm tra đơn vị xung quanh các chức năng mới.
  3. sửa đổi mã gốc để gọi các chức năng mới.

Lặp lại quá trình này một vài lần và bạn sẽ thấy chất lượng của cơ sở mã kế thừa đã tăng lên đáng kể.

Theo như các công cụ, lưu ý rằng C ++ có thể gọi vào C, do đó, bất kỳ khung kiểm thử đơn vị C ++ nào cũng có thể được sử dụng để kiểm tra mã C. Ví dụ: chúng tôi đang sử dụng CPPUnit để kiểm tra đơn vị một loạt mã C trong dự án của chúng tôi.


+1 cảm ơn về các mẹo và liên kết CPPUnit .
Groo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.