Skip to content

Instantly share code, notes, and snippets.

@ksdev-pl
Created December 25, 2013 13:23
Show Gist options
  • Save ksdev-pl/57f4ce228e938774cdc0 to your computer and use it in GitHub Desktop.
Save ksdev-pl/57f4ce228e938774cdc0 to your computer and use it in GitHub Desktop.
Proces budowy oprogramowania #metodyka

Proces budowy oprogramowania

  • definiowanie problemu,
  • określanie wymagań,
  • planowanie,
  • projektowanie architektury,
  • projektowanie szczegółowe,
  • pisanie kodu i debugowanie,
  • testy jednostkowe,
  • testy integracyjne,
  • integrowanie,
  • testy systemowe,
  • konserwowanie (pielęgnowanie) systemu.

(Kod doskonały, s. 39)

Główne czynności wchodzące w skład programowania to projektowanie, pisanie kodu, debugowanie, integrowanie składników i testy programisty (jednostkowe oraz integracyjne).

(Kod doskonały, s. 42)

Najpierw decydujesz, jaki rodzaj domu ma zostać zbudowany - odpowiada to w programowaniu fazie definiowania problemu. Następnym krokiem jest opracowanie we współpracy z architektem ogólnego projektu i uzyskanie jego akceptacji, co jest analogią fazy projektowania architektury oprogramowania. Rysujesz plany i schematy, po czym podpisujesz umowę z wykonawcą. Przypomina to fazę projektowania szczegółowego w programowaniu. Przygotowujesz plac budowy, wylewasz fundamenty, stawiasz ściany i dach, montujesz instalacje. To etap programowania lub budowy oprogramowania. Gdy dom jest gotowy, architekci wnętrz, krajobrazu i dekoratorzy starają się nadać jego konstrukcji możliwie korzystny wygląd. Można to porównać do optymalizacji oprogramowania. W trakcie całego procesu towarzyszą nam najróżniejsi inspektorzy, którzy kontrolują przygotowanie placu budowy, wykonanie fundamentu, ścian, dachu, instalacji i innych elementów. Podobnie kontrolowane są poszczególne elementy oprogramowania i całość przygotowywanego systemu.

(Kod doskonały, s. 51)

Typowe składniki architektury

  • organizacja programu,
  • podstawowe klasy programu,
  • organizacja danych,
  • reguły biznesowe,
  • projekt interfejsu użytkownika,
  • zarządzanie zasobami,
  • zabezpieczenia,
  • wydajność,
  • skalowalność,
  • współdziałanie,
  • internacjonalizacja i lokalizacja,
  • wejście-wyjście,
  • przetwarzanie błędów,
  • zabezpieczenia przed awariami,
  • wykonalność,
  • nadmiar konstrukcyjny,
  • kupować czy budować,
  • decyzje o wykorzystaniu istniejącej bazy,
  • strategia zmian.

(Kod doskonały, ss. 78-86)

Znaczenie zarządzania złożonością

Zarządzanie złożonością to najważniejsze zagadnienie w procesie tworzenia oprogramowania (...) Na poziomie architektury złożoność problemu redukuje podział na podsystemy. Człowiekowi łatwiej jest zrozumieć kilka prostych elementów niż jeden skomplikowany. Celem wszystkich technik projektowania oprogramowania jest więc uzyskanie podziału złożonego problemu na proste części. Im bardziej niezależne są podsystemy, tym bezpieczniej można koncentrować się na wybranych elementach złożonej całości. Dobrze zaprojektowane obiekty oddzielają więc różne mechanizmy, pozwalające pracować nad każdym z nich niezależnie.

Dwie podstawowe metody radzenia sobie ze złożonością:

  • redukowanie liczby istotnych składowych złożoności, z którymi człowiek musi mieć do czynienia jednocześnie,
  • unikanie wprowadzania złożoności akcydentalnej.

(Kod doskonały, ss. 114-115)

Pożądane cechy projektu:

  • minimalny poziom złożoności,
  • łatwość wprowadzania zmian,
  • luźne wiązanie,
  • rozszerzalność,
  • możliwość ponownego użycia,
  • wysokie zwielokrotnienie wejściowe,
  • niskie lub średnie zwielokrotnienie wyjściowe,
  • przenośność,
  • szczupłość,
  • stratyfikacja,
  • standardowe metody.

(Kod doskonały, ss. 116-117)

Poziomy projektowania:

  1. System.
  1. Podział na podsystemy lub pakiety.
  2. Podział na klasy.
  3. Podział na procedury.
  4. Wewnętrzne projektowanie procedur.

(Kod doskonały, ss. 117-122)

Na projektowanie w oparciu o obiekty składa się:

  • identyfikacja obiektów i ich atrybutów (metod oraz danych),
  • określenie, co można zrobić z każdym obiektem,
  • określenie dla każdego obiektu, co może on robić z innymi obiektami,
  • określenie, które części każdego z obiektów będą widoczne dla innych obiektów, które składowe będą publiczne, a które prywatne,
  • zdefiniowanie interfejsu publicznego każdego obiektu.

(Kod doskonały, s. 123)

Zestawienie podstawowych heurystyk projektowania:

  • Znajdź obiekty świata rzeczywistego.
  • Buduj spólne abstrakcje.
  • Hermetyzuj szczegóły implementacji.
  • Stosuj dziedziczenie - gdy upraszcza to projekt.
  • Ukrywaj tajemnice (ukrywanie informacji).
  • Identyfikuj obszary potencjalnych zmian.
  • Zachowaj luźne powiązania.
  • Szukaj typowych wzorców projektowych.

(Kod doskonały, s. 144)

Przesłanki dla utworzenia klasy:

  • modelowanie obiektów świata rzeczywistego,
  • modelowanie obiektów abstrakcyjnych,
  • redukowanie złożoności,
  • izolowanie złożoności,
  • ukrywanie szczegółów implementacji,
  • ograniczanie skutków zmian,
  • ukrywanie danych globalnych,
  • usprawnianie przekazywania parametrów,
  • centralizowanie kontroli,
  • ułatwianie ponownego użycia kodu,
  • planowanie pod kątem rodziny programów,
  • łączenie pokrewnych operacji,
  • wykonywanie określonej refraktoryzacji.

(Kod doskonały, ss. 191-192)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment