Bạn không đơn độc nếu tổ chức của bạn đã phát triển hết tốc lực của chiến lược DevOps trong 5 năm qua. Ba phần tư các tổ chức đã áp dụng cách tiếp cận DevOps - con số này đã tăng hơn gấp đôi trong vòng 5 năm qua.
Bất chấp sự phát triển bùng nổ của DevOps, chỉ 10% người trả lời Khảo sát đánh giá kinh doanh của Harvard mô tả doanh nghiệp của họ là “rất thành công trong việc triển khai và phát triển phần mềm nhanh chóng”.
Quá trình chuyển đổi DevOps yêu cầu khởi chạy và triển khai nhanh hơn, nhưng việc tăng tần suất xây dựng dẫn đến nhiều thử nghiệm hơn được xây dựng và gây ra tắc nghẽn phát triển.
Đối với các nhóm ở vị trí mà chu kỳ kiểm tra chậm đang cản trở sự phát triển nhanh chóng, phân tích tác động kiểm tra là một cách để đẩy nhanh chu kỳ phát triển bằng cách chỉ chạy các kiểm tra liên quan đến mã nguồn đã thay đổi.
Phân tích tác động kiểm thử là một cách để tăng tốc kiểm thử phần mềm bằng cách chỉ chạy các kiểm thử quan trọng đối với một tập hợp các thay đổi mã. Thực hiện phân tích tác động thử nghiệm cho phép các nhóm tăng tốc chu kỳ phát triển và triển khai của họ bằng cách giảm chi phí vận chuyển một thay đổi.
Theo truyền thống, phân tích tác động trong kiểm thử phần mềm thường dựa vào phân tích mã nguồn tĩnh để xây dựng biểu đồ phụ thuộc giữa mã và kiểm thử.
Nếu không có quyền truy cập vào công cụ hoặc thư viện được thiết kế riêng cho phân tích tác động của thử nghiệm, bạn có thể theo dõi thủ công các thay đổi đối với cơ sở mã của mình và sử dụng thông tin này để xác định thử nghiệm nào có khả năng bị ảnh hưởng.
Ví dụ: bạn có thể duy trì danh sách các thử nghiệm được liên kết với từng mô-đun hoặc thành phần trong hệ thống của mình và cập nhật danh sách này khi bạn thực hiện các thay đổi.
Để thực hiện phân tích tác động kiểm tra theo cách thủ công, bạn chạy từng kiểm tra và xây dựng bản đồ chứa mã của từng bài kiểm tra. Khi bạn tạo bản đồ, bạn có thể viết một chương trình nhỏ chạy mỗi khi nhà phát triển viết mã.
Chương trình xem xét các tệp đã sửa đổi và tra cứu những bài kiểm tra nào bạn cần chạy để thay đổi.
Bạn cần thường xuyên cập nhật bản đồ để có biểu đồ phụ thuộc chính xác khi mã thay đổi theo thời gian.
Đoạn mã bên dưới ánh xạ các tên kiểm tra tới các thành phần mà chúng được liên kết. Trong ví dụ này, chúng tôi có ba mô-đun:
Đối với mỗi thành phần đã sửa đổi, hãy thêm các bài kiểm tra vào danh sách mà chúng tôi có thể chuyển đến khung thực thi kiểm tra.
# Define a dictionary that maps test names to the modules or components they are testing tests_by_component = { "test_login": ["login_module"], "test_account_creation": ["account_creation_module"], "test_password_reset": ["password_reset_module"] } # Define a list of the components that have been modified # This should be dynamically generated based on the code changes. modified_components = ["login_module"] # Determine which tests are likely to be affected by the changes affected_tests = [] for test, components in tests_by_component.items(): for component in components: if component in modified_components: affected_tests.append(test) # Now, we can pass the affected tests to our test harness. print(affected_tests) # Output: ["test_login"]
Khi được thực hiện hiệu quả, phân tích tác động thử nghiệm đi kèm với nhiều lợi ích, bao gồm:
Trải nghiệm nhà phát triển tốt hơn
Phân tích tác động kiểm thử phần mềm thủ công có thể khó thực hiện đúng. Cho dù dự án của bạn là một microservice nhỏ hay một khối khổng lồ, thì lượng dữ liệu thử nghiệm mà bạn cần xử lý có thể tăng lên nhanh chóng.
Phân tích thử nghiệm thủ công nhanh chóng trở nên khó sử dụng và thậm chí còn khó khăn hơn khi các nhà phát triển thêm các tính năng mới và cấu trúc lại mã theo thời gian.
Đối với mỗi dòng mã được thêm vào, bạn cần xác định các tác động tiềm ẩn và thử nghiệm nào có liên quan đến dòng mã đó. Nhiều nhóm nhà phát triển báo cáo rằng việc chọn các bài kiểm tra phù hợp cần rất nhiều công sức để thực hiện trên quy mô lớn .
Hãy cùng xem qua một tình huống rất quen thuộc - một nhóm phát triển phần mềm tại một công ty khởi nghiệp công nghệ cỡ vừa đã đạt được mức tăng trưởng bùng nổ trong ba năm qua.
Họ đã đạt đến Series C về vốn đầu tư mạo hiểm và đã sử dụng khoản tiền mặt này để thuê các nhà phát triển xây dựng các tính năng mới một cách nhanh chóng. Công ty sử dụng một mô hình nhanh nhẹn, lấy DevOps làm trung tâm và tự hào về một bộ thử nghiệm mạnh mẽ .
Việc mở rộng công ty nhanh chóng đi kèm với những khó khăn ngày càng tăng đối với nhóm nhà phát triển. Dòng tính năng mới có nghĩa là dòng thử nghiệm mới và thay đổi đột phá, từ đó gây ra lỗi thử nghiệm và thời gian chạy kéo dài.
Không ai ở giai đoạn khởi động tin rằng thất bại là hợp pháp nữa, vì vậy các nhà phát triển liên tục nhấn nút “chạy lại” cho đến khi các bài kiểm tra vượt qua. Dù sao thì họ cũng hợp nhất các thay đổi khi họ không thể thực hiện thành công các thử nghiệm và cho rằng vấn đề là do thử nghiệm chứ không phải mã của họ.
Các nhà phát triển vô hiệu hóa các bài kiểm tra mất quá nhiều thời gian hoặc có vẻ không liên quan đến mã - họ có việc phải làm và bắt đầu coi kiểm tra phần mềm là rào cản để hoàn thành nhiệm vụ của họ.
Các nhà phát triển đang ở trong một tình huống mà họ không còn tin tưởng vào các thử nghiệm và tùy ý vô hiệu hóa hoặc bỏ qua chúng - về cơ bản là tham gia vào phiên bản lựa chọn thử nghiệm thủ công đầy rủi ro của chính họ.
Nhóm kỹ sư bắt đầu lo lắng rằng tình trạng này không bền vững.
Họ đang lãng phí bao nhiêu thời gian để chờ chạy thử nghiệm?
Trưởng bộ phận kỹ thuật của công ty khởi nghiệp quyết định đã đến lúc xử lý khoản nợ kỹ thuật DevOps trước khi nó gây ra sự cố tốn kém.
Thay vì phân tích tác động của thử nghiệm đặc biệt được thúc đẩy bởi các nhà phát triển đang cố gắng tăng tốc quy trình công việc của họ, họ sẽ tìm ra cách chọn các thử nghiệm quan trọng đối với các thay đổi mã.
Lựa chọn thử nghiệm dự đoán là một nhánh của phân tích tác động thử nghiệm sử dụng dữ liệu để dự đoán thử nghiệm nào hệ thống CI của bạn cần chạy dựa trên kết quả thử nghiệm lịch sử và thay đổi mã.
Launchable đang dân chủ hóa phương pháp Lựa chọn thử nghiệm dự đoán để nó có sẵn cho các nhóm thuộc mọi quy mô chỉ bằng một nút nhấn.
Lựa chọn thử nghiệm dự đoán của Launchable giải quyết Phân tích tác động thử nghiệm bằng cách khai thác sức mạnh của máy học để hợp lý hóa quá trình phát triển phần mềm. Lựa chọn thử nghiệm dự đoán sử dụng trí thông minh dựa trên dữ liệu để xác định thử nghiệm nào phù hợp nhất với từng loại thay đổi.
Bạn có thể giảm số lần chạy thử nghiệm và đẩy nhanh thời gian phân phối với ít tài nguyên bị lãng phí hơn.
Trong trường hợp không có phương pháp này, các nhóm phải tạo thủ công các tập hợp con của " bài kiểm tra khói " hoặc thực hiện song song các bài kiểm tra của họ.
Trong kịch bản trước, nhóm nhà phát triển của công ty khởi nghiệp có thể hưởng lợi từ Lựa chọn thử nghiệm dự đoán. Các nhà phát triển của họ có thể tập trung vào việc cung cấp các tính năng quan trọng nhất, tăng tốc quy trình làm việc của họ và tin tưởng lại vào bộ thử nghiệm.
Với Launchable, bạn không cần đoán thử nghiệm nào sẽ chạy và liên tục cập nhật bộ phân tích tác động thử nghiệm của mình. Đây là một ví dụ Python về cách Launchable có thể hoạt động với khung Pytest .
Cài đặt pytest-launchable vào môi trường của bạn với pip3 install pytest-launchable
Tạo tệp cấu hình Có thể khởi chạy bằng cách chạy launchable-config --create
.
Tạo khóa API có thể khởi chạy từ https://app.launchableinc.com/
Đặt nó làm biến môi trường LAUNCHABLE_TOKEN
trên máy sẽ chạy thử nghiệm.
Từ thư mục chứa tệp cấu hình Launchable của bạn, hãy chạy pytest --launchable <your-pytest-project>
Kết quả pytest của bạn sẽ được báo cáo cho Launchable. Sau đó, có thể khởi chạy sẽ bắt đầu đào tạo một mô hình máy học dựa trên kết quả kiểm tra của bạn theo thời gian. Mô hình tối ưu hóa những thử nghiệm nào có khả năng hữu ích nhất trong khoảng thời gian thử nghiệm ngắn nhất.
Với Lựa chọn thử nghiệm dự đoán dựa trên ML của Launchable, các nhóm thường thấy thời gian thử nghiệm giảm 60-80% mà không ảnh hưởng đến chất lượng .
Những lý do chính khiến các tổ chức chọn tính năng Lựa chọn dự đoán của Launchable là:
Ship code nhanh hơn
Xem các kỹ sư trong các ngành đang thành công như thế nào với Launchable với các nghiên cứu điển hình này . Phân tích tác động thử nghiệm là một công cụ thiết yếu để nâng cao hiệu quả của quá trình thử nghiệm. Tuy nhiên, phân tích tĩnh hoặc thủ công có thể cồng kềnh và có thể không mang lại giá trị.
Việc triển khai phân tích tác động thử nghiệm đúng cách với Lựa chọn thử nghiệm dự đoán có thể tiết kiệm thời gian và cải thiện chất lượng thử nghiệm bằng cách làm cho quy trình của bạn dựa trên dữ liệu nhiều hơn.
Có thể khởi chạy tích hợp liền mạch với CI của bạn, bất kể tần suất cam kết hay số lượng nhánh Git mà bạn có. Nó hỗ trợ tất cả các ứng dụng và ngôn ngữ, đồng thời các nhóm báo cáo đã giảm tới 90% thời gian thử nghiệm mà không ảnh hưởng đến chất lượng.