Làm thế nào để mọi người duy trì bộ thử nghiệm của họ?


17

Cụ thể, tôi tò mò về các khía cạnh sau:

  1. Làm thế nào để bạn biết rằng các trường hợp thử nghiệm của bạn là sai (hoặc lỗi thời) và cần phải được sửa chữa (hoặc loại bỏ)? Ý tôi là, ngay cả khi một trường hợp thử nghiệm trở nên không hợp lệ, nó vẫn có thể vượt qua và giữ im lặng, điều này có thể khiến bạn tin tưởng sai rằng phần mềm của bạn hoạt động tốt. Vì vậy, làm thế nào để bạn nhận ra những vấn đề như vậy của bộ thử nghiệm của bạn?

  2. Làm thế nào để bạn biết rằng bộ thử nghiệm của bạn không còn đủ và các trường hợp thử nghiệm mới nên được thêm vào? Tôi đoán điều này có liên quan đến những thay đổi yêu cầu, nhưng có cách tiếp cận có hệ thống nào để kiểm tra tính đầy đủ của bộ thử nghiệm không?


4
Để diễn giải: ai kiểm tra các bài kiểm tra?
Konrad Rudolph

Câu trả lời:


11

Câu trả lời ngắn: sử dụng các công cụ đã biết giúp duy trì chất lượng của các trường hợp thử nghiệm, chẳng hạn như phạm vi mã và các công cụ chất lượng mã sau: Cobertura, PMD, Sonar, v.v. sẽ giúp bạn nhận thấy khi một thành phần quan trọng của chương trình không được kiểm tra đủ. Ngoài ra, viết các bài kiểm tra tích hợp, rất có thể sẽ bị hỏng đầu tiên mỗi khi có sự cố.

Câu trả lời dài:

Làm thế nào để bạn biết rằng các trường hợp thử nghiệm của bạn là sai (hoặc lỗi thời) và cần phải được sửa chữa (hoặc loại bỏ)? Ý tôi là, ngay cả khi một trường hợp thử nghiệm trở nên không hợp lệ, nó vẫn có thể vượt qua và giữ im lặng, điều này có thể khiến bạn tin tưởng sai rằng phần mềm của bạn hoạt động tốt. Vì vậy, làm thế nào để bạn nhận ra những vấn đề như vậy của bộ thử nghiệm của bạn?

  • Sử dụng các công cụ bao phủ mã như Cobertura , bạn có thể phát hiện các trường hợp thử nghiệm cho một lớp nhất định hoặc các phương thức phức tạp, không còn đủ nữa. Bạn không cần phải đạt 100% mã ở mọi nơi và trong hầu hết các trường hợp sẽ khó đạt được và không nhất thiết phải hữu ích; nhưng các thử nghiệm cho các khía cạnh quan trọng nhất của chương trình nên được duy trì với mục tiêu ít nhất 80% phạm vi bảo hiểm mã.
  • Sử dụng các công cụ xây dựng và tích hợp liên tục , chẳng hạn như Jenkins mà tôi rất thích, kết hợp với plugin Sonar , bạn có thể đặt các trình kích hoạt gửi email và các loại cảnh báo khác cho những người chịu trách nhiệm về những thay đổi mới nhất. Các biểu đồ và số liệu thống kê khác nhau (Sonar cũng sử dụng Cobertura trong số nhiều công cụ khác) giúp người đánh giá mã và nhà phát triển trường hợp thử nghiệm tập trung vào những gì quan trọng.

Làm thế nào để bạn biết rằng bộ thử nghiệm của bạn không còn đủ và các trường hợp thử nghiệm mới nên được thêm vào? Tôi đoán điều này có liên quan đến những thay đổi yêu cầu, nhưng có cách tiếp cận có hệ thống nào để kiểm tra tính đầy đủ của bộ thử nghiệm không?

Những gì tôi đã viết cho câu hỏi đầu tiên là một phần của câu trả lời cho câu hỏi thứ hai của bạn. Tôi cũng sẽ thêm các điểm sau đây:

  • Viết các trường hợp kiểm thử tích hợp (hoặc các trường hợp "kinh doanh" nếu bạn thích) ngoài các trường hợp kiểm thử. Chúng hầu như có thể thay đổi / phá vỡ trước vì chúng thường phụ thuộc vào nhiều lớp / phương thức. Và vì chúng thường xuyên bị phá vỡ, nên nó sẽ ít bị lãng quên hơn. Cách tiếp cận / phương pháp duy nhất, từ kinh nghiệm cá nhân của tôi, giúp viết các bài kiểm tra tốt là Phát triển dựa trên thử nghiệm . Đặc biệt nếu người viết trường hợp kiểm tra KHÔNG phải là người viết mã cho nó. Viết các trường hợp kiểm tra tốt bằng TDD cũng mất thời gian, nhưng kết quả, ít nhất là đối với tôi, là vô cùng khả quan.
  • Bất cứ khi nào một lỗi xuất hiện, hãy viết bản sửa lỗi và trường hợp thử nghiệm đi kèm với nó. Các trường hợp thử nghiệm chỉ nên bao gồm lỗi đặc biệt này. Vì bạn đã hoàn toàn bao gồm mã chịu trách nhiệm về lỗi, nên nó không xuất hiện trở lại.

Tôi đồng ý với tất cả ngoại trừ người viết bài kiểm tra không phải là người viết mã. Điều này nghe có vẻ tốt về mặt lý thuyết và sẽ tốt nếu nó không hiệu quả. Cho dù codebase của bạn tuyệt vời đến mức nào, nếu nó có kích thước bất kỳ, phải mất vài giờ chỉ để làm quen với cách thức hoạt động của một phần của nó .. Về cơ bản, thay vì người viết thử đã quen thuộc với cdoe và cách nó hoạt động, một người khác phải đến và tìm hiểu nó một chút và sau đó viết một bài kiểm tra. Nếu chất lượng mã không phải là tốt nhất, có thể mất nhiều ngày để viết một bài kiểm tra toàn diện
Earlz

@Earlz Tôi đồng ý với bạn nếu hai người không làm việc trong cùng một dự án. Nếu hai nhà phát triển làm việc trên cùng một dự án, được cho là sử dụng một cách nhất quán cùng một khuôn khổ, thư viện và phương pháp phát triển, thì anh ta sẽ không gặp rắc rối gì, NGOẠI TRỪ nếu đó là một yêu cầu kinh doanh phức tạp.
Jalayn

@Jalayn cho trường hợp của tôi, sản phẩm chỉ là rất phức tạp. Chất lượng mã không phải là tốt nhất, nhưng chắc chắn không phải là kém nhất (chúng tôi thực hiện tái cấu trúc thường xuyên). Chúng tôi thi hành việc có một người kiểm tra riêng, nhưng đối với bài kiểm tra đơn vị, người đã hoàn thành công việc thực hiện nó. Sản phẩm của chúng tôi bao gồm hàng trăm (có thể hàng ngàn?) Các lớp học liên quan đến một chủ đề phức tạp, obfuscation.
Earlz

@Jalayn Cảm ơn bạn đã đề cập đến những công cụ đó. Nhưng giống như đối với công cụ bảo hiểm, bạn không thể chạy nó mọi lúc, phải không? Vậy tại thời điểm nào cần thiết để chạy công cụ như vậy? Sau vài lần thay đổi mã nguồn? Hoặc sau một vài cập nhật thử nghiệm? Có bất kỳ hướng dẫn chung cho việc này?
Ida

1
Chà, nếu bạn có một máy chủ xây dựng liên tục, các ứng dụng của bạn có thể được xây dựng và kiểm tra mỗi khi có gì đó được cam kết với kho lưu trữ (chúng tôi làm việc đó). Nó có thể cấu hình, ví dụ bạn cũng có thể xây dựng cứ sau 15 phút. Đối với phạm vi bảo hiểm mã, nó được kích hoạt trong các trường hợp thử nghiệm và không thêm nhiều chi phí. Tuy nhiên, các bản dựng với kiểm tra chất lượng mã đầy đủ được bật, như Sonar, thường mất một thời gian rất dài, ví dụ, chúng được chạy hàng đêm. Lý tưởng nhất là bạn không cần phải chạy các công cụ này một cách thủ công.
Jalayn

