Var Flashcards
Pytanie: Co to jest TDD i jakie są jego główne zalety?
Odpowiedź: TDD, czyli Test-Driven Development, to technika programowania, w której najpierw pisze się testy, a następnie kod, który je spełnia. Główne zalety to lepsza jakość kodu, mniejsza liczba błędów i łatwość refaktoryzacji.
Pytanie: Jakie są trzy główne etapy TDD?
Odpowiedź: Trzy główne etapy TDD to: Czerwony (pisanie testu, który nie przechodzi), Zielony (pisanie minimalnego kodu, aby test przeszedł) i Refaktoryzacja (ulepszanie kodu bez zmiany jego zachowania).
Pytanie: Co to jest DDD i dlaczego jest ważne?
Odpowiedź: DDD, czyli Domain-Driven Design, to podejście do projektowania oprogramowania skoncentrowane na dziedzinie problemu. Pomaga w tworzeniu modelu, który odzwierciedla rzeczywistość biznesową i ułatwia komunikację między programistami a ekspertami biznesowymi.
Pytanie: Co to jest agregat w kontekście DDD?
Odpowiedź: Agregat to skupienie powiązanych obiektów traktowanych jako jednostka dla celów zmian danych. Posiada korzeń agregatu, który jest jedynym punktem dostępu do zarządzania agregatem.
Agregat w kontekście DDD (Domain-Driven Design) odnosi się do wzorca projektowego stosowanego w modelowaniu oprogramowania. Oto kilka kluczowych punktów na temat agregatów w DDD:
- Granice: Agregat jest zbiorem obiektów domenowych, które traktowane są jako jedna jednostka dla celów operacji na danych. Agregat ma jasno określone granice, co oznacza, że operacje na jednym agregacie nie wpłyną bezpośrednio na inny agregat.
- Korzeń Agregatu: Każdy agregat ma korzeń agregatu, który jest jedynym obiektem w agregacie dostępnym dla obiektów poza agregatem. Wszystkie operacje na agregacie muszą przechodzić przez korzeń agregatu.
- Spójność: Jednym z głównych celów agregatu jest zapewnienie spójności biznesowej. Oznacza to, że wszelkie operacje wewnątrz agregatu muszą pozostawiać go w spójnym stanie.
- Trwałość: Zazwyczaj korzeń agregatu jest jednostką trwałości, co oznacza, że jest on zapisywany i odczytywany z bazy danych jako jedna jednostka.
- Nieprzezroczystość: Wewnętrzne detale agregatu są ukryte dla innych obiektów. Inne obiekty komunikują się z agregatem tylko za pośrednictwem korzenia agregatu.
- Operacje: Wszystkie operacje, które mogą naruszyć spójność agregatu, powinny być zawarte wewnątrz agregatu.
Agregaty w DDD pomagają w organizacji i zarządzaniu złożonością w dużych systemach, zapewniając jednocześnie spójność i integralność danych. Pomagają one również w izolacji różnych części domeny, co ułatwia testowanie i rozwijanie oprogramowania.
Pytanie: Jakie są kluczowe wartości metodyki Agile?
Odpowiedź: Kluczowe wartości Agile to: ludzie i interakcje ponad procesy i narzędzia, działające oprogramowanie ponad obszerną dokumentację, współpraca z klientem ponad negocjacje umowy oraz reagowanie na zmiany ponad śledzenie planu.
Metodyka Agile opiera się na czterech kluczowych wartościach, które zostały sformułowane w “Manifestie Agile”. Oto one:
-
Ludzie i interakcje ważniejsze niż procesy i narzędzia.
- To oznacza, że bardziej istotne jest to, jak ludzie współpracują i komunikują się ze sobą, niż ścisłe przestrzeganie procesów czy korzystanie z konkretnych narzędzi. Zespoły powinny być samodzielne i mieć możliwość dostosowywania się do zmieniających się okoliczności.
-
Działające oprogramowanie ważniejsze niż obszerna dokumentacja.
- Chociaż dokumentacja jest ważna, priorytetem w Agile jest dostarczanie działającego oprogramowania. Zamiast poświęcać dużo czasu na tworzenie obszernych specyfikacji, zespoły Agile skupiają się na tworzeniu oprogramowania, które przynosi wartość dla klienta.
-
Współpraca z klientem ważniejsza niż negocjacje umów.
- W Agile duży nacisk kładziony jest na bliską współpracę z klientem i regularne uzyskiwanie od niego informacji zwrotnej. Zamiast trzymać się sztywno ustalonych umów, zespoły Agile są otwarte na zmiany i dostosowywanie się do potrzeb klienta w trakcie trwania projektu.
-
Reagowanie na zmiany ważniejsze niż trzymanie się planu.
- Świat biznesu jest dynamiczny i nieprzewidywalny. Dlatego metodyka Agile zakłada, że zmiany są nieuniknione i zespoły powinny być przygotowane na dostosowywanie się do nich, zamiast kurczowo trzymać się początkowego planu.
Chociaż te wartości podkreślają pewne aspekty bardziej niż inne, nie oznacza to, że te “mniej ważne” elementy są całkowicie odrzucane. Manifest Agile mówi: “Stawiając na lewej stronie większy nacisk, uznajemy wartość elementów po prawej stronie”. Innymi słowy, chodzi o to, aby znaleźć odpowiednią równowagę i dostosować się do konkretnej sytuacji.
Pytanie: Co to jest Scrum i jakie są jego główne role?
Odpowiedź: Scrum to ramy pracy Agile skoncentrowane na dostarczaniu wartości w krótkich iteracjach zwanych sprintami. Główne role w Scrum to: Product Owner, Scrum Master i Zespół Deweloperski.
Pytanie: Co to są mikroserwisy i jakie są ich główne zalety?
Odpowiedź: Mikroserwisy to architektura aplikacji, w której aplikacja składa się z wielu niezależnych serwisów komunikujących się ze sobą. Główne zalety to skalowalność, niezawodność, łatwość wdrażania i możliwość użycia różnych technologii w różnych serwisach.
Pytanie: Jakie są wyzwania związane z wdrażaniem i zarządzaniem mikroserwisami?
Odpowiedź: Wyzwania to m.in.: zarządzanie wieloma bazami danych, monitorowanie i śledzenie błędów w rozproszonym środowisku, złożoność sieci i komunikacji między serwisami oraz zarządzanie wersjami i zależnościami między serwisami.
Pytanie: Jakie są najlepsze praktyki w zakresie komunikacji między mikroserwisami?
Odpowiedź: Najlepsze praktyki to m.in.: unikanie komunikacji synchronicznej na rzecz asynchronicznej, użycie lekkich protokołów (np. HTTP/REST, gRPC), korzystanie z wzorców takich jak Circuit Breaker do obsługi błędów oraz unikanie ściśle powiązanych zależności między serwisami.
Pytanie: Jakie narzędzia i technologie są często używane w architekturze mikroserwisów?
Odpowiedź: Popularne narzędzia i technologie to m.in.: Docker, Kubernetes, Istio, RabbitMQ, Kafka, Consul oraz różne platformy chmurowe oferujące usługi dla mikroserwisów.
Pytanie: Jakie są główne wyzwania związane z TDD?
Odpowiedź: Wyzwania związane z TDD to m.in.: początkowy wzrost czasu potrzebnego na rozwój, trudność w napisaniu odpowiednich testów dla skomplikowanej logiki oraz potrzeba ciągłego utrzymania i aktualizacji testów w miarę ewolucji kodu.
Pytanie: Jak TDD wpływa na jakość kodu?
Odpowiedź: TDD może prowadzić do lepszej modularności, mniejszej liczby błędów, lepszej czytelności kodu oraz łatwiejszej refaktoryzacji, ponieważ każda zmiana jest weryfikowana przez testy.
Pytanie: Co to jest wartość obiektowa (Value Object) w DDD?
Odpowiedź: Wartość obiektowa to obiekt, który reprezentuje opisowy aspekt dziedziny z naciskiem na atrybuty, a nie tożsamość. Są niezmienne i nie mają globalnej tożsamości.
Pytanie: Jakie są różnice między encją a wartością obiektową w DDD?
Odpowiedź: Encja ma trwałą tożsamość przez cały czas życia, podczas gdy wartość obiektowa jest zdefiniowana przez jej atrybuty i nie ma trwałej tożsamości. Encje są zazwyczaj modyfikowalne, podczas gdy wartości obiektowe są niezmienne.
Pytanie: Co to jest burndown chart w Scrum?
Odpowiedź: Burndown chart to wykres, który pokazuje, ile pracy pozostało do zrobienia w trakcie sprintu. Oś pionowa reprezentuje ilość pracy, a oś pozioma reprezentuje czas.