{"id":31488,"date":"2022-06-15T09:38:00","date_gmt":"2022-06-15T07:38:00","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/bledy-oprogramowania-misje\/"},"modified":"2024-10-03T17:09:19","modified_gmt":"2024-10-03T15:09:19","slug":"bledy-oprogramowania-misje","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/bledy-oprogramowania-misje\/","title":{"rendered":"Houston, mamy\u2026 buga! Najwi\u0119ksze b\u0142\u0119dy oprogramowania w misjach kosmicznych i wnioski na temat zapewniania jako\u015bci"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">Przejd\u017a do: <\/p>\n    <ol>\n                    <li><a href=\"#Co-mo\u017ce-p\u00f3j\u015b\u0107-nie-tak?-Kosmiczne-bugi\">1.  Co mo\u017ce p\u00f3j\u015b\u0107 nie tak? Kosmiczne bugi<\/a><\/li>\n                    <li><a href=\"#B\u0142\u0119dy-na-wczesnym-etapie-powstawania-oprogramowania\">2.  B\u0142\u0119dy na wczesnym etapie powstawania oprogramowania<\/a><\/li>\n                    <li><a href=\"#B\u0142\u0119dy-zwi\u0105zane-z-prawid\u0142owo\u015bci\u0105-danych\">3.  B\u0142\u0119dy zwi\u0105zane z prawid\u0142owo\u015bci\u0105 danych<\/a><\/li>\n                    <li><a href=\"#B\u0142\u0105d-z-powodu-brakuj\u0105cego-znaku\">4.  B\u0142\u0105d z powodu brakuj\u0105cego znaku<\/a><\/li>\n                    <li><a href=\"#B\u0142\u0105d-nadpisania-pami\u0119ci\">5.  B\u0142\u0105d nadpisania pami\u0119ci<\/a><\/li>\n                    <li><a href=\"#B\u0142\u0105d-w-integracji-oprogramowania-i-sprz\u0119tu-\">6.  B\u0142\u0105d w integracji oprogramowania i sprz\u0119tu \u00a0<\/a><\/li>\n                    <li><a href=\"#Problemy-z-synchronizacj\u0105\">7.  Problemy z synchronizacj\u0105<\/a><\/li>\n                    <li><a href=\"#Kiedy-reu\u017cywalno\u015b\u0107-nie-jest-zalet\u0105\">8.  Kiedy reu\u017cywalno\u015b\u0107 nie jest zalet\u0105<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"Co-mo\u017ce-p\u00f3j\u015b\u0107-nie-tak?-Kosmiczne-bugi\">Co mo\u017ce p\u00f3j\u015b\u0107 nie tak? Kosmiczne bugi<\/h2>\n\n\n\n<p>Cykl \u017cycia oprogramowania w tradycyjnym uj\u0119ciu wed\u0142ug ISTQB zazwyczaj sk\u0142ada si\u0119 z nast\u0119puj\u0105cych faz: <strong>tworzenia koncepcji, okre\u015blania wymaga\u0144, projektowania, implementacji, test\u00f3w, instalacji i zast\u0119powania, wykorzystania produkcyjnego i utrzymania, czasami tak\u017ce wycofania. <\/strong>Ju\u017c na wczesnych etapach mo\u017ce doj\u015b\u0107 do pomy\u0142ek, kt\u00f3re w efekcie doprowadz\u0105 do katastrofy, nawet je\u015bli wszystkie p\u00f3\u017aniejsze elementy uk\u0142adanki b\u0119d\u0105 funkcjonowa\u0107 bez zarzutu. Takie b\u0142\u0119dy bywaj\u0105 bardzo kosztowne \u2013 zw\u0142aszcza wtedy, gdy na szali jest ludzkie \u017cycie, ale tak\u017ce dos\u0142ownie, gdy organizacja traci setki milion\u00f3w dolar\u00f3w. Tego typu przypadki zdarza\u0142y si\u0119 w dziejach misji kosmicznych i mimo \u017ce dla wi\u0119kszo\u015bci z nas ten temat nie jest zawodow\u0105 codzienno\u015bci\u0105, to \u015bmia\u0142o mo\u017cemy wyci\u0105gn\u0105\u0107 wa\u017cne wnioski i pami\u0119ta\u0107 o konsekwencjach, kt\u00f3re mog\u0105 p\u0142yn\u0105\u0107 z najbardziej b\u0142ahych pomy\u0142ek r\u00f3wnie\u017c w naszych projektach.<\/p>\n\n\n\n<p>Niniejszy przegl\u0105d misji kosmicznych, w kt\u00f3rych <strong>\u201eco\u015b\u201d posz\u0142o nie tak, <\/strong>uka\u017ce mnogo\u015b\u0107 s\u0142abych punkt\u00f3w, kt\u00f3re zawa\u017cy\u0142y na sukcesie misji lub mia\u0142y znacz\u0105cy wp\u0142yw na jej przebieg. <strong>Zazwyczaj mo\u017cna wy\u0142oni\u0107 kilka przyczyn, kt\u00f3re doprowadzi\u0142y do katastrofy <\/strong>lub po prostu do wyst\u0105pienia danego b\u0142\u0119du, jednak mo\u017cliwe jest wtedy tak\u017ce wskazanie \u017ar\u00f3d\u0142a problemu, pierwszego punktu, kt\u00f3ry nie zosta\u0142 zrealizowany tak jak powinien i od kt\u00f3rego ostatecznie zale\u017ca\u0142o niepowodzenie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"B\u0142\u0119dy-na-wczesnym-etapie-powstawania-oprogramowania\">B\u0142\u0119dy na wczesnym etapie powstawania oprogramowania<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Mariner<\/h3>\n\n\n\n<p><strong>Pierwsza misja programu Mariner,<\/strong> kt\u00f3ra wystartowa\u0142a<strong> w lipcu 1962 roku<\/strong> i kt\u00f3rej celem by\u0142 przelot w pobli\u017cu Wenus, zako\u0144czy\u0142a si\u0119 niepowodzeniem zaledwie 5 minut po starcie. Powodem tej pora\u017cki okaza\u0142 si\u0119 b\u0142\u0105d, kt\u00f3ry wyst\u0105pi\u0142 w specyfikacji oprogramowania. W jednym z r\u00f3wna\u0144 zabrak\u0142o poziomej kreski (<em>vinculum<\/em>), oznaczaj\u0105cej zgrupowanie element\u00f3w wyra\u017cenia, co pozwoli\u0142oby na wyliczenie \u015bredniej ze zgromadzonych danych. Niestety nap\u0142ywaj\u0105ce dane zosta\u0142y potraktowane przez program jako nag\u0142e zmiany warto\u015bci pr\u0119dko\u015bci, kt\u00f3re program stara\u0142 si\u0119 zniwelowa\u0107 gwa\u0142townymi zmianami kursu rakiety. W rezultacie wydano polecenie samozniszczenia rakiety ze wzgl\u0119du na anomalie w jej locie. Koszt tego b\u0142\u0119du, kt\u00f3rego prawdopodobnie mo\u017cna by\u0142oby unikn\u0105\u0107 dzi\u0119ki dok\u0142adnej statycznej analizie na wczesnym etapie, wynosi\u0142 <strong>18,5 miliona dolar\u00f3w<\/strong> (dzisiaj r\u00f3wnowarto\u015b\u0107 oko\u0142o 158 milion\u00f3w dolar\u00f3w).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mars Polar Lander<\/h3>\n\n\n\n<p>Kolejnym przyk\u0142adem misji, kt\u00f3ra zako\u0144czy\u0142a si\u0119 niepowodzeniem maj\u0105cym \u017ar\u00f3d\u0142o ju\u017c na etapie projektowania, by\u0142a <strong>Mars Polar Lander z 1999 roku. <\/strong>Wskazuje si\u0119 tutaj kilka aspekt\u00f3w, kt\u00f3re przyczyni\u0142y si\u0119 do pora\u017cki, ale jednym z nich by\u0142o niewystarczaj\u0105co starannie zaprojektowane oprogramowanie. W trakcie misji utracono \u0142\u0105czno\u015b\u0107 z l\u0105downikiem, co by\u0142o spowodowane tym, \u017ce logika oprogramowania akceptowa\u0142a przej\u015bciowe sygna\u0142y jako prawid\u0142owe informacje o l\u0105dowaniu, je\u015bli dwa kolejne odczyty na to wskazywa\u0142y. W efekcie komputer wy\u0142\u0105czy\u0142 silniki rakietowe spowalniaj\u0105ce ju\u017c 40 metr\u00f3w nad powierzchni\u0105 Marsa. Defekt ten nie zosta\u0142 zidentyfikowany na wcze\u015bniejszym etapie, poniewa\u017c zabrak\u0142o rzetelnego przegl\u0105du specyfikacji oraz oprogramowanie odpowiadaj\u0105ce za wykrycie kontaktu z pod\u0142o\u017cem nie zosta\u0142o dostatecznie przetestowane w konfiguracji lotu.<\/p>\n\n\n\n<p><strong>Wnioski i rekomendacje:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>stosowanie formalnych i nieformalnych analiz i przegl\u0105d\u00f3w<\/li>\n\n\n\n<li>wnikliwe testowanie na jak najwcze\u015bniejszym etapie \u2013\u00a0<a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/testuj-przed-wszystkimi-czyli-shift-left-testing-w-praktyce\/\" data-type=\"link\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/testuj-przed-wszystkimi-czyli-shift-left-testing-w-praktyce\/\">shift-left testing<\/a><\/li>\n\n\n\n<li>sprawdzenie oprogramowania na \u015brodowisku, kt\u00f3re ma podobne zasoby i konfiguracj\u0119 co \u015brodowisko produkcyjne<\/li>\n\n\n\n<li>przeprowadzenie\u00a0<a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/testy-niefunkcjonalne\/\" data-type=\"link\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/testy-niefunkcjonalne\/\">test\u00f3w przeci\u0105\u017ceniowych<\/a>\u00a0i symulowanie sytuacji awaryjnych technik\u0105\u00a0<em>fault injection<\/em>\u00a0(wstrzykiwanie b\u0142\u0119d\u00f3w)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"B\u0142\u0119dy-zwi\u0105zane-z-prawid\u0142owo\u015bci\u0105-danych\">B\u0142\u0119dy zwi\u0105zane z prawid\u0142owo\u015bci\u0105 danych<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Gemini 5<\/h3>\n\n\n\n<p>B\u0142\u0119dy mog\u0105 r\u00f3wnie\u017c mie\u0107 \u017ar\u00f3d\u0142o w nieprawid\u0142owych danych wykorzystywanych w oprogramowaniu, kt\u00f3re mog\u0105 wynika\u0107 na przyk\u0142ad z niewystarczaj\u0105cej dok\u0142adno\u015bci lub u\u017cycia niew\u0142a\u015bciwych jednostek. Ten pierwszy przypadek mia\u0142 miejsce <strong>w 1965 roku podczas misji za\u0142ogowej Gemini 5.<\/strong> Na szcz\u0119\u015bcie nie spowodowa\u0142 katastrofy, ale efektem by\u0142o wodowanie kapsu\u0142y z za\u0142og\u0105 w odleg\u0142o\u015bci 130 metr\u00f3w od planowanego obszaru na Oceanie Atlantyckim. Przyczyn\u0105 by\u0142o wprowadzenie do programu pr\u0119dko\u015bci k\u0105towej Ziemi jako 360 stopni na dob\u0119, chocia\u017c prawid\u0142owa dok\u0142adna warto\u015b\u0107 wynosi\u0142a 360,98 stopnia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mars Climate Orbiter<\/h3>\n\n\n\n<p>Jednym z najs\u0142ynniejszych b\u0142\u0119d\u00f3w w historii misji pozaziemskich jest natomiast ten, kt\u00f3ry <strong>doprowadzi\u0142 w 1999 roku do awarii sondy Mars Climate Orbiter. <\/strong>Mia\u0142a ona bada\u0107 atmosfer\u0119 Marsa, a tak\u017ce pom\u00f3c w komunikacji z utraconym wcze\u015bniej l\u0105downikiem <strong>Mars Polar Lander. <\/strong>System nie wykry\u0142 i nie skorygowa\u0142 b\u0142\u0119du w plikach wyj\u015bciowych programu \u201e<em>Sm_forces<\/em>\u201d, kt\u00f3re zosta\u0142y dostarczone zespo\u0142owi nawigacyjnemu w jednostkach angielskich (funt-si\u0142a sekunda \u2013 <em>lbf-s<\/em>) zamiast okre\u015blonych jednostek metrycznych (niuton sekunda \u2013&nbsp;<em>Ns<\/em>). R\u00f3\u017cnice tym spowodowane narasta\u0142y stopniowo, wi\u0119c pocz\u0105tkowo nie wzbudzi\u0142o to podejrze\u0144 kontroli lotu. W rezultacie utracono sond\u0119, kt\u00f3ra najprawdopodobniej uleg\u0142a zniszczeniu w marsja\u0144skiej atmosferze. Koszt misji oszacowano na ponad 300 milion\u00f3w dolar\u00f3w.<\/p>\n\n\n\n<p><strong>Wnioski i rekomendacje:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>analiza i weryfikacja danych wej\u015bciowych<\/li>\n\n\n\n<li>ujednolicenie jednostek lub stosowanie niezawodnych przelicznik\u00f3w<\/li>\n\n\n\n<li>dok\u0142adna i przejrzysta struktura danych<\/li>\n\n\n\n<li>przegl\u0105dy wymaga\u0144, projekt\u00f3w i plan\u00f3w akceptacji<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"B\u0142\u0105d-z-powodu-brakuj\u0105cego-znaku\">B\u0142\u0105d z powodu\u2026 brakuj\u0105cego znaku<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Phobos 1<\/h3>\n\n\n\n<p>Czasem nawet jedna liter\u00f3wka mo\u017ce zawa\u017cy\u0107 na losach ogromnego i kosztownego przedsi\u0119wzi\u0119cia, zw\u0142aszcza je\u015bli wcze\u015bniej pope\u0142niono te\u017c inne b\u0142\u0119dy, kt\u00f3rych ryzyka nie oszacowano z nale\u017cyt\u0105 dok\u0142adno\u015bci\u0105. Przyk\u0142adem tego jest radziecka <strong>sonda Phobos 1 z 1988 roku, <\/strong>programu kosmicznego maj\u0105cego zbada\u0107 marsja\u0144ski ksi\u0119\u017cyc. Utracono z ni\u0105 kontakt po tym, jak kontroler lotu omin\u0105\u0142 jeden znak w sekwencji komend wys\u0142anych do statku kosmicznego. Spowodowa\u0142o to niezamierzone uruchomienie programu testuj\u0105cego sterowanie, kt\u00f3ry wcze\u015bniej nie zosta\u0142 usuni\u0119ty z systemu. Program ten nie by\u0142 ju\u017c potrzebny, jednak dow\u00f3dztwo misji zdecydowa\u0142o si\u0119 na pozostawienie go i zabezpieczenie (nieskuteczne, jak si\u0119 okaza\u0142o), gdy\u017c nie by\u0142o czasu na jego poprawne usuni\u0119cie z pami\u0119ci tylko do odczytu (PROM).<\/p>\n\n\n\n<p><strong>Wnioski i rekomendacje:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>adekwatna analiza ryzyka<\/li>\n\n\n\n<li>zabezpieczenia przed przypadkowymi pomy\u0142kami, aby nie by\u0142y w stanie doprowadzi\u0107 do katastrofy<\/li>\n\n\n\n<li>oczyszczenie gotowego produktu z niepotrzebnych funkcji<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"B\u0142\u0105d-nadpisania-pami\u0119ci\">B\u0142\u0105d nadpisania pami\u0119ci<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Viking 1<\/h3>\n\n\n\n<p>Nawet gdy statek kosmiczny bezpiecznie wystartuje, dotrze do celu, wykona zaplanowane eksperymenty i przeka\u017ce informacje na Ziemi\u0119, nadal istnieje ryzyko, \u017ce co\u015b p\u00f3jdzie nie tak. Taki los spotka\u0142 <strong>misj\u0119 Viking 1 w 1982 roku.<\/strong> L\u0105downik wykonywa\u0142 badania na Marsie przez 6 lat, do momentu, gdy z powodu b\u0142\u0119du utracono z nim kontakt, kt\u00f3rego nigdy ju\u017c nie uda\u0142o si\u0119 odzyska\u0107. Dosz\u0142o do tego, gdy pogarszaj\u0105ca si\u0119 wydolno\u015b\u0107 baterii w l\u0105downiku sk\u0142oni\u0142a in\u017cynier\u00f3w na Ziemi do przes\u0142ania komend maj\u0105cych poprawi\u0107 dzia\u0142anie oprogramowania odpowiedzialnego za \u0142adowanie. Niestety podczas tej operacji parametry anteny wskazuj\u0105cej w pami\u0119ci komputera l\u0105downika zosta\u0142y przypadkowo nadpisane parametrami \u0142adowania akumulatora. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mars global Surveyor<\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:40%\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/jpro_2022.06.09_graphic_1.jpg\" alt=\"Mars Global Surveyor \n\u2013 wizja artystyczna. Image credit: NASA\/JPL-Caltech\" class=\"wp-image-5481\" title=\"\"><figcaption class=\"wp-element-caption\"><em>Mars Global Surveyor <\/em><br><em>\u2013 wizja artystyczna. Image credit: NASA\/JPL-Caltech<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60%\">\n<p>Podobna sytuacja mia\u0142a miejsce podczas <strong>misji Mars Global Surveyor, <\/strong>kt\u00f3rej g\u0142\u00f3wnym zadaniem by\u0142a obserwacja pogody oraz stworzenie map topograficznych. Dzi\u0119ki danym z tej misji, dowiedziono, \u017ce na Marsie wyst\u0119puje woda.<strong> Po 7 latach wykonywania bada\u0144, w czerwcu 2006 roku, nast\u0105pi\u0142a awaria sondy,<\/strong> kt\u00f3ra polega\u0142a na tym, \u017ce aktualizacja zwi\u0105zana z parametrami kierunku wskazywania anteny u\u017cywanej w operacjach awaryjnych zosta\u0142a zapisana do nieprawid\u0142owego adresu pami\u0119ci. Nast\u0119pnie w listopadzie polecenie wys\u0142ane do Mars Global Surveyor spowodowa\u0142o, \u017ce panele s\u0142oneczne zmieni\u0142y swoje po\u0142o\u017cenie, lecz na Ziemi\u0119 <\/p>\n<\/div>\n<\/div>\n\n\n\n<p><strong>Wnioski i rekomendacje:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>dok\u0142adne przegl\u0105dy wszystkich nierutynowych zmian przed ich produkcyjnym wdro\u017ceniem<\/li>\n\n\n\n<li>adekwatna ocena tryb\u00f3w awaryjnych<\/li>\n\n\n\n<li>zadbanie o nale\u017cyt\u0105 dokumentacj\u0119 i przeszkolenie zespo\u0142u odpowiadaj\u0105cego za testy, poniewa\u017c d\u0142ugotrwa\u0142e projekty nios\u0105 ryzyko zwi\u0105zane ze zmian\u0105 personelu i ewentualn\u0105 utrat\u0105 informacji b\u0105d\u017a zmian\u0105 procedur<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"B\u0142\u0105d-w-integracji-oprogramowania-i-sprz\u0119tu--\">B\u0142\u0105d w integracji oprogramowania i sprz\u0119tu &nbsp;<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">CryoSat-1 i Zenit-3SL<\/h3>\n\n\n\n<p>W tak z\u0142o\u017conych systemach, jakimi s\u0105 statki kosmiczne, r\u00f3wnie\u017c integracja oprogramowania ze sprz\u0119tem jest podatna na b\u0142\u0119dy. W momencie, gdy to oprogramowanie steruje sprz\u0119tem, mo\u017ce doj\u015b\u0107 do awarii software\u2019u lub braku reakcji hardware\u2019u na docieraj\u0105ce do niego instrukcje. Tak by\u0142o w przypadku dw\u00f3ch misji maj\u0105cych wynie\u015b\u0107 na orbit\u0119 satelity <strong>Zenit-3SL (2000 r.) i CryoSat-1 (2005 r.).<\/strong> Pierwsza z nich zako\u0144czy\u0142a si\u0119 niepowodzeniem z powodu programu wykorzystywanego na Ziemi, kt\u00f3ry nie zamkn\u0105\u0142 zaworu w systemie pneumatycznym drugiego stopnia rakiety, odpowiedzialnego za ruchy silnikiem steruj\u0105cym. Oko\u0142o 8 minut po starcie, gdy drugi stopie\u0144 rakiety zbli\u017ca\u0142 si\u0119 do ko\u0144ca swego dzia\u0142ania, zdecydowano o przerwaniu misji, a zar\u00f3wno \u0142adunek satelitarny, jak i wynosz\u0105ca go na orbit\u0119 rakieta spad\u0142y do Oceanu Spokojnego. W przypadku CryoSat-1 zawini\u0142 natomiast b\u0142\u0105d oprogramowania kontroli lotu, kt\u00f3re nie wys\u0142a\u0142o polecenia wy\u0142\u0105czenia silnik\u00f3w drugiego stopnia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>SpaceX<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:40%\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/jpro_2022.06.09_graphic_2.jpg\" alt=\"Eksplozja rakiety Falcon 9. Image credit flightglobal.com\" class=\"wp-image-5485\" title=\"\"><figcaption class=\"wp-element-caption\"><em>Eksplozja rakiety Falcon 9. Image credit flightglobal.com<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60%\">\n<p>R\u00f3wnie\u017c SpaceX mierzy\u0142 si\u0119 z problemem braku potrzebnej integracji oprogramowania ze sprz\u0119tem, kiedy <strong>28 czerwca 2015 roku bezza\u0142ogowa rakieta Falcon 9 podczas misji SpaceX CRS-7 eksplodowa\u0142a niemal 2 minuty po starcie. <\/strong><\/p>\n<\/div>\n<\/div>\n\n\n\n<p>Niestety nie uda\u0142o si\u0119 w\u00f3wczas odzyska\u0107 \u0142adunku kapsu\u0142y Dragon o warto\u015bci oko\u0142o 120 milion\u00f3w dolar\u00f3w, kt\u00f3ry mia\u0142 by\u0107 dostarczony na ISS. <a href=\"https:\/\/spaceflightnow.com\/2015\/07\/07\/musk-falcon-9-rocket-failure-a-huge-blow-to-spacex\/\" target=\"_blank\" rel=\"noopener\">Elon Musk w wypowiedziach <\/a>wskaza\u0142, \u017ce kapsu\u0142\u0119 mo\u017cna by\u0142oby odzyska\u0107, gdyby oprogramowanie wyda\u0142o polecenia otwarcia spadochronu podczas incydentu: <\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Elon Musk talks failed CRS-7 Dragon mission\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/tc8XxMawhBo?start=80&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><em> \u201cThat is probably the saddest thing about this, is that, with just a bit of different software, Dragon would have made it\u201d (\u201eTo chyba najsmutniejsze w tym wszystkim, \u017ce gdyby oprogramowanie by\u0142o inne, Dragon by ocala\u0142\u201d)<a>.<\/a><\/em><\/p>\n\n\n\n<p><strong>Wnioski i rekomendacje:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>oprogramowanie jest odpowiedzialne za dzia\u0142anie sprz\u0119tu \u2013 kluczowe znaczenie integracji<\/li>\n\n\n\n<li>zwi\u0119kszenie roli test\u00f3w scenariuszy awaryjnych i specjalnych procedur<\/li>\n\n\n\n<li>analiza ryzyka uwzgl\u0119dniaj\u0105ca negatywne przypadki<\/li>\n\n\n\n<li>wdro\u017cenie wszelkich mo\u017cliwych \u015brodk\u00f3w, kt\u00f3re pomog\u0105 odzyska\u0107 sprz\u0119t w przypadku awarii<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">B\u0142\u0105d przeci\u0105\u017cenia pami\u0119ci<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Spirit<\/h3>\n\n\n\n<p><strong>Oprogramowanie \u0142azika Spirit<\/strong> zawiera\u0142o b\u0142\u0105d, kt\u00f3ry ujawni\u0142 si\u0119 <strong>21 stycznia 2004 roku, <\/strong>czyli dopiero w 18. marsja\u0144skiej dobie (sol). Pojawi\u0142y si\u0119 w\u00f3wczas problemy z komunikacj\u0105 z \u0142azikiem, kt\u00f3ry nie wysy\u0142a\u0142 \u017cadnych danych i zaobserwowano, \u017ce w ci\u0105gu trzech dni restartowa\u0142 si\u0119 60 razy. Okaza\u0142o si\u0119, \u017ce w miar\u0119 gromadzenia informacji ilo\u015b\u0107 zaj\u0119tej pami\u0119ci wzrasta\u0142a coraz bardziej. 18. sola blok pami\u0119ci by\u0142 pe\u0142ny, a proces ponownego uruchamiania zosta\u0142 zatrzymany z powodu niemo\u017cno\u015bci odczytania plik\u00f3w systemowych. In\u017cynierowie rozwa\u017cali wcze\u015bniej potencjalne problemy wywo\u0142ane d\u0142ugotrwa\u0142\u0105 prac\u0105 \u0142azika, ale przeprowadzili test, symuluj\u0105c tylko 10 soli. Na szcz\u0119\u015bcie uda\u0142o si\u0119 sformatowa\u0107 pami\u0119\u0107 i zaktualizowa\u0107 oprogramowanie tak, aby \u0142azik m\u00f3g\u0142 z powodzeniem kontynuowa\u0107 prac\u0119.<\/p>\n\n\n\n<p><strong>Wnioski i rekomendacje:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>kwestie postrzegane jako niski priorytet mog\u0105 okaza\u0107 si\u0119 kluczowe dla sukcesu misji<\/li>\n\n\n\n<li>przeprowadzanie kompletnych test\u00f3w obci\u0105\u017ceniowych i przeci\u0105\u017ceniowych<\/li>\n\n\n\n<li>testy w warunkach mo\u017cliwie jak najbardziej zbli\u017conych do \u015brodowiska produkcyjnego<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Problemy-z-synchronizacj\u0105\">Problemy z synchronizacj\u0105<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Mars Pathfinder<\/h3>\n\n\n\n<p>Istnieje wiele czynnik\u00f3w, kt\u00f3re wp\u0142ywaj\u0105 na powodzenie misji kosmicznych oraz osi\u0105ganie zaplanowanych cel\u00f3w, za\u015b jednym z niezwykle istotnych jest czas.<\/p>\n\n\n\n<p>W trakcie <strong>misji<\/strong> <strong>Mars Pathfinder w 1997 roku<\/strong> komputer l\u0105downika nieoczekiwanie zresetowa\u0142 si\u0119 czterokrotnie w ci\u0105gu kilku dni. Jak ustalono, by\u0142o to spowodowane otwartym zadaniem oprogramowania, kt\u00f3re nie zamyka\u0142o si\u0119 w wyznaczonym czasie. Problem uda\u0142o si\u0119 odtworzy\u0107 w NASA Jet Propulsion Laboratory. Przygotowan\u0105 \u0142atk\u0119 przes\u0142ano transmisj\u0105 radiow\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Starliner<\/h3>\n\n\n\n<p><strong>W grudniu 2019 roku odby\u0142 si\u0119 lot statku kosmicznego Starliner <\/strong>Boeinga. Jego celem by\u0142o przetestowanie komercyjnego statku za\u0142ogowego, od startu, przez spotkanie i dokowanie ze stacj\u0105 kosmiczn\u0105, po ponowne wej\u015bcie w ziemsk\u0105 atmosfer\u0119 i wodowanie. W trakcie lotu odkryto dwa problemy zwi\u0105zane z oprogramowaniem \u2013 jeden z nich dotyczy\u0142 synchronizacji (przesuni\u0119cie zegara o 11 godzin w stosunku do czasu rzeczywistego), a drugi modu\u0142u serwisowego. W wydanym o\u015bwiadczeniu stwierdzono, \u017ce defekty oprogramowania, szczeg\u00f3lnie w z\u0142o\u017conym kodzie statku kosmicznego, nie by\u0142y zaskoczeniem, jednak by\u0142o wiele przypadk\u00f3w, w kt\u00f3rych procesy zapewniania jako\u015bci oprogramowania Boeinga nie wykry\u0142y b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ingenuity<\/h3>\n\n\n\n<p><strong>W 2021 roku<\/strong> na powierzchni Marsa wyl\u0105dowa\u0142 <strong>\u0142azik Perseverance, <\/strong>od kt\u00f3rego od\u0142\u0105czony zosta\u0142 niewielkich rozmiar\u00f3w \u015bmig\u0142owiec-dron Ingenuity. Podczas jego testowego lotu zauwa\u017cono, \u017ce komputer lotu nie zdo\u0142a\u0142 prawid\u0142owo przej\u015b\u0107 ze stanu \u201epre-flight\u201d do \u201eflight\u201d. Problem polega\u0142 na tym, \u017ce gdy tryby te mia\u0142y si\u0119 zmieni\u0107, nast\u0119powa\u0142o sprawdzenie, czy komputer pok\u0142adowy helikoptera jest sprawny. Na tym etapie pojawia\u0142 si\u0119 problem z synchronizacj\u0105 zada\u0144. Zesp\u00f3\u0142 opracowa\u0142 modyfikacj\u0119 oprogramowania sekwencji polece\u0144, kt\u00f3ra obejmowa\u0142a ponown\u0105 instalacj\u0119 oprogramowania do sterowania lotem Ingenuity. Aktualizacja zmodyfikowa\u0142a proces uruchamiania dw\u00f3ch kontroler\u00f3w lotu i umo\u017cliwi\u0142a bezpieczne przej\u015bcie sprz\u0119tu i oprogramowania do stanu lotu.<\/p>\n\n\n\n<p><strong>Wnioski i rekomendacje:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nadawanie zadaniom odpowiednich priorytet\u00f3w<\/li>\n\n\n\n<li>przeprowadzanie rzetelnych test\u00f3w i symulacja warunk\u00f3w \u015brodowiska produkcyjnego<\/li>\n\n\n\n<li>posiadanie \u015brodowiska testowego, na kt\u00f3rym mo\u017cna dok\u0142adnie odtworzy\u0107 b\u0142\u0119dy<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Kiedy-reu\u017cywalno\u015b\u0107-nie-jest-zalet\u0105\">Kiedy reu\u017cywalno\u015b\u0107 nie jest zalet\u0105<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Katastrofa Ariane 5<\/h3>\n\n\n\n<p><strong>4 czerwca 1996 roku wystartowa\u0142a rakieta Ariane 5 <\/strong>z \u0142adunkiem satelit\u00f3w Europejskiej Agencji Kosmicznej \u2013 Cluster. Niestety eksplodowa\u0142a ju\u017c po 37 sekundach, powoduj\u0105c <strong>straty szacowane na 370 milion\u00f3w dolar\u00f3w. <\/strong>Jako g\u0142\u00f3wn\u0105 przyczyn\u0119 tego wydarzenia najcz\u0119\u015bciej w raportach wskazuje si\u0119 fakt, \u017ce oprogramowanie wykorzystywa\u0142o kod napisany pod k\u0105tem misji Ariane 4, kt\u00f3ry nie by\u0142 dostosowany do warunk\u00f3w Ariane 5 (m.in. w kontek\u015bcie trajektorii lotu).<\/p>\n\n\n\n<p>W tej katastrofie mo\u017cna wskaza\u0107 kilka perspektyw. B\u0142\u0105d w oprogramowaniu by\u0142 nieprawid\u0142owo obs\u0142u\u017conym wyj\u0105tkiem wynikaj\u0105cym z konwersji 64-bitowej liczby zmiennoprzecinkowej na 16-bitow\u0105 liczb\u0119 ca\u0142kowit\u0105 ze znakiem. Warto\u015b\u0107 przekonwertowanej liczby by\u0142a wi\u0119ksza ni\u017c ta, kt\u00f3ra mog\u0142a by\u0107 reprezentowana przez 16-bitow\u0105 liczb\u0119 ca\u0142kowit\u0105, co skutkowa\u0142o nieprzewidzianym b\u0142\u0119dem w kodzie Ada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Przewodnik po \u015bwiecie test\u00f3w funkcjonalnych.<\/h2>\n\n\n\n<p>Sprawd\u017a, kto przeprowadza unit testy, testy integracyjne, testy systemu oraz testy akceptacyjne.<\/p>\n\n\n\n<p><a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/testowanie-funkcjonalne\/\" data-type=\"link\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/testowanie-funkcjonalne\/\">Przeczytaj artyku\u0142<\/a><\/p>\n\n\n\n<p>Jednak ju\u017c na etapie projektowania specyfikacji systemu nie zapewniono mechanizmu obs\u0142ugi wyj\u0105tk\u00f3w niezwi\u0105zanych ze sprz\u0119tem, dlatego przypadkowy b\u0142\u0105d oprogramowania nie zosta\u0142 obs\u0142u\u017cony. W efekcie poprawnie dzia\u0142aj\u0105cy procesor w systemie nawigacyjnym zosta\u0142 wy\u0142\u0105czony, a wkr\u00f3tce potem procesor zapasowy \u201ezawi\u00f3d\u0142\u201d w ten sam spos\u00f3b. Gdyby projekt oprogramowania zosta\u0142 wykonany staranniej, uda\u0142oby si\u0119 unikn\u0105\u0107 sytuacji, w kt\u00f3rych wyj\u0105tki oprogramowania wstrzymuj\u0105 poprawnie dzia\u0142aj\u0105cy hardware, a tym samym \u2013 zapobiec awarii. Wskazuje si\u0119 tak\u017ce, \u017ce katastrofa by\u0142a wynikiem nieprawid\u0142owej analizy zmieniaj\u0105cych si\u0119 wymaga\u0144, kt\u00f3re dla Ariane 5 r\u00f3\u017cni\u0142y si\u0119 od wcze\u015bniejszych modeli rakiety. Fragment kodu, kt\u00f3ry spowodowa\u0142 katastrof\u0119, w\u0142a\u015bciwie nie by\u0142 potrzebny ju\u017c po starcie, a jednak funkcjonowa\u0142. <strong>Wini si\u0119 tak\u017ce niedopracowane procedury testowe. <\/strong>Na przyk\u0142ad, jak stwierdzono w raporcie, nie przeprowadzono \u017cadnych naziemnych test\u00f3w akceptacyjnych lub przegl\u0105du, kt\u00f3re pozwoli\u0142yby sprawdzi\u0107, czy system nawigacyjny b\u0119dzie zachowywa\u0107 si\u0119 prawid\u0142owo, gdy zostanie poddany sekwencji odliczania i czasu lotu oraz trajektorii Ariane 5. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Milstar<\/h3>\n\n\n\n<p><strong>W 1999 roku rakieta Titan IV<\/strong> mia\u0142a wynie\u015b\u0107 na orbit\u0119 satelit\u0119 Milstar. Niestety b\u0142\u0105d oprogramowania przyczyni\u0142 si\u0119 do niepowodzenia tej misji. Stwierdzono, \u017ce by\u0142 to wynik nieprawid\u0142owo zaprogramowanego r\u00f3wnania w komputerze naprowadzania. Przyczyni\u0142o si\u0119 do tego b\u0142\u0119dne za\u0142o\u017cenie Biura Programu Titan, kt\u00f3re zdecydowa\u0142o o u\u017cyciu wykorzystywanego w przesz\u0142o\u015bci oprogramowania, kt\u00f3re jak dot\u0105d by\u0142o stabilne i niezawodne. Zak\u0142adano, \u017ce ryzyko maleje wraz z up\u0142ywem czasu, poniewa\u017c kumuluje si\u0119 bezwypadkowa eksploatacja. W rzeczywisto\u015bci ryzyko zwykle wzrasta z czasem, szczeg\u00f3lnie w systemach intensywnie korzystaj\u0105cych z oprogramowania i w \u015brodowiskach, w kt\u00f3rych zmieniaj\u0105 si\u0119 warunki.<\/p>\n\n\n\n<p>Wypadki Ariane 5 i Titan IV (Milstar) by\u0142y zwi\u0105zane z wykorzystywaniem kodu, kt\u00f3ry nie by\u0142 potrzebny (znajdowa\u0142 si\u0119 w ponownie u\u017cywanym oprogramowaniu zaprojektowanym dla innych statk\u00f3w kosmicznych). Jednak\u017ce, ponownie u\u017cywane oprogramowanie jest prawdopodobnie mniej bezpieczne, poniewa\u017c pierwotne decyzje dotycz\u0105ce wymaganego zachowania oprogramowania zosta\u0142y podj\u0119te dla innego projektu systemu i opiera\u0142y si\u0119 na innych za\u0142o\u017ceniach \u015brodowiskowych.<\/p>\n\n\n\n<p><strong>Wnioski i rekomendacje:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>reu\u017cywalno\u015b\u0107 pozwala oszcz\u0119dzi\u0107 koszty, ale tylko je\u015bli stosowane ju\u017c wcze\u015bniej komponenty podlegaj\u0105 r\u00f3wnie rygorystycznej weryfikacji jak nowe<\/li>\n\n\n\n<li>testowanie powinno si\u0119 odbywa\u0107 w warunkach jak najbardziej zbli\u017conych do rzeczywistych, z realistycznymi danymi, sprz\u0119tem i symuluj\u0105c kompletne procesy<\/li>\n\n\n\n<li>szczeg\u00f3\u0142owe przegl\u0105dy oprogramowania dla ka\u017cdego elementu, kt\u00f3ry je zawiera<\/li>\n\n\n\n<li>weryfikacja zakres\u00f3w warto\u015bci przyjmowanych w oprogramowaniu<\/li>\n\n\n\n<li>przegl\u0105d rozwi\u0105za\u0144 potencjalnych problem\u00f3w w oprogramowaniu komputera pok\u0142adowego<\/li>\n\n\n\n<li>wyeliminowanie niepotrzebnego kodu lub funkcji b\u0105d\u017a oddzielenie od kodu o znaczeniu krytycznym<\/li>\n<\/ul>\n\n\n\n<p>Z kolejnej cz\u0119\u015bci artyku\u0142u pt. <strong><a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/oprogramowanie-w-przemysle-kosmicznym\/\" data-type=\"link\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/oprogramowanie-w-przemysle-kosmicznym\/\">Z\u0142ote zasady wytwarzania oprogramowania w przemy\u015ble kosmicznym<\/a>\u00a0<\/strong>b\u0119dziecie mogli dowiedzie\u0107 si\u0119, jakie s\u0105 dobre praktyki wytwarzania oprogramowania w tej bran\u017cy i jak zwi\u0119kszaj\u0105 szanse powodzenia tych nieraz niebotycznie kosztownych projekt\u00f3w.\u00a0\u00a0<\/p>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1681899947499\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">\u0179r\u00f3d\u0142a:<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Bergin, C. (2015), <em>Saving Spaceship Dragon \u2013 Software to provide contingency chute deploy.<\/em> NASA Spaceflight.\u00a0<br \/><em>Certyfikowany tester. Sylabus poziomu podstawowego ISTQB<\/em> (2018). ISTQB.\u00a0<br \/>Cowing, K. (2007), <em>NASA Decides That A Software Error Doomed The Mars Global Surveyor Spacecraft<\/em>. SpaceRef.<br \/><em>CryoSat Mission lost due to launch failure<\/em>. (2005), ESA.<br \/><em>Deficiencies in Mission Critical Software Development for Mars Climate Orbiter (1999).<\/em> (2000), NASA Lessons Learned, NASA-LLIS-0740.\u00a0<br \/>Dern, D. (2020), <em>How NASA does software testing and QA.<\/em> Functionize.\u00a0<br \/>Foust, J. (2019), <em>Starliner suffers \u201coff-nominal\u201d orbital insertion after launch.<\/em> Space News.\u00a0<br \/>Hamblen, M. (2021), <em>Ingenuity gets a software fix; first flight now expected next week.<\/em> Fierce Electronics.\u00a0<br \/>Hartley, R. (1989),\u00a0 <em>Phobos 1 &amp; 2 computer failures<\/em>. SCIENCE Vol 245.\u00a0\u00a0<br \/>J\u00e9z\u00e9quel, J., Meyer, B. (1997), <em>Design by Contract: The Lessons of Ariane<\/em>. IEEE Computer. 30. 129-130.\u00a0<br \/>Leveson, N. (2004), <em>The Role of Software in Spacecraft Accidents.<\/em> Journal of Spacecraft and Rockets \u2013 J SPACECRAFT ROCKET. 41. 10.2514\/1.11950.\u00a0<br \/>Lofgren, E. (2020), <em>Is continuous testing the key to SpaceX software success?<\/em> Acquisition Talk.\u00a0<br \/><em>Mars Climate Orbiter Mishap Investigation Board Phase I Report<\/em>. (1999), NASA.\u00a0<br \/><em>Mars Global Surveyor (MGS) Spacecraft Loss of Contact.<\/em> (2007), NASA.\u00a0\u00a0<br \/>Mudgway, D. J. (1983), <em>Telecommunications and data acquisition systems support for the Viking 1975 mission to Mars<\/em>. NASA Jet Propulsion Lab., California Inst. of Tech. Pasadena, CA, United States\u00a0<br \/>Oberg, J. (1999), <em>Why the Mars Probe went off course<\/em>. IEEE Spectrum. IEEE.\u00a0\u00a0<br \/>Pasternack, A. (2014), <em>Sometimes a Typo Means You Need to Blow Up Your Own Spacecraft<\/em>. Vice.\u00a0<br \/><em>Programmer on Mars: Shutdown Dammit Until.<\/em> (2016), Sudonull.\u00a0<br \/>Ray, J. (2000), <em>Sea Launch malfunction blamed on a software glitch<\/em>. Spaceflight Now.\u00a0<br \/><em>The Mars Pathfinder Mission Status Reports \u2013 Second Week<\/em>. Office of the Flight Operations Manager \u2013 Mars Pathfinder Project.\u00a0<br \/>Uri, J. (2020), <em>55 Years Ago: Gemini 5 Sets a New Record<\/em>. NASA.\u00a0<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Procesy zwi\u0105zane z zapewnianiem jako\u015bci oprogramowania s\u0105 kluczowe wsz\u0119dzie, gdzie jest ono wykorzystywane, gdy\u017c pr\u0119dzej czy p\u00f3\u017aniej mog\u0105 pojawi\u0107 si\u0119 b\u0142\u0119dy jego dzia\u0142ania. I cho\u0107 mog\u0142oby si\u0119 wydawa\u0107, \u017ce oprogramowanie wykorzystywane w misjach kosmicznych jest solidnie sprawdzane i musi spe\u0142nia\u0107 rygorystyczne normy, tak\u017ce w historii lot\u00f3w kosmicznych pojawia\u0142y si\u0119 bugi \u2013 nieraz katastrofalne w skutkach. Jakie b\u0142\u0119dy pope\u0142niono? Co posz\u0142o nie tak? Co mo\u017cna by\u0142o zrobi\u0107, aby zapobiec katastrofie i czego nas to uczy o zapewnianiu jako\u015bci?<\/p>\n","protected":false},"author":197,"featured_media":31497,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":118,"footnotes":""},"categories":[1,582],"tags":[562],"offering":[522],"class_list":["post-31488","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-qa","offering-tech-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31488","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/197"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=31488"}],"version-history":[{"count":2,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31488\/revisions"}],"predecessor-version":[{"id":33227,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/31488\/revisions\/33227"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/31497"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=31488"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=31488"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=31488"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=31488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}