ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 35
Abonament PDF

Ce este de fapt TDD?

Alexandru Bolboacă
Agile Coach and Trainer, with a focus on technical practices
@Mozaic Works



PROGRAMARE

Din când în când particip la discuții cu oameni despre ceea ce este TDD . Datorită faptului că utilizez TDD , dar și că îl explic altora , am dezvoltat o anumită cunoaștere în timp referitoare la acest subiect. De aceea, m-am hotărât să scriu acest articol care detaliază punctul meu de vedere în legătură cu ce este TDD. Sper că îl veți găsi util. Cum ar putea fi un articol lung, voi scrie pentru Today Software Magazine o serie de articole mai scurte pe această temă. Iată-l pe primul.

Versiune scurtă

Designul concepe și dă formă în mod intenționat artefactelor care rezolvă probleme.

Codul pentru computer este un astfel de artefact; de aceea, orice bucată de cod care rezolvă în mod intenționat o problemă este conceput.

Astfel, TDD este o metodă pentru a obține design.

Un design bun înseamnă un design care are anumite calități. Cea mai comună calitate pe care o căutăm astăzi este aceea de a putea fi schimbat.

TDD oferă câteva calități integrate: testabilitate și rezistență la erori crescută. Dezvoltatorul trebuie să lucreze la îmbunătățirea altor calități, precum aceea de a fi șanjabil. De aceea, specialiștii folosesc principiile SOLID pentru a-și ghida deciziile legate de design.

În acest fel se justifică faptul că designul care deține aceste calități obținute prin TDD, depinde în mare măsură de abilitățile designerului.

Atunci când face TDD, dezvoltatorul concepe design înainte de a începe (deoarece utilizează un cadru web MVC) și pe toată durata ciclurilor TDD: când scrie testul (alege numele clasei/ metodei, decide ce tipuri de clase să utilizeze, etc.), când implementează codul (nume variabile) și când face restructurare.

Eu propun ideea că TDD este o metodă pentru design incremental, deoarece soluția crește pas cu pas. Aceasta are legătură cu rezolvarea de probleme, iar cercul se închide - deoarece designul înseamnă soluționarea unei probleme.

Interesant? Mai avem încă multe!

Design înseamnă să creezi un artefact care rezolvă o problemă

Dintr-un oarecare motiv, termenul de "design" a devenit supraîncărcat și ambiguu. Să luăm pentru un moment exemplul unui smartphone. Ce definește designul său? Cum arată? Cum se comportă? Materialele care îl compun? Au telefoanele mobile mai vechi un "design" sau numai smartphone-urile mai noi și mai ingenioase au "design"?

Lucrurile devin mai complicate când vorbim despre software. Are "design" o bucată de cod care urmează principiile SOLID? Există "design" atunci când este cod procedural? Există "design" când are metode lungi?

Eu am început să pun aceste întrebări în urmă cu câțiva ani, deoarece nu aveam nicio idee în legătură cu răspunsul. Singura modalitate de a găsi răspunsuri era să învăț mai multe despre design în alte domenii decât software. La urma urmei, designul este o disciplină care a existat timp de sute de ani înainte de industria noastră.

În sfârșit, am găsit un răspuns categoric și satisfăcător:

"Designul înseamnă să concepi și să dai formă unor artefacte care rezolvă probleme; artefactul (este)… orice produs de creare intenționată, inclusiv … software-ul".

Karl T. Ulrich, "Design - crearea artefactelor în societate"

De aceea, orice bucată de cod care rezolvă o problemă într-un mod intenționat este design. Telefoanele mai vechi aveau "design" deoarece ele rezolvau o problemă: conversațiile la telefon cu alți oameni.

Dar dacă design este orice bucată de cod care rezolvă o problemă în mod intenționat, de ce utilizăm principiile SOLID sau cod curat sau alte lucruri? Probabil din aceleași motive pentru care designerii grafici utilizează principii precum alinierea sau accentuarea. Pentru a face designul mai bun.

Designul bun este design cu anumite calități

Lucrul cel mai dificil de înțeles în legătură cu designul este că designul are anumite calități. De exemplu, una dintre calitățile designului experienței de utilizator este calitatea sa de a fi "comod în utilizare" - cât de ușor este să folosești aplicația și cât de repede poate utilizatorul să își rezolve problema cu ea.

Aceste calități sunt contextuale. De exemplu, o experiență a utilizatorului de mobil este diferită de experiența utilizatorului web. Mediul contează în acest caz.

Dar designul software? Care sunt câteva dintre calitățile sale? Iată o listă rapidă care mi-a trecut prin cap:

Calități statice (când codul nu rulează):

Calități dinamice (valabile în perioada de rulare):

Calitățile designului software sunt contextuale, de asemenea. În cazul unei aplicații web tipice, calitatea de a fi șanjabil și performanța sunt în mod tipic cele mai importante, urmate îndeaproape de scalabilitate și securitate. Pentru aplicațiile mobile, performanța și modificabilitatea sunt importante. Pentru serviciile web de date cu volum mare, performanța și scalabilitatea sunt cheia. Și așa mai departe.

Un lucru este constant: capacitatea de a fi modificat este importantă în aproximativ 90% dintre aplicațiile pe care le dezvoltăm azi. Noi trebuie să le modificăm des, deci este util să le putem schimba rapid.

Date fiind toate acestea, ce este un design bun? Ar trebui să fie ușor:

Designul bun este o bucată de cod care rezolvă o problemă în mod intenționat și care etalează calitățile de design necesare în contextul dat.

Motivul pentru care noi tot vorbim despre lucruri precum cele patru principii ale designului simplu, principiile SOLID și Cod Curat este pentru că avem nevoie de o calitate pe care aceste principii o oferă: modificabilitatea. Faptul că avem teste ne ajută să evităm greșelile atunci când modificăm codul. Principiile SOLID sunt toate despre ușurința de a modifica codul. Duplicarea ne împiedică să facem schimbări rapid. Numele nepotrivite ne împiedică să înțelegem codul și doar îl fac mai dificil de modificat.

Este important de notat, totuși, că aceasta nu este singura calitate a designului pe care ar trebui să o urmărim. Tehnologii precum nodejs sau vertx preferă performanța în locul calității de a putea fi schimbat. Proceduri memorate sau concepții pentru crearea rapoartelor au același efect.

Punerea în balanță a calităților designului este unul dintre cele mai dificile lucruri pentru un programator. Modificabilitatea este, totuși, un bun început, fiind o preocupare atât de larg răspândită.

Dacă înțelegem ce este designul și ce este un design bun, atunci ce este TDD de fapt?

Urmăriți-ne în articolul următor, din numărul viitor al revistei.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects