Khi nào bạn có đủ kiểm tra tự động để tự tin vào đường ống tích hợp liên tục của mình?


10

Tích hợp liên tục với kiểm tra rất hữu ích để đảm bảo rằng bạn luôn kiểm tra mã "có thể chuyển đổi".

Tuy nhiên, thực sự rất khó để theo kịp một bộ thử nghiệm toàn diện và thông thường, có cảm giác như bản dựng sẽ bị lỗi dù sao đi nữa.

Bao nhiêu bài kiểm tra bạn phải cảm thấy tự tin trong thử nghiệm đường ống CI của bạn? Bạn có sử dụng một số loại số liệu để quyết định khi có đủ bài kiểm tra?

Câu trả lời:


16

Nói chung

Khi nào bạn có đủ kiểm tra tự động để tự tin vào đường ống tích hợp liên tục của mình?

Câu trả lời có thể trở nên rõ ràng nếu bạn nghĩ về những gì bạn muốn tự tin. Cuối cùng, nó ánh xạ 1-1; mỗi bài kiểm tra làm cho bạn tự tin về một điều mà nó kiểm tra:

  • Kiểm thử đơn vị cung cấp cho bạn sự tự tin rằng một lớp (hoặc mô-đun) thực hiện những gì nó được kiểm tra.
  • Kiểm thử tích hợp giúp bạn tự tin rằng một số đơn vị làm việc cùng nhau theo cách được kiểm tra.
  • Thử nghiệm từ đầu đến cuối giúp bạn tự tin rằng toàn bộ ứng dụng thực hiện một việc nhất định, theo cách nó được mô tả trong thử nghiệm.

Từ cách bạn hình thành câu hỏi của mình, có lẽ bạn đang nghĩ theo nghĩa kinh doanh lớn, ví dụ:

Tôi muốn được tự tin rằng ứng dụng của tôi có thể làm X .

Vì vậy, bạn viết một bài kiểm tra đầu cuối cố gắng thực hiện X và kiểm tra xem nó có thực hiện đúng không.

Cụ thể hơn

Đó là tất cả những gì rất tự giới thiệu, nhưng đó là bởi vì đó là những gì nó đi xuống. Đơn giản là không có nhiều hơn thế.

Ví dụ, hãy tưởng tượng bạn viết một ứng dụng để tạo công thức nấu ăn. Một tính năng là, nếu bạn thêm số lượng khác nhau của một số loại phô mai khác nhau, nó sẽ cung cấp cho bạn nhiệt độ và thời gian chính xác để tất cả chúng tan chảy.

Vì vậy, bạn có thể viết một bài kiểm tra đơn vị cho bạn CheeseMeltCalculator, nơi bạn cho nó 100g Gouda và 200g phô mai Emmental, và sau đó bạn kiểm tra xem nhiệt độ và thời gian có đúng không. Điều đó có nghĩa là bây giờ bạn có thể tự tin rằng nó CheeseMeltCalculatorhoạt động với 100g Gouda và 200g phô mai. Bây giờ nếu bạn lặp lại thử nghiệm này với 300g Gouda thay vì 200g, bạn có thể khá tự tin rằng nó hoạt động chính xác cho các giá trị khác nhau. Bạn có thể thêm test cho 0, -1int.MaxValueg Gouda phải tự tin rằng mã không đi lên (hoặc các chuyến đi lên một cách chính xác như dự định) cho đầu vào lạ.

Bạn có thể viết một bài kiểm tra tích hợp để kiểm tra xem nó CheeseMeltCalculatorđược kết hợp chính xác vào toàn bộ quá trình tính toán nhiệt độ và thời gian thực phẩm. Nếu điều này sai, nhưng các CheeseMeltCalculatorthử nghiệm ở trên vẫn ổn, bạn có thể tin tưởng rằng lỗi nằm ở các máy tính khác hoặc theo cách kết hợp dữ liệu từ các máy tính khác nhau.

Và cuối cùng bạn có thể viết một bài kiểm tra từ đầu đến cuối để tạo ra toàn bộ công thức, và một trong những điều bạn kiểm tra là nhiệt độ và thời gian kết quả. Nếu 2 cấp độ kiểm tra trước đó đều ổn, nhưng điều này không đúng, thì bạn có thể tự tin rằng các phần đó là chính xác và sai lầm là điều gì đó về cách tính nhiệt độ được tích hợp vào ứng dụng. Ví dụ, có thể đầu vào của người dùng không được chuyển chính xác.

cuối cùng , nếu tất cả các thử nghiệm đó đều ổn, thì bạn có thể tự tin rằng " nếu bạn thêm một lượng khác nhau của một số loại phô mai khác nhau, nó sẽ cho bạn nhiệt độ và thời gian chính xác để chúng tan chảy "

Mẩu chuyện dài

Vấn đề là bạn không thể có một bài kiểm tra "nó hoạt động chính xác". Bạn chỉ có thể kiểm tra "Nếu tôi làm X, Y xảy ra".

Tuy nhiên, đây chính xác là thứ cần có trong thông số kỹ thuật cho dự án. Một tuyên bố như " nếu bạn thêm số lượng khác nhau của một số loại phô mai khác nhau, nó sẽ cung cấp cho bạn nhiệt độ và thời gian chính xác để chúng tan chảy " không chỉ mang đến cho khách hàng những kỳ vọng rõ ràng về những gì thành phẩm sẽ làm, mà còn có thể được biến vào các bài kiểm tra tự động.

thông tin bổ sung

Người dùng Richard đã thêm thông tin này trong một chỉnh sửa:

Martin Fowler có một bản tóm tắt rất hay trên trang web của mình về các chiến lược phổ biến nhất: https://martinfowler.com/articles/microservice-testing/

Tôi không muốn xóa cái này, nhưng tôi muốn nói điều này: So với câu trả lời này, nó không phải là một "bản tóm tắt", mà là một lời giải thích sâu sắc hơn nhiều, với đồ họa đẹp và mọi thứ.

Lời khuyên của tôi sẽ là: Nếu mọi thứ có ý nghĩa với bạn sau khi đọc câu trả lời của tôi, bạn đã hoàn thành. Nếu mọi thứ vẫn chưa rõ ràng, hãy đặt một chút thời gian sang một bên và đọc qua bài viết được liên kết.


Đây là một quan điểm tốt về khái niệm. Bạn có ví dụ số liệu sẽ hữu ích trong việc cung cấp sự tự tin trong phạm vi kiểm tra của chúng tôi không?
Stonefruit

@stonefruit Không thực sự, nhưng tôi nghĩ rằng tôi có chính xác câu trả lời bạn cần: Testivus On Test Bảo hiểm
R. Schmitz

@stonefruit Liên quan đến con số trong câu chuyện ngụ ngôn đó, 80%, đó là con số bạn nghe thường xuyên hơn trong bối cảnh này. Chủ yếu là do nguyên tắc pareto - bảo hiểm 20% cuối cùng là 80% công việc. Nói cách khác, công việc này gấp 4 lần so với 80% đến 100%, vì nó đã đạt được tới 80% ngay từ đầu. Điều đó thường quá mức cần thiết, nhưng hãy tưởng tượng bạn đang viết mã điều khiển cho một vệ tinh: Nếu một lỗi xuất hiện, bạn không thể sửa nó; nhận được bảo hiểm đến 100% là một khoản đầu tư đáng giá sau đó.
R. Schmitz

Hình như tôi là lập trình viên thứ ba. haha Tôi đoán vào cuối ngày, nó quay trở lại với cách tiếp cận dựa trên rủi ro, như bạn đã đề cập với ví dụ vệ tinh.
Stonefruit

1
@stonefruit Có lẽ bạn là người đầu tiên, mặc dù. Nếu bạn có một dự án hiện tại với độ bao phủ 0%, đừng bắt đầu một cuộc diễu hành tử thần đến 80%. Thay vào đó, thực sự, " chỉ cần viết một số bài kiểm tra tốt ". Có thể sử dụng nửa cuối ngày thứ Sáu để viết bài kiểm tra, đại loại như thế. Theo kinh nghiệm của tôi, bạn sẽ tự động đưa ra các bài kiểm tra với tỷ lệ phần thưởng nỗ lực tốt nhất trước tiên và mọi bài kiểm tra sẽ giúp bạn tự tin hơn một chút.
R. Schmitz

4

Không có số liệu nào bạn có thể tính toán sẽ mang lại cho bạn sự tự tin mà bạn đang tìm kiếm. Sự tự tin được xây dựng bằng cách làm một cái gì đó, và sau đó thành công với nó hoặc thất bại và học được điều gì đó từ nó.

"Số liệu" duy nhất tôi tìm thấy giúp tôi tự tin hơn trong phạm vi kiểm tra của chúng tôi là:

  1. Số lượng lỗi được tìm thấy trong sản xuất
  2. Bạn có thể cấu trúc lại cơ sở mã và dựa vào phạm vi kiểm tra của bạn để bắt lỗi hồi quy không?

Kiểm tra tự động không phải là một viên đạn bạc. Bạn cần theo dõi xem có bao nhiêu lỗi sản xuất được tìm thấy trong mỗi chu kỳ phát hành. Khi con số này giảm, bạn đang cung cấp phần mềm tốt hơn. Kiểm tra tự động và Tích hợp liên tục chỉ là công cụ bạn sử dụng để cung cấp phần mềm tốt hơn.

Số liệu duy nhất bạn thực sự có thể đo lường là "Bạn có cung cấp phần mềm tốt hơn không?"

Và thậm chí sau đó, nó là chủ quan.


So với các câu trả lời khác, câu trả lời này giải quyết các số liệu có thể. Tôi đã nghĩ đến việc làm cho các số liệu được đề xuất có ý nghĩa hơn. Có lẽ ngoài việc tìm ra số lượng khuyết tật được tìm thấy trong sản xuất, hãy cho mỗi khuyết điểm một điểm dựa trên quản lý rủi ro và đặt ngưỡng (ví dụ: 30 điểm khiếm khuyết được tìm thấy trong 3 tháng qua). Đạt đến ngưỡng có thể là dấu hiệu của việc đánh giá hệ thống đối với các lỗi có thể xảy ra, trước khi khoản nợ kỹ thuật cho mã lỗi tăng theo cấp số nhân.
Stonefruit

2

Khi nào bạn có đủ kiểm tra tự động để tự tin vào đường ống tích hợp liên tục của mình?

Trong hầu hết môi trường kinh tế, bạn sẽ không có ngân sách để thực hiện đủ độ tin cậy (> 99%) nhưng bạn phải quản lý ngân sách hạn chế: Tất cả là về tỷ lệ chi phí / lợi ích.

  • Một số thử nghiệm tự động có giá rẻ để thực hiện một số rất tốn kém.
  • Tùy thuộc vào quản lý rủi ro thực tế của bạn , một số rủi ro phải được kiểm tra trong khi các rủi ro khác thì không.

Vì vậy, trong thực tế, các thử nghiệm dễ / rẻ / rủi ro sẽ được thực hiện trong khi các thử nghiệm đắt / không chắc chắn sẽ không xảy ra.

Một mục tiêu phụ của phát triển phần mềm là tạo ra kiến ​​trúc dễ kiểm tra / rẻ tiền (thiết kế để kiểm tra bằng cách áp dụng Phát triển theo hướng kiểm tra ) để giữ cho kiểm tra tự động có giá cả phải chăng.

Tôi giả sử rằng Pareto_principl cũng có thể được áp dụng cho phần mềm có thể bảo trì / kiểm tra được ở đây: Nó nói rằng với việc chi thêm 20% tiền bạn sẽ nhận được thêm 80% lợi ích. Để đạt được 20% lợi ích còn lại, bạn cần phải chi thêm 80% tiền.

Bạn có thể áp dụng Số liệu kiểm tra như phạm vi bảo hiểm mãphạm vi đột biến để hiển thị cho bạn mã nguồn chưa được kiểm tra.

Nhưng ngay cả với phạm vi bảo hiểm 100%, bạn không thể chắc chắn rằng mã của mình không có lỗi.

Quản lý thích mật mã. Nếu "phạm vi bảo hiểm mã> = 80%" được quản lý thực thi trong khi các nhà phát triển không hỗ trợ / thích kiểm tra tự động, có nhiều cách để viết mã kiểm tra với độ bao phủ cao mà không chứng minh bất cứ điều gì mang lại cảm giác an toàn sai.


1

Bí quyết ở đây không phải là lo lắng về bảo hiểm đầy đủ mà là quản lý rủi ro thay đổi của bạn.

Giả sử bạn đang sử dụng đường ống dẫn của mình để triển khai phiên bản chính xác giống như đã có trong Sản xuất - nguy cơ lỗi hồi quy là gì? Không (vì không có thay đổi).

Bây giờ, giả sử tôi muốn thay đổi một đoạn văn bản trên một trong các màn hình. Tôi đã thêm thử nghiệm để xác minh rằng văn bản hiện được hiển thị chính xác (giả sử vì lý do tranh luận đó là một đoạn văn bản quan trọng THỰC SỰ). Những kiểm tra nào khác tôi cần để xác minh không có lỗi hồi quy? Thực tế không có ...

Vì vậy, số lượng kiểm tra tự động cần thiết cho mỗi bản phát hành để tồn tại không phải là chức năng của kích thước ứng dụng của bạn, mà là kích thước thay đổi của bạn. Nếu bạn đang thực hiện các thay đổi nhỏ, rủi ro thấp thì bạn sẽ cần ít thử nghiệm hơn để giảm thiểu rủi ro.

Nhưng đợi một chút ... không phải dòng này rất độc đáo với điểm của CI và CD sao?

Vâng! Bằng cách giữ tất cả các thay đổi và đồng bằng của bạn rất nhỏ, bạn sẽ giảm thiểu nhiều rủi ro hồi quy thông qua quy trình thay vì kiểm tra. Hơn nữa, câu hỏi không thực sự trở thành một trong những công cụ tự động hóa (đó chỉ là công cụ chúng ta sẽ sử dụng) - đó đơn giản chỉ là vấn đề kiểm tra và chấp nhận rủi ro. Quên hoàn toàn tự động hóa, bạn sẽ chạy thử nghiệm nào trước một thay đổi để đảm bảo thay đổi chưa được đưa ra? Câu trả lời cho câu hỏi đó không thay đổi từ quy trình kiểm tra thủ công sang hệ thống CI - ưu điểm duy nhất là nhiều bài kiểm tra hồi quy trước đây có thể đã được phát triển trong chức năng trước đó và CI khuyến khích bạn thực hiện các thay đổi nhỏ hơn, an toàn hơn.

TLD

Các xét nghiệm của bạn là để giảm thiểu rủi ro của sự thay đổi. Việc triển khai với đồng bằng 0 không có rủi ro và do đó không có rủi ro. Bằng cách giữ cho các thay đổi của bạn nhỏ, việc xác định các thử nghiệm cần thiết để xác thực chúng trở nên dễ dàng hơn nhiều - khả năng tái sử dụng của tự động hóa là một phần thưởng.


0

Đó là số liệu giống như khi bạn kiểm tra sản phẩm của mình một cách thủ công.

Trên thực tế, thật dễ dàng để xác định các khu vực có độ tin cậy thấp này: giả sử rằng bạn đang vận chuyển sản phẩm, tôi cho rằng bạn có một số bước thủ công sau đường ống giúp cải thiện sự tự tin của bạn có thể chuyển được. Đây là những lĩnh vực bạn nên tự động hóa để cải thiện sự tự tin trong chính quy trình tự động.

Tự động hóa của bạn là một nỗ lực liên tục. Nó phát triển và cải thiện khi sản phẩm của bạn được cải thiện. Một lỗi là một lý do để suy nghĩ lại mã của bạn, cùng với việc xem lại CI. Và mặt nắng ở đây là sự tự tin vào chính sản phẩm là có thể đạt được - sự tự tin trong tự động hóa cũng có thể đạt được.

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.