În primul rând, funcția de auto-completare termeni. Dacă se urmează pașii descriși de noi, se poate obține o funcție de auto-completare termeni foarte bună.
Apoi, funcția de validare date. Când se importă datele din baza de date a eMAG și se împart datele pe coloane în Excel, și se sortează alfabetic, se pot găsi ușor erori de introducere date, care pot fi corectate. Am găsit husă de laptop în categoria laptop-uri, titluri de laptop puse greșit (fără "," ca separator, sau cu virgulă, dar fără spațiul de după), ordine cuvinte din titlu nerespectată.
Mai departe, odată realizată procedura pe un set de date (noi am făcut procedura pentru laptop-uri), se pot imagina ușor soluții pentru alte tipuri de date de pe site-uri de tip e-commerce. Soluția propusă în algoritm este replicabilă.
De asemenea, căutarea devine mult mai bună prin procesul de înțelegere a unor obiceiuri de tastare (notebook, în loc de laptop; 2 Core în loc de Dual Core), și prin încercarea de înțelegere a sensului unei căutări. Statistici de genul acesta se pot colecta cu instrumente precum Google Analytics, și apoi folosi pentru a rafina, constant, căutările. E un proces repetitiv ce ar trebui să fie constant.
3.4 Analiza implementării algoritmului
Programul a fost implementat în C++, deoarece am avut experiență ca programatori cu programele Pascal, C și C++. Avem o oarecare expertiză în PHP și HTML, dar am preferat să ne axăm pe scrierea de cod și algoritmi, nu neapărat în a învăța să folosim un limbaj de programare pentru web/Internet.
De asemenea, codul a fost scris în paradigma de scriere programare funcțională, pentru că avem expertiză în acest tip de programare.
Construcția programului a avut ca prim pas salvarea în calculator a unor pagini HTML de descriere laptopuri de pe site-ul eMAG. Acestea au fost procesate în calculator, pentru a obține, în final, o listă cu nume de laptopuri (rândurile impare 1, 3, 5 etc.) și de URL-uri pentru acele laptopuri (rândurile pare 2, 4, 6 etc.).
Apoi, din lista respectivă am extras cele mai folosite cuvinte, și le-am folosit pentru funcție de autocompletare cuvinte (utilizatorul completează un string, programul știe la ce e posibil să mă refer).
În continuare, am făcut o listă de conjuncții și prepoziții, care vor fi ignorate în căutări.
Mai departe, am scris codul pentru a procesa aceste informații.
Pentru că în C++ string-urile funcționează ceva mai atipic decât în Java, și din cauza faptului că experiența noastră în programare este limitată, am ajuns să scriem foarte mult cod. Sunt aproximativ 2.500 de linii de cod, și aproape 8.000 de cuvinte folosite. Ce-i drept, codul are numeroase comentarii, și, pentru debugging ușor, am lăsat și variantele de testare (sunt multe linii, ulterior comentate, care doar afișează un status, pentru debugging ușor).
Mai jos se prezintă câțiva indicatori folosiți pentru a măsura fiabilitatea software-ului. Algoritmul a fost testat folosind un program numit CCCC.
Indicator
|
Etichetă
|
Metrică globală
|
Metrică per modul
|
Număr module
|
NOM
|
1
|
|
Linii de cod
|
LOC
|
1714
|
1714
|
Numărul ciclomatic al lui McCabe
|
MVG
|
363
|
363
|
Linii de comentarii
|
COM
|
347
|
347
|
LOC/COM
|
L_C
|
4,939
|
|
MVG/COM
|
M_C
|
1,046
|
|
Linii de cod respinse de compilator
|
REJ
|
78
|
|
Tabel 3.4.1 Indicatori pentru a măsura fiabilitatea programului propus (Littlefair, 2018)
Detaliere indicatori (sursa pentru textul original este un raport creat de programul CCCC, în care sunt explicați și indicatorii: Littlefair, 2018):
-
NOM = Numărul de module (program principal, biblioteci folosite; noi am folosit doar un program principal, fără biblioteci). Ne-a fost mai util să lucrăm într-un singur program, pentru că am putut avea o înțelegere a programului facilă (în partea de sus funcții de predicție, la mijloc citirea tastelor, în partea de jos sortare rezultate. Dar dacă am fi lucrat într-o echipă, cu alte persoane să ne supervizeze codul, ar fi fost mai util să fi lucrat în mai multe programe.
-
LOC = Linii de cod, numărul de linii care să nu fie goale, și nici comentate, numărate de program. Numărul respectiv este ridicat atât pentru că nu sunt încă un programator profesionist, cât și pentru că am lucrat în C++, care are mici probleme în gestionarea facilă a string-urilor. Se pot gestiona, doar că este un pic mai dificil decât în Java, de exemplu.
-
COM = Linii de comentarii. De menționat că o mare parte din comentariile făcute de noi au fost și în continuarea unor linii de cod, așa că numărul este inexact. Am preferat să punem comentarii cât mai detaliate, pentru a face codul ușor de înțeles. Am lăsat comentate și diferite instrucțiuni utile pentru debugging. Prin de-comentarea lor se poate verifica ușor în ce loc al programului vă aflați.
-
MVG = Complexitatea ciclomatică a lui McCabe. Aceasta este o măsură a complexității decizionale care formează programul. Definiția strictă a acestei măsurători este că este un număr de rute linear independente printru grafic aciclic direcționat, care identifică trecerea controlului unui subprogram. Software-ul analizator CCCC măsoară aceasta prin înregistrarea rezultatelor decizionale distincte conținute în fiecare funcție, din care rezultă o bună aproximare a versiunii definite formal a măsurătorii. Detaliem indicatorul mai jos. De menționat că recomandarea numărului optim ar fi undeva între 10 și 15, iar la noi depășește 350. Explicația e că nu am împărțit programul în module distincte.
-
L_C = Linii de cod pentru o linie de comentarii. Prin acest indicator se măsoară densitatea comentariilor, cu atenție la dimensiunea textului programului. Indicatorul în cazul de față nu este foarte precis măsurat, deoarece nu ia în considerare comentariile „inline”, cele scrise în continuarea unei linii de cod. Totuși, considerăm că și așa se poate vedea că am folosit comentarii în codul nostru.
-
M_C = Complexitatea ciclomatică pe linia de comentarii. Folosind acest indicator putem afla densitatea comentariilor în ceea ce privește complexitatea logică a programului. Detaliem mai jos despre acest indicator.
-
REJ = Linii de cod respinse de compilator. Indicatorul e unul specific programului CCCC, în Dev C++ pe Windows x64 nu ni s-a reportat niciun fel de eroare de cod.
Mai jos, câteva aspecte despre complexitatea ciclomatică a lui McCabe (sursa – o prezentare dintr-un curs al Universității Auckland - Tempero, 2018).
În primul rând, cu cât este mai complexă structura codului, cu atât este mai dificil de înțeles, e mai probabil să aibă ceva defect, va fi mai dificil de actualizat, va dura mai mult timp realizarea lui, și va fi mai dificil de reutilizat.
Apoi, numărul complex ciclomatic al lui McCabe (McCabe’s Cyclomatic Complexity Number, CCN) măsoară numărul de căi liniare independente prin graful programului (de văzut imaginea de mai jos, cu un graf).
v(F) = e – n + 2,
unde F este graful de parcurgere în cod, n numărul de noduri, e numărul de margini.
Intuitiv, pe măsură ce numărul complex ciclomatic al lui McCabe devine mai mare, codul devine mai complex. Diferite surse recomandă un CCN nu mai mare de 10-15.
Figura 3.4.1 Exemplu pentru numărul complex ciclomatic al lui McCabe (Tempero, 2018)
Dostları ilə paylaş: |