cerințe de Calitateedit
oricare ar fi abordarea dezvoltării, programul final trebuie să satisfacă unele proprietăți fundamentale. Următoarele proprietăți sunt printre cele mai importante:
- fiabilitate: cât de des rezultatele unui program sunt corecte. Acest lucru depinde de corectitudinea conceptuală a algoritmilor și de minimizarea greșelilor de programare, cum ar fi greșelile în gestionarea resurselor (de exemplu, depășirile tamponului și condițiile de cursă) și erorile logice (cum ar fi erorile de divizare cu zero sau off-by-one).,
- robustețe: cât de bine un program anticipează probleme din cauza erorilor (nu bug-uri). Acestea includ situații precum date incorecte, inadecvate sau corupte, indisponibilitatea resurselor necesare, cum ar fi memoria, serviciile sistemului de operare și conexiunile la rețea, Erorile utilizatorului și întreruperile de curent neașteptate.
- uzabilitate: ergonomia unui program: ușurința cu care o persoană poate folosi programul în scopul propus sau, în unele cazuri, chiar în scopuri neprevăzute. Astfel de probleme pot face sau rupe succesul său, chiar indiferent de alte probleme., Aceasta implică o gamă largă de elemente textuale, grafice și uneori hardware care îmbunătățesc claritatea, intuitivitatea, coeziunea și completitudinea interfeței de utilizator a unui program.
- portabilitate: gama de hardware de calculator și platforme de sistem de operare pe care codul sursă al unui program poate fi compilat/interpretat și rulat., Acest lucru depinde de diferențele dintre facilitățile de programare furnizate de diferitele platforme, inclusiv resursele hardware și ale sistemului de operare, comportamentul așteptat al hardware-ului și al sistemului de operare și disponibilitatea compilatoarelor specifice platformei (și uneori a bibliotecilor) pentru limba codului sursă.
- mentenabilitate: ușurința cu care un program poate fi modificat de către dezvoltatorii săi prezenți sau viitori pentru a face îmbunătățiri sau personalizări, pentru a remedia erorile și găurile de securitate sau pentru a-l adapta la medii noi., Bunele practici în timpul dezvoltării inițiale fac diferența în această privință. Este posibil ca această calitate să nu fie evidentă direct pentru utilizatorul final, dar poate afecta semnificativ soarta unui program pe termen lung.
- Eficiență/performanță: Măsură de resurse de sistem o consumă (timp de procesor, spațiu de memorie, dispozitive lente, cum ar fi discuri, bandă de rețea și la o anumită măsură, chiar de interacțiune utilizator): mai puțin, cu atât mai bine. Aceasta include, de asemenea, gestionarea atentă a resurselor, de exemplu curățarea fișierelor temporare și eliminarea scurgerilor de memorie., Acest lucru este adesea discutat sub umbra unui limbaj de programare ales. Deși limba afectează cu siguranță performanța, chiar și limbile mai lente, cum ar fi Python, pot executa programe instantaneu dintr-o perspectivă umană. Viteza, utilizarea resurselor și performanța sunt importante pentru programele care blochează sistemul, dar utilizarea eficientă a timpului programatorului este de asemenea importantă și este legată de costuri: mai mult hardware poate fi mai ieftin.,în programarea pe calculator, lizibilitatea se referă la ușurința cu care un cititor uman poate înțelege scopul, fluxul de control și funcționarea codului sursă. Aceasta afectează aspectele de calitate de mai sus, inclusiv portabilitatea, gradul de utilizare și cel mai important mentenabilitate.lizibilitatea este importantă deoarece programatorii își petrec majoritatea timpului citind, încercând să înțeleagă și să modifice codul sursă existent, în loc să scrie cod sursă nou. Codul care nu poate fi citit duce adesea la bug-uri, ineficiențe și cod duplicat., Un studiu a constatat că câteva transformări simple de lizibilitate au făcut Codul mai scurt și au redus drastic timpul pentru a-l înțelege.urmărirea unui stil de programare consecvent ajută adesea la lizibilitate. Cu toate acestea, lizibilitatea este mai mult decât stilul de programare. Mulți factori, care au puțin sau nimic de-a face cu capacitatea computerului de a compila și executa eficient codul, contribuie la lizibilitate. Unii dintre acești factori includ:
- diferite stiluri de indentare (spații albe)
- descompunere
- convenții de denumire pentru obiecte (cum ar fi variabile, clase, proceduri etc.,)
aspectele de prezentare (cum ar fi liniuțe, pauze de linie, evidențierea culorilor etc.) sunt adesea tratate de editorul de cod sursă, dar aspectele de conținut reflectă talentul și abilitățile programatorului.
diferite limbaje de programare vizuală au fost, de asemenea, dezvoltate cu intenția de a rezolva problemele de lizibilitate prin adoptarea unor abordări netradiționale pentru structura și afișarea codului. Mediile de dezvoltare integrate (IDE) urmăresc să integreze toate aceste ajutoare. Tehnici precum refactorizarea Codului pot îmbunătăți lizibilitatea.,
complexitatea Algoritmicăedit
domeniul academic și practica inginerească a programării pe calculator sunt în mare măsură preocupate de descoperirea și implementarea celor mai eficienți algoritmi pentru o anumită clasă de probleme. În acest scop, algoritmii sunt clasificați în comenzi folosind așa-numita notație o mare, care exprimă utilizarea resurselor, cum ar fi timpul de execuție sau consumul de memorie, în ceea ce privește dimensiunea unei intrări., Programatorii experți sunt familiarizați cu o varietate de algoritmi bine stabiliți și complexitatea lor respectivă și folosesc aceste cunoștințe pentru a alege algoritmi care se potrivesc cel mai bine circumstanțelor.
Șah algoritmi ca un exampleEdit
„Programarea unui Calculator pentru a Juca Șah” a fost un 1950 hârtie pe care a evaluat-o „minimax” algoritm care este parte a istoriei de complexitatea algoritmică; un curs pe IBM Deep Blue (șah calculator) este o parte a calculatorului curriculum știință de la Universitatea Stanford.,
MethodologiesEdit
primul pas în majoritatea proceselor formale de dezvoltare de software este analiza cerințelor, urmată de testarea pentru a determina modelarea valorii, implementarea și eliminarea defecțiunilor (depanare). Există o mulțime de abordări diferite pentru fiecare dintre aceste sarcini. O abordare populară pentru analiza cerințelor este analiza cazurilor de Utilizare. Mulți programatori folosesc forme de dezvoltare software agilă în care diferitele etape ale dezvoltării software formale sunt mai integrate împreună în cicluri scurte care durează câteva săptămâni decât ani., Există multe abordări ale procesului de dezvoltare Software.tehnicile populare de modelare includ analiza și designul orientat pe obiecte (OOAD) și arhitectura bazată pe Model (Mda). Unified Modeling Language (UML) este o notație folosită atât pentru OOAD, cât și pentru MDA.
o tehnică similară utilizată pentru proiectarea bazei de date este modelarea Entity-Relationship (er Modeling).tehnicile de implementare includ limbaje imperative (orientate pe obiecte sau procedurale), limbaje funcționale și limbaje logice.,
de Măsurare limba usageEdit
articol Principal: Măsurarea limbaj de programare popularitateeste foarte dificil de a determina care sunt cele mai populare limbaje de programare moderne., Metode de măsurare limbaj de programare popularitate includ: numărarea numărului de anunțuri de locuri de muncă, în care se menționează limba, numărul de cărți vândute și cursuri de predare a limbii (aceasta supraestimează importanța unei noi limbi), și estimările de numărul existent de linii de cod scrise în limba (asta subestimează numărul de utilizatori de afaceri limbi, cum ar fi COBOL).unele limbi sunt foarte populare pentru anumite tipuri de aplicații, în timp ce unele limbi sunt folosite în mod regulat pentru a scrie multe tipuri diferite de aplicații., De exemplu, COBOL este încă puternic în centrele de date corporative, adesea pe computere mainframe mari, Fortran în aplicații de inginerie, limbaje de scripting în dezvoltare Web și C în Software încorporat. Multe aplicații folosesc un amestec de mai multe limbi în construcția și utilizarea lor. Noile limbi sunt în general proiectate în jurul sintaxei unui limbaj anterior, cu noi funcționalități adăugate (de exemplu, C++ adaugă orientarea obiectului la C, iar Java adaugă gestionarea memoriei și bytecode la C++, dar, ca rezultat, pierde eficiența și capacitatea de manipulare la nivel scăzut).,
DebuggingEdit
primul cunoscut efectiv bug care cauzează o problemă într-un calculator a fost o molie, prins în interiorul o Harvard mainframe, înregistrate într-un jurnal de intrare datat 9 septembrie 1947. „Bug” era deja un termen comun pentru un defect software atunci când a fost găsit acest bug.
Articol principal: DebuggingDebugging este o sarcină foarte importantă în procesul de dezvoltare software, deoarece defectele unui program pot avea consecințe semnificative pentru utilizatorii săi., Unele limbi sunt mai predispuse la unele tipuri de defecte, deoarece specificațiile lor nu necesită compilatoare pentru a efectua la fel de mult de verificare ca și alte limbi. Utilizarea unui instrument de analiză a codului static poate ajuta la detectarea unor probleme posibile. În mod normal, primul pas în depanare este de a încerca să reproducă problema. Aceasta poate fi o sarcină non-trivială, de exemplu, ca în cazul proceselor paralele sau a unor bug-uri software neobișnuite. De asemenea, mediul specific de utilizare și istoricul utilizării pot face dificilă reproducerea problemei.,după ce eroarea este reprodusă, este posibil ca introducerea programului să fie simplificată pentru a facilita depanarea. De exemplu, atunci când un bug dintr-un compilator îl poate face să se prăbușească atunci când analizează un fișier sursă mare, o simplificare a cazului de testare care are ca rezultat doar câteva linii din fișierul sursă original poate fi suficientă pentru a reproduce același accident. Este nevoie de Trial-and-error/divide-and-conquer: programatorul va încerca să elimine unele părți ale cazului de testare original și să verifice dacă problema mai există., Când depanați problema într-o interfață grafică, programatorul poate încerca să omită o interacțiune a utilizatorului din descrierea problemei inițiale și să verifice dacă acțiunile rămase sunt suficiente pentru a apărea erori. Scripting și breakpointing este, de asemenea, parte a acestui proces.Debugging-ul se face adesea cu IDE-uri precum Eclipse, Visual Studio, Xcode, Kdevelop, NetBeans și Code::Blocks. Depanatoare independente, cum ar fi GDB sunt de asemenea utilizate, iar acestea oferă adesea mai puțin de un mediu vizual, de obicei, folosind o linie de comandă. Unii editori de text, cum ar fi Emacs, permit invocarea GDB prin intermediul acestora, pentru a oferi un mediu vizual.,