background image

Etapy życia oprogramowania : 

 

model kaskadowy 

 

model prototypowy 

 

model przyrostowy (iteracyjny) 

 

model równoległy 

 

programowanie zwinne (ang. agile programming) 

 

programowanie ekstremalne (ang. extreme programming) 

 

model spiralny 

 

Rational Unified Process 

 

Testowanie oprogramowania – proces związany z wytwarzaniem oprogramowania. Jest to jeden z 
procesów zapewnienia jakości oprogramowania. Testowanie ma na celu weryfikację oraz walidację 
oprogramowania. Weryfikacja oprogramowania ma na celu sprawdzenie, czy wytwarzane 
oprogramowanie jest zgodne ze specyfikacją. Walidacja sprawdza, czy oprogramowanie jest zgodne z 
oczekiwaniami użytkownika. Testowanie oprogramowania może być wdrożone w dowolnym 
momencie wytwarzania oprogramowania (w zależności od wybranej metody). W podejściu 
klasycznym największy wysiłek zespołu testerskiego następuje po definicji wymagań oraz po 
zaimplementowaniu wszystkich zdefiniowanych funkcjonalności. Nowsze metody wytwarzania 
oprogramowania (np. Agile), skupiają się bardziej na jednostkowych testach wykonywanych przez 
członków zespołu programistycznego, zanim oprogramowanie trafi do właściwego zespołu testerów. 

Podział testów  

 

na testy elementów systemu (klas, komponentów, podsystemów, systemowe) 

 

na białoskrzynkowe oraz czarnoskrzynkowe (inaczej testy strukturalne i niestrukturalne) 

 

na testy warstw (testy funkcjonalne - testujące warstwę logiki biznesowej, testy API, testy UI, 

testy GUI, testy warstwy danych,...) 

 

na testy wymagań (wszystkie testy weryfikujące zgodność implementacji z wymaganiami, np. 

testy funkcjonalne, testy GUI), w tym testy niefunkcjonalne - por. klasyfikacja wymagań (i 

testów) FURPS+ zdefiniowana w ramach Rational Unified Process (RUP) oraz testy 
implementacji (testy weryfikujące zgodność implementacji z założeniami programisty, np. testy 

jednostkowe) 

Częstym błędem jest utożsamianie testów funkcjonalnych z testami czarnej skrzynki, podczas gdy 
testy funkcjonalne mogą wymagać znajomości kodu źródłowego (rzadziej, np. w systemach czasu 
rzeczywistego może być wymagana znajomość struktury pakietów danych przesyłanych w 
protokołach transmisji) lub nie (częściej). Testy funkcjonalne należą do innego kryterium podziału niż 

testy czarnej-skrzynki. 

 

 

background image

Dodatkowo można wyróżnić testy wykonane w określonym celu: 

 

retesty – testy poprawek błędów 

 

testy regresywne – testy niezmienionych części oprogramowania po wykonaniu zmian. 

Poziomy testowania 

Testy dzieli się na pięć poziomów: 

 

testy jednostkowe 

 

testy integracyjne wewnętrzne 

 

testy systemowe 

 

testy integracyjne zewnętrzne 

 

testy akceptacyjne albo testy alfa i testy beta 

 

Weryfikacja – sprawdzenie, działanie zmierzające do rozstrzygnięcia prawdziwości danego zdania 

Diagram interakcji w języku UML służy do opisu zależności przy przesyłaniu komunikatów 
pomiędzy obiektami, czyli zależności w przepływie sterowania pomiędzy obiektami. 

System kontroli wersji (ang. version/revision control system) – oprogramowanie służące do śledzenia 
zmian głównie w kodzie źródłowym oraz pomocy programistom w łączeniu zmian dokonanych w 
plikach przez wiele osób w różnych momentach czasowych. 

Systemy kontroli wersji dzielone są według: 

 

architektury oprogramowania 

 

licencji oprogramowania 

 

sposobu oceny zamian 

Systemy kontroli wersji dzielą się na: 

 

lokalne, pozwalające na zapisanie danych jedynie na lokalnym komputerze (np. SCCS oraz RCS) 

 

scentralizowane, oparte na architekturze klient-serwer (np. CVS, Subversion) 

 

rozproszone, oparte na architekturze P2P (np. BitKeeper, Code Co-op, svk, Git). 

 

Dobre praktyki programistyczne 

1. Zawsze używaj systemu kontroli wersji, nawet gdy nad projektem pracuje tylko jeden programista. 
Gdy coś się stanie, nie stracisz nigdy całego kodu, możesz też w pełni skorzystać z historii 
repozytorium. 

2. Nie używaj komentowania do usuwania kodu, po prostu go kasuj. Kontrola wersji zadba o dostęp 
do skasowanych fragmentów. 

background image

3. Umieszczaj w jednej przestrzeni klasy, które zmieniają się albo są używane razem. 

4. Używaj pozytywnych warunków, negacje są trudniejsze do zrozumienia niż pozytywne warunki. 

5. Używaj wstrzykiwania zależności do zarządzania zbyt dużą ilością singletonów. 

6. Nie używaj zbyt wiele argumentów metod. Utrzymaj ich liczbę maksymalnie na poziomie 8-10. 
Jeżeli masz ich więcej, przejrzyj jeszcze raz projekt. 

7. Nie pisz różnych metod dla różnych konfiguracji parametrów binarnych np. metoda(bool 
CzyWlaczyc, bool CzyObsluzyc)
 itp. 
8. Nazwa metody musi zawierać informację, co ta metoda robi. 

9. Unikaj metod z parametrami, które są referencjami. Używaj obiektów parametrów z wieloma 
atrybutami. 

10. Używaj zrozumiałych komentarzy. Zły komentarz jest gorszy niż jego brak. 

Audyt projektów informatycznych - Celem audytu projektu jest wyrażenie przez zespół audytorów 
pisemnej opinii wraz z raportem o tym, czy projekt realizowany jest w zgodzie ze światowymi 
praktykami i standardami, zgodnie z założoną metodyką, prawidłowo i rzetelnie w obszarze 
osiąganych efektów, prawidłowo i rzetelnie w obszarze prowadzenia dokumentacji finansowej 
projektu. 

Inżynieria wymagań to proces pozyskiwania, analizowania, dokumentowania oraz weryfikowania 
wymagań dla projektowanego systemu. 

Celem inżynierii wymagań jest: 

pozyskanie informacji pozwalających na określenie wymagań, 

zidentyfikowane wymagań i ich kategorii, 

analiza wymagań (jednoznaczność, spójność, zgodność z założeniami), 

opisanie wymagań — opracowanie specyfikacji wymagań, 

weryfikacja wymagań, 

zarządzanie zmianami wymagań w trakcie realizacji projektu. 

 

Wymagania funkcjonalne: 

określają jaki pożądane z punktu widzenia zamawiającego funkcje powinien  

posiadać system, 

powinny pozwolić na realizację określonych wymagań biznesowych i prowadzić  

do celu systemu określonego w jego wizji i zakresie, 

background image

specyfikują co system ma realizować a nie jak ma to być zrobione. 
 

Wymagania niefunkcjonalne: 
określają pożądane cechy systemu, nie wpływając bezpośrednio na istnienie  

konkretnych funkcji; wpływają jednak zwykle na to, jak te funkcje będą realizowane. 

 

Specyfikacją wymagań dla oprogramowaniu lub systemu — ang. Software  

Requirements Specification (SRS) jest oficjalną deklaracją tego, co jest  

wymagane od wytwórców systemu przez zleceniodawcę. 

Dokument SRS nie jest dokumentem projektowym, stanowi materiał wejściowy  

dla analityków i projektantów systemu. 

 

Programowanie (z ang. software) - to różnego rodzaju programy komputerowe, aplikacje, których 
celem jest funkcjonalność i użyteczność. 

Edytory dokumentów: 

Edytory tekstu - dzielą się na proste i bardziej skomplikowane programy oferujące poza edycją tekstu, 
wstawianie grafiki. Do tych prostych należą: w środowisku Unixowym - vi (edytor konsolowy), pod 
Windowsem - notatnik, natomiast te bardziej rozbudowane to np. pod Windowsem - Word należący 
do pakietu Office czy WordPad - domyślnie instalowany, zaś dla systemów Unixowych - Writer w 
pakiecie Open Office oraz dość zaawansowana Aurora dla systemu DOS. 

Pakiety biurowe - są zestawem programów przeznaczonych do celów głównie biurowych. Do 
najpopularniejszych należą: Microsoft Office (Windows) i Open Office (różne platformy: Linuks, 
Unix, Windows, Solaris). 

Edytory HTML - czyli programy do tworzenia dokumentów HTML. Powszechnie używanymi są: 
Pajączek, Tiger (płatne pod Windowsa) czy Bluefish (Linuks). 

Skład tekstu - to m.in. programy do tworzenia czcionek - FontForge czy programy do profesjonalnego 
składania tekstów naukowych - TeX. 

Programy multimedialne: 

Edytory graficzne - przeznaczone do modyfikacji i tworzenia obrazów są klasyfikowane pod 
względem techniki ich tworzenia, stąd można wyróżnić programy przeznaczone do grafiki wektorowej 
(obrazy są zapamiętane jako figury geometryczne) i rastrowej (obraz jest przedstawiany w postaci 
dwuwymiarowej tablicy pikseli). Następny wyróżnik stanowi wymiar, w jakim prezentujemy obraz 
(2D - płaski obraz, 3D - obraz przestrzenny). Przykładowe programy do: 

Grafiki wektorowej / 2D: CorelDraw, Adobe Illustrator, AutoCAD 

Grafiki bitmapowej (rastrowej): Adobe Photoshop, GIMP, ACDSee, IrfanView 

background image

Grafiki 3D: 3D Studio, Blender 

Edytory dźwięku - programy edytujące pliki dźwiękowe (np. Audacity) albo komponujące muzykę 
(np. Tracker). 

Edytory video - programy służące do montażu filmów cyfrowych. Popularnym programem jest 
Pinnacle Studio. 

Odtwarzacze multimedialne - odtwarzanie plików multimedialnych, obsługa zarówno plików 
dźwiękowych jak i video, możliwość korzystania z internetowych stacji radiowych i telewizyjnych. 
Do znanych programów tego typu należą: Windows Media Player, Winamp, iTunes, QuickTime. 

Programy archiwizujące - programy wykonujące kopie zapasowe różnego typu danych, czyli 
archiwizację (z ang. backup) w celu zabezpieczenia na wypadek ich zniszczenia. W ramach tworzenia 
kopii dane ulegają dodatkowo kompresji (zmniejszeniu objętości). Najczęściej stosowane programy 
to: WinRAR, WinZip, Filip. 

Bazy danych - programy przeznaczone do magazynowania dużej ilości danych w sposób trwały, 
przeglądania, modyfikowania, dodawania i usuwania danych oraz kontroli i ochrony przed błędnymi 
operacjami czy niedozwolonym dostępem. Bazy danych operują głównie na danych tekstowych i 
liczbowych, ale jest możliwe też przeprowadzani operacji na danych binarnych takich, jak muzyka czy 
grafika.Dane są zazwyczaj przechowywane w postaci tabel i formularzy. Przykładowe programy 
obsługujące bazy danych: Access (Microsoft Office), Base (Open Office), SQL, PostgreSQL, Oracle, 
etc. 

Języki programowania - stanowią narzędzie do tworzenia własnych aplikacji bądź modyfikacji już 
istniejących. 

Wyróżniamy: 

Języki niskiego poziomu - zbliżone do kodu maszynowego tzn. są niemal bezpośrednio "zrozumiałe" 
dla komputera, przez co ich kompilacja nie jest tak skomplikowana jak dla języków wysokiego 
poziomu. Najbardziej znanym językiem niskiego poziomu jest Asembler. 

Języki wysokiego poziomu - ich składnia jest przyjazna dla programisty, natomiast niezrozumiała dla 
komputera, przez co proces kompilacji jest bardziej skomplikowany. Do tych języków zaliczamy: C, 
C++, C#, Java, PHP. 

Programy edukacyjne - wspomaganie procesu nauczania i nauki a nawet ich zastąpienie, alternatywa 
dla tradycyjnych metod uczenia się. Ich różnorodność sprzyja dotarciu do wielu użytkowników o 
indywidualnym podejściu do nauki. Do programów edukacyjnych należą: encyklopedie 
multimedialne, gry logiczne i strategiczne, testy, symulacje, etc, 

Programy do obliczeń naukowo - technicznych - m.in. Maple - rozwiązuje zaawansowane problemy 
matematyczne, Matlab - wykonywanie obliczeń naukowych i inżynierskich oraz tworzenie symulacji i 
wizualizacji, Derive - obliczenia symboliczne podparte dwu- i trójwymiarowym obrazowaniem, 
Gnuplot - tworzenie wykresów w 2 i 3 wymiarach. 

Programy specjalistyczne - przeznaczone dla różnych branż, wspomagające ich rozwój i 
zarządzające nimi, np. programy do projektowania domów, wnętrz i ogrodów, wspomagające biuro 
nieruchomości, gabinety lekarskie, giełdę, programy bankowe, finansowe, związane z księgowością 
itd. 

background image

