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 🙂
Kategorie
Uncategorized

Działania na pętli ‘for’ – przykłady w JavaScript


Pętle w dowolnym języku programowania to rzecz, bez której ani rusz. Można powiedzieć, że programista bez pętli jest jak żołnierz bez karabinu… albo uczeń bez jedynki.

W dzisiejszym poradniku chcielibyśmy pokazać wam podstawy działań na pętli. Ale nie będą to przykłady typu:  

for (let i = 0; i < 5; i++) {
  console.log(i);
}

…Nauka programowania jest trochę jak nauka matematyki: widzi i rozwiązuje się przy tablicy proste przykłady, a potem nagle dostajemy od życia na głowę jakieś skomplikowane działania, przez które nie możemy przebrnąć.

Przejdźmy więc do pierwszego przykładu:

const obj = { miasto: 'Poznań', city: 'Województwo wielkopolskie' };
for (let key in obj) {
  console.log(key + ': ' + obj[key]);
}

Mamy tu zwykłą pętlę for. Iteruje się ona po każdym z elementów wypisując tylko console. log. Nic nam nie zwraca.

A jakbyśmy ją trochę „upiększyli”? Co może nam w ogóle robić taka pętla, do czego może nam służyć?
Np. do tego:

const wojewodztwa = [
'Województwo dolnośląskie',
    'Województwo kujawsko-pomorskie',
    'Województwo lubelskie',
    'Województwo lubuskie',
    'Województwo łódzkie',
    'Województwo małopolskie',
    'Województwo mazowieckie',
    'Województwo opolskie',
    'Województwo podkarpackie',
    'Województwo podlaskie',
    'Województwo pomorskie',
    'Województwo śląskie',
    'Województwo świętokrzyskie',
    'Województwo warmińsko-mazurskie',
    'Województwo wielkopolskie',
    'Województwo zachodniopomorskie'
];
miasta = [
    {miasto: 'Bydgoszcz', wojewodztwo: 'Województwo kujawsko-pomorskie'},
    {miasto: 'Poznań', wojewodztwo: 'Województwo wielkopolskie'},
    {miasto: 'Warszawa', wojewodztwo: 'Województwo mazowieckie'}
];

function stworzSpisMiastWWojewodztwach() {
const spis = []
    for (let wojewodztwo of wojewodztwa) {
      const object = {
        wojewodztwo: wojewodztwo,
        miasta: []
      }
      for (let miasto of miasta) {
        if (miasto.wojewodztwo === wojewodztwo) {
          console.log('pasuje', miasto.miasto)
          object.miasta.push(miasto)
        }
      }
      spis.push(object)
    }
    console.log('spis', spis)
}

Ok, a tak właściwie co tu się dzieje? Krótko mówiąc, mamy tu pętlę w pętli. Najpierw patrzymy po kolei na wszystkie województwa i każdemu z nich się przyglądamy, a potem na warsztat bierzemy po kolei każde miasto w odniesieniu do województwa. Czy dane miasto leży w danym województwie? Jeśli tak — wepchniemy to miasto do specjalnego obiektu, który reprezentuje nam w spisie jedno województwo. Tak jak widzicie, mamy w tym obiekcie napisaną nazwę województwa i tablicę ze wszystkimi miastami.
Na koniec wszystkie takie województwa wypychamy, do jednej tablicy otrzymując pełny, ładny spis.
Uf.
Nie musicie tego ogarniać już teraz. Ale zauważcie, że w przypadku pętli for mamy jedno znaczące słówko, bez którego by się to nie odbyło:


Dokładnie. of pomaga nam się literować po konkretnej treści tego obiektu, a nie indeksie. Gdybyśmy napisali coś takiego:

 for (let wojewodztwo in wojewodztwa) {
      console.log(wojewodztwo);
    }

Otrzymalibyśmy wypisanie w konsoli numerów od 0 do 15, czyli wypisałoby nam indeksy poszczególnych elementów w tablicy.

A jeśli wypiszemy taki kod, jak jest powyżej otrzymamy wynik:


To, co właśnie zrobiliśmy, to pętla zagnieżdżona 🙂

Kategorie
Uncategorized

Rozwiązywanie problemów programistycznych: Strategie i podejście

Cześć!

