wymagania Jakościedytuj
niezależnie od podejścia do rozwoju, końcowy program musi spełniać pewne podstawowe właściwości. Do najważniejszych należą następujące właściwości:
- niezawodność: jak często wyniki programu są poprawne. Zależy to od poprawności pojęciowej algorytmów i minimalizacji błędów programistycznych, takich jak błędy w zarządzaniu zasobami (np. przepełnienia buforów i warunki wyścigu) i błędów logicznych (takich jak dzielenie przez zero lub błędy off-by-one).,
- solidność: jak dobrze program przewiduje problemy spowodowane błędami (nie błędami). Obejmuje to sytuacje, takie jak nieprawidłowe, niewłaściwe lub uszkodzone dane, niedostępność potrzebnych zasobów, takich jak pamięć, usługi systemu operacyjnego i połączenia sieciowe, błąd użytkownika i nieoczekiwane przerwy w dostawie prądu.
- użyteczność: ergonomia programu: łatwość, z jaką dana osoba może korzystać z programu zgodnie z jego przeznaczeniem lub w niektórych przypadkach nawet w nieoczekiwanych celach. Takie kwestie mogą uczynić lub przerwać jego sukces nawet niezależnie od innych kwestii., Obejmuje to szeroki zakres elementów tekstowych, graficznych, a czasami sprzętowych, które poprawiają przejrzystość, intuicyjność, spójność i kompletność interfejsu użytkownika programu.
- przenośność: zakres sprzętu komputerowego i platform systemu operacyjnego, na których kod źródłowy programu może być kompilowany / interpretowany i uruchamiany., Zależy to od różnic w możliwościach programowania dostarczanych przez różne platformy, w tym zasobów sprzętowych i systemowych, oczekiwanego zachowania sprzętu i systemu operacyjnego oraz dostępności specyficznych dla platformy kompilatorów (a czasami bibliotek) dla języka kodu źródłowego.
- łatwość konserwacji: łatwość, z jaką program może być modyfikowany przez jego obecnych lub przyszłych programistów w celu wprowadzania ulepszeń lub dostosowywania, naprawiania błędów i luk w zabezpieczeniach lub dostosowywania go do nowych środowisk., Dobre praktyki podczas początkowego rozwoju robią różnicę w tym zakresie. Ta jakość może nie być bezpośrednio widoczna dla użytkownika końcowego, ale może znacząco wpłynąć na losy programu w dłuższej perspektywie.
- wydajność: miara zasobów systemowych, które program zużywa (czas procesora, przestrzeń pamięci, wolne urządzenia, takie jak dyski, przepustowość sieci, a w pewnym stopniu nawet interakcja z użytkownikiem): im mniej, tym lepiej. Obejmuje to również staranne zarządzanie zasobami, na przykład czyszczenie plików tymczasowych i eliminowanie wycieków pamięci., Jest to często omawiane w cieniu wybranego języka programowania. Chociaż język z pewnością wpływa na wydajność, nawet wolniejsze języki, takie jak Python, mogą natychmiast uruchamiać programy z ludzkiej perspektywy. Szybkość, wykorzystanie zasobów i wydajność są ważne dla programów, które blokują system, ale efektywne wykorzystanie czasu programisty jest również ważne i jest związane z kosztami: więcej sprzętu może być tańsze.,
czytelność kodu źródłowegoedit
w programowaniu komputerowym, czytelność odnosi się do łatwości, z jaką ludzki czytelnik może zrozumieć cel, przepływ sterowania i działanie kodu źródłowego. Wpływa to na powyższe aspekty jakości, w tym przenośność, użyteczność i co najważniejsze łatwość konserwacji.
czytelność jest ważna, ponieważ programiści spędzają większość czasu na czytaniu, próbując zrozumieć i zmodyfikować istniejący kod źródłowy, zamiast pisać nowy kod źródłowy. Nieczytelny kod często prowadzi do błędów, nieefektywności i zduplikowanego kodu., Badanie wykazało, że kilka prostych przekształceń czytelności skróciło kod i drastycznie skróciło czas jego zrozumienia.
stosowanie spójnego stylu programowania często pomaga w czytelności. Jednak czytelność to coś więcej niż tylko styl programowania. Wiele czynników, mających niewiele lub nic wspólnego ze zdolnością komputera do wydajnego kompilowania i wykonywania kodu, przyczynia się do czytelności. Niektóre z tych czynników obejmują:
- różne style wcięć (spacje)
- dekompozycja
- konwencje nazewnictwa dla obiektów (takich jak zmienne, klasy, procedury itp.,)
aspekty prezentacji (takie jak wcięcia, podziały linii, podświetlanie kolorów itp.) są często obsługiwane przez edytor kodu źródłowego, ale aspekty zawartości odzwierciedlają talent i umiejętności programisty.
różne wizualne języki programowania zostały również opracowane z zamiarem rozwiązania problemów czytelności poprzez przyjęcie nietradycyjnych podejść do struktury kodu i wyświetlania. Zintegrowane Środowiska programistyczne (IDE) mają na celu integrację całej takiej pomocy. Techniki takie jak refaktoryzacja kodu mogą poprawić czytelność.,
złożoność Algorytmicznaedytuj
dziedzina akademicka i inżynierska praktyka programowania komputerowego zajmują się głównie odkrywaniem i wdrażaniem najbardziej efektywnych algorytmów dla danej klasy problemów. W tym celu algorytmy są klasyfikowane do rozkazów za pomocą tzw. notacji Big O, która wyraża wykorzystanie zasobów, takich jak czas wykonania lub zużycie pamięci, pod względem wielkości wejścia., Doświadczeni programiści znają wiele dobrze znanych algorytmów i ich złożoność i wykorzystują tę wiedzę do wyboru algorytmów najlepiej dopasowanych do okoliczności.
algorytmy szachowe jako przykładedytuj
„Programming a Computer for Playing Chess” był artykułem z 1950 roku, który oceniał algorytm „minimax”, który jest częścią historii złożoności algorytmicznej; kurs Na Deep Blue IBM (komputer szachowy) jest częścią programu nauczania informatyki na Uniwersytecie Stanforda.,
Metodyedytuj
pierwszym krokiem w większości formalnych procesów tworzenia oprogramowania jest analiza wymagań, a następnie testowanie w celu określenia modelowania wartości, implementacji i eliminacji awarii (debugowania). Istnieje wiele różnych podejść do każdego z tych zadań. Jednym z popularnych metod analizy wymagań jest analiza przypadków użycia. Wielu programistów korzysta z form zwinnego tworzenia oprogramowania, gdzie poszczególne etapy formalnego tworzenia oprogramowania są bardziej zintegrowane ze sobą w krótkie cykle, które trwają kilka tygodni, a nie Lat., Istnieje wiele podejść do procesu tworzenia oprogramowania.
popularne techniki modelowania obejmują analizę i projektowanie zorientowane obiektowo (OOAD) i architekturę opartą na modelu (MDA). Unified Modeling Language (UML) jest notacją używaną zarówno dla OOAD, jak i MDA.
podobną techniką stosowaną przy projektowaniu baz danych jest modelowanie relacji jednostek (Modelowanie ER).
techniki implementacji obejmują języki imperatywne (obiektowe lub proceduralne), języki funkcyjne i języki logiczne.,
pomiar używaniaedytuj
bardzo trudno jest określić, jakie są najpopularniejsze współczesne języki programowania., Metody pomiaru popularności języka programowania obejmują: liczenie liczby ogłoszeń o pracę, które wspominają o języku, liczbę sprzedanych książek i kursów uczących języka (przecenia to znaczenie nowszych języków) oraz szacunki liczby istniejących linii kodu napisanych w języku (nie docenia to liczby użytkowników języków biznesowych, takich jak COBOL).
niektóre języki są bardzo popularne dla określonych rodzajów aplikacji, podczas gdy niektóre języki są regularnie używane do pisania wielu różnych rodzajów aplikacji., Na przykład COBOL jest nadal silny w korporacyjnych centrach danych, często na dużych komputerach mainframe, Fortran w aplikacjach inżynierskich, językach skryptowych w tworzeniu stron internetowych i C w oprogramowaniu wbudowanym. Wiele aplikacji używa kombinacji kilku języków w swojej budowie i użyciu. Nowe języki są zazwyczaj projektowane wokół składni poprzedniego języka z nowymi funkcjami dodanymi, (na przykład C++ dodaje orientację obiektową do C, a Java dodaje zarządzanie pamięcią i bajtowy kod do C++, ale w rezultacie traci wydajność i zdolność do manipulacji na niskim poziomie).,
DebuggingEdit
pierwszym znanym błędem powodującym problem w komputerze była ćma, uwięziona wewnątrz komputera na Harvardzie, zapisana we wpisie z dziennika z 9 września 1947 roku. „Błąd” był już powszechnym terminem określającym usterkę oprogramowania, gdy ten błąd został znaleziony.
debugowanie jest bardzo ważnym zadaniem w procesie tworzenia oprogramowania, ponieważ wady programu mogą mieć znaczące konsekwencje dla jego użytkowników., Niektóre języki są bardziej podatne na niektóre rodzaje błędów, ponieważ ich specyfikacja nie wymaga kompilatorów do wykonywania tak samo sprawdzania, jak inne języki. Użycie narzędzia do analizy kodu statycznego może pomóc w wykryciu niektórych możliwych problemów. Zwykle pierwszym krokiem w debugowaniu jest próba odtworzenia problemu. Może to być nietrywialne zadanie, na przykład w przypadku równoległych procesów lub nietypowych błędów oprogramowania. Ponadto specyficzne środowisko użytkownika i historia użytkowania mogą utrudnić odtworzenie problemu.,
po odtworzeniu błędu, wejście programu może wymagać uproszczenia, aby ułatwić debugowanie. Na przykład, gdy błąd w kompilatorze może spowodować awarię podczas parsowania dużego pliku źródłowego, uproszczenie przypadku testowego, które powoduje, że tylko kilka linii z oryginalnego pliku źródłowego może być wystarczające do odtworzenia tej samej awarii. Trial-and-error / divide-and-conquer jest potrzebne: programista spróbuje usunąć niektóre części oryginalnego przypadku testowego i sprawdzić, czy problem nadal istnieje., Podczas debugowania problemu w GUI programista może spróbować pominąć niektóre interakcje użytkownika z oryginalnego opisu problemu i sprawdzić, czy pozostałe działania są wystarczające, aby pojawiły się błędy. Częścią tego procesu jest również tworzenie skryptów i wykrywanie przerwań.
debugowanie jest często wykonywane za pomocą IDE, takich jak Eclipse, Visual Studio, Xcode, Kdevelop, NetBeans i Code::Blocks. Używane są również samodzielne debuggery, takie jak GDB, które często dostarczają mniej środowiska wizualnego, Zwykle używając wiersza poleceń. Niektóre edytory tekstu, takie jak Emacs, pozwalają na wywołanie GDB, aby zapewnić środowisko wizualne.,