Ở đằng trước
Tôi đã đọc rất nhiều điều trước khi đặt câu hỏi này, bao gồm nhiều câu hỏi có liên quan ngay tại đây trên SE:
- (Kỹ thuật phần mềm SE) Viết bài kiểm tra mã có mục đích tôi không hiểu
- (Kỹ thuật phần mềm SE) Nhóm thử nghiệm đơn vị mới cần thử nghiệm đơn vị
- (Kỹ thuật phần mềm SE) Thực hành tốt nhất để trang bị thêm mã kế thừa bằng các kiểm tra tự động
- (Kỹ thuật phần mềm SE) Làm thế nào để kiểm tra đơn vị hệ thống kế thừa lớn?
- (Bài đăng trên blog) Cách mô phỏng môi trường Kiểm tra đơn vị của bạn
Tuy nhiên, tôi không thể không cảm thấy rằng vết ngứa vẫn chưa được gãi sau khi đọc để được giúp đỡ.
TL; DR
Làm cách nào để viết bài kiểm tra đơn vị cho mã kế thừa mà tôi không thể chạy, mô phỏng, đọc hoặc dễ hiểu? Những bài kiểm tra hồi quy nào hữu ích cho một thành phần có lẽ hoạt động như dự định?
Toàn bộ hình ảnh
Tôi là một thực tập mùa hè trở lại một lần nữa khi tôi đang chuyển sang trường học. Nhiệm vụ của tôi liên quan đến các yêu cầu này:
- Đối với một sản phẩm cụ thể, hãy đánh giá xem nhóm phần mềm của chúng tôi có thể nâng cấp phiên bản IDE và JUnit của họ mà không mất khả năng tương thích với các dự án hiện tại của họ hay không.
- Phát triển các thử nghiệm đơn vị cho một số thành phần trong mã Java hiện có (phần lớn không phải là Java). Chúng tôi muốn thuyết phục nhóm phần mềm rằng thử nghiệm đơn vị và TDD là những công cụ vô giá mà họ nên sử dụng. (Hiện tại bảo hiểm mã 0%.)
- Bằng cách nào đó, kết thúc những ngày cao bồi mã hóa cho một hệ thống quan trọng.
Sau khi có được một bản sao của mã nguồn, tôi đã cố gắng xây dựng và chạy nó, để tôi có thể hiểu sản phẩm này làm gì và nó hoạt động như thế nào. Tôi không thể. Tôi đã hỏi các giám sát viên của mình về cách tôi làm và tôi đã được cấp một máy độc lập mới có khả năng xây dựng nó, bao gồm các tập lệnh xây dựng thực sự làm. Điều đó cũng không hoạt động vì như họ mong đợi, mã sản xuất của họ chỉ chạy trên hệ thống nhúng mà nó được thiết kế cho. Tuy nhiên, họ có một trình giả lập cho mục đích này, vì vậy họ đã lấy được trình giả lập và đưa nó vào máy này cho tôi. Trình mô phỏng cũng không hoạt động. Thay vào đó, cuối cùng tôi đã nhận được bản in GUI cho một màn hình cụ thể. Họ cũng không có nhận xét mã ở bất cứ đâu trong hơn 700.000 Java LỘC, khiến việc nắm bắt nó càng khó hơn. Hơn nữa, có vấn đề đánh giá xem các dự án của họ có tương thích với các IDE mới hơn hay không. Đặc biệt, mã của họ không tải đúng vào phiên bản IDE mà họ sử dụng.
Hàng tồn kho của tôi trông như thế này:
- NetBeans 8, 9, 10, 11
- JUnit 4, 5
- Mã nguồn của họ cho một sản phẩm cụ thể (bao gồm hơn 700.000 Java LỘC)
- Hầu như không có ý kiến mã (đôi khi là một chữ ký)
- Không có xét nghiệm hiện có
- Ảnh vật lý của cửa sổ GUI
- Một tài liệu thiết kế phần mềm (109 trang.) Không thảo luận về thành phần trong hình
Tôi ít nhất có đủ để viết các bài kiểm tra về mặt lý thuyết có thể thực hiện. Vì vậy, tôi đã thử một bài kiểm tra đơn vị cơ bản trên thành phần nói trên. Tuy nhiên, tôi không thể khởi tạo các đối tượng mà nó có dưới dạng phụ thuộc, bao gồm các mô hình, trình quản lý và kết nối DB. Tôi không có nhiều kinh nghiệm JUnit ngoài thử nghiệm đơn vị cơ bản, vì vậy hãy theo tôi đến phần tiếp theo.
Những gì tôi đã học được từ việc đọc của tôi
- Mocking: Nếu tôi viết một bài kiểm tra đơn vị, có thể cần phải có các biến giả cho các phụ thuộc sản xuất mà tôi không thể dễ dàng khởi tạo
setUp
. - Mọi người ở đây tự do đề xuất cuốn sách "Làm việc hiệu quả với Bộ luật kế thừa" của Michael Feathers.
- Kiểm tra hồi quy có lẽ là một nơi tốt để bắt đầu. Tôi không nghĩ rằng tôi có đủ vũ khí để thử kiểm tra tích hợp và kiểm tra hồi quy sẽ cung cấp sự hài lòng tức thì hơn cho nhóm phần mềm của chúng tôi. Tuy nhiên, tôi không có quyền truy cập vào các lỗi đã biết của họ; Nhưng, tôi có thể hỏi.
Và bây giờ là một nỗ lực để nói lên sự không chắc chắn mà tôi vẫn có như một câu hỏi. Về cơ bản, tôi không hiểu cách viết một phần của các bài kiểm tra này. Giả sử tôi không nhận được bất kỳ hướng dẫn nào nữa từ các giám sát viên của mình (có khả năng), nó không chỉ tìm hiểu thành phần này làm gì mà còn quyết định thử nghiệm nào thực sự hữu ích khi thử nghiệm hồi quy.
Là những chuyên gia đã làm việc với các dự án như thế này lâu hơn tôi có, bạn có thể cung cấp bất kỳ hướng dẫn nào về cách viết bài kiểm tra đơn vị trong tình huống này không?
How do I write unit tests for legacy code that I can't build, run, simulate, read about, or otherwise understand?
- Bạn không thể. Ít nhất bạn phải biết đầu ra dự kiến là gì cho một đầu vào nhất định.