Bir çapraz platform sunarken, her CPU çekirdeğini, SIMD intrinsics, GPU, GPGPU, vb. Kullanan çok iş parçacıklı bir yeni nesil AAA oyun motoru gibi, donanımın her bir inçini kapladığınız alanlarda bu endişeyi anlayabiliyorum. ürün.
Bu durumlarda, en kötü kabusunuz genellikle testlerinizin (birim ve entegrasyon) test edilen ilk 5.000 farklı makine / platform için geçeceği, ancak belirsiz bir GPU modeli için sürücü hatası nedeniyle 5.001'de başarısız olduğu durumlar olacaktır. Bu konuda bana titreme verir - bunları önceden test edemez veya önceden tahmin edemezsiniz.
Özellikle GPU gölgelendiricileri yazarsanız, dahil olan tüm GPU modelleri / sürücüleri tarafından uygulanan birkaç taşınabilir standart garanti olduğundan, yazdığınız kodun yarısının tanımlanmamış davranışı çağıracağı ters bir piyango oynayabilirsiniz. Bu günlerde mayın tarama gemisi oynamak gibi gittikçe azalırken, bu insanlara bir fikir vermelidir: http://theorangeduck.com/page/writing-portable-opengl . 90'ların sonunda ve 2000'lerin başında bunu denemek gerçekten korkunçtu ve mayın tarama gemisi oldu.
Bu tür durumlar için, ürünü gerçekten sağlamlaştırmak ve kararlı bir sürümden önce kendinden emin olmak için genellikle çok çeşitli donanım ve işletim sistemlerine sahip 10.000'den fazla test kullanıcısına ihtiyaç duyarsınız . Tüm şirketler bu kadar geniş bir test tabanına sahip olmayı göze alamaz ve herkesin bunu doğru yapmak için disiplini yoktur (geniş çapta fark edilen tüm sorunlar , bazı dahili ön alfa / alfa aşamasında veya daha fazla testçiye sahip olmadan önce düzeltilmelidir . gereksiz raporlar, geliştiricileri bir yama ve dua panikine atabilir).
Bu durumda önerdiğim, başkalarının önerdiği şey, dağıtılmış bir entegrasyon testleri setine odaklanmak. Yükleyiciyle paketleyebilir ve kullanıcıların, kurulumun size neden başarısız olabileceğini, geliştiricilerin neden başarısız olabileceğine ilişkin ayrıntıları sağlamaya dikkat ederek temel bir tanılama denetimini geçmesini gerektirir.
Başka bir şey (patronu ikna edebiliyorsanız), bitişik entegrasyon için geniş bir donanım yelpazesine sahip olmaktır. Donanım / OS kombinasyonlarında daha fazla çeşitlilik, daha iyi. CI sunucularınız için minimum donanım gereksinimlerini modelleyen çeşitli bok donanımları bile istersiniz: asla bilemezsiniz.
Ama önerebileceğim bir şey daha var:
Kerestecilik
Yukarıda tarif ettiğim senaryo gibi bir şeyle uğraşıyorsanız, genellikle en sorunlu (muhtemelen en kötü zamanda ortaya çıkan ve hatta muhtemelen en kötü ihtimalle ortaya çıkamayan) olası şeyleri test edemezsiniz. çok ayrıntılı bir donanım / işletim sistemi birleşimiyle sınırlı olduğu için en kapsamlı test paketi).
Ancak, belirsiz donanım uyumsuzlukları veya doğrudan sürücü hataları veya yanlış dylib'e (aslında bu endişeyle hiç karşılaşmadım) bağlanma gibi sorunların çoğu, yazılımı başlatmanın çok ötesine geçmez. Genellikle çökecek ve çok yakında, kabaca konuşarak yanacak.
Ben, akıl sağlığı için, kaçınılmaz olanı kucaklamayı öneririm. Muhtemelen kapsamlı bir şekilde test edemeyeceğiniz bu şeyler hakkında hiçbir şey yapamazsınız. Kasırga (imkansız) önlemek için çalışmayın, ama o pencerelere bindik.
Tipik olarak burada yapabileceğimiz en iyi şey, sorunu olabildiğince çabuk, nerede olabildiğince ayrıntılı olarak ortaya çıkarmak (şüpheliler listemizi daraltmak) ve bildirildikten sonra ASAP sorununu düzeltmektir.
Bu durumda, günlük kaydı bir cankurtaran olabilir. Bu tür alanlar için, hiç kimsenin okuyamayacağı bu spam içerikli teknik günlükleri oluşturabilirsiniz. Genellikle ilgili, kullanıcı bir sürücü hatası nedeniyle bir çökme ile karşılaşmadan önce günlüğe kaydedilen en son satırdır, örneğin, çökmeleri izleyen ve daha sonra kullanıcıların kopyalayabileceği günlüğün son satırını gösteren harici bir işlem veya kanca yazabilirsiniz. ve örneğin bir çökme çöplüğüne ek olarak size yapıştırabilirsiniz.
Bu genellikle ayrıntılı bilgilere ihtiyaç duyduğundan ve bu donanım / platform / sürücü sorunlarına ilişkin koddaki en hassas alanların çoğu performans açısından kritik olduğundan, günlüğe kaydetmenin o kadar sık bir oranda gerçekleşebileceği garip bir sorun var. yazılım.
Bu durumda yararlı bir hile, bir kez yürütülen bir şeyin ikinci kez, üçüncü kez vb. Başarılı bir şekilde yürütüleceği varsayımına güvenmektir. Bu en sağlam varsayım değildir, ancak genellikle "yeterince iyi" (ve hiçbir şeyden sonsuz derecede daha iyi) . Bununla, bir şeyin zaten günlüğe kaydedildiğini takip etmek için biraz dış durum kullanabilir ve kodun bir döngüde tekrar tekrar çağrılacağı gerçekten ayrıntılı durumlar için günlüğe kaydetme girişimlerini atlayabilirsiniz.
Her neyse, umarım bu yardımcı olur. Geçmişte bu tür bir günaha maruz kaldım ve GPU kodlamasını (GPGPU ve gölgelendiriciler) çevreleyen biraz paranoyaya sahibim ve kendim ve ekibim arasındaki geçmiş deneyimlerin bir sonucu olarak (bazen sadece diğer ekip üyelerinin bunlarla gerçekten başa çıktığını görmek) geç ve bırakıldıktan sonra, belirli bir Radeon modelindeki bazı yumuşatılmış çizgilerin oluşturulmasında çökecek bazı ATI aksaklıkları gibi sürünürler oluştu, daha sonra bildirildi ve sadece geçici bir çözümle bilinen bir sorun olarak işaretlendi).
Günlüğe kaydetme, popomuzu kurtaran şeydi ve sık sık duymadığımız bir yerleşik GPU ile 10.001'inci belirsiz prototip makinedeki sorunu sık sık görmemize izin verdi, son kod satırı derhal hatanın tam olarak nerede olduğunu tespit etmemizi sağladı. veya şüpheli olarak 3 satır kod, örneğin ayrıntılı bir gölgelendiricinin içindeyse, bir GPU gölgelendiricisinin içine giriş yapamadığımız için bir tür SOL'yuz, ancak en azından hangi gölgelendiricinin sorunu olduğunu görmek için günlüğü kullanabiliriz soruşturmayı başlatmak.