Kategorie
Uncategorized

Testowanie funkcjonalne: Jak tworzyć i wykonywać testy

Cześć!

W tym artykule zajmiemy się bardzo ważnym elementem wytwarzania oprogramowania: czyli testowaniem funkcjonalnym. Kiedy tworzymy takie testy, warto kierować się kilkoma zasadami:

  1. Zrozumienie wymagań
    Musisz dokładnie zrozumieć, jakie są wymagania danej aplikacji i co testujesz. Najlepiej zaplanuj sobie i rozpisz, co ma być testowane oraz jakie są wymagania, co do działania aplikacji.
  2. Tworzenie przypadków testowych
    Na podstawie wymagań, utwórz przypadki testowe. To znaczy: wymyśl przypadki, które powinny pokryć główne funkcjonalności Twojej aplikacji oraz solidnie ją przetestują. Powinny być szczegółowe i powtarzalne. Możesz użyć technik takich jak analiza równoważności, testowanie graniczne i testowanie przypadków skrajnych itp.
  3. Przygotowanie środowiska testowego
    Przygotuj sobie solidne środowisko testowe. Ważne są konfiguracje bazy danych, aplikacji, itp. np. testowanie na developie czy wersje oprogramowania, które wykorzystujesz do testowania (pamiętaj o dopasowaniu wersji oprogramowania do testów do aplikacji. Sam/a sobie za to podziękujesz 😉).
  4. Rejestracja defektów
    Kiedy podczas testowania napotkasz jakieś niezgodności i defekty, warto to przede wszystkim odnotować. Bądź uważny/a w opisywaniu przypadków. Opisz problem, zanotuj, na której wersji aplikacji problem występuje, opisz metodą jak powinno być, a jak jest, pożądane zachowanie czy też, jakie zachowanie naprawdę występuje, oraz sugerowane rozwiązanie.
  5. Analiza wyników
    Po wykonaniu testów przeanalizuj, co poszło nie tak, jakie błędy się pojawiły itp. Zidentyfikuj wszystkie problemy i szczegółowo je opisz.
  6. Raportowanie
    Na koniec przygotuj raport — to cenne narzędzie, dzięki któremu możemy zarchiwizować i podzielić się wynikami naszej pracy z zespołem lub kierownictwem projektu/produktu.

Pamiętaj, że testy powinny być powtarzalne, szczegółowe i łatwo odtwarzalne. Testowanie obejmuje przeróżne techniki testowania kodu, zarówno automatycznie jak i manualnie. Uwzględnij różne scenariusze testów (w szczególności te negatywne czy skrajne), zaplanuj wszystko ze szczegółami i działaj! 

A jeżeli potrzebujesz więcej szczegółowej wiedzy, to serdecznie to zapraszam Cię do kursu -> https://cyfrowytrener.pl/produkty/kurs-tester-qa-engineer/

Miłego dnia,
Kris

Kategorie
Uncategorized

Podstawy programowania: Zrozumienie zmiennych, typów danych i instrukcji warunkowych

Cześć!

Kluczowym elementem na początku jest zrozumienie, czym się różni stała od zmiennej, czym jest pętla zagnieżdżona i jakie są rodzaje danych to podstawa w programowaniu. Pozwala to na manipulowanie danymi w dowolny sposób, jaki potrzebujesz.

  1. Zmienne i stałe

    Wyobraź sobie, że masz pudełko, do którego chcesz włożyć przedmiot. Możesz mieć nawet szklaną kulę. Taką, w której sypie się śnieg, jest święty Mikołaj… i tak dalej. Zauważ, że gdy początkowo definiujesz tę kulę, to coś w niej jest i nie możesz tego potem wyjąć. Jest to w programowaniu stała, czyli const od constance. Jest to typ danych, które przechowują je ustawiając wartość początkową, której potem nie da się przypisać ponownie — tak samo jak nie możesz wyjąć Mikołaja ze szklanej kuli 😉

    Inaczej sprawa ma się ze zmiennymi — zmienna to twoje pudełko. Możesz przypisać mu wartość początkową, czyli coś włożyć do tego pudełka, Albo możesz nie deklarować nic, tylko pozostawić pudełko puste. Później można coś do niego włożyć. To jest właśnie zmienna – var od variable
const kulaŚnieżna = 'Mikołaj’; //stała
let pudełko = ”; //zmienna
pudełko = 'Miś’; // tak można.
kulaŚnieżna = Wróżka; //tak nie można
  1. Typy danych

Ale co włożyć do tego pudełka?
Wyobraź sobie, że wkładasz misia. Miś to typ przedmiotu, np. przytulanka. Tak samo jest z danymi — dane są różnego typu, np:
– string : czyli typ, w którym używamy tylko liter/ciągu znaków, czyli stringów. Ten typ danych, podobnie jak typy numeryczne ma kilka podtypów w zależności od języka programowania. Na przykład? Podtyp string, a który może pomieścić od 0 do 255 znaków lub więcej. 

let mojString = 'Fajny string’


– number: typ numeryczny. Możemy mieć inta, floata, double itd. Ale co to za podtypy? Typy numeryczne są trochę bardziej skomplikowane niż stringi. Zapewne pamiętacie z lekcji matematyki, że liczby mogą być całkowite, zmiennoprzecinkowe, rzeczywiste itp. Po to właśnie różne podtypy typu numerycznego. np. int to liczb całkowita, a float to liczba zmiennoprzecinkowa.

let mojNumber = 2137

– bool – to typ, który najbardziej jest zbliżony do języka komputera. Odpowiada zerem lub jedynką, czyli wartością true albo false

let mojboolean = true


– tablica – to zbiór stringów, booelanów lub numberów. Zapisuje się ją jak poniżej. To po prostu zbiór różnych elementów, po których można się literować:

let mojaTablica = [1,2,3,4]
  1. Pętle, pętelki

Tymi wszystkimi danymi można dobrze manipulować za pomocą pętli. Takim przykładem jest pętla for, która bierze każdy element z dowolnej tablicy i robi z nim coś, np. zwiększa wartość o 1 lub sprawdza, czy element jest poprawny. Wyobraźcie sobie, że na stronę internetową przychodzi odpowiedź z serwera, która zawiera jakieś dane.  I te dane znajdują się w tablicy. Jako tester oprogramowania chciałbyś np. sprawdzić poprawność tych danych. Więc musisz każdą z tych rzeczy sprawdzić, czy np. status odpowiedzi z serwera równa się 200. 

for (let i of mojaTablica) {
i = i+1  //zwiększenie wartości każdej cyferki o 1
}


Jest to krótkie wprowadzenie do zmiennych, stałych, typów danych i pętli for. W programowaniu istnieje oczywiście o wiele więcej składowych, ale są to 3 podstawowe, które warto wykuć na pamięć 🙂

Kategorie
Uncategorized

Najważniejsze techniki programowania: Pętle, funkcje, tablice i obiekty

Cześć!

Przyjrzymy się dzisiaj najważniejszym technikom programowania, które wykorzystywane są wszędzie bez względu na język. Te paradygmaty programowania są spotykane tak często, że grzech ich nie znać! No bo ja inaczej poradzilibyśmy sobie z przesyłaniem danych z backendu na frontend bez obiektów? W jaki sposób zgromadzilibyśmy potrzebny wielokrotnie blok kodu, jeśli nie w funkcji?

Przyjrzyjmy się, zatem najważniejszym składowym:

1.Pętle
Pętle pozwalają nam na wykonywanie określonego kawałka kodu przez wiele razy. Najczęściej używanymi pętlami są pętla for i pętla while. Pętla for jest używana, gdy znamy liczbę iteracji, czyli obiektów, po których musimy pętlą for przejść,  a pętla while jest stosowana, gdy warunek musi być spełniony lub fałszywy, np. dopóki warunek, który ma być na true jest na true, to pętla będzie się wykonywać.

Pokażę wam kilka przykładów:

let tablica = [1,2,3]

for (let element = 0; element < tablica.length; element++) {
log(element+1)
}
let licznik = 0

while(licznik < 5) {
log (licznik)      licznik++
}

W pierwszym przykładzie pętla for wykonywać się będzie, dopóki zmienna o nazwie element nie będzie równa długości tablicy, która ma 3 elementy w sobie, więc dopóki zmienna element nie będzie równa 3, to działanie się wykona. Ważnym elementem tutaj jest też inkrementacja:  czyli zwiększanie wartości o jeden -> ++ to taki skrót myślowy dla symbolu +1.

W drugim przykładzie pętla while będzie się wykonywać, dopóki nasz counter, czyli licznik nie będzie równy 5. Tutaj również mamy inkrementację.

2. Funkcje
To określone bloki kodu, które mogą się wykonać — chyba, że ich nie wywołamy. Funkcje to takie większe pudełka, w których uporządkowany jest nasz kod. To znaczy: jeśli mamy cały plik, w którym jest kod, który pobierze nam lokalizację GPS, to warto byłoby go rozbić na mniejsze kawałeczki tak, aby nic się nie plątało.

Pokażę wam to na przykładzie:

function pobierzGps() {
// pobieranie gps, jakiś kod, który np. bierze z biblioteki gps współrzędne
this.wyswietlGps();
}
function wyswietlGps() {
// wyświetlanie gps, np. przekazanie współrzędnych do zmiennej która osadzona jest w  html
}

pobierzGps();

To jest kod, w którym mamy 2 funkcje. Jak zauważyliście, obydwie funkcje mają jakiś tam kod w środku, a potem są wywoływane, co sprawia, że kod się wykona. Ale w tym przypadku mamy 2 rzeczy do zrobienia: pobrać lokalizację gps i ją wyświetlić w html. Żeby to zrobić, posłużyliśmy się dwoma innymi kawałkami kodu, które wykonują się jeden po drugim. Tak właśnie działają funkcje 😏

3. Tablice
Tablice to taki twór, który jest zbiorem jakichś elementów zawartych w nawiasie kwadratowym. To mogą być stringi, liczby, obiekty itp. W tablicach przechowuje się jakąś kolekcję danych, a dane te są indeksowane — to znaczy, że można się dostać do tych danych w tablicy po indeksie. Indeksowanie zazwyczaj zaczyna się od zera, co oznacza, że np. element o indexie 0 będzie pierwszym elementem. Są bardzo przydatne, jeśli chodzi o wszelkie zbiory danych, które są większe i bardziej skomplikowane, takie jak np. współrzędne gps, które zostały wspomniane w poprzednim przykładzie 😉

Tablica może wyglądać np. tak:

let tablica = [
„string1”,
„string2”,
„string3”
]

ale również tak:

let tablicaObiektów = [
{key: owoc, value: jabłko},
{key: warzywo, value: marchewka}
]


4. Obiekty
Są podstawowymi jednostkami programowania obiektowego. To tzw. byty, które przechowują więcej informacji niż taki string czy number. Można się po nich literować za pomocą key i value. Może zawierać zarówno dane, jak i całe metody! Obiekty umożliwiają modelowanie danych tak, jak tego potrzebujemy bez żadnych konkretnych klas. Obiektowy styl programowania zawiera również enkapsulację, dziedziczenie i polimorfizm – to pojęcia, które warto będzie w przyszłości poznać!

Obiekt może wyglądać na przykład tak:

let object = {
„imię: „Ewa”,
nazwisko: „Iksińska”,
wiek: 28
}

Warto pamiętać, że bez tych pojęć w programowaniu ani rusz. To dzięki takim elementom jak obiekty i tablice łatwiej jest poruszać się w dowolnym języku oraz dzięki temu programowanie staje się bardziej intuicyjne.

Kategorie
Uncategorized

Testowanie oprogramowania: Wprowadzenie dla osób bez doświadczenia

Cześć!

Testowanie oprogramowania wg. definicji to proces związany z wytwarzaniem oprogramowania. Testowanie ma na celu weryfikację i walidację oprogramowania. No dobra, ale co to oznacza? Każdy może przecież przeczytać regułkę z Wikipedii i nic nie zrozumieć w praktyce. Krótko mówiąc: to działania mające na celu przetestowanie, czy wszystko w aplikacji jest poprawne lub inaczej prawidłowe. Na przykład czy buttony są klikalne, czy wszystkie requesty przechodzą poprawnie itp. To proces, który od A do Z sprawdza wszystko, co się dzieje w aplikacji. Nierzadko możemy dzięki testom sprawdzić działanie kodu, ale też funkcjonalność oraz użytkowanie aplikacji.



Wszyscy jako użytkownicy mamy pewne wymagania odnośnie aplikacji: wszędzie mamy jakieś cele, specyfikacje czy jakieś punkty, które aplikacja ma spełnić. Właśnie po to potrzebny jest nam proces testowania. Co prawda są to dodatkowe koszty, ale zapewnia poprawność aplikacji i zaufanie do niej. Po prostu musi ona spełniać pewne kryteria jak np. szybkość, wydajność, bezpieczeństwo itp. Testowanie pomaga też w wykryciu błędów i sprawia, że nasza aplikacja staje się dla użytkownika bardziej atrakcyjna, przez co przychody twórców wzrastają.

Jakie istnieją rodzaje testów? W uproszczeniu możemy je podzielić na:
testy jednostkowe — czyli takie, które sprawdzają jakieś jednostki. Na przykład? Klasy, moduły, komponenty. Czyli coś, co jest jednostką w aplikacji, jakąś częścią składową.
testy integracyjne — sprawdzają komunikację pomiędzy komponentami i pozostałym elementami.
testy e2e (end to end) nazywane również systemowymi — to testy, które sprawdzają całą aplikację od początku do końca, symulując rzeczywiste reakcje osoby, która obsługuje aplikację. Uwzględnia się w nich wszystkie elementy systemu, również komponenty i klasy.
testy akceptacyjne — sprawdzają, czy aplikacja spełnia wymagania klienta (użytkownika końcowego)

Testy też dzielą się również na:
testy frontendowe — czyli testy, które sprawdzają widoczną część aplikacji dla użytkownika (np. poszczególne elementy html i css oraz sprawdzają komponenty)
testy backendowe (testy API) – czyli takie, które testują zapytania do bazy danych, endpointy i różne rzeczy związane z zapleczem (backendem) inaczej logiką aplikacji nie koniecznie widoczną bezpośrednio dla użytkownika.

Wiem.. na początku można się pogubić 😉, Ale bez obaw. Najpierw polecam nabyć podstawową wiedzę z zakresu testowania oprogramowania.

No dobrze.
Ale jak dokładnie się robi testy?
Testy można zarówno pisać, jak i wykonywać manualnie. W przypadku testowania manualnego potrzebny jest nam scenariusz. A w przypadku testowania za pomocą kodu to właśnie nasz kod jest takim scenariuszem, który się wykonuje. Możesz zostać testerem manualnym, jak i pisać takie testy.

Ale jak je pisać?
Jest mnóstwo narzędzi, które to ułatwią. Możesz skorzystać z:
Cypress.js –  to framework (biblioteka) do testowania zarówno frontendu, layoutu jak i API.
Selenium webdriver – do automatyzacji interfejsów
JUnit – do testowania jednostkowego w język Java
Postman – do testowania API.

Wybór właściwego frameworka do testowania to sztuka, ale na sam początek proponuję Playwright/Cypress lub Selenium. Są to przejrzyste, fajne frameworki, z którymi poradzicie sobie bez problemu na początku swojej przygody z testami oprogramowania. Testowanie nie jest takie straszne, ale wymaga dobrej znajomości aplikacji, nad którą pracujecie.

Kategorie
Uncategorized

Tworzenie interfejsów użytkownika: Wprowadzenie do UI/UX designu

Cześć!

Tworzenie interfejsów użytkownika (UI) oraz projektowanie doświadczenia użytkownika (UX) stanowią kluczowe aspekty tworzenia aplikacji internetowych, które odgrywają niezwykle ważną rolę. Dążymy przecież do tego, aby nasze aplikacje były przede wszystkim intuicyjne. Chcemy także, aby korzystanie z nich było dla użytkowników łatwe i przyjemne, a prezentowane treści oraz interakcje z aplikacją były satysfakcjonujące. Istnieje wiele znakomitych aplikacji, które, mimo swojej użyteczności, dysponują niedostatecznym UI. Więc czym właściwie są UX i UI, i jakie są między nimi różnice?

Czym są UX Design i UI Design?
UX, czyli User Experience, odnosi się do projektowania doświadczeń użytkownika, natomiast UI, czyli User Interface, skupia się na projektowaniu interfejsów. Choć te dwa obszary są ze sobą ściśle powiązane i wydają się podobne, to jednak nie są tożsame. UX koncentruje się na interakcjach użytkownika z aplikacją, podczas gdy UI zajmuje się interfejsami graficznymi. Tym samym, projekty stron, które widzisz, to nic innego jak efekt pracy nad UI 🙂

Badanie Użytkowników jest istotnym elementem całego procesu. Należy dowiedzieć się, kim są użytkownicy i w jakim przedziale wiekowym się znajdują, jakie cele przyświecają ich wizytom na naszej stronie, czego oczekują, i jakie są ich preferencje… Zrozumienie odpowiedzi na te i wiele innych pytań jest kluczowe podczas projektowania strony.

Projektowanie Informacji i Struktury obejmuje planowanie infrastruktury, treści i układu w interfejsie aplikacji. Informacje prezentowane na stronie powinny być dostosowane do potrzeb użytkowników, a jednocześnie prezentowane w sposób czytelny i dobrze zorganizowany. W tym celu warto zastosować profesjonalny copywriting, odpowiednie wylistowanie informacji oraz dobranie właściwej czcionki.

Tworzenie Prototypów – Prototypowanie ma na celu stworzenie modelu graficznego lub interaktywnego naszej strony. W tym celu można wykorzystać technologie takie jak HTML i CSS, a także programy takie jak Figma czy AdobeXD. Dlaczego to ważne? Dzięki prototypowaniu możemy ocenić, czy nasza aplikacja spełnia wszystkie oczekiwania.

Etap testowania obejmuje weryfikację funkcjonalności aplikacji oraz ogólne działanie platformy. Pozwala to zidentyfikować potencjalne problemy, takie jak niefortunne umiejscowienie przycisków, brak interakcji między elementami, czy zbyt mała czcionka dla osób ze słabszym wzrokiem.

Wdrażanie i Dalsza Optymalizacja – Kiedy nasza aplikacja zostanie zaprojektowana, przetestowana i wdrożona, moglibyśmy uznać projekt za zakończony. Ale zaczekaj! Nawet mistrzowie malarstwa pracowali nad swoimi dziełami przez lata, więc również my powinniśmy w jakimś stopniu kontynuować prace nad naszym projektem… 🙂

Na tę chwilę to wystarczająco informacji na temat UX/UI. Mieliście okazję zapoznać się z podstawami procesu tworzenia UX. Obszar UX/UI obejmuje takie elementy jak ankiety, badania środowiskowe, testy interfejsów i wiele więcej. Znajdują się tu także elementy psychologii, co czyni ten temat znacznie bardziej rozbudowanym i fascynującym, niż mogłoby się wydawać…😉

Kategorie
Uncategorized

Jak pisać czytelny i efektywny kod: Dobre praktyki programistyczne

Cześć!

Dzisiaj chciałbym podzielić się z wami praktykami, które na pewno zaowocują w przyszłości, jeśli chodzi o wydajność i czytelność waszego kodu. To na pewno zaowocuje podczas rozmów rekrutacyjnych 😉, ale nie tylko. Wierzę, że jeżeli już się za coś trzeba brać, to trzeba zrobić to porządnie. Tak samo jest z programowaniem.

Oto kilka prostych technik:

1. Zachowaj czytelność: Używaj takich nazw zmiennych, stałych i nazw funkcji, aby od razu wiadomo było, co ten kod robi (im prościej, tym lepiej). Unikaj nazw zmiennych typu abc, i, dupa itd. Używaj wcięć gdzie to konieczne i pilnuj, by kod był ładnie sformatowany.

2. Dziel kod na mniejsze funkcje: To coś, o czym pisaliśmy w poprzednich artykułach. Funkcja to takie pudło, w którym przechowujesz fragmenty kodu tak, by były bardziej poukładane. Konkretne rzeczy, które ma wykonać kod zrób w funkcji, której nazwa to dokładnie opisuje.

3. Unikaj duplikacji kodu: jeżeli masz do zrobienia fragment kodu, który się powtarza, np. ciągle literuje się po jednej konkretnej pętli, dlaczego by nie zrobić tego w osobnej funkcji, do której będziesz się odwoływał/odwoływała?

4. Używaj właściwych struktur danych: Jeśli wiesz, że będziesz miał/miała konkretne operacje do zrobienia na konkretnych danych, warto przemyśleć, jakiego typu danych będziesz używać, czy nie lepiej będzie utworzyć do tego interfejsu lub klasy.

5. Testuj i debuguj regularnie: To bardzo ważny element każdego dobrze działającego kodu. Nawet jeśli teoretycznie wszystko powinno działać, warto skorzystać z debuggera lub testów.

6. Używaj bibliotek i frameworków: To nie tylko sposób na ułatwienie czytania kodu dla innych programistów, ale też sposób na ułatwienie sobie pracy za pomocą sprawdzonych narzędzi oraz często dobrze udokumentowanych.

Kategorie
Uncategorized

Najbardziej przyszłościowe języki programowania

Cześć!

Zastanawiałeś się kiedyś, jakiego języka programowania warto się nauczyć, mając na uwadze perspektywy przyszłościowe? Jak wybrać język programowania, który obecnie prezentuje największy potencjał na przyszłość?

Często zdarza się, że zaczynamy uczyć się języka programowania na chybił trafił, kierując się osobistymi upodobaniami, co nie zawsze jest najskuteczniejszą strategią. Z jednej strony powinniśmy wybrać język, który nas interesuje, a z drugiej — taki, który w przyszłości może okazać się jednym z najbardziej popularnych i poszukiwanych na rynku pracy.

Przedstawię Ci kilka propozycji, które mogą pomóc w podjęciu tej ważnej decyzji:

  1. Python: Python to obecnie jeden z najbardziej popularnych języków programowania na świecie. Charakteryzuje się prostą i czytelną składnią, co ułatwia naukę, szczególnie dla początkujących. Jest znany z zastosowania w dziedzinie sztucznej inteligencji i matematyki, ale świetnie sprawdza się również w tworzeniu stron internetowych i backendu.
  2. JavaScript: JavaScript jest niezbędny w tworzeniu interaktywnych stron i aplikacji internetowych. Jego bardziej zorientowaną na typowanie wersją jest TypeScript, który także zyskuje na popularności. JavaScript oferuje prostotę i wszechstronność, a także możliwość tworzenia backendu za pomocą Node.js.
  3. Java: Java to jeden z najbardziej rozpoznawalnych języków do tworzenia backendu, szczególnie w kontekście aplikacji internetowych. Mimo swoich korzeni sięgających lat 90., wciąż pozostaje na czołowych pozycjach w rankingu popularności.
  4. PHP: PHP to bardzo dobre narzędzie do obsługi stron internetowych. Język ten również powstał w latach 90., ale nadal zyskuje na popularności, szczególnie dzięki możliwościom w zakresie sztucznej inteligencji.
  5. SQL: SQL to język bazodanowy, niezbędny do efektywnego zarządzania danymi. Jego znajomość będzie przydatna niezależnie od tego, czy zainteresują Cię technologie front-endowe, czy back-endowe.
  6. C#: C# to młodszy krewny C++, który zyskał popularność dzięki swoim możliwościom w obsłudze technologii .NET. Jeśli planujesz pracować w środowiskach Microsoft, C# będzie świetnym wyborem.

Warto zaznaczyć, że w wyborze języka programowania liczy się elastyczność, Twoje zainteresowania oraz predyspozycje. Nauka jednego języka to jedno, ale trendy na rynku pracy będą się zmieniać, więc ważna jest zdolność do szybkiego przyswajania nowych języków i technologii. Zastanów się, w jakich technologiach chcesz pracować, czy interesują Cię bazy danych, a może backend? Twoje osobiste zainteresowania oraz cele zawodowe powinny przeważyć przy wyborze języka programowania, który będziesz chciał opanować. 🧑‍💻

Kategorie
Uncategorized

Zasady w programowaniu obiektowym (na przykładzie Pythona)


Cześć!

Programowanie obiektowe (OOP z ang. Object Oriented Programming) to koncepcja, która ściśle oddziałuje z rzeczywistością, umożliwiając tworzenie skomplikowanych programów w bardziej zorganizowany i zrozumiały sposób. Python, z języków programowania o wysokim poziomie abstrakcji, z łatwością wplata idee programowania obiektowego w swoją strukturę. W tym artykule zanurzymy się w głębiny podstawowych zasad OOP w kontekście Pythona, które są niezwykle ważne dla każdego aspirującego lub doświadczonego programisty.

Zasada 1: Abstrakcja to proces ukrywania szczegółów złożoności, pozwalając programistom skupić się na interakcjach na wyższym poziomie. W Pythonie abstrakcja może być zaimplementowana za pomocą klas abstrakcyjnych i metod abstrakcyjnych.

Przykład:

from abc import ABC, abstractmethod

class Samochod(ABC):
    @abstractmethod
    def jazda(self):
        pass

class Mercedes(Samochod):
    def jazda(self):
        print("Jadę Mercedesem!")

moj_mercedes = Mercedes()
moj_mercedes.jazda()  # Output: Jadę Mercedesem!

