Anti-model

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică , anti-modelele (sau antipatterns) sunt modele de proiectare , sau mai general proceduri sau moduri de a face lucrurile, utilizate în timpul procesului de dezvoltare a software-ului, care, deși utilizabile din punct de vedere juridic, sunt mai târziu revelate a fi inadecvate sau contraproductive în practică. Termenul a fost inventat în 1995 de Andrew Koenig, inspirat de cartea Design Patterns: Elements for the reuse of object-oriented software scrisă de Gang of Four , care a dezvoltat conceptul de pattern-uri în domeniul software-ului.

Potrivit autorului, cel puțin două elemente cheie trebuie să fie prezente pentru a distinge un anti-tipar de o simplă greșeală logică sau o practică proastă:

  • Unele tipare recurente de acțiuni, procese sau structuri care inițial par a fi benefice, dar ulterior produc mai multe probleme decât beneficii.
  • Existența unei soluții alternative care este clar documentată, dovedită în practică și repetabilă.

Multe anti-tipare sunt puțin mai mult decât greșeli, probleme de nerezolvat sau practici proaste care trebuie evitate ori de câte ori este posibil. Uneori numite „capcane” sau tipare întunecate , ele se referă la clase de soluții de probleme care au fost reinventate greșit.

Pentru a descrie formal greșelile care tind să se repete, se poate identifica forța cu care se repetă și să învețe cum alte persoane au remediat aceste tipare rele.

Cele mai frecvente anti-tipare

(Notă: numele în limba engleză a fost lăsat, deoarece este cel cu care tiparele și anti-tiparele sunt cunoscute în limba italiană)

Organizațional

  • Proiectarea de către comitet : prezența multor persoane care contribuie la un design, dar lipsa unei viziuni globale comune;
  • Corpuri calde : adăugarea de noi programatori la un proiect care nu vor putea face aproape nimic din cauza lipsei de experiență în acesta;
  • Paralizia analizei : proiectul s-a oprit în faza de analiză, de exemplu pentru că se ia în considerare o gamă prea largă de soluții fără a putea alege una sau pentru că este detaliat excesiv;
  • Sistem de conducte : organizație în care fiecare echipă este izolată de celelalte, iar comunicările sunt posibile numai în sus sau în jos ierarhia;

În management

  • Fum și oglinzi - fum și oglinzi: arată o funcționalitate a programului care încă nu există, de exemplu, prin ecrane fictive, fără ca observatorul să știe că sunt;
  • Managementul ciupercilor : echipă în care fiecare angajat este ținut izolat, cu o sarcină specifică, fără a putea comunica cu colegii săi;
  • Death March : un proiect a cărui estimare este prea mică în comparație cu cerința, care îi obligă pe programatori să depună eforturi foarte grele și un număr constant de ore suplimentare, dar care este totuși sortit eșecului.
  • Elefant în cameră - elefant în cameră : ignorați sau minimizați o problemă chiar dacă este evidentă și fulgerătoare, pentru a o evita

