Jeden programátor v laboratóriách Jet Propulsion Laboratory spadajúcich pod NASA pri vývoji softvéru pre vozidlo Curiosity na Marse napísal denne priemerne iba 76 riadkov kódu.
Vyplýva to zo zaujímavých informácií o programovaní pre vesmírne misie zverejnených ešte na konferencii HotDep '12 Gerardom Holzmannom, šéfom oddelenia pre kvalitu softvéru, JPL Laboratory for Reliable Software.
Curiosity odštartovalo so softvérom majúcim 3.8 milióna riadkov zdrojových kódov. Podľa Holzmanna sa softvér vyvíjal približne 5 rokov a pracovalo na ňom 40 vývojárov. Pri bežnom počte pracovných dní do roka to dáva cca 76 riadkov kódu na programátora a deň respektíve 9.5 riadkov na hodinu.
Táto rýchlosť je samozrejme ale daná aj veľkým dôrazom na kvalitu a spoľahlivosť softvéru. Ako sme detailne popisovali v tomto článku, JPL má prísne pravidlá pre tvorbu softvéru a tento je následne opakovane preverovaný.
Softvér pre Curiosity sa písal najmä v jazyku C, ktorý sa používa od misie Mars Pathfinder z roku 1996. V C je 96% kódu napísaného v JPL pre vesmírne zariadenia, výnimkou bol softvér sondy Cassini napísaný v ADA. Holzmann ako osoba zodpovedná za kvalitu kódu sa pokúšal presadiť prechod na iný jazyk, táto iniciatíva ale nebola úspešná.
V JPL podľa pravidiel programovania musí byť kód skompilovaný bez akýchkoľvek upozornení pri najcitlivejšom režime kompilácie, čo sa pri kóde pre Curiosity dosiahlo. Celý kód sa kompiloval a preveroval každý deň.
Robotické vozidlo Curiosity pre Mars na Zemi bez viacerých krytov vyvinuté v JPL, kliknite pre zväčšenie (foto: NASA)
Kód sa zároveň pravidelne kontroluje na potenciálne problémy statickými analyzátormi, pričom v softvéri pre Curiosity zostalo 0.7 upozornení statických analyzátorov na tisíc riadkov. Analýza celého kódu trvala 15 hodín, z toho kontrola pomocou codesonar 12 hodín.
Okrem toho kód ešte preverujú iní programátori ako jeho autori, samozrejme sa testuje v simuláciách a najkritickejšie časti kódu boli logicky verifikované pomocou kontroly modelu.
Ďalšie informácie Holzmanna dokumentujú, prečo sa v pravidlách programovania dbá tak výrazne na multithreadovú bezpečnosť. Hoci navonok vesmírne zariadenia typicky realizujú naraz len jednu hlavnú činnosť, na Curiosity beží naraz až 120 paralelných vlákien softvéru. Kód sa skladal pôvodne zo 130 rozličných modulov, neskôr bol zjednodušený na 120 modulov.
Použitým procesorom je RAD750 architektúry PowerPC a operačným systémom VxWorks. Curiosity má kvôli redundancii dva počítače a procesory, pričom jeden sa nevyužíva a je vždy len pripravený spustiť softvér v prípade problémov prvého.
Jedinou výnimkou bolo pristávanie, kde by v prípade problémov nebol dostatok času na spustenie záložného počítača. Počas pristávania tak na ňom bežal špecifický zjednodušený softvér pre pristátie pripravený okamžite prevziať kontrolu namiesto primárneho počítača.
Prednášku Holzmanna si je možné pozrieť na usenix.org.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Titulok príspevku musí mať dĺžku aspoň 5 znakov.
Od reg.: Wolverine
|
Pridané:
28.7.2015 8:38
iba? uplne v pohode, ked je ten kod kvalitny a funkcny (a hlavne novy, ziadne copy&paste a pod), keby som ja tolko kazdy den napisal :D
|
|
Re: Titulok príspevku musí mať dĺžku aspoň 5 znakov.
Od: neviem meno
|
Pridané:
28.7.2015 8:41
Ja som cez víkend rád že sa vzkriesim kdesi okolo 11-tej a dokážem odpísať pár znakov do sms-ky :D
|
|
Re: Titulok príspevku musí mať dĺžku aspoň 5 znakov.
Od: xvzf
|
Pridané:
28.7.2015 8:43
podobne :) skor by som v nadpise nahradil "iba" slovickom "az" ;)
|
|
Re: Titulok príspevku musí mať dĺžku aspoň 5 znakov.
Od: jalala
|
Pridané:
28.7.2015 11:14
jeeej felix holzmann
|
|
Sa mi zda
Od reg.: M.Miiicho
|
Pridané:
28.7.2015 8:45
Sa mi zda, ze na to, ze je to pre vesmirne sondy, je tych riadkov nejak vela. By som typoval skor 20-30 max, a k tomu 50-100 riadkov test kodu.
|
|
Re: Sa mi zda
Od: Ferikuš
|
Pridané:
28.7.2015 20:40
píše sa tipoval...TYP je typ a nie tip
|
|
Re: Sa mi zda
Od: Kekeket
|
Pridané:
28.7.2015 23:52
Ja napíšem denne tak 100 riadkov som skoro jak cavo z nasa :D
|
|
Re: Sa mi zda
Od: sheddow
|
Pridané:
29.7.2015 7:59
typ človeka, tip na víťaza :)
|
|
Divná štatistika
Od: baGoLo
|
Pridané:
28.7.2015 9:01
Ako každá štatistika - presný súčet nepresných čísiel.
Čo ak tých riadkov bolo dvojnásobok, ale medzičasom ich prepísali kvôli optimalizácii?
A čo ak ich bol štvornásobok?
A inak, vieme, ako často používajú riadkový oddeľovač kódu?
Nadpis článku je fakt divný, ale zrejme bolo zámerom vyvolať diskusiu.
|
|
Re: Divná štatistika
Od: quix_
|
Pridané:
28.7.2015 21:20
akykolvek clanok vyvola diskusiu na dsl.sk
akykolvek.
|
|
Re: Divná štatistika
Od: baGoLo
|
Pridané:
29.7.2015 9:21
tak ale niektorý viac, iný menej...
|
|
kedysi sme sa ucili
Od: zdravyrozum
|
Pridané:
28.7.2015 9:28
90% kodu sa poriesi za 10% casu
dalsich 9% kodu za 90%
zvysnych 1% su chyby
Obavam sa, ze v dnesnych kodoch sa tie cisla musia upravit v prospech chyb...
Pociam, ze NASA sa snazi kodit s co najmenej chybami, takze ich nesmieme porovnavat s mrkvoskvostom!
|
|
Re: kedysi sme sa ucili
Od: Jan Hus
|
Pridané:
28.7.2015 9:34
No toľko riadkov som písaval v strojáku, ale našťastie v hexa zápise. A naozaj mi to vtedy na 8080/8085 mikroprocesoríkoch dalo zabrať, aby to za nejakých okolností neurobilo hovadinu. Totiž nie všetkým inštrukciám som hneď porozumel dokonale. Niektoré ich fičúrky som doslova objavoval, lebo nebola nikde, v mne dostupnej literatúre, o nich ani zmienka. A to boli procesory len s nejakými 76 inštrukciami!
|
|
asdfki
Od: rambo7
|
Pridané:
28.7.2015 9:41
ja napises denne priemerne tak 30 :D a firma stoji
|
|
Re: asdfki
Od: Jan Hus
|
Pridané:
28.7.2015 9:47
Málo kto napíše taký kód aby firma padla.
:-)
|
|
Re: asdfki
Od: Orwell3000
|
Pridané:
28.7.2015 10:52
niekedy staci jeden riadok while(1=1) {}
|
|
Re: asdfki
Od: yay
|
Pridané:
28.7.2015 11:51
to by bol compile error. ked uz, tak while(1 == 1) {}
a preco tak zlozito, ked staci while(1) {}
|
|
Re: asdfki
Od: menomeno
|
Pridané:
28.7.2015 11:55
for(;;){}
|
|
Re: asdfki
Od: ;;;;;;;;;;;
|
Pridané:
28.7.2015 12:02
Bodkociarka je kde?
while(1) {};
|
|
Re: asdfki
Od reg.: t€rist
|
Pridané:
28.7.2015 22:20
#define true false
|
|
Re: asdfki
Od: aasgew
|
Pridané:
29.7.2015 10:36
define NULL (::rand() % 2)
|
|
Re: asdfki
Od: asdsdf
|
Pridané:
28.7.2015 22:04
Neboj, pri programovani CNC strojov sa daju napachat dobre skody
|
|
Re: asdfki
Od: baGoLo
|
Pridané:
28.7.2015 12:36
však práve preto stojí! :P
...keby si písal denne aspoň 50, vieš, kde už firma mohla byť? ...snáď aj pri Saturne. ;)
|
|
Kvantita
Od: vkr
|
Pridané:
28.7.2015 9:47
To su take kvantitativne informacie. Ked nieco nefunguje, tak je programaror frajer aj ked napise za den iba jeden riadok a da to do poriadku
|
|
...........
Od reg.: pocitujlasku
|
Pridané:
28.7.2015 10:22
jasne, ideme porovnavat vykon programatora podla poctu riadkov. Lenze z tych managerov si nikto neuvedomuje, ze jedna fungcia sa da napisat na 20, ale aj na 200 riadkov, pricom robia to iste.
Ale optimalizacia je o tom, zredukovat to na co najmensi pocet riadkov, tak aby to bolo prehladne a efektivne.
Ja byt plateny podla poctu riadkov, tak skrachujem :)
|
|
Re: ...........
Od: ferikuš
|
Pridané:
28.7.2015 20:43
aké pjekné...že vraj funkcia funGuje tak si rovno napísal funGcia...fasa
|
|
Re: ...........
Od: antijava
|
Pridané:
29.7.2015 13:50
enterprise programatori to radi roztiahnu do X tried pospajanych cez IoC kontainer.
|
|
dlzka
Od: dlhy programator
|
Pridané:
28.7.2015 11:25
HasThisType PatternTriedToSneakIn SomeGenericOrParameterizedTypePatternMatchingStuff AnywhereVisitor
visitor = new HasThis TypePatternTriedToSneakIn SomeGenericOrParameterizedTypePatternMatchingStuf fAnywhereVisitor();
type.traverse(visitor, null);
|
|
vacsina kodu je predegenerovana
Od: v92
|
Pridané:
28.7.2015 12:01
Pokial berieme za priklad Mars Curiosity, tak tam softver pozostaval z 3 milionov riadkov kodu, pricom 75% bolo vygenerovanych:
http://tinyurl.com/pxubzdx
vid. hned druhy stlpec. Vacsina projektov bude mat vygenerovany kod vopred, takze toho kodu co napisu programatori je iste menej. V jednotkach za den.
Zaujimave je, ale ake naroky boli pri pisani softveru pre raketoplany. Tam neslo konkretne ani aky nastroj, ale dolezity bol proces vyvoja.
http://tinyurl.com/c3w8wj7
Je to zaujimave citanie, odporucam.
|
|
dnes má meniny Krištof
Od: Knedla
|
Pridané:
28.7.2015 20:44
76 riadkov? Ja ich denne urobim cca 100 bez chyby..
|
|
Dnes nie sú meniny
Od: Ja.
|
Pridané:
28.7.2015 21:27
Povedz mi, ako si jeden človek tak naivne môže myslieť, že niečo robí bez chyby???
|
|
76 riadkov kódu
Od: asdsdf
|
Pridané:
28.7.2015 21:45
Kde je problem ? Ked nic nerobia, nic nepokazia :-D
|
|
Nezohľadnili ste Parkinsonove zákony
Od: Muad'Dib
|
Pridané:
29.7.2015 23:03
Ale to ste napísali sprostosť, pretože to sa jednoducho nedá takto rozpočítať, ale musíte pri tom zohľadniť Parkinsonove zákony.
|
|
Hmmmmmmm
Od: iExploder
|
Pridané:
30.7.2015 9:28
Statistika s 0 vypovednou hodnotou, ked uz nieco, tak treba udavat pocet zmien v kode nie pocet riadkov..
|
|
asdfg
Od: rambo6
|
Pridané:
31.7.2015 11:51
inac minule sa mi podarilo vymazat cely komp ze ho netvorkaci pravovali 3 dni :D
stopol som v polke prikaz sudo apt-get -f install :D
|