Zasada 2: Hermetyzacja (Enkapsulacja) – znana również jako enkapsulacja, polega na ukrywaniu wewnętrznych danych obiektu i wymuszaniu interakcji z obiektem tylko za pośrednictwem metod. Pomaga to utrzymać integralność danych.

class KontoBankowe:
    def __init__(self):
        self.__bilans = 0  # atrybut prywatny
    
    def wpłata(self, kwota):
        self.__bilans += kwota
        return self.__bilans

konto = KontoBankowe()
print(konto.wpłata(500))  # Output: 500

Zasada 3: Dziedziczenie – umożliwia tworzenie nowych klas na podstawie istniejących klas, co ułatwia ponowne użycie oraz wspomaga organizację kodu.

class Zwierze:
    def mów(self):
        pass

class Pies(Zwierze):
    def mów(self):
        print("Hau, hau!")

azorek = Pies()
azorek.mów()  # Output: Hau, hau!

Zasada 4: Polimorfizm – pozwala obiektom różnych klas na bycie traktowanym jako obiekty wspólnej klasy, co prowadzi do prostszej implementacji i niższego sprzężenia kodu.

class Kot(Zwierze):
    def mów(self):
        print("Miau, miau!")

def opisz_zwierzę(zwierze):
    zwierze.mów()

opisz_zwierzę(azorek)  # Output: Hau, hau!
opisz_zwierzę(Kot())  # Output: Miau, miau!

Zrozumienie i zastosowanie zasad programowania obiektowego w Pythonie otwiera drzwi do pisania czystego, modularyzowanego i łatwo utrzymywalnego kodu. Nauczenie się tej koncepcji jest jak budowanie mostu między prostymi skryptami a pełnoprawnymi aplikacjami, które skutecznie odwzorowują złożoność rzeczywistości.

Kategorie
Uncategorized

Tworzenie aplikacji mobilnych: Wprowadzenie do Android i iOS developmentu


Cześć!

Rozwój aplikacji mobilnych stanowi niesamowitą przyjemność, ale także poważne zadanie. Aplikacje mobilne otaczają nas na każdym kroku, stanowiąc nieodłączny element naszych smartfonów. Nawiasem mówiąc, nawet podstawowa funkcja telefonu, jaką jest dzwonienie, została przekształcona w aplikację. Nie wspominając o wysyłaniu wiadomości tekstowych czy korzystaniu z komunikatorów — wszystko to realizowane jest poprzez różnorodne aplikacje. Ale jak zabrać się za ich tworzenie? Zajmiemy się tym zagadnieniem w dzisiejszym wpisie.


Rozwój Aplikacji na Androida

Android, będący systemem operacyjnym dla smartfonów stworzonym przez Google, zdominował rynek mobilny od czasu zaniku systemu Symbian, używanego mniej więcej 12 lat temu. Od tego momentu, Android nieprzerwanie prowadzi na arenie mobilnej, a nie wydaje się, aby miało to ulec zmianie w najbliższym czasie.

Tworzenie aplikacji na Androida najczęściej odbywa się przy użyciu języków Java lub Kotlin, z tym że Kotlin cieszy się większą popularnością ze względu na swoją nowoczesność, wygodę użytkowania oraz funkcjonalność.

Kluczowym elementem procesu programowania jest wybór odpowiedniego środowiska deweloperskiego. Tutaj na ratunek przychodzi Android Studio, dedykowane narzędzie ułatwiające programowanie aplikacji mobilnych. W znacznym stopniu opiera się na IDE (Środowisko Deweloperskie zintegrowane) dla Javy, oferując szereg potężnych narzędzi, na przykład do debugowania kodu.

Android SDK (Software Development Kit) stanowi kolejne istotne narzędzie, umożliwiając testowanie API aplikacji oraz wysyłanych przez nią zapytań. SDK zawiera także różnorodne biblioteki, co czyni go nieocenionym wsparciem dla programistów.

Nie można także pominąć kwestii projektowania interfejsów użytkownika, które również realizowane są w Android Studio, za pomocą języka XML.

Rozwój Aplikacji na iOS

Kto z nas nie słyszał o iOS, systemie operacyjnym zaprojektowanym na iPady, iPhone’y i iPody Touch? Rozwój aplikacji na platformę iOS najczęściej odbywa się przy użyciu języków Swift lub Objective-C, z wykorzystaniem narzędzi takich jak Xcode.

Swift, stworzony przez firmę Apple, jest zdecydowanie preferowany, dzięki swojej zgodności i doskonałej integracji z platformą iOS, wspieranej przez bogaty zestaw bibliotek i narzędzi debugowania.

Środowisko deweloperskie Xcode to kompletne narzędzie, umożliwiające testowanie, debugowanie oraz podgląd tworzonych aplikacji, wspierające zarówno język Swift, jak i Objective-C.

Podobnie jak w przypadku Androida, iOS SDK (Software Development Kit) zawiera kompletną dokumentację, narzędzia oraz biblioteki, które są niezbędne podczas procesu deweloperskiego, ułatwiając pracę nad API oraz innymi aspektami aplikacji.

Tworzenie aplikacji mobilnych może być wyzwaniem, ale jest także wyjątkowo satysfakcjonujące i opłacalne. Sektor ten oferuje ogromne możliwości, szczególnie dla programistów Androida, chociaż nie można zapominać, że rozwój i testowanie aplikacji mobilnych często bywa niedoceniane w branży IT. Znalezienie swojej niszy w tej dynamicznie rozwijającej się dziedzinie może okazać się doskonałą inwestycją w przyszłość. 😉

Kategorie
Uncategorized

Bezpieczeństwo aplikacji webowych: Najważniejsze aspekty i techniki

Cześć!

Chyba nie trzeba wspominać, jak ważne jest bezpieczeństwo użytkowników w internecie. Takie dane poufne jak imię i nazwisko razem z naszymi numerami kart kredytowych czy hasłami do banków jeśli wpadną w niepowołane ręce, mogą spowodować wiele problemów czy też nieprzyjemności. Ale jak i z czym to się je ’cyber security’?


Przyjrzyjmy się najważniejszym aspektom w bezpieczeństwie aplikacji:

  1. Autentykacja i zarządzanie tożsamością
    Autentykacja użytkowników może opierać się na wielu elementach, które będą niezbędne w uwierzytelnianiu: logowanie za pomocą haseł złożonych, logowanie za pomocą tokenów, dwuetapowa autentyfikacja — to wszystko ma nam pozwolić na to, żebyśmy bezpiecznie mogli zalogować się na swoje konta w bankach czy socjalach.
  2. Ochrona przed atakami XSS
    Ataki XSS to takie ataki, w których złośliwy kod js jest wstrzykiwany na stronie, przez co może wywołać wiele szkód. Ważnym elementem takiego zapobiegania tej podatności jest, aby strona, która przeglądamy, korzystała z CSP, czyli Content Security Policy i dobrze filtrowała dane wejściowe i wyjściowe.
  3. CSRF — ataki i jak się przed nimi bronić
    Te ataki polegają na tym, że za pomocą konta użytkownika w jego imieniu publikujemy za jego „zgodą” niechciane treści. Takimi atakami są na przykład włamywanie się na skrzynkę na Facebooku i wysyłanie automatycznych wiadomości do znajomych z prośbą o blika (płatność) 😉 
  4. Bezpieczeństwo bazy danych
    To jest to, co najbardziej kojarzy nam się z zabezpieczaniem danych, czyli zabezpieczenie danych, które są w naszych bazach. Ileż to się słyszy o wycieku danych klientów znanych korporacji… To właśnie na skutek nieodpowiedniej ochrony właśnie takich danych. 
  5. Aktualizacje i łatki (patche)
    Dobrym aspektem zabezpieczenia się przed niechcianymi atakami jest po prostu…aktualizacja wersji oprogramowania na stronach czy w aplikacjach. Jest to bardzo ważne, poniewaz kiedy korzystamy z jakiegoś oprogramowania, ono wciąż jest uaktualniane o nowe funkcjonalności pod względem bezpieczeństwa np. w przypadku, gdy pojawią się coraz to nowsze sposoby na kradzież danych.
  6. Audyt bezpieczeństwa
    Ważne jest regularne przeprowadzanie audytu bezpieczeństwa aplikacji tak samo jak jej testowanie czy też samo projektowanie aplikacji.

    Czasami gdy czytamy o sposobach, na jakie można pozyskać nasze dane czy jakie sposoby mają hakerzy, może nas rozboleć głowa… Ale spokojnie! ’Cyber Security’ to branża, która rozwija się bardzo intensywnie, a my sami musimy być po prostu ostrożni w internecie 🙂