Inżynieria oprogramowania - ebook
Inżynieria oprogramowania - ebook
X wydanie kultowego podręcznika „Inżynieria oprogramowania” autorstwa Iana Sommervilla. Jest to nie tylko podręcznik przeznaczony dla studentów informatyki, to publikacja, z której skorzystają również architekci systemów, projektanci, programiści i wdrożeniowcy oraz kierownicy tych przedsięwzięć, od których zależy organizacja pracy.
W publikacji omówiono proces wytwarzania wielkich systemów informatycznych. Czytelnik znajdzie tam wyjaśnienie, na czym polega inżynieria oprogramowania, po czym przejdzie do zagadnień związanych z analizą wymagań i specyfikacjami. W książce znalazły się też informacje o projektowaniu i systemach krytycznych. Autor opisał także:
• etap weryfikacji i zatwierdzania systemu,
• proces zarządzania ludźmi,
• szacowanie kosztów,
• kontrolę jakości,
• ulepszenie procesów,
• etap pielęgnacji i modyfikacji systemu po udostępnieniu go użytkownikom.
Po każdym rozdziale znajduje się podsumowanie, opis zalecanej literatury i zestaw ćwiczeń.
Kategoria: | Informatyka |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-01-21455-5 |
Rozmiar pliku: | 11 MB |
FRAGMENT KSIĄŻKI
WPROWADZENIE 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.
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.
Wprowadzenie
1.1.2 Różnorodność inżynierii oprogramowania
Inżynieria oprogramowania jest systematycznym podejściem do produkcji oprogramowania, uwzględniającym praktyczne zagadnienia związane z kosztami, terminami i rzetelnością wraz z potrzebami klientów i producentów. Użycie konkretnych metodyk, narzędzi i technik zależy od firmy tworzącej oprogramowanie, typu tego oprogramowania oraz ludzi zaangażowanych w proces wytwarzania. Nie istnieją uniwersalne metodyki inżynierii oprogramowania, które byłyby odpowiednie dla wszystkich systemów i wszystkich firm. Zamiast tego w ciągu minionych 50 lat wyewoluowały najrozmaitsze narzędzia i metodyki. Tym niemniej inicjatywa SEMAT sugeruje, że może istnieć fundamentalny metaproces, którego egzemplarze pozwolą tworzyć procesy różnych rodzajów. Koncepcja ta jest jeszcze we wczesnej fazie rozwoju, ale może się okazać punktem wyjścia dla usprawnienia bieżących metodyk inżynierii oprogramowania.
Zapewne najbardziej znaczącym czynnikiem przy ustalaniu najwłaściwszych metodyk i technik inżynierii oprogramowania jest typ tworzonej aplikacji. Istnieje wiele różnych typów aplikacji, w tym:
1. _Samodzielne aplikacje_. Są to programy uruchamiane na komputerach osobistych lub aplikacje działające na urządzeniu mobilnym. Zawierają całą niezbędną funkcjonalność i mogą nie potrzebować połączenia z siecią. Przykładami tego typu aplikacji są programy biurowe dla komputerów osobistych, programy CAD, oprogramowanie do edycji zdjęć, aplikacje podróżne, programy wspierające produktywność itd.
2. _Interaktywne aplikacje transakcyjne_. Są to programy wykonywane na komputerze zdalnym, do których użytkownicy uzyskują dostęp ze swoich własnych komputerów, telefonów lub tabletów. Do tej kategorii należą oczywiście aplikacje WWW, takie jak rozwiązania e-commerce, w których wykorzystujemy zdalny system do kupowania towarów i usług. Ta klasa aplikacji obejmuje też systemy biznesowe, w których przedsiębiorstwo zapewnia dostęp do swojego systemu przez przeglądarkę WWW lub specjalizowany program kliencki, a także usługi w chmurze, takie jak poczta elektroniczna i udostępnianie zdjęć. Interaktywne aplikacje zwykle zawierają wielkie składowisko danych, które jest aktualizowane w każdej transakcji.
3. _Wbudowane systemy sterujące_. Są to programowe systemy sterujące i zarządzające urządzeniami sprzętowymi. Ujmując liczbowo, zapewne istnieje więcej systemów wbudowanych niż jakiegokolwiek innego rodzaju oprogramowania. Przykłady systemów wbudowanych obejmują oprogramowanie telefonów komórkowych, programy kontrolujące systemy przeciwdziałające blokowaniu się kół w samochodzie (ABS) i oprogramowanie kuchenki mikrofalowej sterujące procesem gotowania.
4. _Systemy przetwarzania wsadowego_. Są to systemy biznesowe zaprojektowane do przetwarzania danych w wielkich porcjach (wsadach). Przetwarzają one wielką liczbę indywidualnych danych wejściowych w celu utworzenia odpowiednich danych wyjściowych. Przykładami systemów wsadowych są okresowo działające systemy rozrachunkowe, takie jak telefoniczne systemy bilingowe czy systemy płacowe.
5. _Systemy rozrywkowe_. Są to programy do użytku osobistego zaprojektowane w celu zapewnienia rozrywki użytkownika. Większość tych systemów to gry jakiegoś rodzaju, które mogą działać na specjalizowanej konsoli sprzętowej. Najważniejszą wyróżniającą cechą systemów rozrywkowych jest oferowana przez nie jakość interakcji z użytkownikiem.
6. _Systemy do modelowania i symulacji_. Są to systemy opracowywane przez naukowców i inżynierów w celu modelowania procesów fizycznych lub sytuacji, w których występuje wiele oddzielnych, oddziałujących ze sobą obiektów. Programy takie są często bardzo wymagające obliczeniowo i do działania wymagają wysokowydajnych systemów równoległych.
7. _Systemy gromadzenia i analizowania danych_. Systemy gromadzenia danych to rozwiązania zbierające informacje ze środowiska i przesyłające te dane do innych systemów w celu przetworzenia. Oprogramowanie może musieć współdziałać z czujnikami i często jest instalowane w nieprzyjaznym środowisku, na przykład wewnątrz silnika lub w lokalizacji zdalnej. Analizy _big data_ mogą wykorzystywać chmurowe systemy wykonujące analizy statystyczne i wyszukujące zależności w zgromadzonych danych.
8. _Systemy systemów_. Są to rozwiązania używane w przedsiębiorstwach i innych wielkich firmach, złożone z wielu innych systemów oprogramowania. Niektóre mogą być produktami powszechnego stosowania, takie jak systemy ERP. Inne elementy takiego zestawu mogą być napisane specjalnie dla określonego środowiska.
Granice między poszczególnymi typami systemów oczywiście nie są ostre. Jeśli tworzymy grę na telefon komórkowy, musimy wziąć pod uwagę takie same ograniczenia (zasilanie, interakcja ze sprzętem) jak twórcy oprogramowania systemowego tego telefonu. Systemy przetwarzania wsadowego są często używane w połączeniu z internetowymi systemami transakcyjnymi. Na przykład roszczenia dotyczące kosztów podróży w przedsiębiorstwie mogą być zgłaszane przez aplikację WWW, ale przetwarzane w aplikacji wsadowej na potrzeby miesięcznych rozliczeń.
Każdy typ systemu wymaga specjalizowanych technik inżynierii oprogramowania, gdyż samo to oprogramowanie ma odmienne cechy. Na przykład wbudowany system sterujący dla samochodu jest oprogramowaniem krytycznym ze względów bezpieczeństwa i zostaje zapisany w ROM (pamięci tylko do odczytu) przy instalowaniu w pojeździe. Z tego względu jego zmiana jest bardzo kosztowna. Taki system wymaga rozległej weryfikacji i walidacji, aby zminimalizować ryzyko konieczności wzywania samochodów do serwisu w celu rozwiązania problemów z oprogramowaniem. Interakcja z użytkownikiem jest minimalna (a być może w ogóle nie istnieje), nie ma zatem potrzeby wykorzystywania procesu wytwarzania, który jest oparty na prototypowaniu interfejsu użytkownika.
W przypadku interaktywnych systemów internetowych lub aplikacji najlepszym podejściem jest tworzenie i dostarczanie iteracyjne, przy czym system składany jest z komponentów wielokrotnego użycia. Jednak takie podejście może być niepraktyczne dla systemu systemów, w którym interakcje między poszczególnymi systemami muszą zostać wyspecyfikowane z góry, aby każdy system mógł zostać utworzony oddzielnie.
Niemniej jednak istnieją podstawowe zasady inżynierii oprogramowania, które mają zastosowanie do wszystkich typów oprogramowania:
1. Powinny być rozwijane przy użyciu zarządzanego i zrozumiałego procesu wytwarzania. Firma wytwarzająca oprogramowanie powinna zaplanować proces wytwarzania i mieć jasną wizję tego, co zostanie wyprodukowane i kiedy to będzie gotowe. Konkretny użyty proces zależy oczywiście od typu tworzonego oprogramowania.
2. Niezawodność i wydajność są istotne dla wszystkich typów systemów. Oprogramowanie powinno zachowywać się zgodnie z oczekiwaniem, bez awarii i powinno być dostępne do użycia, gdy będzie potrzebne. Powinno być bezpieczne ze względu na swoje własne działanie i zostać zabezpieczone przed zewnętrznym atakiem w takim stopniu, jak to tylko możliwe. System powinien działać efektywnie i nie powinien marnować zasobów.
3. Ważne jest zrozumienie i nadzorowanie specyfikacji i wymagań oprogramowania (czyli co to oprogramowanie powinno robić). Musimy wiedzieć, czego od tworzonego systemu będą oczekiwać różni klienci i użytkownicy i musimy spełnić ich oczekiwania tak, by móc dostarczyć działający, użyteczny system w ramach budżetu i zgodnie z harmonogramem.
4. Należy efektywnie wykorzystywać dostępne zasoby. Oznacza to, że jeśli jest to właściwe, należy raczej ponownie wykorzystać już napisane oprogramowanie, niż pisać nowe.
Te fundamentalne pojęcia procesu wytwarzania, niezawodności, wymagań, zarządzania i ponownego użycia stanowią osnowę całej tej książki. Są one w różny sposób odzwierciedlane w różnych metodykach, ale leżą u podstaw całego profesjonalnego wytwarzania oprogramowania.
Podstawy te nie zależą od języka używanego do budowania oprogramowania. W tej książce nie zajmuję się szczegółowymi technikami programistycznymi, gdyż różnią się one znacznie w zależności od typu systemu. Na przykład język dynamiczny, taki jak Ruby, jest właściwym typem języka przy tworzeniu systemu interaktywnego, ale zupełnie nieodpowiednim dla inżynierii systemów wbudowanych.
BESTSELLERY
- Wydawnictwo: Wydawnictwo Naukowe PWNFormat: EPUB MOBIZabezpieczenie: Watermark VirtualoKategoria: InformatykasKsiążka o tematyce DFIR (Digital Forensics and Incident Response) z jednej strony pokazuje tradycyjne podejście informatyki śledczej, a drugiej reagowania na incydenty (Live Forensics)74,00 zł74,00 zł
- Wydawnictwo: Wydawnictwo Naukowe PWNFormat: EPUB MOBIZabezpieczenie: Watermark VirtualoKategoria: InformatykaJerzy Surma na podstawie swoich wieloletnich doświadczeń praktycznych i badań naukowych opisuje zjawisko totalnej cyfryzacji naszego życia oraz wynikające z niego szanse i zagrożenia54,00 zł54,00 zł
- Wydawnictwo: Wydawnictwo Naukowe PWNFormat: EPUB MOBIZabezpieczenie: Watermark VirtualoKategoria: InformatykaTen zrozumiały elementarz pomoże Ci zrozumieć, jak używać metod Bayesowskich poprzez jasne wyjaśnienia i zabawne przykłady. Będziesz polował na UFO, aby zbadać codzienne rozumowanie, a także obliczysz czy Han Solo prz...84,00 zł84,00 zł
- Wydawnictwo: Wydawnictwo Naukowe PWNFormat: EPUB MOBIZabezpieczenie: Watermark VirtualoKategoria: InformatykaIstnieje niewiele innych wynalazków człowieka, które mogą mieć tak wielki wpływ na nasze życie, jak maszyny, które potrafią myśleć … Maszyna parowa wyzwoliła nasze muskuły; komputery są gotowe do uwolnienia naszych umysłów.74,00 zł74,00 zł
- 84,00 zł