Zajmiemy się dzisiaj rozwiązywaniem problemów, czyli odwieczną bolączką programistów. Nie jest tajemnicą, że ponad 50% pracy programisty to rozwiązywanie problemów 😉 Zwłaszcza takich, które stworzył ktoś inny, ale zdarza się też, że debugujemy własny kod… Niestety, rozwiązywanie problemów programistycznych to odwieczny problem. Na szczęście, istnieje wiele technik, dzięki którym ułatwisz sobie pracę nad dowolnym problemem 🙂


1. Rozbicie problemu na pierwsze części
Często zadania, jakie przed Tobą stoją, mogą być trudne do rozwiązania jako całość. Najlepiej przyjrzeć się wtedy problemowi i popatrzeć na niego jak na jednostkę -> rozbić na części pierwsze. Możesz zidentyfikować kluczowe kroki, funkcje lub moduły, aby ogarnąć, gdzie leży problem.

2. Debugowanie za pomocą kaczuszki
Sposób stary jak IT: wytłumaczenie komuś, co właściwie dzieje się z kodem, jak on działa i co próbujemy zrobić. Inna zasada takiego debugowania jest określenie 3 kroków:
a) co próbujemy zdziałać?
b) co dokładnie nie działa, w czym jest problem?
c) jakie są możliwe rozwiązania tego problemu?

Dzięki temu łatwiej nam będzie zrozumieć, co dokładnie ma robić ten kod.

3. Rozbicie kodu na części „po kolei”
Czyli zakomentowanie całego kodu i odkomentowanie po kawałeczku, by sprawdzić, w którym fragmencie kodu problem występuje. Nauczyłem się tego sposobu w swojej pierwszej pracy jako programista. To dość słuszna metoda pozwalająca nam określić, w którym kawałku kodu coś ewidentnie „nie zatrybiło” 😉

4. Kreatywne myślenie i eksperymentowanie
Gdy mamy przed sobą jakiś problem, często jesteśmy ‘zafiksowani’ na punkcie jednego rozwiązania, które ewidentnie nie działa. Może warto spróbować podejść problem od innej strony, może nie to o czym myślimy jest problemem? Wbrew pozorom programowanie to bardzo kreatywna dziedzina 😉

5. Optymalizacja i planowanie
Ta część bardziej odnosi się do tego, jak zapobiegać takim problemom. Ważne jest to, by nie iść na żywioł i zaplanować dokładnie, jak ten kod ma wyglądać. Ważna jest też optymalizacja kodu pod względem jego czystości: Odpowiednio napisany kod, który jest czytelny i przejrzysty, zapobiega takim błędom.

Ważne jest nie tylko samo rozwiązywanie problemów, ale debugowanie i zapobieganie im, o czym pisałem w jednym z poprzednich artykułów. Debugowanie kodu może być trudne, ale ‘problem solving’ zaowocuje nie tylko w postaci bycia dobrym programistą, ale i byciem osobą, która na co dzień nie ma problemu z decyzyjnością i rozwiązywaniem problemów dnia codziennego 🙂

Kategorie
Uncategorized

Bazy danych i SQL: Podstawy zarządzania danymi

Cześć!

Dzisiaj zrobimy sobie krótkie wprowadzenie do bazy danych i języka SQL, bowiem często bywa tak, że bez nich ani rusz 🙂 Więc czym są te tajemnicze bazy danych i w ogóle to wszystko, co się z tym wiąże?

Bazy danych to inaczej środowiska, w których dane są przechowywane. Najczęściej pod postacią tabel lub list. Bazy służą też do zarządzania tymi danymi, zmieniania ich, więc nie tylko do przechowywania. Ale jak się organizować z tymi danymi? I tu przychodzi nam z pomocą język SQL.
SQL (Structured Query Language) to prosty język zapytań do bazy danych, którym możemy dowolnie manipulować danymi. Jest używany do komunikacji z bazami danych. Ale zanim przejdziemy do podstaw SQL, przyjrzyjmy się podstawowym pojęciom związanym z bazami danych.

1. Baza danych
Wg. Definicji Baza danych to zbiór powiązanych informacji przechowywanych w uporządkowany sposób. Może zawierać tabele, relacje, indeksy i inne struktury danych. Mogą być one zorganizowane na różne sposoby, na przykład hierarchicznie lub listowo. 

2. Tabela

Tabela to struktura danych, która przechowuje dane za pomocą kolumn i wierszy. Tabela zawiera kolumny, które definiują, jakie dane znajdują się w tabelce i jakiego typu, a wiersze — rekordy tabeli, czyli dane, które ona przechowuje. 


3. Klucz główny

Klucz główny, inaczej: primary key to osobny identyfikator dla każdego rekordu. Po tym właśnie indeksujemy i rozpoznajemy rekordy. Zazwyczaj takim primary key jest id, ale możemy go zdefiniować inaczej, w zależności od potrzeb. 


4. Relacje

To związki między tabelkami w bazie danych, inaczej relacje między nimi. Często jest tak, że tabele są ze sobą powiązane konkretnymi rekordami, i konkretnymi kluczami. Mamy primary key, który definiuje rekord w wybranej, basickowej tabeli, ale mamy również klucz obcy odwołujący się do innej tabeli. W ten sposób mamy cały schemat wszystkich tabel gotowy w bazie.


5. Zapytania SQL

Zapytania SQL to komendy, którymi wysyłamy konkretne polecenia do bazy danych, aby na przykład: pokazała nam wszystkie rekordy z danej tablicy, aby nam usunęła, dodała rekordy, aby zmieniła poszczególne komórki gdzie np. id=1 lub wartości boolean dla jakiejś kolumny wynoszą w rekordach true… i tak dalej. Podstawowe komendy to SELECT, INSERT, UPDATE I DELETE.  Często piszemy komendy dużymi literami dla czytelności.

Na razie tyle wam wystarczy, abyście mieli podstawowe pojęcie, czym są bazy danych. A ta wiedza jest niezbędna nawet dla frontendowca 🙂

Jeżeli chcesz dobrze opanować SQL zapraszam do kursu: https://www.udemy.com/course/jezyk-sql-w-praktyce/?referralCode=8EC14158D9085568DAA8

Kategorie
Uncategorized

Frameworki testowe – Przykłady i wybór odpowiedniego narzędzia


Cześć!

Jak pewnie wiesz testowanie oprogramowania, jest niezwykle ważne. To dzięki niemu wyłapujemy błędy na frontendzie, np. gdy jakiś przycisk jest nieklikalny, to również dzięki niemu znajdujemy nieprawidłowości w zapytaniach http czy przechwytujemy, co powinno nam zwrócić, by strona działała prawidłowo. Można powiedzieć, że testowanie jest jak ‘masło’ na kanapkę — niezbędne 😉

Przyjrzyjmy się zatem głównym narzędziom, które możesz wykorzystać do testowania swojej aplikacji:

1. Selenium — najpopularniejszy Framework do testowania aplikacji internetowych. Służy do testowania interfejsów użytkownika w aplikacjach webowych. Wykorzystuje Javę, C#, Python, Ruby itp. do tworzenia testów automatycznych.

2. Playwright — Playwright to narzędzie do testowania przeglądarek stworzone przez Microsoft. Pozwala na automatyzację działania przeglądarek webowych w celu testowania aplikacji internetowych.

3. Cypress — to framework do testowania zarówno API jak i interfejsów użytkownika. W Cypressie piszemy testy za pomocą języka JavaScript. Cypress zapewnia debugowanie testów, automatyczne odświeżanie i wiele innych. Jest bardzo przyjemny w użytkowaniu oraz można wykonywać w nim testy E2E.

4. JUnit — to popularny framework do testowania jednostkowego w języku java. Jest stosowany w większości projektów opartych na javie. Umożliwia również tworzenie raportów i integrację z różnymi środowiskami programistycznymi.

5. pyTest – to framework przeznaczony do testowania w  języku Python. Podobnie jak Cypress powiada wiele funkcji i wbudowanych asercji. Wykorzystuje się go zarówno do testów jednostkowych, jak i testowania API.

