Programuj tak, aby nie
naprawiać
Planowanie
projektów i systemów
Tworzenie
oprogramowania, zwłaszcza dużych i złożonych aplikacji, bywa problemem.
Często objawy złego planowania projektu nie mają wiele
wspólnego z uwarunkowaniami technicznymi: wysoki poziom
stresu, duża rotacja pracowników, wypalenie zawodowe, brak
zaufania, niska samoocena, a nawet różnego rodzaju
dolegliwości fizyczne. Przyczyny tego stanu rzeczy są podobne:
określane w nierealny sposób koszty, terminy i wymagania.
Później okazuje się, że wewnętrznej złożoności systemu nikt
nie rozumie, nad koniecznymi ciągłymi zmianami nikt nie panuje, a
wytworzone oprogramowanie jest niemal niemożliwe do utrzymania. Jak
widać, problem jest wielowymiarowy. Wielowymiarowe musi więc też być
narzędzie, które umożliwi jego rozwiązanie.
W
tym praktycznym przewodniku uniwersalne zasady projektowania zostały
dostosowane do specyfiki wytwarzania oprogramowania. Znalazł się tu
zbiór najważniejszych zasad inżynierii oprogramowania, jak
również wyczerpujący zestaw narzędzi i technik do stosowania
w projektach programistycznych. Ich zastosowanie sprawi, że gotowy
system będzie łatwy do utrzymania, rozszerzalny, nie będzie zbyt
kosztowny, a jego wykonanie będzie realne pod względem czasu i ryzyka.
Koncepcje opisane w książce stanowią doskonały punkt wyjścia, gdyż
pozwalają sporządzić dobry projekt systemu oprogramowania oraz dobry
plan budowy tego systemu. Dopiero to umożliwi ukończenie pracy w
wyznaczonym terminie i bez przekroczenia założonego budżetu, a
wytworzony produkt będzie łatwy w utrzymaniu, możliwy do rozszerzania
oraz wielokrotnego użycia.
W książce między innymi:
- koncepcja projektowania
systemu i planowania projektu
- dekompozycja systemu, jego
struktura i łączenie komponentów
- narzędzia i techniki
potrzebne w planowaniu i projektowaniu
- mierzenie i wyliczanie
ryzyka projektu i jego wariantów
- zaawansowane techniki
projektowania systemów o wysokiej złożoności
Wstęp
19
Podziękowania 29
O autorze 31
Rozdział 1.
Metoda 35
Czym jest metoda? 36
Weryfikacja projektu 37
Presja czasu 38
Eliminowanie paraliżu analizy 39
Komunikacja 41
Czym metoda nie jest? 42
CZĘŚĆ I.
PROJEKT SYSTEMU
43
Rozdział 2.
Dekompozycja
45
Unikanie dekompozycji funkcjonalnej 46
Problemy dekompozycji funkcjonalnej 46
Wnioski o dekompozycji funkcjonalnej 52
Unikanie dekompozycji dziedziny 55
Błędna motywacja 57
Możliwości testowania i projekt 58
Przykład: system handlowy zaprojektowany funkcjonalnie 60
Dekompozycja w oparciu o niestabilność 63
Dekompozycja, utrzymanie i wdrażanie 65
Uniwersalna zasada 65
Dekompozycja w oparciu o niestabilność i testowanie 67
Wyzwanie niestabilności 67
Identyfikacja niestabilności 70
Niestabilny a zmienny 70
Osie niestabilności 70
Rozwiązania udające wymagania 74
Lista niestabilności 75
Przykład: system obrotu akcjami tworzony z użyciem dekompozycji w
oparciu o niestabilność 75
Nie ulegać syreniemu śpiewowi 81
Niestabilność a biznes 81
Projektowanie z myślą o konkurentach 84
Niestabilność i długowieczność 85
Znaczenie praktyki 86
Rozdział 3.
Struktura 89
Przypadki użycia i wymagania 90
Wymagane zachowania 90
Podejście warstwowe 93
Stosowanie usług 93
Typowe warstwy 94
Warstwa klienta 95
Warstwa logiki biznesowej 96
Warstwa dostępu do zasobów 98
Warstwa zasobu 99
Pasek narzędzi 99
Wskazówki dotyczące klasyfikacji 100
Co zawiera nazwa? 100
Cztery pytania 101
Proporcja menedżerów do silników 102
Kluczowe obserwacje 103
Podsystemy i usługi 105
Konstrukcja inkrementalna 105
O mikrousługach 107
Architektury otwarte i zamknięte 110
Architektura otwarta 110
Architektura zamknięta 111
Architektura półzamknięta/półotwarta 111
Rozluźnianie reguł 112
Czego należy unikać? 115
Dążenie do symetrii 117
Rozdział 4.
Kompozycja
119
Wymagania i zmiany 119
Awersja do zmian 120
Główne zalecenie programowe 120
Projekt umożliwiający kompozycję 121
Podstawowe przypadki użycia 121
Misja architekta 122
Brak możliwości 127
Obsługa zmian 128
Opanowanie zmian 129
Rozdział 5.
Przykład projektu systemu 131
Przegląd systemu 132
Stary system 133
Nowy system 135
Firma 135
Przypadki użycia 136
Wysiłki antyprojektowe 141
Monolit 142
Szczegółowe elementy konstrukcyjne 142
Dekompozycja na podstawie dziedziny 144
Zgodność z działalnością biznesową 146
Wizja 146
Cele biznesowe 147
Myśl przewodnia 148
Architektura 149
Słownik systemu TradeMe 149
Obszary niestabilności systemu TradeMe 150
Architektura statyczna 153
Koncepcje operacyjne 156
Menedżer toku pracy 159
Weryfikacja projektu 160
Przypadek użycia: dodanie fachowca/dewelopera 161
Przypadek użycia: żądanie wyboru fachowca 162
Przypadek użycia: dopasowanie fachowca 163
Przypadek użycia: przypisanie fachowca 166
Przypadek użycia: zakończenie pracy fachowca 169
Przypadek użycia: zapłata fachowcowi 170
Przypadek użycia: utworzenie projektu 171
Przypadek użycia: zamknięcie projektu 171
Co dalej? 173
CZĘŚĆ II.
PLAN PROJEKTU
175
Rozdział 6.
Motywacja 177
Do czego jest potrzebny plan projektu? 177
Plan projektu i zdrowy rozsądek 179
Instrukcja wykonania 179
Hierarchia potrzeb 180
Rozdział 7.
Przegląd planu projektu 183
Definiowanie sukcesu 183
Raportowanie sukcesu 184
Początkowa obsada projektu 185
Architekt, nie architekci 185
Podstawowy zespół 187
Mądre decyzje 190
Plany, a nie plan 190
Przegląd planu realizacji oprogramowania 191
Usługi i programiści 192
Projekt a wydajność zespołu 193
Ciągłość zadań 195
Szacowanie pracochłonności 196
Klasyczne błędy 197
Techniki szacowania 199
Ogólne szacunki projektu 201
Szacunki dotyczące czynności 204
Analiza ścieżki krytycznej 205
Sieć projektu 206
Ścieżka krytyczna 209
Przydzielanie zasobów 210
Określanie harmonogramu czynności 215
Dystrybucja obsady 216
Koszty projektu 223
Efektywność projektu 224
Planowanie wartości wypracowanej 226
Klasyczne błędy 228
Płytka krzywa S-kształtna 230
Role i odpowiedzialności 233
Rozdział 8.
Sieć i zapas 235
Diagram sieci 235
Diagram węzłów 236
Diagram strzałkowy 236
Diagramy strzałkowe a diagramy węzłów 237
Zapasy 240
Zapas całkowity 240
Zapas swobodny 241
Obliczanie zapasów 242
Wizualizacja zapasów 243
Planowanie w oparciu o zapasy 245
Zapas i ryzyko 247
Rozdział 9.
Czas
i koszty 249
Przyspieszanie projektów programistycznych 249
Skracanie harmonogramu 252
Stosowanie lepszych zasobów 253
Praca równoległa 253
Praca równoległa i koszty 255
Krzywa zależności czas-koszt 256
Punkty na krzywej zależności czas-koszt 257
Modelowanie dyskretne 259
Unikanie klasycznych błędów 260
Wykonalność projektu 261
Znajdowanie rozwiązania normalnego 263
Elementy kosztu projektu 265
Koszty bezpośrednie 265
Koszty pośrednie 266
Księgowanie a wartość 266
Koszt całkowity, koszty bezpośrednie i pośrednie 266
Skracanie i elementy kosztów 268
Obsada a elementy kosztów 272
Koszty stałe 273
Skracanie sieci 274
Przebieg skracania 275
Rozdział 10.
Ryzyko 277
Wybór wariantu 278
Krzywa zależności czas-ryzyko 278
Faktyczna krzywa zależności ryzyko-czas 280
Modelowanie ryzyka 281
Normalizacja ryzyka 281
Ryzyko a zapasy 282
Ryzyko i koszty bezpośrednie 283
Ryzyko krytyczności 283
Ryzyko Fibonacciego 286
Ryzyko czynności 288
Ryzyko krytyczności a ryzyko czynności 290
Skracanie a ryzyko 290
Ryzyko wykonania 291
Dekompresja ryzyka 292
Sposoby przeprowadzania dekompresji 292
Cel dekompresji 293
Metryki ryzyka 295
Rozdział 11.
Planowanie projektu w praktyce
297
Cel 298
Statyczna architektura 298
Łańcuchy wywołań 299
Lista czynności 302
Diagram sieci 303
Założenia do planu 305
Znajdowanie rozwiązania normalnego 307
Nieograniczone zasoby (iteracja 1.) 307
Problemy z siecią i zasobami 309
Najpierw infrastruktura (iteracja 2.) 309
Ograniczone zasoby 311
Zejście na poziom podkrytyczny (iteracja 7.) 315
Wybór rozwiązania normalnego 318
Skracanie sieci 319
Skracanie poprzez wykorzystanie lepszych zasobów 319
Wprowadzanie pracy równoległej 321
Koniec iteracji skracania 329
Analiza przepustowości 330
Analiza efektywności 332
Krzywa zależności czas-koszt 333
Modele korelacji zależności czas-koszt 333
Strefa śmierci 335
Planowanie i ryzyko 337
Dekompresja ryzyka 337
Ponowne wyznaczenie krzywej zależności czas-koszt 342
Modelowanie ryzyka 343
Włączanie i wykluczanie ryzyka 346
Przegląd PRO 347
Prezentacja wariantów 348
Rozdział 12.
Techniki zaawansowane 349
Boskie czynności 349
Postępowanie z boskimi czynnościami 350
Punkt przecięcia ryzyka 351
Wyznaczanie punktu przecięcia ryzyka 351
Znajdowanie celu dekompresji 355
Ryzyko geometryczne 357
Geometryczne ryzyko krytyczności 358
Geometryczne ryzyko Fibonacciego 359
Geometryczne ryzyko czynności 360
Zachowanie geometrycznego ryzyka czynności 360
Złożoność wykonania 363
Złożoność cyklomatyczna 363
Typ projektu i złożoność 364
Skracanie i złożoność 365
Bardzo duże projekty 367
Złożone systemy i wrażliwość 367
Sieć sieci 370
Tworzenie sieci sieci 371
Małe projekty 374
Planowanie w oparciu o warstwy 375
Zalety i wady 376
Warstwy i konstruowanie 377
Rozdział 13.
Przykład planowania
projektu 379
Szacunki 380
Szacunki poszczególnych czynności 380
Ogólne oszacowanie projektu 383
Zależności i sieć projektu 383
Zależności behawioralne 383
Zależności niebehawioralne 384
Nadpisywanie niektórych zależności 385
Sprawdzenie sensowności 386
Rozwiązanie normalne 386
Diagram sieci 387
Planowane postępy 388
Planowany rozkład obsady 388
Koszt i efektywność 389
Podsumowanie wyników 390
Rozwiązanie skrócone 390
Dodanie czynności umożliwiających skrócenie 390
Przydzielanie zasobów 392
Planowane postępy 392
Planowany rozkład obsady 392
Koszt i efektywność 394
Podsumowanie wyników 394
Planowanie w oparciu o warstwy 395
Planowanie w oparciu o warstwy i ryzyko 396
Rozkład obsady 396
Podsumowanie wyników 396
Rozwiązanie subkrytyczne 397
Czas realizacji, planowane postępy i ryzyko 397
Koszt i efektywność 398
Podsumowanie wyników 398
Porównanie wariantów 399
Planowanie i ryzyko 400
Dekompresja ryzyka 400
Przeliczenie kosztu 403
Przygotowanie przeglądu PRO 404
Rozdział 14.
Wnioski podsumowujące 407
Kiedy planować projekt? 407
Prawdziwa odpowiedź 408
Wybieganie w przód 409
Wskazówki ogólne 411
Architektura a szacunki 411
Podejście do planowania 412
Opcjonalność 412
Skracanie 413
Planowanie i ryzyko 416
Planowanie planu projektu 417
Z perspektywy 419
Podsystemy i oś czasu 420
Przekazanie 421
Przekazanie do młodszych programistów 422
Przekazanie do starszych programistów 422
Starsi programiści a młodsi programiści 423
W praktyce 424
Przeglądanie planów projektu 425
Kilka słów o jakości 427
Czynności związane z kontrolą jakości 428
Czynności związane z zapewnianiem jakości 429
Jakość i kultura 430
Dodatek A.
Śledzenie projektów 431
Cykl życia i stan czynności 432
Warunki zakończenia fazy 434
Waga fazy 435
Stan czynności 435
Stan projektu 437
Postęp i wartość wypracowana 437
Łączny wysiłek 438
Łączny koszt pośredni 439
Śledzenie postępu i wysiłku 439
Prognozowanie 440
Prognozy i czynności korekcyjne 443
Wszystko jest w porządku 443
Niedoszacowanie 444
Wyciek zasobów 446
Przeszacowanie 447
Więcej informacji o prognozach 448
Kwintesencja projektu 449
Postępowanie w przypadku zmian zakresu 449
Budowanie zaufania 450
Dodatek B.
Projektowanie
kontraktu usługi 451
Czy ten projekt jest dobry? 452
Modularność a koszt 453
Koszt na usługę 454
Koszt integracji 455
Obszar minimalnych kosztów 455
Usługi i kontrakty 456
Kontrakty i aspekty 456
Od projektu usługi do projektu kontraktu 457
Cechy dobrego kontraktu 457
Wyodrębnianie kontraktów 459
Przykład projektu 460
Wyodrębnianie w dół 460
Wyodrębnianie w bok 461
Wyodrębnianie w górę 463
Metryki projektów kontraktów 463
Pomiary kontraktów 464
Metryki wielkości 464
Unikanie właściwości 465
Ograniczanie liczby kontraktów 466
Stosowanie metryk 466
Wyzwanie projektowania kontraktów 467
Dodatek C.
Standardy
projektowania 469
Dyrektywa podstawowa 470
Dyrektywy 470
Wskazówki dotyczące projektowania systemu 470
Wytyczne planowania projektów 472
Wytyczne dotyczące śledzenia projektów 474
Wytyczne dotyczące projektowania kontraktów usług 474
480
stron, Format: 17.0x24.0cm, oprawa miękka