Я міг би зрозуміти це занепокоєння в тих областях, де ви охоплюєте кожен один дюйм апаратного забезпечення, як багатопотоковий ігровий движок наступного покоління AAA, який використовує кожне ядро процесора, вбудовані SIMD, GPU, GPGPU тощо, постачаючи крос-платформу продукт.
У цих випадках найгіршим кошмаром часто будуть ті випадки, коли ваші тести (блок та інтеграція) пройдуть за перші 5000 перевірених розрізнених машин / платформ, але не вдаються до 5,001-ї через помилку драйвера для малозрозумілої моделі GPU Просто подумати з цього приводу мене тремтять - ви не можете їх перевірити або передбачити заздалегідь.
Особливо, якщо ви пишете шейдери для графічного процесора, ви можете закінчити розіграти зворотну лотерею, де половина написаного вами коду призведе до невизначеної поведінки, оскільки існує декілька портативних стандартних гарантій, які застосовуються всіма моделями / драйверами GPU. Хоча в наші дні стає все менше, як грати тральщиком, це має дати людям певне уявлення: http://theorangeduck.com/page/writing-portable-opengl . Спроба цього в кінці 90-х та на початку 2000-х була справді жахливою, і вона була тральщиком у всій мірі.
Для таких випадків вам часто потрібні команди з 10 000+ тестерів із дійсно широким спектром апаратних та операційних систем, щоб дійсно затвердіти виріб та впевнено почуватись щодо нього перед стабільним випуском. Не всі компанії можуть дозволити собі мати таку широку базу тестів, і не всі мають дисципліну, щоб правильно це зробити (усі широко помітні проблеми слід вирішити перед тим, як мати стільки тестувальників на якомусь внутрішньому етапі попередньої альфа-альфа чи ще Потік надмірних звітів може кинути розробників в паніку, яка панує.
Я рекомендую в цьому випадку те, що запропонували інші, зосередитись на розподіленому наборі тестів на інтеграцію. Ви можете зв’язати це з інсталятором, вимагаючи від користувачів пройти основну діагностичну перевірку, уважно надаючи детальну інформацію про те, чому встановлення не вдалося, що вони можуть передати вам, розробникам.
Інша річ (якщо ви можете переконати начальника) - це наявність широкого спектру обладнання для безперервної інтеграції. Чим більше різноманітність у комбінаціях апаратних засобів / ОС, тим швидше. Ви хочете навіть різноманітного обладнання для лайна, яке моделює мінімальні вимоги до обладнання для ваших серверів CI: ви ніколи не знаєте.
Але є ще одне, що я пропоную:
Ведення журналів
Якщо ви маєте справу з чимось подібним до описаного вище сценарію, то часто ви не можете перевірити те, що є найбільш проблематичним (ті найгірші можливі випадки, які з’являються в найгірший можливий час і не можуть виявитись навіть у найбільш вичерпний тестовий набір, оскільки це проблема, обмежена дуже специфічним обладнанням / комбінацією ОС).
Однак більшість таких питань, як незрозумілі апаратні несумісності або відверті збої драйверів або зв'язування з неправильним дилібом (я ніколи насправді не стикався з цим занепокоєнням) не дасть вам далеко запустити програмне забезпечення. Зазвичай це швидко впаде і згорить, грубо кажучи.
Я радимо заради розуму прийняти неминуче. Ви нічого не можете зробити з цими речами, ви не зможете всебічно перевірити. Не намагайтеся попередити ураган (неможливо), але забивайте ці вікна.
Як правило, найкраще, що ми можемо зробити, - це якнайшвидше з’ясувати проблему, де вона виникає якомога детальніше (щоб звузити наш список підозрюваних) та вирішити проблему якнайшвидше після її повідомлення.
У цьому випадку лісозаготівля може бути рятівником. Для таких типів полів ви можете створити ці спам-технічні журнали, які ніхто ніколи не прочитав би. Часто актуальним є лише останній рядок, записаний у журналі, перед тим, як користувач зіткнувся з аварією через помилку драйвера, наприклад, ви можете написати зовнішній процес або гачок, який слідкує за збоями, а потім показує останній рядок журналу, який користувачі можуть скопіювати і вставити для вас, наприклад, на додаток до смітника.
Оскільки для цього часто потрібна детальна інформація та багато найбільш сприйнятливих областей у коді до цих апаратних / платформних / драйверних проблем є критично важливими, є ця незручна проблема, коли реєстрація може відбуватися з такою частою швидкістю, що вона насправді буде повільною вниз програмне забезпечення.
Корисна хитрість у цьому випадку - покладатися на припущення, що щось, що виконується один раз, буде успішно виконано вдруге, втретє і т. Д. Це не найзвучніше припущення, але воно часто "досить добре" (і нескінченно краще, ніж нічого) . З цим ви можете використовувати трохи зовнішнього стану, щоб відслідковувати, коли щось уже зареєстровано, і пропускати наступні спроби ввійти в ті дійсно детальні випадки, коли код буде повторно викликатись у циклі.
У будь-якому випадку, я сподіваюся, що це допомагає. У минулому я стикався з такою спокусою і мав трохи параноїї навколо кодування GPU (GPGPU і шейдери) в результаті деякого минулого досвіду між собою та моєю командою (іноді просто бачу, як інші члени команди мають справу з цим дійсно пізній і після випуску дав мені повзання, як деякі проблеми ATI на певній моделі Radeon, яка б вийшла з ладу при наданні антиаліазійних ліній, пізніше повідомляється і позначається як відома проблема з наявними лише рішенням вирішення проблеми.
Запис журналу був тим, що врятувало наші приклади там, і ми часто бачили проблему на тій 10 001-й неясній прототипі з вбудованою GPU, про яку ми ніколи не чули, і останній рядок коду одразу дозволив нам помітити, де саме збій знизився до 2 або 3 рядки коду як підозрюваного, наприклад, якщо він знаходиться у всеосяжному шейдері, ми начебто SOL, оскільки ми не можемо проводити вхід всередині шейдера графічного процесора, але ми можемо принаймні використовувати журнал, щоб побачити, який шейдер виникла проблема. почати розслідування.