9

Thực sự không có cách nào để đảm bảo các trường hợp thử nghiệm của bạn là chính xác, ngoại trừ bằng cách tập trung thực sự tốt khi tạo chúng - hiểu yêu cầu, hiểu mã và đảm bảo rằng chúng đồng ý. Điểm quan trọng của việc có một bộ kiểm tra là bạn chỉ phải thực hiện việc này một lần và từ đó trở đi, bạn có thể thực hiện lại các bài kiểm tra và kiểm tra xem chúng có vượt qua không, trong khi không có bộ kiểm tra bạn sẽ phải tập trung thực sự mọi lúc , tức là bất cứ khi nào bạn làm bất cứ điều gì với cơ sở mã của bạn. Nhưng vấn đề cơ bản của việc phải đảm bảo rằng bạn đang làm điều đúng đắn ngay từ đầu vẫn còn - máy tính đơn giản là không đủ thông minh để giải phóng chúng ta về nhiệm vụ đó.

Do đó, (1) nếu bộ kiểm tra của bạn không đầy đủ, không có cách nào đơn giản để thấy điều đó. Phân tích phạm vi bảo hiểm mã có thể chứng minh rằng một số dòng mã không bao giờ được thực thi, tức là bộ phần mềm bị thiếu theo một cách nào đó, nhưng không phải là sự thiếu hụt đó nghiêm trọng đến mức nào và nó không bao giờ có thể chứng minh rằng nó là đủ. Ngay cả với phạm vi bảo hiểm 100% mã, bạn không đảm bảo rằng tất cả các trạng thái có liên quancủa hệ thống được thực hiện và phạm vi bảo hiểm hoàn toàn là không thể áp dụng cho bất kỳ hệ thống thực tế nào vì số lượng tổ hợp các trạng thái có thể tồn tại. Một kỹ thuật tốt để đảm bảo rằng trường hợp kiểm thử của bạn ít nhất là chính xác để kiểm tra điều bạn muốn kiểm tra là viết bài kiểm tra, xác minh rằng nó thực sự không thành công, viết / thay đổi mã, và sau đó xác minh rằng nó đã vượt qua. Do đó, sự nhiệt tình cho phát triển dựa trên thử nghiệm: nó cho phép bạn khá chắc chắn rằng một thử nghiệm riêng lẻ thực hiện đúng và nếu bạn tạo toàn bộ cơ sở mã của mình theo cách đó, bạn có thể có được mức độ tin cậy tương tự ngay cả trong một hệ thống lớn.

(2) Một bộ kiểm tra thường trở nên không đủ bất cứ khi nào yêu cầu thay đổi - bạn không phải đoán. Nếu khách hàng muốn một số hành vi cụ thể thay đổi và các thử nghiệm của bạn sẽ thành công cả trước và sau khi thay đổi, thì rõ ràng họ không thực hiện mối quan hệ đầu vào / đầu ra cụ thể đó.

Đối với các hệ thống kế thừa không có phạm vi kiểm tra hoặc nơi bạn không biết phạm vi bảo hiểm là gì, không có bằng chứng chính thức, nhưng (lời khuyên của phụ huynh: ý kiến ​​cá nhân theo sau!) Nói về kinh nghiệm rất có thể là các thử nghiệm là không đầy đủ. Khi thử nghiệm được xem là một hoạt động thực tế, tùy chọn, nâng cao chất lượng nhưng không thực sự cần thiết, nó có xu hướng không đầy đủ và không có hệ thống vì khuyến khích đảm bảo các thử nghiệm theo kịp với cơ sở mã chỉ là ở đó

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.