Oprogramowanie

Z Wikipedii, wolnej encyklopedii
(Przekierowano z Software)
Przejdź do nawigacji Przejdź do wyszukiwania

Oprogramowanie (ang. software) – całość 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 określonym przez twórcę zakresie. Oprogramowanie jest synonimem terminów program komputerowy oraz aplikacja, przy czym stosuje się go zazwyczaj do określania 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 oprogramowanie, np. napisane w całości w językach interpretowanych, może występować tylko w jednej postaci, spełniającej oba zadania.

Historia[edytuj | edytuj kod]

Zarys (algorytm) tego, co byłoby pierwszym oprogramowaniem, napisała Ada Lovelace w XIX wieku dla planowanego Silnika Analitycznego. Jednak ani Silnik Analityczny, ani żadne oprogramowanie do niego nie zostały stworzone.

Pierwsza teoria na temat oprogramowania ( przed stworzeniem komputerów, jakie znamy dzisiaj ) została zaproponowana przez Alana Turinga w jego eseju z 1935 r.

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

Użytkownicy często postrzegają rzeczy 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[edytuj | edytuj kod]

Oprogramowanie komputerowe musi zostać "załadowane" do pamięci komputera (np. dysku twardego lub pamięci). Obejmuje to 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ść[edytuj | edytuj kod]

Jakość oprogramowania jest bardzo ważna, szczególnie w przypadku oprogramowania komercyjnego i systemowego, takiego jak Microsoft Office, Microsoft Windows i Linux. Jeśli oprogramowanie jest wadliwe, mogą wystąpić na przykład awarie komputera.

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[edytuj | edytuj kod]

Oprogramowanie dzieli się ze względu na przeznaczenie:

  • oprogramowanie systemowe – realizujące funkcje konieczne dla działania systemu komputerowego,
  • oprogramowanie do tworzenia oprogramowania,
  • biblioteki programistyczne – oprogramowanie do wykorzystania przez inne programy,
  • 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, a szerzej – oprogramowania systemowego.

Pojęcie oprogramowania systemowego jest znacznie szersze niż systemy operacyjne. W jego skład wchodzi też oprogramowanie serwerowe i każde oprogramowanie, z którym użytkownik nie ma bezpośredniej styczności.

Inne przykłady oprogramowania:

Zobacz też[edytuj | edytuj kod]

Bibliografia[edytuj | edytuj kod]