Programy związane z siecią: 

Poczta elektroniczna - aby możliwe była obsługa poczty elektronicznej potrzebny jest program 
serwerowy np. Sendmail, qmail, program do wysyłania i odbioru poczty, np. Microsoft Outlook, 
Netscape Messenger, KMail oraz skrzynka np. udostępniane przez portale: wp.pl, o2.pl, onet.pl, itd. 

Komunikatory - programy umożliwiające komunikację w sieci Internet drogą tekstową, głosową czy 
przez videokonferencję. Niektóre z nich łączą wszystkie 3 możliwości. Najpopularniejsze z nich to: 
gadu-gadu (mało stabilny), tlen.pl, konnekt, skype (komunikator głosowy), Jabber czy Kadu (pod 
Linuksem). 

Zdalny dostęp - umożliwia połączenie się klienta z serwerem za pomocą protokołu telnet czy 
szyfrowanego ssh na przykładzie PuTTY. 

Pobieranie i współdzielenie plików - polega to na wyszukiwaniu w sieci plików i znajdowanie do nich 
źródeł. Znane programy to: BitTorrent, eMule itd. 

Przeglądarki internetowe - programy zajmujące się obsługą dokumentów HTML, XHTML, XML, 
CSS technologii: JavaScript, PHP, Java, Macromedia Flash, ciasteczek (Cookies) czy plików 
multimedialnych (często za pomocą wtyczek). Do popularnych przeglądarek należą: Opera, Firefox, 
Konqueror czy IE (Internet Explorer). 

Programy związane z bezpieczeństwem: 

Programy antywirusowe - ich celem jest zarówno ochrona przed potencjalnymi atakami programów 
wirusowych, jak i wykrywanie, zwalczanie oraz usuwanie wirusów, które już znalazły się w 
komputerze. Programy te zazwyczaj zawierają co najmniej dwie opcje (różne nazewnictwo): 

Skanowanie - badanie plików na obecność wirusów i innych zagrożeń; sprawdza w zależności od 
wybranej opcji: cały komputer, pocztę elektroniczną, konkretne dyski czy pliki, które wydają się nam 
podejrzane 

Autodiagnostyka - można ją ustawić automatycznie przy starcie systemu, na bieżąco będzie sprawdzać 
ochronę komputera i wyświetlać komunikaty ostrzegawcze w razie jakiś nieprawidłowości 

Do innych usług programów antywirusowych należą: ciągła aktualizacja nowych definicji wirusów, 
ochrona przed szkodliwym oprogramowaniem (z ang. malware), ochrona danych i prywatności 
użytkownika (sprawdzanie nieautoryzowanego dostępu), także zawierają zapory sieciowe. Do znanych 
programów należą: Kaspersky Anti-Virus, Panda Platinum, Norton AntiVirus. 

Zapory sieciowe (z ang. firewall) - większość programów antywirusowych w swoim pakiecie zawiera 
ten program. Służy on do zabezpieczania komputerów i sieci przed intruzami, tzn. blokuje dostęp do 
komputera, na którym jest zainstalowany przed niepożądanymi osobami, programami śledzącymi. 
Przykładowe firewalle: Sygate Personal Firewall, ZoneAlarm czy Norton Personal Firewall. 

Filtry antyspamowe - wykrywają, co jest spamem, czyli niechcianą pocztą i na tej podstawie filtrują 
przesyłane maile. 

Szyfrowanie - w celu ochrony danych, prywatności. Można szyfrować zarówno dyski, różnego 
rodzaju pliki na komputerze, jak wykorzystać do przesyłania informacji w sposób bezpieczny 
(szyfrowany transfer) np. korzystając z protokołu ssh. 

background image

Debugger- program komputerowy służący do dynamicznej analizy innych programów, w celu 
odnalezienia i identyfikacji zawartych w nich błędów, zwanych z angielskiego bugami (robakami). 

Programowanie strukturalne to paradygmat programowania zalecający hierarchiczne dzielenie kodu 
na bloki, z jednym punktem wejścia i jednym lub wieloma punktami wyjścia. Chodzi przede 
wszystkim o nieużywanie (lub ograniczenie) instrukcji skoku (goto). Dobrymi strukturami są np. 
instrukcja warunkowe (if, if...else), pętle (while, repeat), wyboru (case, ale nie switch z C i 
potomnych). Strukturalność zakłócają instrukcje typu: break, continue, switch (w C itp.), które jednak 
w niektórych przypadkach znacząco podnoszą czytelność kodu.