Nowoczesna inżynieria oprogramowania. Stosowanie skutecznych technik szybszego rozwoju oprogramowania wyższej jakości - ebook
Nowoczesna inżynieria oprogramowania. Stosowanie skutecznych technik szybszego rozwoju oprogramowania wyższej jakości - ebook
Hakowanie nie zawsze musi być złe. Terminem tym określa się również sprytne sposoby używania sprzętu czy oprogramowania do czegoś nowego. Z kolei etyczne hakowanie polega na zastosowaniu technik ataków do testowania systemu komputerowego, aby znaleźć jego słabe punkty, usunąć je i w ten sposób wzmocnić jego bezpieczeństwo. Opanowanie metod, jakimi posługują się cyberprzestępcy, pozwala zatem zrozumieć naturę zagrożeń w cyfrowym świecie i skutecznie się przed nimi bronić.
Dzięki tej książce przekonasz się, że typowe ataki hakerskie są bardzo łatwe do wykonania. Zaczniesz od przygotowania wirtualnego laboratorium, w którym bezpiecznie możesz wypróbowywać różnego rodzaju techniki, nie narażając przy tym nikogo na ryzyko. Następnie krok po kroku będziesz się uczyć przeprowadzać najważniejsze rodzaje ataku, w tym włamania z dostępem fizycznym, Google hacking, ataki phishingowe, socjotechniczne i za pomocą złośliwego oprogramowania, hakowanie stron internetowych, łamanie haseł, wreszcie włamania do telefonów i samochodów. Dowiesz się, jak prowadzić rekonesans. Przyjrzysz się cyberatakom z punktu widzenia zarówno napastnika, jak i ofiary. Co najważniejsze, wszystkie techniki zostały przedstawione na bazie rzeczywistych przykładów i opatrzone praktycznymi wskazówkami dotyczącymi obrony. W efekcie nie tylko zrozumiesz zasady ataku, ale także poznasz sposoby, jak się ustrzec przed hakerami.
Naucz się hakować, by skutecznie chronić się przed cyberatakami:
- Przećwicz techniki hakerskie w bezpiecznym, wirtualnym środowisku
- Opanuj obsługę takich narzędzi jak Kali Linux, Metasploit i John the Ripper
- Dowiedz się, na czym polega infekowanie urządzenia złośliwym oprogramowaniem
- Poznaj metody phishingu: wykradanie i łamanie hasła, wyłudzanie poufnych informacji
- Naucz się odzyskiwać dostęp do plików na urządzeniach bez podawania hasła
Hakowanie? Jest prostsze, niż myślisz!
Spis treści
Spis treści
Przedmowa
Wstęp
Podziękowania
O autorze
Część I. Czym jest inżynieria oprogramowania?
- Rozdział 1. Wprowadzenie
- Inżynieria - praktyczne zastosowanie nauki
- Czym jest inżynieria oprogramowania?
- Przywracanie "inżynierii" w "inżynierii oprogramowania"
- Jak robić postępy?
- Narodziny inżynierii oprogramowania
- Zmiana paradygmatu
- Podsumowanie
- Rozdział 2. Czym jest inżynieria?
- To nie produkcja jest naszym problemem
- Inżynieria projektowa zamiast inżynierii produkcyjnej
- Robocza definicja inżynierii
- Inżynieria != kod
- Dlaczego inżynieria jest ważna?
- Ograniczenia rzemiosła
- Precyzja i skalowalność
- Radzenie sobie ze złożonością
- Powtarzalność i precyzja pomiarów
- Inżynieria, kreatywność i rzemiosło
- Dlaczego to, co robimy, nie jest inżynierią oprogramowania
- Kompromisy
- Iluzja postępu
- Droga od rzemiosła do inżynierii
- Rzemiosło to za mało
- Czas na zmianę perspektywy?
- Podsumowanie
- Rozdział 3. Podstawy podejścia inżynieryjnego
- Branża zmian?
- Znaczenie pomiarów
- Wprowadzanie stabilności i wydajności
- Podstawy inżynierii oprogramowania
- Eksperci od uczenia się
- Eksperci od radzenia sobie ze złożonością
- Podsumowanie
Część II. Optymalizacja z myślą o uczeniu się
- Rozdział 4. Praca w modelu iteracyjnym
- Praktyczne zalety podejścia iteracyjnego
- Podejście iteracyjne jako strategia projektowania defensywnego
- Pokusa tworzenia planu
- Praktyczne aspekty podejścia iteracyjnego
- Podsumowanie
- Rozdział 5. Informacje zwrotne
- Praktyczny przykład ilustrujący znaczenie informacji zwrotnych
- Informacje zwrotne w czasie pisania kodu
- Informacje zwrotne na etapie integracji
- Informacje zwrotne na etapie projektowania
- Informacje zwrotne w architekturze
- Preferuj szybkie informacje zwrotne
- Informacje zwrotne w kontekście projektu produktu
- Informacje zwrotne w organizacji i kulturze
- Podsumowanie
- Rozdział 6. Podejście przyrostowe
- Znaczenie modułowości
- Podejście przyrostowe w organizacjach
- Narzędzia ułatwiające przyrostową pracę
- Ograniczanie zakresu wpływu zmian
- Projektowanie przyrostowe
- Podsumowanie
- Rozdział 7. Podejście empiryczne
- Zakorzenienie w rzeczywistości
- Oddzielenie podejścia empirycznego od eksperymentów
- "Znam ten błąd!"
- Unikanie oszukiwania samego siebie
- Wymyślanie rzeczywistości pasującej do argumentów
- Kierowanie się rzeczywistością
- Podsumowanie
- Rozdział 8. Nastawienie na eksperymentowanie
- Czym jest "nastawienie na eksperymentowanie"?
- Informacje zwrotne
- Hipotezy
- Pomiary
- Kontrolowanie zmiennych
- Zautomatyzowane testy jako eksperymenty
- Zapewnianie kontekstu dla wyników testów przeprowadzanych w ramach eksperymentów
- Zakres eksperymentów
- Podsumowanie
Część III. Optymalizowanie z myślą o radzeniu sobie ze złożonością
- Rozdział 9. Modułowość
- Cechy charakterystyczne modułowości
- Niedocenianie znaczenia dobrego projektu
- Znaczenie testowalności
- Projektowanie z myślą o łatwości testowania poprawia modułowość
- Usługi i modułowość
- Łatwość wdrażania a modułowość
- Modułowość w różnych skalach
- Modułowość w systemach ludzkich
- Podsumowanie
- Rozdział 10. Spójność
- Modułowość i spójność - podstawy projektowania
- Prosty przykład niskiej spójności
- Kontekst ma znaczenie
- Wysoce wydajne oprogramowanie
- Związki z powiązaniami
- Zapewnianie wysokiej spójności za pomocą programowania sterowanego testami
- Jak uzyskać spójne oprogramowanie?
- Koszty niskiej spójności
- Spójność w systemach ludzkich
- Podsumowanie
- Rozdział 11. Podział zadań
- Wstrzykiwanie zależności
- Oddzielanie złożoności zasadniczej od złożoności przypadkowej
- Znaczenie podejścia DDD
- Testowalność
- Porty i adaptery
- Kiedy stosować wzorzec porty i adaptery?
- Czym jest API?
- Stosowanie programowania sterowanego testami do wprowadzania podziału zadań
- Podsumowanie
- Rozdział 12. Ukrywanie informacji i abstrakcja
- Abstrakcja lub ukrywanie informacji
- Co jest powodem powstawania "wielkiej błotnej bryły"?
- Problemy organizacyjne i kulturowe
- Problemy techniczne i problemy projektowe
- Obawy przed "nadinżynierią"
- Tworzenie bardziej abstrakcyjnego kodu za pomocą testów
- Wartość abstrakcji
- "Dziurawe" abstrakcje
- Wybór odpowiednich abstrakcji
- Abstrakcje z dziedziny problemu
- Wyodrębnianie złożoności przypadkowej za pomocą abstrakcji
- Izolowanie zewnętrznych systemów i zewnętrznego kodu
- Zawsze preferuj ukrywanie informacji
- Podsumowanie
- Rozdział 13. Radzenie sobie z powiązaniami
- Koszty powiązań
- Skalowanie
- Mikrousługi
- Wyeliminowanie powiązań może prowadzić do większej ilości kodu
- Luźne powiązanie nie jest jedynym, które ma znaczenie
- Preferuj luźne powiązania
- W czym powiązania różnią się od podziału zadań?
- Zasada DRY jest zbyt uproszczona
- Asynchroniczność jako narzędzie do uzyskiwania luźnych powiązań
- Projektowanie z myślą o luźnych powiązaniach
- Luźne powiązania w systemach ludzkich
- Podsumowanie
Część IV. Narzędzia ułatwiające inżynierię w branży oprogramowania
- Rozdział 14. Narzędzia w dziedzinie inżynierii
- Czym jest rozwój oprogramowania?
- Testowalność jako narzędzie
- Punkty pomiaru
- Problemy z osiąganiem testowalności
- Jak zwiększyć testowalność?
- Łatwość wdrażania
- Szybkość
- Kontrolowanie zmiennych
- Ciągłe dostarczanie
- Ogólne narzędzia wspomagające inżynierię
- Podsumowanie
- Rozdział 15. Współczesny inżynier oprogramowania
- Inżynieria jako proces ludzki
- Organizacje dokonujące przełomu w świecie cyfrowym
- Skutki a mechanizmy
- Trwałe i uniwersalne
- Podstawy inżynierii
- Podsumowanie
Kategoria: | Zarządzanie i marketing |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-8322-595-1 |
Rozmiar pliku: | 3,6 MB |