Szczegóły ebooka

Programuj tak, aby nie naprawiać. Planowanie projektów i systemów

Programuj tak, aby nie naprawiać. Planowanie projektów i systemów

Juval Löwy

Ebook

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

Mistrz w projektowaniu oprogramowania rozważa bardzo niewiele opcji!


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
  • Tytuł: Programuj tak, aby nie naprawiać. Planowanie projektów i systemów
  • Autor: Juval Löwy
  • Tytuł oryginału: Righting Software
  • Tłumaczenie: Piotr Rajca
  • ISBN: 978-83-283-6794-4, 9788328367944
  • Data wydania: 2020-12-08
  • Format: Ebook
  • Identyfikator pozycji: protak
  • Wydawca: Helion