100901552

Page 1


SPIS TREŚCI

Rozdział

Rozdział

Inżynieria oprogramowania czasu rzeczywistego

21.2 Wzorce architektoniczne oprogramowania czasu rzeczywistego 653

CZĘŚĆ

1Wprowadzenie do inżynierii oprogramowania

Ta część książki ma na celu przedstawienie ogólnego wprowadzenia do inżynierii oprogramowania. Rozdziały w niej zamieszczone są pomyślane jako materiał wspomagający początkowego wykładu na jeden semestr. Wprowadzam w niej ważne koncepcje, takie jak procesy wytwarzania oprogramowania, metodyki zwinne, i opisuję podstawowe czynności związane z produkcją oprogramowania – od specyfikowania wymagań po ewolucję systemu.

Rozdział 1 jest ogólnym wprowadzeniem przedstawiającym pojęcie profesjonalnej inżynierii oprogramowania i definiującym niektóre pojęcia z tej dziedziny. Dołączyłem tu również krótkie omówienie zagadnień etycznych związanych z inżynierią oprogramowania. Ważne jest, aby inżynierowie oprogramowania mieli świadomość szerszych implikacji wykonywanej przez nich pracy. Rozdział ten zawiera również wprowadzenie do czterech studiów przypadków, których używam w całej książce. Są to system informacyjny zarządzający rejestrami pacjentów przechodzących leczenie chorób psychicznych (Mentcare), system sterujący przenośną pompą insulinową, wbudowany system automatycznej stacji pogodowej oraz cyfrowe środowisko nauczania (iLearn).

Rozdziały 2 i 3 zawierają omówienie procesów wytwarzania oprogramowania i projektowania zwinnego. W rozdziale 2 przedstawiam modele procesów wytwarzania oprogramowania, takie jak model kaskadowy, a także omawiam podstawowe czynności składające się na te procesy. Rozdział 3 uzupełnia tę tematykę omówieniem metodyk programowania zwinnego dla inżynierii oprogramowania. Rozdział ten został dogłębnie zmieniony w stosunku do poprzednich wydań, skupia się na programowaniu zwinnym z użyciem Scrum i omówieniu praktyk zwinnych, takich jak historyjki do definiowania wymagań i programowanie sterowane testami.

1

Wprowadzenie do inżynierii oprogramowania

Pozostałe rozdziały w tej części są rozwiniętymi omówieniami działań wchodzących w skład procesów wytwarzania oprogramowania, które zostały przedstawione w rozdziale 2. Tematyką rozdziału 4 jest niezwykle ważne zagadnienie inżynierii wymagań, gdzie zdefiniowane są wymagania dotyczące tego, co system ma robić. Rozdział 5 wyjaśnia modelowanie systemów przy użyciu UML. Koncentruję się tu na wykorzystaniu diagramów przypadków użycia, diagramów klas, diagramów przebiegu oraz stanowych do modelowania systemu oprogramowania. W rozdziale 6 omawiam ważność architektury oprogramowania i wykorzystanie wzorców architektonicznych w projektowaniu oprogramowania.

Rozdział 7 wprowadza tematykę projektowania obiektowego i wykorzystanie wzorców projektowych. Włączyłem tu również ważne zagadnienia implementacyjne: ponowne użycie kodu, zarządzanie konfiguracją oraz skrośne wytwarzanie oprogramowania i omówienie programowania otwartego (open source). Rozdział 8 koncentruje się na testowaniu oprogramowania, poczynając od testów jednostkowych podczas tworzenia systemu po testowanie wydań oprogramowania. Zawiera też wykorzystanie programowania sterowanego testami – podejścia, które wywodzi się z metodyk zwinnych, ale ma szerokie możliwości stosowania. Końcowy rozdział 9 zawiera przegląd problemów związanych z ewolucją oprogramowania. Omawiam w nim procesy ewolucji, konserwację oprogramowania oraz zarządzanie systemami odziedziczonymi.

1.3

1.3 Studia przypadków

Do zilustrowania koncepcji inżynierii oprogramowania wykorzystam przykłady czterech typów systemów. Świadomie nie zdecydowałem się na pojedyncze studium przypadku, gdyż jednym z kluczowych przesłań tej książki jest to, że praktyka inżynierii oprogramowania zależy od typu produkowanego systemu. Z tego względu wybieram odpowiedni przykład przy omawianiu takich koncepcji, jak bezpieczeństwo i niezawodność, modelowanie systemu, ponowne użycie kodu itd. Rodzaje systemów, które wybrałem jako studia przypadków, to:

1. System wbudowany. Jest to system, w którym oprogramowanie steruje pewnym urządzeniem i jest umieszczone w tym urządzeniu. Problemy dotyczące systemów wbudowanych zazwyczaj dotyczą rozmiarów fizycznych, szybkości reakcji, zarządzania zasilaniem itp. System wbudowany użyty w tym przykładzie jest to oprogramowanie sterujące pompą insulinową dla chorych na cukrzycę.

2. System informacyjny. Podstawowym przeznaczeniem tego typu systemu jest zarządzanie i zapewnianie dostępu do bazy danych pewnych informacji. Problemy dotyczące systemów informacyjnych dotyczą bezpieczeństwa, łatwości użycia, zachowania prywatności oraz utrzymywania integralności danych. Jako przykład użyję systemu rejestrów medycznych.

3. System gromadzenia danych z czujników. Jest to system, którego głównym celem jest zbieranie danych ze zbioru czujników i przetwarzanie tych danych w jakiś sposób. Kluczowe wymagania takich systemów to niezawodność, nawet w nieprzyjaznych warunkach środowiskowych, oraz możliwość konserwacji. Wybrany przeze mnie system gromadzenia danych to pracująca na odludziu automatyczna stacja pogodowa.

4. Środowisko wsparcia. Jest to zintegrowany zestaw oprogramowania narzędziowego, służący do wspierania pewnego rodzaju czynności. Dla czytelników najbardziej znanym systemem tego typu będzie zapewne środowisko programistyczne, takie jak Eclipse [Vogel, 2012]. Jako przedstawiony tu przykład opiszę cyfrowe środowisko nauczania służące uczniom szkół jako pomoc w nauce.

Każdy z tych systemów przedstawię w tym rozdziale. Więcej informacji o każdym z nich można znaleźć na stronie https://iansommerville.com/software-engineering-book/.

1.3.1 System sterowania pompy insulinowej Pompa insulinowa jest urządzeniem medycznym symulującym działanie trzustki (organu wewnętrznego). Oprogramowanie sterujące tym urządzeniem jest systemem wbudowanym, zbierającym informacje z czujników i sterującym pompą, która dostarcza użytkownikowi ściśle kontrolowaną dawkę insuliny. Urządzenia takiego używają osoby cierpiące na cukrzycę. Jest to powszechne schorzenie, w którym ludzka trzustka nie jest w stanie wytwarzać dostatecznych

ilości hormonu nazywanego insuliną. Hormon ten metabolizuje glukozę (cukier) we krwi. Tradycyjne leczenie cukrzycy polega na regularnych zastrzykach insuliny wytwarzanej przez genetycznie zmodyfikowane mikroorganizmy. Cukrzycy okresowo mierzą poziom cukru we krwi, posługując się zewnętrznym miernikiem, i na tej podstawie oszacowują wielkość dawki insuliny, którą powinni sobie wstrzyknąć. Problem w tym, że wymagany poziom insuliny nie zależy tylko od poziomu glukozy we krwi, ale również od czasu, jaki upłynął od ostatniego podania insuliny. Nieregularne sprawdzanie może doprowadzić do bardzo niskiego poziomu cukru we krwi (jeśli insuliny jest zbyt dużo) lub bardzo wysokiego poziomu cukru (jeśli insuliny jest za mało). Niski poziom glukozy jest na krótką metę poważniejszą przypadłością, gdyż może prowadzić do czasowych zakłóceń pracy mózgu, a ostatecznie do utraty świadomości i śmierci. Jednak długoterminowo utrzymujący się wysoki poziom glukozy może prowadzić do uszkodzenia oczu, nerek i problemów z sercem. Postępy w budowaniu zminiaturyzowanych czujników sprawiły, że obecnie możliwe jest budowanie zautomatyzowanych systemów podawania insuliny. Systemy takie monitorują poziom cukru we krwi i jeśli trzeba, dostarczają odpowiednią dawkę insuliny. Systemy takie są już dziś dostępne i używane przez pacjentów, dla których trudne jest samodzielne kontrolowanie poziomu insuliny. W przyszłości zapewne możliwe będzie wszczepienie takiego urządzenia na stałe w ciało osoby chorej na cukrzycę.

Sterowany programowo system dostarczania insuliny wykorzystuje mikroczujnik wszczepiony w pacjenta do mierzenia pewnych parametrów krwi, które są proporcjonalne do poziomu cukru. Informacje te są przesyłane do procesora pompy. Oblicza on poziom cukru we krwi oraz wielkość potrzebnej dawki insuliny. Następnie przesyła sygnał do zminiaturyzowanej pompy, polecając dostarczenie insuliny przez podłączoną na stałe igłę.

Na rysunku 1.4 pokazano komponenty sprzętowe oraz strukturę pompy insulinowej. Aby zrozumieć przykłady zawarte w tej książce, wystarczy wiedzieć, że czujnik krwi mierzy przewodność elektryczną krwi w różnych warunkach i że wartości te można powiązać z poziomem cukru we krwi. Pompa insulinowa dostarcza jedną jednostkę insuliny w odpowiedzi na pojedynczy impuls z procesora. Tym samym

Zbiornik na insulinę

Zestaw infuzyjny Pompa Zegar

Czujnik Procesor

Wyświetlacz 1 Wyświetlacz 2

Zasilacz Alarm

Rysunek 1.4. Architektura sprzętowa pompy insulinowej

ĆWICZENIA

1.1. Wyjaśnij, dlaczego profesjonalne oprogramowania tworzone dla klienta nie są jedynie samymi programami, które zostały zbudowane i dostarczone.

1.2. Jaka jest najważniejsza różnica między wytwarzaniem uniwersalnego oprogramowania na sprzedaż a wytwarzaniem oprogramowania na zamówienie? Co to może w praktyce oznaczać dla użytkowników uniwersalnego oprogramowania?

1.3. Jakie są cztery ważne atrybuty, które powinno mieć każde profesjonalne oprogramowanie? Zaproponuj cztery inne atrybuty, które czasami mogą być znaczące.

1.4. Zaproponuj inne problemy i wyzwania (poza różnorodnością, zmiennością gospodarki i społeczeństw oraz zaufania i bezpieczeństwa), z którymi inżynieria oprogramowania będzie się prawdopodobnie musiała zmierzyć w XXI w. (Wskazówka: pomyśl o środowisku).

1.5. Opierając się na własnej znajomości niektórych typów aplikacji omówionych w punkcie 1.1.2, wyjaśnij na przykładach, dlaczego różne typy aplikacji wymagają specjalizowanych technik inżynierii oprogramowania wspierających ich projektowanie i wytwarzanie.

1.6. Wyjaśnij, dlaczego podstawowe zasady inżynierii oprogramowania dotyczące procesu wytwarzania, rzetelności, zarządzania wymaganiami i ponownego użycia kodu mają zastosowanie do wszystkich typów systemów oprogramowania.

1.7. Wyjaśnij, jak powszechne korzystanie z sieci WWW zmieniło systemy oprogramowania i inżynierię systemów oprogramowania.

1.8. Rozważ, czy profesjonalni inżynierowie powinni być licencjonowani w podobny sposób jak lekarze lub prawnicy.

1.9. Dla każdej klauzuli kodu etycznego ACM/IEEE pokazanego na rysunku 1.4 zaproponuj odpowiedni przykład ilustrujący tę klauzulę.

1.10. W celu przeciwdziałania terroryzmowi wiele krajów planuje lub już opracowało systemy komputerowe śledzące wielką liczbę ich obywateli i ich działania. Oczywiście ma to wpływ na prywatność. Przedyskutuj zagadnienia etyczne pracy nad budowaniem systemu tego rodzaju.

ŹRÓDŁA

Bott F. 2005. Professional Issues in Information Technology. Swindon, UK: British Computer Society. Duquenoy P. 2007. Ethical, Legal and Professional Issues in Computing. London: Thomson Learning. Freeman A. 2011. The Definitive Guide to HTML5. New York: Apress. Gotterbarn D., Miller K., Rogerson S. 1999. „Software Engineering Code of Ethics Is Approved”. Comm. ACM 42 (10): 102–107. doi:10.1109/MC.1999.796142.

Holdener A. T. 2008. Ajax: The Definitive Guide. Sebastopol, CA: O’Reilly and Associates.

Jacobson I., Ng P-W., McMahon P. E., Spence I., Lidman S. 2013. The Essence of Software Engineering. Boston: Addison-Wesley.

Johnson D. G. 2001. Computer Ethics. Englewood Cliffs, NJ: Prentice-Hall. Laudon K. 1995. „Ethical Concepts and Information Technology”. Comm. ACM 38 (12): 33–39. doi:10.1145/219663.219677.

Naur P., Randell B. 1969. Software Engineering: Report on a conference sponsored by the NATO Science Committee. Brussels; http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.pdf.

Tavani H. T. 2013. Ethics and Technology: Controversies, Questions, and Strategies for Ethical Computing, 4th ed. New York: John Wiley & Sons.

Vogel L. 2012. Eclipse 4 Application Development: The Complete Guide to Eclipse 4 RCP Development Sebastopol, CA: O’Reilly & Associates.

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.