De dezvoltare

  • Ancoră de navă - ancoră de barcă : menținerea unei porțiuni din codul sursă care a devenit inutilă;
  • așteptare ocupată : ciclu continuu de așteptare pentru un eveniment;
  • Acțiune la distanță - acțiune la distanță : modificare care afectează părți de cod foarte îndepărtate una de alta;
  • Eșec în cache - eșec în cache : nu ștergeți un cache care conține o eroare, după ce a fost tratat;
  • Încărcare și declanșare - acumulare și declanșare : subrutine ale căror intrări sunt variabile globale;
  • Cod mirositor - miros de cod : defecțiune mică, care este totuși un simptom al unei probleme mari, mai ascunse;
  • Flux de lavă - flux de lavă : menținerea porțiunilor de cod a căror eliminare este riscantă sau poate provoca consecințe nedeterminabile;
  • Complexitate neintenționată - complexitate accidentală : necesitate aparentă de a dezvolta cod complex, care, în schimb, ar fi deja disponibil în unele biblioteci;
  • Big ball of nor - minge mare de noroi : sistem construit într-un mod haotic, fără o structură recunoscută;
  • Credință oarbă: nu se verifică rezultatul unui subrutină sau apariția unei erori;
  • Inerția codului - impulsul codului : prezența excesivă a constrângerilor și dependențelor, care îngreunează modificările;
  • DLL hell - DLL hell : există conflicte între DLL-urile de care depinde programul;
  • În mâna furnizorului - blocarea furnizorului : dependență prea strânsă de un anumit furnizor, nu poate fi înlocuită decât cu costuri ridicate;
  • Ad-hoc input - input kludge : incapacitatea de a gestiona intrări nevalide;
  • Blocare verificată dublu - blocare verificată dublă: inițializare parțială a unui obiect împărțit între fire;
  • Interfață de grăsime - balonarea interfeței : încorporarea a prea multe operații într-o singură interfață;
  • Îmbătrânire rapidă - perimare continuă : sistem ale cărui versiuni sunt prea diferite între ele și care, prin urmare, îmbătrânește rapid și continuu;
  • Inversia abstracției - inversarea abstracției : nu expuneți trăsături utile, forțând să le reimplementați;
  • Chiuvetă de bucătărie : obiect care conține un număr mare de operații complexe și eterogene;
  • număr magic - număr magic : introduceți constante în algoritmi fără a documenta semnificația sau scopul acestora;
  • Obiectul lui Dumnezeu - obiectul lui Dumnezeu : implementați o caracteristică mare într-un singur obiect care efectuează toate operațiunile, în loc de mai multe obiecte care împart sarcina;
  • Optimizare prematură - optimizare prematură : scrierea unui cod foarte optimizat, dar greu lizibil;
  • Poltergeist : obiect a cărui singură sarcină este să transmită informații unui alt obiect;
  • Prioritatea extensiilor - caracteristică : adăugați caracteristici suplimentare proiectului, depășind cu mult cerința inițială;
  • Problema yo-yo - problema yo-yo : structură excesiv de fragmentată și, prin urmare, dificil de înțeles;
  • Programarea mărfurilor cult - programarea cultului mărfurilor: introduceți o porțiune din program ignorând scopul sau principiul de funcționare;
  • Programare copiere și lipire - programare copiere și lipire : implementați o funcționalitate similară cu alta prin copierea și lipirea codului, mai degrabă decât prin crearea unui subrutină partajată;
  • Buton magic - buton magic : buton care conține și propria logică a aplicației, în loc să îl mențină separat;
  • Punct de vedere ambigu - punct de vedere ambigu : diagramă care indică doar părțile, dar nu ceea ce alcătuiesc, de exemplu fără a face distincția între părțile de interfață și cele de implementare;
  • Reinventarea roții - reinventarea roții : reimplementarea unei metode care a fost deja implementată, testată și optimizată de altcineva;
  • Reinventarea roții pătrate - Reinventarea roții pătrate : precum reinventarea roții , dar rezultatul reimplementării este mai rău decât metoda existentă;
  • Greșit de unul - Eroare Fencepost (sau chiar off-by-one) : pornind de la indexul de pornire greșit într-o buclă (de exemplu în Java porniți bucla pe o matrice începând de la 1 în loc de 0);
  • Software care se îngrașă - software bloat : tendința unei aplicații de a avea programe de instalare care cresc din toate proporțiile;
  • Cod spaghetti - cod spaghetti : cod cu un flux de neînțeles;
  • Valori cablate - cod hard : introduceți constante în cod mai degrabă decât în ​​fișierul de configurare;
  • Valori externe - cod soft : introduceți logica aplicației în fișierele de configurare (de exemplu cu un limbaj de comandă) mai degrabă decât în ​​cod;
  • Mort sfârșitul - Mort End: a trebui să modifice o componentă pe care suportul de către furnizorul a încetat;

Bibliografie

  • William J. Brown, Raphael C. Malveau, Hays W. McCormick III și Thomas J. Mowbray. 1998. AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis . John Wiley & Sons ISBN 0-471-19713-0 .

linkuri externe

Controlul autorității LCCN ( EN ) sh00000119
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT