Kwalifikacja: INF.04 - Projektowanie, programowanie i testowanie aplikacji
Rozpoczęcie: 15 października 2026 23:07
Zakończenie: 15 października 2026 23:10 Rozwiązano w aplikacji mobilnej
Egzamin zdany!
Wynik: 7/10 punktów (70,0%)
Wymagane minimum: 5 punktów (50%)
Pewność odpowiedzi
Żadna odpowiedź nie została oznaczona jako strzał.
Przy następnym egzaminie zaznaczaj niepewne odpowiedzi - zobaczysz wtedy, ile wyniku bierze się z wiedzy, a ile ze szczęścia.
Zachowaj ten wynik na koncie
Załóż darmowe konto albo zaloguj się - ten egzamin trafi na Twoje konto, więc wrócisz do swoich błędów, będziesz śledzić postęp i dostaniesz powtórki dobrane do Twoich odpowiedzi.
Zaprezentowany diagram Gantta odnosi się do projektu IT. Przy założeniu, że każdy członek zespołu dysponuje wystarczającymi umiejętnościami do realizacji każdego z zadań oraz że do każdego zadania można przypisać jedynie jedną osobę, która poświęci na zadanie pełny dzień pracy, to minimalna liczba członków zespołu powinna wynosić:
A. 5 osób
B. 2 osoby
Twoja odpowiedź
C. 4 osoby
D. 1 osobę
Poprawna odpowiedź. Wybrana odpowiedź jest trafna, bo minimalna liczba członków zespołu wynosi właśnie 2 osoby. W projekcie przedstawionym na diagramie Gantta, kluczowe jest zwrócenie uwagi na to, ile zadań nakłada się w danym tygodniu – a nie łączna liczba zadań. Największe obciążenie zespołu wypada na okresy, gdzie równolegle realizowane są dwa zadania, np. w pierwszym tygodniu są to Projekt aplikacji i Grafika, później w ostatnim tygodniu dwie aplikacje: front-end i back-end. W żadnym momencie nie występuje potrzeba, by więcej niż dwie osoby pracowały równolegle nad różnymi zadaniami. To bardzo praktyczna sytuacja – w realnych projektach IT planuje się obłożenie pracą właśnie przez analizę diagramu Gantta, by nie generować sztucznego przestoju lub nadmiaru ludzi. Moim zdaniem taka optymalizacja zespołu to podstawa w IT, bo pozwala ograniczyć koszty i lepiej zarządzać zasobami. Warto pamiętać, że zgodnie z dobrymi praktykami zarządzania projektami, np. w metodykach PMBOK czy Prince2, zawsze analizuje się ścieżki krytyczne i równoległość zadań, dokładnie w taki sposób, żeby nie dublować niepotrzebnie rąk do pracy. Świetnie, jeśli już na etapie planowania potrafisz to zauważyć i wyciągnąć praktyczne wnioski – to naprawdę przydaje się potem przy rozpisywaniu harmonogramów na czasach rzeczywistych projektów.
Pytanie 2
Które z podanych logo reprezentuje narzędzie, które nie jest używane do tworzenia aplikacji mobilnych?
A. 4
B. 1
C. 3
D. 2
Twoja odpowiedź
Poprawna odpowiedź. Logo numer 2 przedstawia Angular, czyli framework front-endowy używany głównie do tworzenia aplikacji webowych typu SPA, a nie samodzielne narzędzie do tworzenia aplikacji mobilnych. To jest ważne rozróżnienie, bo Angular może pojawić się w projektach mobilnych, ale zwykle jako część większego stosu technologicznego, np. razem z Ionic, Capacitor albo dawniej Cordova. Sam Angular nie daje pełnego środowiska do budowania, podpisywania, uruchamiania na emulatorze i publikowania aplikacji w Google Play czy App Store. Dla porównania Android Studio jest typowym IDE do aplikacji Android, Xamarin pozwala tworzyć aplikacje mobilne wieloplatformowe w ekosystemie .NET, a Xcode służy do aplikacji na iOS i inne platformy Apple. Moim zdaniem to pytanie dobrze sprawdza praktyczne myślenie: nie wystarczy znać logo, trzeba wiedzieć, czy dane narzędzie jest frameworkiem UI, IDE, SDK czy platformą buildowania. W dobrej praktyce branżowej dobiera się narzędzia pod docelowy system, wymagania wydajnościowe, integracje natywne oraz proces wdrożenia.
Pytanie 3
Jakie wyrażenie logiczne powinno być użyte, aby zweryfikować, czy zmienna x zawiera wartości ujemne lub znajduje się w zakresie (10, 100)?
A. x > 10 || x < 100 || x < 0
B. (x > 10 && x < 100) || x < 0
Twoja odpowiedź
C. x > 10 || x < 100 || x < 0
D. (x > 10 || x < 100) && x < 0
Poprawna odpowiedź. To wyrażenie logiczne: (x > 10 && x < 100) || x < 0 jest najtrafniejsze, bo dokładnie oddaje założone warunki: zmienna x powinna być ujemna lub znajdować się w zakresie od 10 do 100 (bez tych wartości granicznych, czyli przedział otwarty). Z mojego doświadczenia wynika, że takie podejście jest stosowane wszędzie tam, gdzie istotne są szczegółowe warunki – np. w walidacji danych wejściowych czy podczas filtrowania w bazach danych. Operator || gwarantuje, że jeśli chociaż jeden z warunków jest prawdziwy (czyli x jest mniejsze od 0 lub należy do przedziału 10-100), całe wyrażenie zwróci true. Warto też pamiętać, że zastosowanie operatora && wewnątrz nawiasu zapewnia, że oba warunki (x > 10 oraz x < 100) muszą być spełnione jednocześnie, czyli x leży pomiędzy tymi liczbami. Odpowiedniki takiego zapisu znajdziesz praktycznie w każdym języku programowania – od Javy po Pythona. Branżowe standardy jasno wskazują na czytelność i jednoznaczność warunków logicznych, szczególnie jeśli kod ma być utrzymywany przez inne osoby lub przez nas samych za kilka miesięcy. Uważam, że precyzyjne formułowanie wyrażeń tego typu to podstawa dobrego programisty – naprawdę warto się tego trzymać, bo później mniej błędów wychodzi na produkcji, a kod jest dużo łatwiej przetestować. Często spotykam się z przypadkami, gdzie ktoś pomija nawiasy lub źle łączy operatory i potem są problemy z błędami logicznymi, dlatego warto wyrobić sobie taki nawyk dokładnego zapisywania warunków.
Pytanie 4
Na zaprezentowanych ilustracjach znajduje się okno aplikacji w wersji początkowej oraz po wprowadzeniu danych. Przyjmując, że pole "Dostępne środki" służy do wprowadzania wartości typu rzeczywistego, wskaż elementy struktury, które najlepiej odpowiadają tym danym?
Kod 1
Kod 2
Poprawna odpowiedź
Kod 3
Twoja odpowiedź
Kod 4
Niepoprawna odpowiedź. Struktury zawierające typy całkowite, takie jak int, nie są odpowiednie do przechowywania wartości pieniężnych lub zmiennoprzecinkowych, ponieważ tracą dokładność w przypadku wartości ułamkowych. Struktury oparte na typach string są przeznaczone do tekstu, a nie danych numerycznych. Użycie struktury tablicowej nie jest optymalne, gdyż wartości zmiennoprzecinkowe powinny być przechowywane jako pojedyncza zmienna, a nie w postaci listy.
Pytanie 5
Który z wymienionych parametrów dysku twardego ma największy wpływ na jego wydajność?
A. Pojemność dysku
B. Prędkość obrotowa talerzy (RPM)
Poprawna odpowiedź
C. Rodzaj złącza (SATA/PCIe)
D. Ilość pamięci podręcznej (Cache)
Twoja odpowiedź
Niepoprawna odpowiedź. Pojemność dysku jest istotnym parametrem, ale nie wpływa bezpośrednio na jego szybkość działania. Większa pojemność oznacza, że na dysku można przechowywać więcej danych, jednak nie przyspiesza to operacji odczytu i zapisu. Wydajność jest bardziej związana z tym, jak szybko dane mogą być przesyłane do i z dysku, co nie jest bezpośrednio związane z jego pojemnością. Rodzaj złącza, takiego jak SATA czy PCIe, również ma swoje znaczenie, ale w przypadku dysków HDD to prędkość obrotowa jest kluczowa dla szybkości pracy. Złącza PCIe, które są znacznie szybsze od SATA, są bardziej relevantne w kontekście dysków SSD, gdzie czas dostępu i szybkość transferu są znacznie wyższe niż w przypadku talerzowych dysków HDD. Na koniec, ilość pamięci podręcznej (Cache) dysku, choć ma znaczenie w usprawnieniu operacji odczytu i zapisu, to jej wpływ jest marginalny w porównaniu do prędkości obrotowej. Cache działa jako bufor, ale nie zastąpi wyższej prędkości obrotowej talerzy, która decyduje o tym, jak быстро można uzyskać dostęp do danych przechowywanych na dysku.
Pytanie 6
W jakiej sytuacji kolekcja typu lista okaże się bardziej wydajna niż tablica?
A. Gdy liczba elementów w kolekcji jest niezmienna
B. Gdy liczba elementów w kolekcji zmienia się dynamicznie
Twoja odpowiedź
C. Gdy chcemy uzyskać dostęp do elementów przy pomocy indeksu
D. Gdy mamy pewność co do dokładnego rozmiaru kolekcji przed kompilacją
Poprawna odpowiedź. Lista to dynamiczna struktura danych, która pozwala na efektywne dodawanie i usuwanie elementów, zwłaszcza gdy liczba elementów zmienia się w trakcie działania programu. Listy są bardziej elastyczne niż tablice, ponieważ mogą dynamicznie dostosowywać swoją wielkość bez potrzeby alokacji dodatkowej pamięci. W przypadku dynamicznych operacji, takich jak częste wstawianie i usuwanie elementów, listy są znacznie bardziej wydajne niż tablice, które wymagają przesunięcia wszystkich elementów po każdej operacji. Listy świetnie sprawdzają się w implementacji kolejek, stosów oraz w strukturach, które muszą rosnąć i kurczyć się podczas działania aplikacji.
Pytanie 7
Który aspekt projektu aplikacji jest kluczowy dla zabezpieczenia danych użytkowników?
A. Zastosowanie zaawansowanych systemów ochrony
Twoja odpowiedź
B. Tworzenie prostych formularzy do rejestracji
C. Pominięcie testowania aplikacji w etapie produkcji
D. Koncentracja na wyglądzie interfejsu użytkownika
Poprawna odpowiedź. Stosowanie zaawansowanych mechanizmów bezpieczeństwa jest kluczowe dla ochrony danych użytkowników w aplikacjach. Wdrożenie technologii takich jak szyfrowanie, autoryzacja dwuskładnikowa (2FA), firewalle oraz regularne testy penetracyjne pozwala na minimalizację ryzyka ataków i naruszeń danych. Mechanizmy te nie tylko zabezpieczają dane, ale również budują zaufanie użytkowników do aplikacji, co jest niezwykle istotne w branżach takich jak bankowość, medycyna czy e-commerce.
Pytanie 8
Który z języków programowania jest najczęściej wykorzystywany do budowania aplikacji internetowych po stronie serwera?
A. JavaScript
B. PHP
Twoja odpowiedź
C. HTML
D. CSS
Poprawna odpowiedź. PHP to jeden z najczęściej używanych języków programowania do tworzenia aplikacji webowych po stronie serwera. Jest to język skryptowy, który umożliwia dynamiczne generowanie treści stron internetowych, zarządzanie sesjami użytkowników, obsługę formularzy oraz integrację z bazami danych. PHP napędza popularne systemy zarządzania treścią (CMS), takie jak WordPress, Joomla czy Drupal. Dzięki swojej prostocie, szerokiemu wsparciu społeczności oraz dużej liczbie gotowych bibliotek i frameworków (np. Laravel), PHP pozostaje jednym z czołowych języków backendowych. PHP pozwala również na szybkie wdrażanie aplikacji i jest kompatybilny z wieloma serwerami WWW, co czyni go uniwersalnym wyborem w budowie aplikacji webowych.
Pytanie 9
Który typ testów jest wykonywany na pojedynczych komponentach lub funkcjach w izolacji?
A. Testy jednostkowe
Twoja odpowiedź
B. Testy integracyjne
C. Testy systemowe
D. Testy akceptacyjne
Poprawna odpowiedź. Testy jednostkowe to podstawowy rodzaj testów, które koncentrują się na weryfikacji pojedynczych komponentów lub funkcji aplikacji w izolacji. Ich celem jest upewnienie się, że dany element kodu działa zgodnie z oczekiwaniami. Przykładowo, jeśli mamy funkcję, która oblicza sumę dwóch liczb, test jednostkowy sprawdzi, czy ta funkcja poprawnie zwraca wynik dla różnych zestawów danych wejściowych. Zastosowanie testów jednostkowych jest kluczowe w nowoczesnym programowaniu, ponieważ pozwala na szybkie wykrywanie błędów na wczesnym etapie rozwoju oprogramowania. Dzięki nim można również łatwiej wprowadzać zmiany w kodzie, gdyż mając pewność, że pojedyncze komponenty działają prawidłowo, można modyfikować całą aplikację bez obaw o wprowadzenie nowych błędów. W praktyce, testy jednostkowe są często zautomatyzowane i stanowią integralną część ciągłej integracji (CI), co pozwala na szybkie i efektywne testowanie kodu przy każdej zmianie. Dobre praktyki w zakresie testów jednostkowych obejmują pisanie testów przed właściwą implementacją kodu (tzw. TDD - Test Driven Development) oraz stosowanie odpowiednich narzędzi, takich jak JUnit dla Javy czy NUnit dla .NET.
Pytanie 10
Który z poniższych nie jest typem danych w języku JavaScript?
A.
Integer
Poprawna odpowiedź
B.
Boolean
C.
String
D.
Object
Twoja odpowiedź
Niepoprawna odpowiedź. Wybór typów danych, takich jak Boolean, String i Object, jest prawidłowy w kontekście JavaScript, ponieważ wszystkie te typy są integralnymi elementami tego języka. Boolean reprezentuje dwie wartości: true i false, co jest niezbędne do tworzenia warunków i logiki w kodzie. Z kolei typ String służy do przechowywania tekstu, co jest kluczowe w każdej aplikacji webowej, umożliwiając manipulację danymi tekstowymi. Przykładowo, można korzystać z metod takich jak `toUpperCase()` czy `substring()`, aby przetwarzać napisy. Typ Object, z kolei, to bardziej złożona struktura, która może przechowywać wiele par klucz-wartość, co pozwala na modelowanie bardziej złożonych danych, takich jak obiekty użytkowników, produkty, czy cokolwiek, co wymaga złożonej struktury danych. Typowe błędy myślowe, które prowadzą do nieprawidłowych wniosków dotyczących typów danych, mogą wynikać z braku zrozumienia różnicy między typami w różnych językach programowania. Na przykład, w językach takich jak Java czy C#, Integer jest odrębnym typem, co może prowadzić do myślenia, że JavaScript działa w podobny sposób. W rzeczywistości jednak, JavaScript zapewnia uproszczoną i bardziej elastyczną obsługę typów numerycznych, a zrozumienie tych różnic jest kluczowe dla efektywnego programowania w tym języku.