Oprogramowanie

Oprogramowanie () – ogół informacji w postaci zestawu instrukcji, zaimplementowanych interfejsów i zintegrowanych danych przeznaczonych dla komputera do realizacji wyznaczonych celów. Celem oprogramowania jest przetwarzanie danych w wyznaczonym przez twórcę zakresie. Określenie „oprogramowanie” może funkcjonować jako synonim terminów „program komputerowy” oraz „aplikacja”, przy czym stosuje się je zazwyczaj na oznaczenie większych programów oraz ich zbiorów.

Oprogramowanie tworzą programiści w procesie programowania. Oprogramowanie jako przejaw twórczości jest chronione prawem autorskim, twórcy zezwalają na korzystanie z niego na warunkach określanych w licencji.

Oprogramowanie pisane jest zazwyczaj przy użyciu różnych języków programowania z wykorzystaniem algorytmów. Programy przekształcające oprogramowanie z postaci źródłowej na binarną to kompilatory. Niektóre rodzaje oprogramowania napisane w całości w językach interpretowanych, mogą występować tylko w jednej postaci, spełniającej zadania źródła i programu wykonywalnego.

Historia 
Zarys (algorytm) tego, co byłoby pierwszym oprogramowaniem, napisała Ada Lovelace w XIX wieku dla planowanej maszyny analitycznej. Jednak ani kompletna maszyna analityczna, ani oprogramowanie do niej nie zostały opracowane.

Pierwsza teoria na temat oprogramowania (przed stworzeniem dzisiejszych komputerów) została zaproponowana przez Alana Turinga w jego eseju opublikowanym w roku 1936. Doprowadziło to ostatecznie do powstania bliźniaczych akademickich dziedzin informatyki i inżynierii oprogramowania, które zarówno badają oprogramowanie, jak i jego tworzenie. Informatyka jest bardziej teoretyczna (esej Turinga jest przykładem informatyki), natomiast inżynieria oprogramowania koncentruje się na bardziej praktycznych zagadnieniach.

Przed rokiem 1946 oprogramowanie jakie teraz znamy, czyli programy przechowywane w pamięci komputerów cyfrowych – jeszcze nie istniało.

Narzędzia do programowania 
Narzędzie programistyczne to również oprogramowanie w postaci programów lub aplikacji internetowych, które twórcy oprogramowania (zwani również programistami lub inżynierami oprogramowania) używają do tworzenia, debugowania, utrzymywania (tj. ulepszania lub naprawiania). Oprogramowanie jest napisane w jednym lub kilku językach programowania. Istnieje wiele języków programowania i każdy ma przynajmniej jedną implementację, z których każda składa się z własnego zestawu narzędzi programistycznych. Narzędzia te mogą być względnie samodzielnymi programami, takimi jak kompilatory, debuggery, interpretery, łączniki i edytory tekstu, które można łączyć w celu wykonania zadania. Mogą one również tworzyć zintegrowane środowisko programistyczne (IDE), które łączy w sobie wiele funkcji takich samodzielnych narzędzi.

Architektura 
Użytkownicy często postrzegają istotę oprogramowania inaczej niż programiści. Osoby korzystające z nowoczesnych komputerów ogólnego przeznaczenia (w przeciwieństwie do systemów wbudowanych, komputerów analogowych i superkomputerów) zazwyczaj widzą trzy warstwy oprogramowania wykonującego różnorodne zadania: platformę, aplikację i oprogramowanie użytkownika.

 Oprogramowanie platformy

Platforma obejmuje oprogramowanie sprzętowe, sterowniki urządzeń, system operacyjny i zazwyczaj graficzny interfejs użytkownika, który pozwala użytkownikowi na interakcję z komputerem i jego urządzeniami peryferyjnymi.

 Oprogramowanie napisane przez użytkownika

Systemy do projektowania dostosowane do specyficznych potrzeb użytkowników. Oprogramowanie użytkownika obejmuje szablony arkuszy kalkulacyjnych i szablony edytorów tekstów. Nawet filtry poczty e-mail są rodzajem oprogramowania użytkownika. Użytkownicy tworzą to oprogramowanie samodzielnie. W zależności od tego, w jakim stopniu oprogramowanie napisane przez użytkownika zostało zintegrowane z domyślnymi pakietami aplikacji, wielu użytkowników może nie być świadomych rozróżnienia między oryginalnymi pakietami, a tym, co zostało dodane przez współpracowników.

Wykonanie 
Oprogramowanie komputerowe musi zostać „załadowane” do pamięci komputera (np. dysku twardego lub pamięci). Proces ten obejmuje przekazywanie instrukcji z oprogramowania aplikacyjnego, poprzez oprogramowanie systemowe, do sprzętu, który ostatecznie otrzymuje instrukcję jako kod maszynowy. Każda instrukcja powoduje, że komputer przeprowadza operację przesuwając dane, wykonując obliczenia lub zmieniając sterowanie instrukcjami.

Przesyłanie danych odbywa się zwykle z jednego miejsca w pamięci do drugiego. Czasami obejmuje to przenoszenie danych między pamięcią a rejestrami, które umożliwiają szybki dostęp do danych w CPU. Przenoszenie danych, zwłaszcza dużych ich ilości, może być kosztowne. Czasami unika się tego, wykorzystując zamiast tego „wskaźniki” do danych. Obliczenia obejmują proste operacje, takie jak zwiększanie wartości zmiennego elementu danych. Bardziej skomplikowane obliczenia mogą obejmować wiele operacji.

Jakość i niezawodność 
Jakość oprogramowania jest bardzo istotna, szczególnie w przypadku oprogramowania komercyjnego i systemowego, takiego jak Microsoft Office, Microsoft Windows i Linux. Wadliwość oprogramowania może na przykład doprowadzić do awarii komputerowej.

Oprogramowanie często jest również ofiarą tak zwanego starzenia się, postępującej degradacji wydajności wynikającej z kombinacji niewidocznych błędów. Wiele błędów jest odkrywanych i eliminowanych (debugowanych) podczas testowania oprogramowania. Jednak testowanie oprogramowania rzadko – jeśli w ogóle – eliminuje każdy błąd. Niektórzy programiści mówią, że „każdy przetestowany program ma co najmniej jeszcze jeden błąd” (prawo Lubarskiego).

Oprogramowanie można testować za pomocą testów jednostkowych, testów regresji i innych metod, które są wykonywane ręcznie lub najczęściej automatycznie, ponieważ ilość kodu do przetestowania może być dość duża. Na przykład NASA ma wyjątkowo rygorystyczne procedury testowania oprogramowania dla wielu systemów operacyjnych i funkcji komunikacyjnych. Wiele operacji opartych na NASA wchodzi w interakcje i identyfikuje się nawzajem za pomocą programów sterujących. Dzięki temu wiele osób pracujących w NASA może sprawdzać i oceniać ogólnie systemy funkcjonalne. Programy zawierające oprogramowanie sterujące pozwalają na łatwiejsze współdziałanie inżynierii sprzętowej i operacji systemowych.

Rodzaje oprogramowania 
Oprogramowanie dzieli się ze względu na przeznaczenie:
 oprogramowanie systemowe – realizujące funkcje konieczne dla działania systemu komputerowego,
 oprogramowanie użytkowe – mające bezpośredni kontakt z użytkownikiem i realizujące usługi dla tego użytkownika za pomocą aplikacji. Z technicznego punktu widzenia jest to oprogramowanie korzystające z usług m.in. systemu operacyjnego (oprogramowania systemowego). Pojęcie "oprogramowanie systemowe" jest znacznie szersze niż "system operacyjny". W jego skład wchodzi też oprogramowanie serwerowe oraz inne oprogramowania z którymi użytkownik nie ma bezpośredniej styczności. Przykłady oprogramowania użytkowego:
 edytor tekstu
 edytor grafiki
 DTP
 gra komputerowa
 oprogramowanie pośredniczące
 system ekspertowy
 system zarządzania bazą danych (DBMS)
 oprogramowanie sprzętowe

Zobacz też 

 hardware
 audyt oprogramowania
 metryka oprogramowania
 wolne oprogramowanie

Przypisy

Bibliografia 
 Department of Information and Computing Sciences
 
 Embedded Software–Technologies and Trends
 scripting-intelligence-book-examples