Używamy cookies, aby ułatwić korzystanie z Portalu. Możesz określić warunki przechowywania, dostępu do plików cookies w Twojej przeglądarce. Dowiedz się więcej.
strona główna Strona główna | Nowości | Promocje | Zapowiedzi Twoje konto | Zarejestruj | Schowek | Kontakt | Pomoc
mapa działów
Szukaj: szukanie zaawansowane
Koszyk
Książki \ Programowanie \ JAVA

Ciągłe dostarczanie oprogramowania w języku Java. Najlepsze narzędzia i praktyki wdrażania kodu Język: 1

978-83-283-5633-7

Cena Brutto: 69.00

Cena netto: 65.71

Ilość:
Wersja: Drukowana
Autor Daniel Bryant, Abraham Marín-Pérez
Liczba_stron 400
Wydawnictwo Helion
Oprawa miękka
Data_Wydania 2019-10-01
Ciągłe dostarczanie oprogramowania w języku Java. Najlepsze narzędzia i praktyki wdrażania kodu

W ciągu ostatnich lat radykalnie zmieniły się wymagania i oczekiwania biznesowe wobec oprogramowania. Kluczowymi wartościami są innowacyjność, szybkość i czas wejścia na rynek. Do spełnienia tych wymagań konieczne okazały się nowe architektury i modele tworzenia kodu. Metodyka ciągłego dostarczania, zwanego też CD, polega na tworzeniu w krótkich cyklach wartościowych i solidnych produktów. Funkcjonalności są dodawane w małych krokach, a oprogramowanie można wydawać niezawodnie w dowolnej chwili. To sprawia, że można też szybko otrzymywać informacje zwrotne. Jednak taki sposób pracy wymaga odpowiednich ram organizacyjnych, a zespół projektowy musi przyswoić nieco inny od tradycyjnego styl pracy.


Ta książka jest praktycznym przewodnikiem, dzięki któremu programiści Javy opanują techniki potrzebne do pomyślnego zastosowania metody ciągłego dostarczania. Opisano tu najlepsze zasady budowy architektury oprogramowania, automatycznej kontroli jakości, pakowania aplikacji i wdrażania ich w różnych środowiskach produkcyjnych. Szczególną uwagę poświęcono testowaniu oprogramowania: przedstawiono całą gamę metodyk testowania, opisano ich zastosowanie i znaczenie w cyklu życia aplikacji. Ciekawym elementem książki są informacje o złych praktykach i antywzorcach wraz ze wskazówkami dotyczącymi rozwiązywania tego rodzaju problemów.


W tej książce między innymi:

  • solidne podstawy ciągłego dostarczania oprogramowania
  • migracja do ciągłego dostarczania oprogramowania
  • narzędzia: Jenkins, PMD i FindSecBugs
  • zasady testowania funkcjonalności i jakości oprogramowania
  • techniki obserwacji aplikacji w środowisku produkcyjnym
    • Słowa wstępne
    • Wstęp
      • Dlaczego napisaliśmy tę książkę?
      • Dlaczego powinieneś przeczytać tę książkę?
      • Czym nie jest ta książka?
      • Konwencje typograficzne
      • Przykłady kodów
      • Podziękowania
    • Rozdział 1. Ciągłe dostarczanie? Dlaczego? Czym jest?
      • Ogólny zarys
      • Dlaczego? Bo daje możliwości programistom
        • Szybka informacja zwrotna pozwala ograniczyć zmiany kontekstu
        • Automatyczne, powtarzalne i niezawodne wydania
        • Uściślenie definicji ukończenia
      • Czym jest? Badamy typowy potok budowy
        • Podstawowe etapy potoku budowy
          • Lokalne projektowanie
          • Zatwierdzanie
          • Ciągła integracja
          • Testy akceptacyjne
          • Testy akceptacji użytkownika
          • Środowisko przedprodukcyjne
          • Produkcja
          • Wgląd i utrzymanie
        • Wpływ technologii kontenerów
        • Zmiany we współczesnych architekturach
      • Podsumowanie
    • Rozdział 2. Ewolucja programowania w języku Java
      • Wymagania współczesnych aplikacji Java
        • Potrzeba szybkości i stabilności biznesowej
        • Rozwój ekonomii interfejsów API
        • Szanse i koszty chmury
        • Przywrócenie modularności: wykorzystanie niewielkich usług
        • Wpływ na ciągłe dostarczanie
      • Ewolucja platform wdrożeniowych w języku Java
        • Archiwa WAR i EAR: era dominacji serwerów aplikacji
        • Wykonywalne pliki JAR z zależnościami: powstanie metodologii dwunastu aspektów
        • Obrazy kontenerów: ulepszenie przenośności (i zwiększenie złożoności)
        • Funkcja jako usługa: pojawienie się przetwarzania bezserwerowego
        • Wpływ platform na ciągłe dostarczanie
      • Metodyki DevOps, SRE oraz Release Engineering
        • Rozwój i utrzymanie
        • Site Reliability Engineering
        • Inżynieria wydawnicza oprogramowania
        • Współodpowiedzialność, metryki i wgląd
      • Podsumowanie
    • Rozdział 3. Projektowanie architektury pod kątem ciągłego dostarczania
      • Fundamenty dobrej architektury
        • Luźne sprzężenie
        • Wysoka spójność
        • Sprzężenie, spójność i ciągłe dostarczanie
      • Architektura nakierowana na elastyczność biznesową
        • Zła architektura ogranicza dynamikę biznesową
        • Złożoność i koszt zmian
      • Najlepsze rozwiązania dla aplikacji zorientowanych na API
        • Tworzenie interfejsów API metodą od zewnątrz do wewnątrz
        • Dobre interfejsy API pomagają w ciągłym testowaniu i dostarczaniu
      • Platformy wdrażania a architektura
        • Projektowanie aplikacji natywnych dla chmury według metodologii 12 aspektów
        • Doskonalenie wyczucia mechaniki
        • Projektowanie i ciągłe testowanie pod kątem awarii
      • Podążanie w kierunku niewielkich usług
        • Wyzwania w dostarczaniu aplikacji monolitycznych
          • Skalowanie prac rozwojowych
          • Różna częstość zmian: możliwość niezależnego wdrażania
          • Skalowalność i elastyczność podsystemów
        • Mikrousługi: architektura zorientowana na usługi spotyka się z projektowaniem dziedzinowym
        • Funkcje, architektura Lambda i nanousługi
      • Architektura: wszystko to, co trudno zmienić
      • Podsumowanie
    • Rozdział 4. Platformy wdrożeniowe, infrastruktura i ciągłe dostarczanie aplikacji Java
      • Funkcje zapewniane przez platformę
      • Niezbędne procesy programistyczne
      • Platformy oparte o tradycyjną infrastrukturę
        • Komponenty tradycyjnej platformy
        • Wyzwania platform opartych o tradycyjną infrastrukturę
        • Korzyści z bycia tradycyjnym
        • Ciągła integracja i dostarczanie na platformach opartych o tradycyjną infrastrukturę
      • Platforma chmury (IaaS)
        • Zaglądamy w chmurę
        • Wyzwania chmury
        • Korzyści z chmury
        • Ciągłe dostarczanie w chmurze
      • Platforma jako usługa
        • Zaglądamy w usługę PaaS
        • Wyzwania platformy PaaS
        • Korzyści z platformy PaaS
        • Ciągła integracja i dostarczanie a model PaaS
      • Kontenery (Docker)
        • Komponenty platformy kontenerów
        • Wyzwania technologii kontenerów
        • Korzyści z kontenerów
        • Ciągłe dostarczanie kontenerów
      • Kubernetes
        • Podstawowe koncepcje platformy Kubernetes
        • Wyzwania platformy Kubernetes
        • Korzyści z platformy Kubernetes
        • Ciągłe dostarczanie na platformie Kubernetes
      • Funkcja jako usługa (funkcje bezserwerowe)
        • Koncepcje platformy FaaS
        • Wyzwania platformy FaaS
        • Korzyści z platformy FaaS
        • Ciągła integracja i dostarczanie a model FaaS
      • Praca z infrastrukturą jako kodem
      • Podsumowanie
    • Rozdział 5. Budowanie aplikacji w języku Java
      • Podział procesu budowania
      • Automatyzacja budowania
        • Zależności budowania
        • Zależności zewnętrzne
        • Projekty wielomodułowe
        • Wiele repozytoriów (czy jedno)?
        • Wtyczki
        • Wydawanie i publikacja artefaktów
      • Przegląd narzędzi do budowania kodu Java
        • Ant
          • Instalacja
          • Przykład budowania
          • Wydawanie i publikowanie
        • Maven
          • Instalacja
          • Przykład budowania
          • Wydawanie i publikowanie
        • Gradle
          • Instalacja
          • Przykład budowania
          • Wydawanie i publikowanie
        • Bazel, Pants i Buck
        • Inne narzędzia do budowania oparte o JVM: SBT i Leiningen
        • Make
      • Wybór narzędzia do budowania
      • Podsumowanie
    • Rozdział 6. Dodatkowe narzędzia i umiejętności wykorzystywane do budowania aplikacji
      • Polecenia Linuksa, powłoki Bash i podstawowego interfejsu wiersza poleceń
        • Użytkownicy, uprawnienia i grupy
          • Użytkownicy i uprawnienia
          • Polecenie sudo superuser do
          • Praca z grupami
        • Praca z systemem plików
          • Poruszanie się po katalogach
          • Tworzenie plików i manipulowanie nimi
        • Przeglądanie i edycja tekstu
        • Wszystko razem: przekierowania, potoki i filtry
        • Wyszukiwanie tekstu i manipulowanie nim: grep, awk i sed
        • Narzędzia diagnostyczne: top, ps, netstat i iostat
      • Wywołania HTTP i manipulacja danymi JSON
        • Narzędzie curl
        • Narzędzie HTTPie
        • Narzędzie jq
      • Podstawy pisania skryptów
        • Narzędzie xargs
        • Potoki i filtry
        • Pętle
        • Warunki
      • Podsumowanie
    • Rozdział 7. Pakowanie aplikacji do wdrożenia
      • Budowanie archiwum JAR krok po kroku
      • Budowanie wykonywalnego fat JAR (uber JAR)
        • Wtyczka Maven Shade
        • Budowanie plików uber JAR przy użyciu projektu Spring Boot
      • Skinny JAR gdy zdecydujesz się nie budować plików uber JAR
      • Budowanie plików WAR
      • Pakowanie dla chmury
        • Gotowanie konfiguracji: wypiekanie lub smażenie maszyn
        • Budowanie pakietów RPM i DEB systemu operacyjnego
        • Dodatkowe narzędzia kompilowania pakietów systemu operacyjnego (z obsługą systemu Windows)
        • Tworzenie obrazów maszyn dla wielu chmur za pomocą programu Packer
        • Dodatkowe narzędzia do tworzenia obrazów maszyn
      • Budowanie kontenerów
        • Tworzenie obrazów kontenerów za pomocą narzędzia Docker
        • Fabrykowanie obrazów Docker za pomocą fabric8
      • Pakowanie aplikacji Java FaaS
      • Podsumowanie
    • Rozdział 8. Praca w lokalnym odpowiedniku środowiska produkcyjnego
      • Wyzwania związane z lokalnym tworzeniem oprogramowania
      • Imitacje, atrapy i wirtualizacja usług
        • Wzorzec 1.: profile, imitacje i atrapy
        • Imitowanie usług za pomocą biblioteki Mockito
          • Weryfikowanie interakcji
          • Tworzenie atrap metod
        • Wzorzec 2.: wirtualizacja usług i symulacja interfejsu API
        • Wirtualizacja usług za pomocą narzędzia Hoverfly
          • Instalacja narzędzia Hoverfly
          • Rejestrowanie i symulowanie zapytań za pomocą narzędzia Hoverfly
      • Maszyny wirtualne oraz narzędzia Vagrant i Packer
        • Instalacja narzędzia Vagrant
        • Utworzenie pliku Vagrantfile
        • Wzorzec 3.: pudełkowe środowisko produkcyjne
      • Kontenery: Kubernetes, minikube i Telepresence
        • Przykładowa aplikacja Docker Java Shop
        • Tworzenie aplikacji Java i obrazów kontenerów
        • Wdrożenie kontenera na platformie Kubernetes
        • Prosty test usługi
        • Utworzenie pozostałych usług
        • Wdrożenie całej usługi Java na platformie Kubernetes
        • Kontrola wdrożonej aplikacji
        • Telepresence: praca zdalna i lokalna
        • Wzorzec 4.: dzierżawa środowiska
      • Funkcja jako usługa: AWS Lambda i SAM Local
        • Instalacja narzędzia SAM Local
        • Tworzenie funkcji AWS Lambda
        • Testowanie obsługi zdarzeń za pomocą funkcji AWS Lambda
        • Testowanie funkcji za pomocą narzędzia SAM Local
      • FaaS: usługa Azure Functions i edytor Visual Studio Code
        • Instalacja najważniejszych komponentów Azure Functions
        • Lokalne kompilowanie i testowanie funkcji
        • Testowanie lokalnych i zewnętrznych funkcji za pomocą edytora Visual Studio Code
      • Podsumowanie
    • Rozdział 9. Ciągła integracja: pierwsze kroki w tworzeniu procesu kompilacji kodu
      • Co to jest ciągła integracja oprogramowania?
      • Implementacja ciągłej integracji oprogramowania
      • Centralny i rozproszony system kontroli wersji
      • Przewodnik po systemie Git
        • Najważniejsze polecenia systemu Git
          • Inicjacja i obsługa repozytorium (historii wersji)
          • Odgałęzianie i konsolidowanie kodu
        • Hub: podstawowe narzędzie w systemach Git i GitHub
      • Efektywne korzystanie z systemu DVCS
        • Programowanie pniowe
        • Odgałęzienia funkcjonalne
        • Gitflow
        • Nie ma recepty na wszystko, czyli jak wybrać odpowiednią strategię odgałęziania
      • Przeglądanie kodu
        • Cele przeglądania kodu
          • Czytelność kodu
          • Wykorzystanie cech języka
          • Bezpieczeństwo
          • Wydajność
        • Automatyzacja przeglądu kodu: analizatory PMD, Checkstyle i FindBugs
          • PMD: statyczny analizator kodu
          • Checkstyle: dobre standardy kodowania
          • FindBugs: statyczne wykrywanie błędów
        • Przeglądanie wniosków o zmiany
      • Automatyzacja kompilacji
        • Jenkins
      • Zaangażowanie zespołu
        • Regularne konsolidowanie kodu
        • Zatrzymać produkcję!, czyli obsługa nieudanych kompilacji
        • Nie ignoruj testów
        • Kompilacja musi być szybka
      • Ciągła integracja platformy (infrastruktura jako kod)
      • Podsumowanie
    • Rozdział 10. Proces wdrażania i wydawania oprogramowania
      • Wprowadzenie do aplikacji Extended Java Shop
      • Rozdzielenie wdrożenia i wydania aplikacji
      • Wdrażanie aplikacji
        • Utworzenie obrazu kontenera
          • Instalacja wtyczki
          • Skonfigurowanie poświadczeń do systemu Docker Hub
          • Kompilowanie i publikowanie obrazów
        • Mechanizm wdrażania
          • Przykład: wtyczka dla platformy Kubernetes
            • Instalacja wtyczki
            • Przygotowanie plików konfiguracyjnych
            • Rejestracja poświadczeń Kubernetes
            • Zdefiniowanie usług
            • Zdefiniowanie zadania wdrożeniowego
          • Przykład z wierszem poleceń: Amazon ECS
            • Instalacja i konfiguracja wiersza poleceń
            • Pojęcia stosowanie w usłudze Amazon ECS
            • Utworzenie zadań, wdrożenie usług
        • Wszystko zaczyna się (i kończy) na kontroli stanu
          • Kontrola stanu za pomocą ścieżek
          • Korzystanie ze ścieżek kontroli stanu
        • Strategie wdrożeniowe
          • Strategia jeden cel
          • Strategia wszystko na raz
          • Strategia minimum usług
          • Strategia wtaczanie
          • Strategia niebieskie/zielone
          • Strategia kanarek
          • Jaką strategię wybrać?
        • Praca z niezarządzanymi klastrami
          • Podstawowa strategia
            • Wdrożenie pojedynczej instancji
            • Wyłączenie pojedynczej instancji
            • Przekierowanie zapytań
        • Modyfikacje baz danych
          • Zarządzanie wdrożeniem bazy danych
          • Rozdzielenie wdrożenia bazy danych i aplikacji
          • Komunikacja oparta na procedurach składowanych, czyli baza danych jako osobna usługa
      • Wydawanie funkcjonalności
        • Flagi funkcjonalności
        • Wersjonowanie semantyczne
        • Kompatybilność wsteczna i wersje interfejsu API
          • Unikaj wersjonowania
          • Wersjonowanie ścieżki
          • Wersjonowanie treści
          • Zaawansowane zarządzanie zmianami
        • Wielofazowe aktualizacje
          • Wycofanie starej wersji interfejsu API
      • Zarządzanie konfiguracją i poufnymi danymi
        • Zaprasowana konfiguracja
        • Zewnętrzna konfiguracja
        • Przetwarzanie poufnych danych
      • Podsumowanie
    • Rozdział 11. Testy funkcjonalne: sprawdzenie poprawności i akceptacja oprogramowania
      • Po co testować oprogramowanie?
      • Co testować? Wprowadzenie do kwadrantów zwinnego testowania
      • Ciągłe testowanie oprogramowania
        • Utworzenie odpowiedniej pętli zwrotnej
      • Żółwie są wszędzie, aż po sam koniec
      • Transakcje syntetyczne
      • Testy kompleksowe
      • Testy akceptacyjne
        • Programowanie zorientowane na działanie
          • Definiowanie kroków
          • Symulowanie akcji użytkownika
          • Testowanie oprogramowania, tak jak na urządzeniu użytkownika
        • Imitowanie i wirtualizowanie zewnętrznych usług
        • Wszystko razem
      • Testy kontraktów klienckich
        • Kontrakty REST API
          • Najpierw kontrakt, potem interakcja
          • Najpierw interakcja, potem kontrakt
        • Kontrakty komunikatów
          • Testy kontraktów na poziomie protokołu
          • Testy kontraktów na poziomie serializacji
      • Testy komponentów
        • Wbudowane magazyny danych
        • Kolejki komunikatów umieszczane w pamięci
        • Dublerzy testowi
        • Tworzenie wewnętrznych zasobów lub interfejsów
        • Testy wewnątrz- i zewnątrzprocesowe
      • Testy integracyjne
        • Weryfikowanie zewnętrznych interakcji
        • Testy odporności na błędy
      • Testy jednostkowe
        • Towarzyskie testy jednostkowe
        • Samotne testy jednostkowe
      • Niestabilne testy
        • Dane
        • Tymczasowo niedostępne zasoby
        • Niedeterministyczne zdarzenia
        • Gdy nic nie można zrobić
      • Testy do wewnątrz i na zewnątrz
        • Testy do wewnątrz
        • Testy na zewnątrz
          • Przydatne materiały (szczególnie do testów aplikacji Java)
      • Zebranie wszystkiego w jeden proces
      • Jak dużo testów trzeba wykonać?
      • Podsumowanie
    • Rozdział 12. Testy jakościowe systemu: weryfikacja wymagań niefunkcjonalnych
      • Po co testować wymagania niefunkcjonalne?
      • Jakość kodu
      • Jakość architektury
        • ArchUnit: testy jednostkowe architektury
        • Wyliczanie wskaźników jakościowych projektu za pomocą biblioteki JDepend
      • Testy wydajnościowe i obciążeniowe
        • Testowanie wydajności przy użyciu Apache Benchmark
        • Testy obciążeniowe z użyciem narzędzia Gatling
      • Bezpieczeństwo, podatności i zagrożenia
        • Weryfikacja bezpieczeństwa na poziomie kodu
        • Weryfikacja zależności
        • Luki w bezpieczeństwie platform wdrożeniowych
          • Bezpieczeństwo w chmurze
          • Bezpieczeństwo kontenerów
          • Bezpieczeństwo usług FaaS i usług bezserwerowych
        • Kolejny krok: modelowanie zagrożeń
          • Dekompozycja aplikacji
          • Określenie stopnia zagrożenia
          • Środki zaradcze i minimalizacja zagrożenia
      • Testowy chaos
        • Wywoływanie chaosu w środowisku produkcyjnym
          • Chaos w chmurze
          • Chaos w kontenerach
          • Chaos w usługach FaaS i usługach bezserwerowych
        • Wywoływanie chaosu w środowisku przedprodukcyjnym
      • Jak dużo testów wymagań niefunkcjonalnych trzeba wykonać?
      • Podsumowanie
    • Rozdział 13. Obserwowalność aplikacji: monitorowanie, logowanie 1i śledzenie
      • Obserwowalność i ciągłe dostarczanie oprogramowania
        • Po co obserwować aplikację?
        • Obiekty obserwacji: aplikacja, sieć, serwer
        • Metody obserwacji: monitorowanie, logowanie i śledzenie
        • Alarmy
      • Projektowanie obserwowalnych systemów
      • Wskaźniki
        • Rodzaje wskaźników
        • Dropwizard Metrics
          • Konfigurowanie wskaźników i metadanych
          • Implementacja wskaźnika wartości
        • Spring Boot Actuator
          • Tworzenie licznika
        • Micrometer
          • Tworzenie czasomierza
        • Dobre praktyki tworzenia wskaźników
      • Logowanie
        • Formaty logów
        • SLF4J
        • Log4j 2
        • Dobre praktyki logowania
      • Śledzenie zapytań
        • Ślady, przęsła i bagaże
        • Śledzenie aplikacji Java: OpenZipkin, Spring Cloud Sleuth i OpenCensus
        • Dobre praktyki śledzenia systemów
      • Śledzenie wyjątków
        • Airbrake
      • Narzędzia do monitorowania systemu
        • collectd
        • rsyslog
        • Sensu
      • Zbieranie i zapisywanie danych
        • Prometheus
        • Elastic-Logstash-Kibana
      • Wizualizacja danych
        • Wizualizacja dla biznesu
        • Wizualizacja dla administratorów
        • Wizualizacja dla programistów
      • Podsumowanie
    • Rozdział 14. Migracja do ciągłego dostarczania
      • Czynniki ciągłego dostarczania
      • Wybór projektu migracji
      • Świadomość sytuacyjna
        • Framework Cynefin i ciągłe dostarczanie
          • Domena prosta
          • Domena skomplikowana
          • Domena złożona
          • Domena chaotyczna
          • Nieporządek
        • Wszystkie modele są złe, ale niektóre są przydatne
      • Wstępne organizowanie ciągłego dostarczania
      • Pomiar ciągłego dostarczania
      • Zacznij od niewielkich rzeczy, eksperymentuj, ucz się, udostępniaj i powtarzaj
      • Szersze wdrożenie: kierowanie wprowadzaniem zmian
      • Dodatkowe porady i wskazówki
        • Złe praktyki i typowe antywzorce
        • Brzydka architektura: naprawiać czy nie naprawiać
          • Każdy użytkownik końcowy (klient) ma oddzielną bazę kodu i bazę danych
          • Brak dobrze zdefiniowanego interfejsu między aplikacją a zewnętrznymi integracjami
          • Infrastruktura zapewnia pojedynczy punkt integracji (oraz powiązania i awarie)
          • Aplikacja jest udekorowaniem frameworków i zawiera (zbyt) wiele frameworków aplikacji lub oprogramowania pośredniczącego
      • Podsumowanie
    • Rozdział 15. Ciągłe dostarczanie i ciągłe doskonalenie
      • Zacznij od punktu, w którym jesteś
      • Opieraj się na solidnych podstawach technicznych
      • Ciągłe dostarczanie wartości (Twój najwyższy priorytet)
      • Zwiększenie współodpowiedzialności za oprogramowanie
      • Promuj szybką informację zwrotną i eksperymentowanie
      • Rozwijaj ciągłe dostarczanie w organizacji
      • Ciągłe doskonalenie
      • Podsumowanie
      • O autorach
      • Kolofon
powrót
 
Produkty Podobne
Java. Podstawy. Wydanie XI
Programowanie w języku Kotlin. The Big Nerd Ranch Guide
Ciągłe dostarczanie oprogramowania w języku Java. Najlepsze narzędzia i praktyki wdrażania kodu
Java dla zupełnie początkujących. Owoce programowania. Wydanie VII
Algorytmy, struktury danych i techniki programowania dla programistów Java
Java EE 8. Wzorce projektowe i najlepsze praktyki
Struktury danych i algorytmy w języku Java. Przewodnik dla początkujących
Modularny JavaScript dla zaawansowanych
Core Java, Volume II--Advanced Features, 11th Edition
Java. Kompendium programisty. Wydanie X
Więcej produktów