Mamy już wymienione popularne frameworki do pisania testów, choć pominęliśmy mniej popularne takie jak Cucumber i TestNG. Ok, ale jak wybrać odpowiedni Framework? To zależy, co Cię interesuje. Najlepiej to odkryć, kiedy możesz „liznąć” każdego z typów testowania, więc polecam zacząć od Selenium webdriver lub Playwrighta/Cypressa.  Zwłaszcza Cypress jest bardzo intuicyjnym frameworkiem, który możesz wykorzystać zarówno do testów API jak i do interfejsów.
Ważny jest też język programowania. Jeżeli wybrałeś/aś sobie Javę, polecamy JUnit lub Selenium.

Wszystko zależy od tego, jakiego języka wcześniej się uczyłeś/aś.  Ja na początek zawsze będę polecał Pythona, który jest najłatwiejszy do przyswojenia, a wiadomo, jak już raz nauczymy się pewnych schematów, to łatwiej będzie je wykorzystać przy nauce innego języka.

Od lat języki najczęściej wykorzystywane do testowania to: Java, Python oraz JavaScript. Warto trzymać się tego core’u, gdy wybieramy język i framework do nauki testowania.

Kategorie
Uncategorized

Wprowadzenie do HTML, CSS i JavaScript

Cześć!

W tym artykule postaram się wam przybliżyć, czym właściwie jest HTML, CSS i JavaScript.

1. HTML
Html to skrót od HiperText Markup Language. To tak naprawdę nie jest język programowania, ale język kodowania. Ma za zadanie zbudować całą strukturę Interfejsu aplikacji. Za pomocą takich znaczników jak <div> czy <p> definiuje, jak ma wyglądać drzewo DOM, czyli struktura wszystkich elementów na stronie.

2. CSS
CSS to skrót od Cascading Style Sheets, czyli tworzy style danych elementów. Pozwala nam wystylizować dane elementy html tak, by wyglądały bardziej ludzko 🙂 Podobnie jak html, jest to język kodowania, choć całkiem przyjemny i prosty. Do czego go można użyć? Na przykład do zmiany koloru tła, dodania obrazka w backgroundzie czy zaokrąglenia boków diva na stronie internetowej.

3. JavaScript
Jest to język programowania skryptowego, który umożliwia nam interakcję pomiędzy elementami html, pozwala nimi manipulować w dowolny sposób. Służy nie tylko do budowania interakcji na stronie, ale i również do testowania, a także ma wiele więcej praktycznych zastosowań.
Wartościowy kurs z języka JavaScript znajdziesz pod linkiem: https://www.udemy.com/course/javascript-typescript-w-praktyce/?referralCode=E4DE403E0696CADC8556

4. Podstawy w praktyce
Aby zbudować aplikację, pierwsze co robimy to budowanie drzewa DOM w html. Wiadomo, że gdy budujemy dom, najpierw muszą powstać fundamenty i szkielet 😉 Więc przystępujemy do tworzenia naszego ‘szkieletu’:

<!DOCTYPE html>
<html>
<head>
  <title>Moja strona</title>
  <link rel=”stylesheet” type=”text/css” href=”styles.css”>
</head>
<body>
  <h1>Witaj na mojej stronie!</h1>
  <p>To jest przykładowy paragraf.</p>

  <script src=”script.js”></script>
</body>
</html>


Jak zauważyliście, mamy już w tym szkielecie podpięty CSS i JavaScript. Ale zanim przejdziemy do bardziej skomplikowanej rzeczy, pokażmy, jak wyglądają CSSy dla tej naszej małej aplikacji:

h1 {
  color: blue;
}

p {
  font-size: 18px;
}


h1 to nagłówek strony, natomiast p to paragraph. W tym przypadku kolor czcionki na h1 zmieniliśmy na niebieski, a rozmiar czcionki na p: 18px.

A teraz najprzyjemniejsza rzecz! (przynajmniej wg. mnie 😉):

Kod js dla tej aplikacji będzie wyglądał tak:

var header = document.querySelector(‘h1’);
header.addEventListener(‘click’, function() {
  header.style.color = ‘red’;
});


To jest kod, który w przypadku kliknięcia na h1, zmieni to kolor na czerwony.

Są to tylko podstawy, ale warto się ich nauczyć. Więcej możesz się dowiedzieć z naszych artykułów na stronie, lub wykorzystać do nauki darmowe zasoby takie jak: https://www.w3schools.com/css/  (dla CSS), https://www.w3schools.com/html/default.asp (dla html) czy https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide (dla JavaScriptu).