Tôi có thể hiểu mối quan tâm này một cách mạnh mẽ trong các lĩnh vực mà bạn đang bảo vệ từng inch phần cứng, như một công cụ trò chơi AAA thế hệ tiếp theo đa luồng sử dụng mọi lõi CPU, nội tại SIMD, GPU, GPGPU, v.v. trong khi cung cấp một nền tảng chéo sản phẩm.
Trong những trường hợp đó, cơn ác mộng tồi tệ nhất của bạn thường sẽ là những trường hợp mà các bài kiểm tra (đơn vị và tích hợp) của bạn sẽ vượt qua cho 5.000 máy / nền tảng khác nhau đầu tiên được thử nghiệm, nhưng không thành công trong lần thứ 5.001 do lỗi trình điều khiển cho mô hình GPU tối nghĩa. về điều này mang lại cho tôi sự rùng mình - bạn không thể kiểm tra hoặc thấy trước những điều này trước.
Đặc biệt, nếu bạn viết shader GPU, cuối cùng bạn có thể chơi xổ số ngược trong đó một nửa mã bạn viết sẽ gọi hành vi không xác định, vì có rất ít đảm bảo tiêu chuẩn di động được thực thi bởi tất cả các mô hình / trình điều khiển GPU có liên quan. Mặc dù ngày càng ít chơi trò quét mìn hơn, nhưng điều này sẽ mang đến cho mọi người một số ý tưởng: http://theorangeduck.com/page/writer-portable-opengl . Thử điều này vào cuối những năm 90 và đầu những năm 2000 thực sự khủng khiếp, và đó là tất cả các cách quét mìn.
Đối với các loại trường hợp này, bạn thường cần đội ngũ hơn 10.000 người thử nghiệm với phạm vi phần cứng và hệ điều hành thực sự rộng để thực sự củng cố sản phẩm và cảm thấy tự tin về nó trước khi phát hành ổn định. Không phải tất cả các công ty đều có đủ khả năng để có một cơ sở thử nghiệm rộng như vậy và không phải tất cả đều có kỷ luật để thực hiện đúng (tất cả các vấn đề đáng chú ý nên được khắc phục trước khi có quá nhiều người thử nghiệm trong một số giai đoạn tiền alpha / alpha nội bộ hoặc nếu không lũ báo cáo dư thừa có thể khiến các nhà phát triển rơi vào hoảng loạn vá lỗi và cầu nguyện).
Những gì tôi đề nghị trong trường hợp này là những gì người khác đề xuất, tập trung vào một bộ kiểm tra tích hợp phân tán. Bạn có thể gói nó với trình cài đặt, yêu cầu người dùng vượt qua kiểm tra chẩn đoán cơ bản với sự chú ý cẩn thận để cung cấp chi tiết về lý do tại sao cài đặt thất bại mà họ có thể chuyển cho bạn, các nhà phát triển.
Một điều nữa (nếu bạn có thể thuyết phục ông chủ) là có sẵn một loạt phần cứng để thực hiện tích hợp liền kề. Sự đa dạng hơn trong các combo phần cứng / hệ điều hành, merrier. Bạn muốn thậm chí một loạt các phần cứng tào lao mô hình các yêu cầu phần cứng tối thiểu cho các máy chủ CI của bạn: bạn không bao giờ biết.
Nhưng có một điều nữa tôi muốn đề xuất:
Ghi nhật ký
Nếu bạn đang đối phó với bất cứ điều gì như kịch bản mà tôi đã mô tả ở trên, thì thường thì bạn không thể kiểm tra những thứ có xu hướng rắc rối nhất (những vấn đề tồi tệ nhất có thể xuất hiện vào thời điểm tồi tệ nhất có thể xảy ra ngay cả bộ kiểm tra toàn diện nhất vì đây là một vấn đề bị ràng buộc với một bộ phần cứng / hệ điều hành rất cụ thể).
Tuy nhiên, hầu hết các loại vấn đề như không tương thích phần cứng tối nghĩa hoặc trình điều khiển hoàn toàn trục trặc hoặc liên kết với dylib sai (tôi chưa bao giờ thực sự phải đối mặt với mối quan tâm này) sẽ không giúp bạn vượt qua được phần mềm. Nó thường sẽ sụp đổ và cháy khá sớm, nói một cách thô lỗ.
Tôi đề nghị, vì lợi ích của sự tỉnh táo, để loại bỏ những điều không thể tránh khỏi. Bạn không thể làm bất cứ điều gì về những điều này mà bạn không thể kiểm tra toàn diện. Đừng cố gắng ngăn chặn cơn bão (không thể), nhưng hãy lên những cửa sổ đó.
Thông thường ở đây, điều tốt nhất chúng ta có thể làm là tìm ra vấn đề càng sớm càng tốt, nơi nó xảy ra càng chi tiết càng tốt (để thu hẹp danh sách nghi phạm của chúng ta) và khắc phục sự cố ASAP sau khi báo cáo.
Trong trường hợp này, đăng nhập có thể là một cứu cánh. Đối với các loại trường này, bạn có thể tạo các nhật ký kỹ thuật spam mà không ai từng đọc qua. Thường thì có liên quan chỉ là dòng cuối cùng được ghi trong nhật ký trước khi người dùng gặp sự cố do trục trặc trình điều khiển, ví dụ: Bạn có thể viết một quy trình bên ngoài hoặc móc để theo dõi sự cố và sau đó hiển thị dòng cuối cùng của nhật ký mà người dùng có thể sao chép và dán cho bạn, ví dụ ngoài một bãi chứa sự cố.
Vì điều này thường cần thông tin chi tiết và rất nhiều lĩnh vực dễ bị ảnh hưởng nhất trong mã đối với các vấn đề phần cứng / nền tảng / trình điều khiển này là rất quan trọng về hiệu năng, nên có vấn đề khó xử khi việc ghi nhật ký có thể xảy ra với tốc độ thường xuyên đến mức nó sẽ thực sự chậm xuống phần mềm.
Một mẹo hữu ích trong trường hợp này là dựa vào giả định rằng một cái gì đó được thực hiện một lần sẽ thực hiện thành công lần thứ hai, lần thứ ba, v.v. Đây không phải là giả định hợp lý nhất, nhưng nó thường "đủ tốt" (và tốt hơn vô cùng) . Cùng với đó, bạn có thể sử dụng một chút trạng thái bên ngoài để theo dõi khi nào một cái gì đó đã được ghi lại và bỏ qua các lần thử tiếp theo để đăng nhập cho các trường hợp thực sự chi tiết trong đó mã sẽ được gọi liên tục trong một vòng lặp.
Dù sao, tôi hy vọng điều này sẽ giúp. Tôi đã từng gặp phải loại cám dỗ này trong quá khứ và có một chút hoang tưởng xung quanh việc mã hóa GPU (GPGPU và shader) do một số kinh nghiệm trong quá khứ giữa tôi và nhóm của tôi (đôi khi chỉ cần thấy các thành viên khác trong nhóm đối phó với những điều này thực sự muộn và sau khi phát hành đã cho tôi các creep, như một số trục trặc ATI trên một mô hình Radeon cụ thể sẽ gặp sự cố khi kết xuất các dòng khử răng cưa, sau đó đã báo cáo và đánh dấu là một vấn đề đã biết chỉ có giải pháp khắc phục có sẵn).
Ghi nhật ký là thứ đã cứu những kẻ tàn phế của chúng ta ở đó, cho phép chúng ta thường thấy vấn đề trên máy nguyên mẫu tối thiểu 10,001 với GPU trên bo mạch mà chúng ta chưa từng nghe thấy, với dòng mã cuối cùng ngay lập tức cho chúng ta biết chính xác nơi thất bại xuống 2 hoặc 3 dòng mã là nghi ngờ, ví dụ: Nếu bên trong một trình tạo bóng phức tạp, chúng tôi thuộc loại SOL vì chúng tôi không thể đăng nhập vào trình tạo bóng GPU, nhưng ít nhất chúng tôi có thể sử dụng ghi nhật ký để xem trình tạo bóng nào có vấn đề ngay lập tức để bắt đầu điều tra.