Oprogramowanie dyscypliną inżynierii
Niezależnie od tego, czy mamy do czynienia z mitem „programisty-bohatera”, działającego na własną rękę i próbującego przez całą noc opanować problem, czy nagłym sukcesem przypadkowej aplikacji na smartfony samotnego developera dążącego do sławy i fortuny, opracowywanie...
Jest to jednak dalekie od prawdy w przypadku znaczących projektów programistycznych, podczas których duży zespół programistów pracuje na złożonych, często kluczowych dla bezpieczeństwa systemach.
Nauka, a nie sztuka
Branża inżynierii oprogramowania jest nauką, a nie sztuką. Zasady powtarzalnego, sterowanego procesami rozwoju technologicznego dla stworzenia solidnego oprogramowania wysokiej jakości zostały ustalone w takich organizacjach jak NASA, gdzie niezawodność miała kluczowe znaczenie. Jest ona również istotnym elementem w branżach takich jak obronność, lotnictwo, wbudowane i przemysłowe systemy sterowania, medycyna, wytwarzanie energii i motoryzacja, które muszą równoważyć złożoność procesów, koszty oraz ryzyko.
We wszystkich tych sektorach ryzyko pozostaje nadal wysokie, obecna jest presja na redukcję kosztów, a złożoność stale wzrasta. Przemysł motoryzacyjny jest jednym z obszarów, gdzie wiele różnych części inżynierii oprogramowania musi współpracować i łączyć się z inżynierią systemów oraz inżynierią mechaniczną, ponieważ mnogość systemów mechanicznych ulepszonych przez wbudowane oprogramowanie sprawiła, że w dzisiejszych czasach samochody nie są już produkowane tylko do jazdy. Przedsiębiorstwa samochodowe przeobrażają się w mobilne firmy elektroniki użytkowej, opierające się na nowych i przełomowych technologiach w celu tworzenia nowych produktów – bez rezygnacji z obowiązków w zakresie bezpieczeństwa i wydajności.
Oznacza to, że narzędzia wspierające zarządzanie cyklem rozwoju produktu muszą być zintegrowanymi systemami, które przekraczają wiele domen i branż, aby umożliwić płynny przepływ informacji oraz zapewnienie wydajności i odpowiedzialności na wszystkich etapach tego procesu rozwojowego.
Samochód czy złożony, połączony system?
Wspierane, połączone i autonomiczne samochody to tylko najbardziej skrajne przypadki; pojazdy elektryczne i hybrydowe już prezentują całkowicie nową odsłonę problemów projektowych. Przykładem może być pojazd zasilany energią elektryczną; jest to jeden z wielu systemów kontroli w czasie rzeczywistym, gdzie precyzja ma kluczowe znaczenie; nie można przegapić sygnału lub niepoprawnie odpowiedzieć na dane wejściowe. Nie jest to już jednak system autonomiczny. Jeśli pobieramy energię z hamowania do ładowania baterii w hybrydowym układzie napędowym, wymaga to większej liczby czujników, optymalizacji zużycia energii oraz drenażu baterii w całym pojeździe, ponieważ wpływa to na zakres jazdy. Wymaga to również zintegrowania z systemami informacyjno-rozrywkowymi, które łączą w sobie informacje, sterowanie oraz nawigację dla kierowcy. Jest to punkt, w którym nowe połączone cechy samochodów łączą się z tradycyjnymi opcjami osobistej rozrywki i interakcji człowieka z samochodem i niezwykle ważne jest zaprojektowanie tego interfejsu i doświadczenia w taki sposób, aby nie przytłoczyć kierowcy nadmierną złożonością aplikacji, która może powodować wypadki.
Integracja tych wszystkich wymiarów bez narażania kluczowych funkcji każdego systemu lub kwestii związanych z bezpieczeństwem, jest poważnym wyzwaniem dla inżynierii oprogramowania.
Samochody może kiedyś zaczynały jako urządzenia mechaniczne, ale teraz są one bardzo złożonymi kompilacjami oprogramowania z milionami linii kodu, które dodatkowo mają również koła. Niewiele innych systemów wymaga tyle samo oprogramowania, co samochód lub ciężarówka; w samochodzie znajdziemy więcej kodów niż w myśliwcu odrzutowym. Obecnie, do 90% z 500 000 różnych wymogów dla nowych samochodów nie dotyczy w ogóle mechaniki, tylko kwestii związanych z elektroniką i oprogramowaniem. Kody nie są pisane w celu zbudowania pojedynczego pojazdu; pomimo że przemysł samochodowy przełączył się do wspólnych platform współdzielonych pomiędzy różnymi modelami, to nadal istnieją dziesiątki lub nawet setki wariantów dla poszczególnych platform samochodowych. Oznacza to, że nie można ich już traktować jako zbiór systemów mechanicznych, dla których wykonuje się oddzielnie prototyp i projekt, a następnie łączy ze sobą w ostatnim etapie integracji; należy wymodelować, stworzyć, przetestować i zatwierdzić systemy fizyczne w programie za pomocą symulacji, w tandemie z oprogramowaniem, które łączy je ze sobą i kontroluje.
Integracja światów
Rozwój oprogramowania to tylko jeden etap w procesie, który zaczyna się od planowania ogólnej architektury, projektowania systemu i definiowania elementów w systemie. Oprogramowanie i sprzęt nie mogą być zróżnicowane i fragmentaryczne; muszą być rozwijane równolegle, w silnej integracji pomiędzy komponentami mechanicznymi i elektrycznymi oraz modelami oprogramowania, które składają się na ogólny system w całym procesie rozwoju w taki sposób, aby umożliwić zatwierdzenie ich razem. Rozwój na bazie modelu oznacza, że systemy inżynieryjne oraz to, co dzieje się w oddzielnych domenach, takich jak układ napędowy, systemy bezpieczeństwa i systemy informacyjno-rozrywkowe, musi być teraz zastosowane we wszystkich tych dziedzinach.
Nowe pojazdy łączą w sobie systemy mechaniczne i elektryczne, do których już przywykliśmy, z narzędziami Zarządzania Cyklem Życia Produktu oraz oprogramowaniem i systemami elektrycznymi wspieranymi przez narzędzia Aplikacji Zarządzania Cyklem Życia Produktu. Skuteczna produkcja nowych pojazdów według harmonogramów wymaganych przez klienta, bez kompromisów w zakresie bezpieczeństwa i innowacji, wymaga narzędzi, które integrują i łączą te światy ze sobą oraz wspierają najlepsze praktyki.
Posiadając liczne zespoły programistów pracujących nad logiką i kodowaniem wielu systemów, konieczny jest jasny podział odpowiedzialności za te wszystkie systemy, jak na przykład rozwój skali i testów regresyjnych, które są wymagane, aby upewnić się, że żadna z wprowadzonych zmian nie niesie za sobą niebezpiecznych skutków ubocznych. Jeśli chodzi o wydajność, wymagana może być automatyzacja z ciągłą integracją w celu potwierdzenia ogólnego bezpieczeństwa kodu we wszystkich wariantach budowanej platformy pojazdu. Wydajność nie uległa jednak pogorszeniu w związku ze zmianami. Musi istnieć możliwość powrotu i ustalenia w dowolnym momencie, kto zatwierdził projekt, która kombinacja składników była testowana razem lub w jaki sposób ustalono priorytety odnośnie do wszelkich wykrytych usterek, tak więc potrzebne są narzędzia, które dają pogląd we wszystkich systemach mechanicznych, elektrycznych i kontroli oprogramowania w pojeździe.
Symulacja wszystkich obszarów
Aby nadążyć za tempem przemysłu, rozwój motoryzacji musi zawierać duże ilości symulacji, przechwytywania i odtwarzania danych z badań układów fizycznych, aby zatwierdzić każdą zmianę oprogramowania w sposób, który umożliwia kompatybilność i pozwala na ponowne wykorzystanie w szerszej gamie samochodów, platform pojazdów i wariantów. Dla autonomicznych pojazdów i systemów wspomagających, gromadzenie danych i badania będą musiały obejmować wszystkie obszary, na których pojazdy będą działać, co może obejmować różne kultury jazdy, a także różne przepisy ruchu drogowego i bezpieczeństwa.
Większość wadliwych produktów w przemyśle samochodowym ma związek z oprogramowaniem, a nie sprzętem w samochodzie, więc zwiększenie jakości dzięki lepszej inżynierii oprogramowania jest konieczne, aby uniknąć kosztów finansowych oraz utraty reputacji przez producenta samochodów w związku z wycofaniem danego modelu z produkcji.
Testowanie, weryfikacja i zatwierdzanie tych modeli musi odbywać się w sposób zintegrowany, z pomocą narzędzi programistycznych, które integrują się z systemami PLM i same są zintegrowane w celu ułatwienia wizualizacji wymagań, specyfikacji i przepływu informacji pomiędzy różnymi modelami w ramach spójnego procesu, a nie szeregu oddzielnych etapów. Taki stan rzeczy musi mieć miejsce w całym procesie, począwszy od wykazania wykonalności koncepcji, aż po realizację i optymalizację całego systemu, a coraz częściej również aż do momentu wypuszczenia produktu na rynek. I wszystko to trzeba wykonywać w coraz szybszym tempie.
Prędkość i stabilność
Cykle rozwoju produktów dla przemysłu samochodowego w ostatnim czasie zanotowały spadek; firmy muszą wprowadzić nowe linie pojazdu lub, co równie ważne, nowe funkcje w jeszcze szybszym tempie, pomimo konieczności działania z ciągle to nowymi komponentami, które mogą mieć różne właściwości i zachowania. Czasami tempo rozwoju technologii jest tak szybkie, że firmy motoryzacyjne nie są w stanie za nim nadążyć, co jest nie tylko kwestią przyjęcia nowych komponentów i technologii; chodzi również o czas i koszty związane z ich integracją i zatwierdzeniem.
Kierowcy korzystają ze swoich samochodów przez długi okres, ale przywykli już do prędkości z jaką ulepszane są urządzenia konsumenckie, corocznych aktualizacji i częstych wydań nowych aplikacji. Istnieje zapotrzebowanie na takie samo tempo rozwoju ulepszeń dla samochodów, które owi kierowcy kupują, w postaci nowych funkcji w pojeździe lub wsparcia dla nowych akcesoriów. Zmiany regulacyjne mogą również oznaczać, że pojazd będzie musiał być ulepszany jeszcze na długo po wypuszczeniu na rynek.
Traktowanie rozwoju jako nauki i dyscypliny inżynierskiej jest jedynym sposobem na radzenie sobie z połączeniem rosnącej złożoności, zwiększonego nacisku na efektywność kosztów i stale rosnącego tempa. Wymaga to opracowania praktyk inżynierii oprogramowania, które są zgodne z rygorystycznymi procesami strukturalnymi. Jeśli można zamknąć cykl produkcji, płynnie przechodząc poprzez wymogi zbierania informacji (zadania, które powoli zaczynają zajmować większość czasu w procesie rozwoju), budowy, testowania i sprawdzania poprawności kodu pod kątem wspomnianych wymagań, możemy ogólnie poprawić powtarzalność rozwoju, zwiększyć wydajność, efektywność i odpowiedzialność.
Przemysł motoryzacyjny zmierza w kierunku normalizacji poprzez rosnącą liczbę specyfikacji ISO, które obejmują bezpieczeństwo, ergonomię, wydajność, kwestie środowiskowe i metody badań, oraz poprzez partnerstwa takie jak AUTOSAR (Motoryzacyjna Otwarta Architektura Systemowa AUTOSAR). Aby mieć pewność zgodności ze wspomnianymi standardami, należy opracować certyfikowane procesy tworzenia oprogramowania.
Odpowiednie narzędzia i techniki mogą obniżyć koszty, które w przeciwnym razie by wzrosły, ponieważ oprogramowanie staje się coraz istotniejszą częścią procesu rozwoju, poprzez zwiększenie wydajności i dokładności. Mogą one pomóc przedstawić wymagania, specyfikacje i nawet kody w taki sposób, że są one łatwiejsze do odczytania i zrozumienia dla programistów, którzy nad nimi pracują. Są także kluczem do zharmonizowania niektórych obciążeń rozwoju oprogramowania, umożliwiając ponowne wykorzystanie komponentów oprogramowania.
W teorii, ponowne wykorzystanie komponentów oprogramowania między pojazdami i platformami samochodowymi a nawet w różnych domenach konstrukcyjnych w pojeździe, powinno przyczynić się do obniżenia kosztów i czasu wdrożenia oraz wzrostu jakości. W praktyce jest to bardziej skomplikowane, ponieważ przygotowanie tych składników do ponownego wykorzystania we wszystkich możliwych scenariuszach oznacza więcej pracy, więcej wymogów do spełnienia oraz więcej badań i procesów zatwierdzających. Ale ponowne wykorzystanie oprogramowania jest kolejnym kluczowym elementem, któremu przemysł samochodowy musi sprostać.
Digitalizacja, design, delokalizacja – albo wypadnięcie z rynku
Większość dzisiejszych pojazdów na naszych drogach wyrosła już z układów napędowych, świat z zewnątrz przenosi się do wnętrz pojazdów; oznacza to, że sposób projektowania pojazdu musi się zmienić, aby dopasować ten nowy świat, który staje się coraz bardziej wymagający. Nie ma tutaj miejsca na tymczasowe, jednorazowe kodowanie. Zamiast tego potrzebne jest zintegrowane podejście do projektowania systemu od punktu wyjścia do punktu docelowego, gdzie rozwój oprogramowania jest kolejną dyscypliną inżynierii, do której opanowania niezbędne są narzędzia obsługujące złożoność osadzania oprogramowania w produktach sprzętowych.
Gdy firmy motoryzacyjne postrzegają siebie jako spółki mobilne i dbające o doświadczenia konsumenta, to tak naprawdę oznacza tyle, że muszą być one również profesjonalnymi producentami oprogramowania. Wymaga to zintegrowanego projektowania produktu i rozwoju systemów, które obejmują cały cykl życia produktu, zarówno pod względem mechanicznym, jak i cyfrowym, począwszy od pomysłu i projektu, poprzez produkcję, konserwację i naprawy, aż po aktualizacje i ulepszenia oraz przepływ informacji typu forward dla efektywności i produktywności oraz backwards dla odpowiedzialności i ewidencji.
Rosnące tempo zmian – zarówno w technologii, jak i modelach biznesowych – wymaga narzędzi, które wspierają nowe, usprawnione metody pracy, ponieważ dostarczanie nowej wartości biznesowej staje się jedynym sposobem na utrzymanie przewagi konkurencyjnej. Rzeczywiście, w czasach, gdy całe rynki mogą zniknąć w wyniku wprowadzenia jednej innowacji, poprawa biznesowa oraz techniczna sprawność okazują się być jedynym sposobem na przetrwanie. Coraz więcej produktów nie jest tylko sprzętem lub tylko oprogramowaniem, ale ich hybrydą, a ze względu na to, że są one coraz mniejsze, inteligentniejsze oraz bardziej zależne od wbudowanego oprogramowania i mikroprocesorów, a także bardziej ze sobą powiązane, złożoność produktu wzrasta drastycznie. Jednocześnie klienci oczekują produktów spersonalizowanych, do zamówienia przez Internet, i dostarczonych w mgnieniu oka. Jeśli więc nie jesteś w stanie spełnić wymagań klienta, zrobi to konkurencja.