Tôi đang nghiên cứu các kỹ thuật và chiến lược để nhân rộng số lượng thử nghiệm tích hợp ngày càng tăng trên sản phẩm hiện tại của chúng tôi, để chúng có thể (một cách nhân văn) vẫn là một phần của quá trình phát triển của chúng tôi và quá trình CI.
Tại khoảng hơn 200 thử nghiệm tích hợp, chúng tôi đã đạt mốc 1 giờ để hoàn thành quá trình chạy thử hoàn chỉnh (trên máy aa dành cho máy tính để bàn) và điều này ảnh hưởng tiêu cực đến khả năng của nhà phát triển trong việc chấp nhận chạy toàn bộ bộ phần mềm như một phần của quy trình đẩy thông thường. Điều này đang ảnh hưởng đến động lực để được kỷ luật về việc tạo ra chúng tốt. Chúng tôi chỉ tích hợp thử nghiệm các khung cảnh chính từ trước ra sau và chúng tôi sử dụng một môi trường phản chiếu việc sản xuất, được xây dựng từ đầu mỗi lần chạy thử.
Bởi vì thời gian cần thiết để chạy, nó đang tạo ra một vòng phản hồi khủng khiếp và nhiều chu kỳ lãng phí đang chờ trên máy để hoàn thành các lần chạy thử, bất kể việc chạy thử có tập trung đến mức nào. Không bao giờ tác động tiêu cực đắt tiền hơn đối với dòng chảy và tiến độ, sự tỉnh táo và bền vững.
Chúng tôi hy vọng sẽ có các bài kiểm tra tích hợp gấp 10 lần trước khi sản phẩm này bắt đầu chậm lại (thực sự không có ý tưởng nào, nhưng có vẻ như chúng tôi thậm chí chưa bắt đầu về các tính năng). Chúng tôi phải mong đợi một cách hợp lý là trong vài trăm hoặc vài nghìn bài kiểm tra tích hợp, tôi nghĩ rằng tại một số điểm.
Để rõ ràng, để cố gắng ngăn điều này trở thành một cuộc thảo luận về thử nghiệm đơn vị so với thử nghiệm tích hợp, (không bao giờ nên giao dịch). Chúng tôi đang thực hiện cả thử nghiệm đơn vị với thử nghiệm tích hợp TDD VÀ trong sản phẩm này. Trên thực tế, chúng tôi thực hiện kiểm tra tích hợp ở các lớp khác nhau trong kiến trúc dịch vụ mà chúng tôi có, nơi có ý nghĩa với chúng tôi, vì chúng tôi cần xác minh nơi chúng tôi giới thiệu các thay đổi đột phá khi thay đổi các mẫu trong kiến trúc của chúng tôi sang các khu vực khác của hệ thống.
Một chút về ngăn xếp công nghệ của chúng tôi. Chúng tôi hiện đang thử nghiệm trên môi trường mô phỏng (CPU và bộ nhớ) để chạy thử nghiệm từ đầu đến cuối. Bao gồm các dịch vụ web Azure REST có phần phụ trợ noSql (ATS). Chúng tôi đang mô phỏng môi trường sản xuất của mình bằng cách chạy trong Trình mô phỏng máy tính để bàn Azure + IISExpress. Chúng tôi giới hạn ở một trình giả lập và một kho lưu trữ phụ trợ cục bộ trên mỗi máy dev.
Chúng tôi cũng có CI dựa trên đám mây, chạy thử nghiệm tương tự trong cùng môi trường giả lập và quá trình chạy thử nghiệm mất gấp đôi thời gian (2hrs +) trong đám mây với nhà cung cấp CI hiện tại của chúng tôi. Chúng tôi đã đạt đến giới hạn của nhà cung cấp CI đám mây SLA về hiệu suất phần cứng và vượt quá mức cho phép của họ về thời gian chạy thử nghiệm. Công bằng với họ, thông số kỹ thuật của họ không phải là xấu, nhưng tốt bằng một nửa so với một máy tính để bàn càu nhàu rõ ràng.
Chúng tôi đang sử dụng chiến lược thử nghiệm để xây dựng lại kho lưu trữ dữ liệu của mình cho từng nhóm thử nghiệm logic và tải trước dữ liệu thử nghiệm. Mặc dù bảo đảm toàn vẹn dữ liệu toàn diện, nhưng điều này tăng thêm 5-15% tác động cho mỗi thử nghiệm. Vì vậy, chúng tôi nghĩ rằng có rất ít để đạt được tối ưu hóa chiến lược thử nghiệm tại thời điểm này trong phát triển sản phẩm.
Điểm dài và ngắn của nó là: trong khi chúng tôi có thể tối ưu hóa thông lượng của mỗi thử nghiệm (ngay cả khi có đến 30% -50% mỗi thử nghiệm), chúng tôi vẫn sẽ không mở rộng hiệu quả trong tương lai gần với hàng trăm thử nghiệm. 1 giờ bây giờ thậm chí còn vượt quá khả năng chịu đựng của con người, chúng ta cần một trật tự cải thiện cường độ trong quy trình tổng thể để làm cho nó bền vững.
Vì vậy, tôi đang nghiên cứu những kỹ thuật và chiến lược nào chúng ta có thể sử dụng để giảm đáng kể thời gian thử nghiệm.
- Viết ít bài kiểm tra không phải là một lựa chọn. Xin vui lòng không tranh luận rằng một trong chủ đề này.
- Sử dụng phần cứng nhanh hơn chắc chắn là một lựa chọn, mặc dù rất tốn kém.
- Chạy các nhóm thử nghiệm / kịch bản trên phần cứng riêng biệt song song cũng chắc chắn là một lựa chọn ưu tiên.
- Tạo nhóm các thử nghiệm xung quanh các tính năng và kịch bản đang được phát triển là hợp lý, nhưng cuối cùng không đáng tin cậy trong việc chứng minh phạm vi bảo hiểm đầy đủ hoặc sự tự tin rằng hệ thống không bị ảnh hưởng bởi một thay đổi.
- Chạy trong môi trường dàn dựng trên nền tảng đám mây thay vì chạy trong trình giả lập máy tính để bàn là có thể về mặt kỹ thuật, mặc dù chúng tôi bắt đầu thêm thời gian triển khai để chạy thử (mỗi lần 20 phút khi bắt đầu chạy thử để triển khai nội dung).
- Việc chia các thành phần của hệ thống thành các phần logial độc lập có thể hợp lý ở một mức độ nào đó, nhưng chúng tôi hy vọng số dặm giới hạn trên đó, vì sự tương tác giữa các thành phần dự kiến sẽ tăng theo thời gian. (tức là một sự thay đổi có khả năng ảnh hưởng đến những người khác theo những cách không mong muốn - như thường xảy ra khi một hệ thống được phát triển gia tăng)
Tôi muốn xem những chiến lược (và công cụ) nào mà người khác đang sử dụng trong không gian này.
(Tôi phải tin rằng những người khác có thể đang gặp loại khó khăn này khi sử dụng các bộ công nghệ nhất định.))
[Cập nhật: 16/12/2016: Chúng tôi cuối cùng đã đầu tư nhiều hơn vào thử nghiệm song song CI, để thảo luận về kết quả: http://www.mindkin.co.nz/blog/2015/12/16/16-jobs]