A Google kutatói a napokban hozták nyilvánosságra egy érdekes felmérésük eredményeit, amiben azt vizsgálták, hogy miért nem fordulnak le a programok - azaz, hogy a programozók milyen típusú hibákat követnek el a leggyakrabban munkájuk során. A kutatásban 9 hónapon át összesen 26.6 millió build során figyelték és összesítették azt, hogy többezer C++ és Java fejlesztő milyen típusú hibaüzeneteket kapnak fejlesztőeszközeiktől - és jutottak a több mint 56 millió hiba összesítése után egyesek számára minden bizonnyal meglepő eredményre.
A felmérés adatai szerint ugyanis a C++ és Java nyelveken dolgozó programozók által messze legnagyobb arányban elkövetett hibák a függőségek feloldásával voltak összefüggésben. Ez azt jelenti, hogy a kódolás során a fejlesztők olyan fájlokra, változókra vagy típusokra hivatkoztak, amik valójában nem léteztek (mert pl. elírták a nevüket) - vagy legalábbis az elérésük nem volt biztosított az adott szkópban a függőségek nem megfelelő deklarálása folytán. Az ilyen tévedések a C++ esetében minden második hiba (~52%) okát képezték, Java esetében ugyanakkor minden három fordítói hibaüzenetből kettő (~64%) mögött állt ilyen probléma.

A második helyen a típusegyezési problémák szerepeltek - C++ esetén minden negyedik (~27%), Java esetében pedig minden ötödik (~19%) hiba tartozott ebbe a kategóriába, azaz, a fejlesztők ilyen arányban próbáltak meg a deklarálttól eltérő típusú ill. azzal inkompatibilis értéket hozzárendelni egy változóhoz vagy mezőhöz, illetve paraméterként átadni egy függvénynek.
A fenti két típusú hiba kimagasló aránya különösen meglepő, hiszen mindkét nyelvre szinte kizárólag olyan eszközökkel fejlesztenek manapság, amik már a forráskód gépelése közben részletes információkat adnak az elérhető változók, mezők és a paraméterek nevével és típusával kapcsolatban - így a magas függőségfeloldási és típusegyezőségi hibaszám egyértelműen csak az ilyen nyelvekre dolgozó fejlesztők nemtörődömségével és felületességével indokolható.
Ezt erősíti egyébként az is, hogy nagyjából minden második esetben (44%) a hibával zárult fordítási kísérletet újabb hibával záruló fordítási kísérlet követett - tehát, a fejlesztők gyakran halmozták a hibákat, nem pedig egyszeri, elszórt tévedésekbe estek; illetve, hogy a típusegyezési hibák közül a leggyakoribbak abból eredtek, hogy a programozók a függvényhívásokban túl kevés paramétert adtak meg, illetve rossz számban vagy helyen használtak zárójeleket.
A fennmaradó hibák közül a szintaktikai jellegűek vezettek, bár szinte elhanyagolható mértékben: C++ esetében minden nagyjából 8., Java esetében minden 20. hiba volt ilyen típusú. A listát a szemantikai és egyéb jellegű hibák zárták, amik azonban egyaránt csak pár százalékát tették ki mindkét nyelv esetében az összes programozói tévedéseknek.
A számos egyéb érdekes megállapítást tartalmazó jelentés teljes egészében ide kattintva olvasható.