Evaluare

* Starea curentă a proiectului: structura repository-ului * directoare * cod incipient proceduri de dezvoltare * coding style * denumire module/fișiere * documentare module * documentare interfețe proceduri de comunicare * folosire liste de discuție * comentarii completare wiki cu informații necesare * acces la repository * coding style și proceduri de dezvoltare * documentarea tehnologiilor folosite * descrierea modulelor și interfețelor (pe măsură ce acestea sunt dezvoltate) * proceduri de documentare * Discuție cu project managerul Evaluare scurtă a ultimei săptămâni * ce întâlniri au avut loc? * ce progrese s-au înregistrat? * ce progrese a făcut fiecare membru? * ce sarcini a avut fiecare membru în această săptămână? * care sunt cei mai activi 2 membri ai echipei? * care sunt cei mai puțini activi membri ai echipei? Evaluare per ansamblu * Cât de multe proceduri au fost stabilite? * Câte de clare sunt sarcinile pentru fiecare? * Sunt bine împărțire sarcinile? * Cât de bună este comunicarea în cadrul echipei și cum team-leaderii? * Există modificări față de planul inițial? * Au apărut sarcini noi? * Există sarcini care s-au încheiat?

* Discuții cu team leaderii Care este atmosfera în echipă? Care este progresul înregistrat? Cât de cunoscute sunt tehnologiile? Cât de acomodați sunt membrii echipei cu utilizare SVN și a altor utilitare de dezvoltare? Se cunosc procedurile de dezvoltare? Care este evaluarea actuală a echipei?

Anti-patterns

In ingineria programarii anti-patterns sunt metode de design (organizational, software, etc) care desi par evidente si simple sunt defapt gresite, mai complexe decat e necesar sau inoptimale. O lista de anti-patternuri clasice se gasesc pe wikipedia, dintre care cateva frecvente printre programatorii mai putin experimentati sunt:

* Call Super - necesitatea de a chema o metoda suprascrisa dintr-o clasa de baza * God Object - existenta unui obiect cu o functionalitate foarte larga * Object Orgy - delimitare neconcludenta a variabilelor interne a unui obiect recomandat este ca variabilele interne sa fie accesate prin mutatori si accesori (ie. white listing). de exemplu in java

accesor}

* Sequential Coupling - necesitatea de a chema anumite metode intr-o anumita ordine. Ele pot fi incluse in alta metoda care sa le apeleze in ordinea corecta. * Yet Another Useless Layer - adaugare de niveluri de abstractizare nenecesare (my personal favorite) * Blind faith - increderea ca o anumita functie este corecta fara a fi testata * Accumulate and fire - transmiterea de argumente unei functii folosind variabile globale si nu prin parametri * Voodoo programming & Deep magic - implementarea unei solutii vag intelese sau folosirea de unelte necunoscute (vezi [http://www.codemaestro.com/reviews/9 sqrt]) * Magic numbers & strings - folosirea constantelor si a sirurilor de caractere fara vreo explicatie (un coment sau denumire de variabila) * Copy and paste programming - lipsa unei generalizari si copierea codului cu mici modificari (vezi Blind Faith) * Reinventing the wheel - nefolosirea codului deja existent (cum ar fi third-party software) * Programming by permutation - incercarea de a repara un bug prin mici modificari aleatoare fara a intelege exact unde este greseala

Exerciții

* Care este problema următoarelor funcții din biblioteca standard C? atoi gets strcat, strcpy strtok, strsep scanf gethostbyname

* Pentru un limbaj gen C (procedural) definiți o interfață pentru o bibliotecă care face spargerea unui fișier PDF în mai multe fișiere PDF. Nu există alte cerințe. Biblioteca trebuie să-și facă treaba cât mai bine.

* Care este problema următoarei secvențe dintr-un header C?

laboratoare}

* Definiți o interfață pentru o biblitecă multiprotocol pentru descărcarea unui fișier. (multiprotocol - HTTP, FTP, BitTorrent, SCP etc.) Folosiți ca suport un limbaj la alegere.

* În nucleul Linux, funcția end_request[1] este folosită pentru încheierea unei cereri pentru block I/O layer. Funcția se apelează end_request(req, 0) la eroare și end_request(req, 1) la succes. Care este neajunsul interfaței de apel a acestei funcții?

* Care sunt modulele (fișierele) folosite pentru implementarea unei biblioteci de criptare pentru mai mulți algoritmi? Ce interfață ar oferi o asemenea bibliotecă?

* În nucleul Linux există mai multe mecanisme de sincronizare. Mai jos sunt prezentate funcțiile asociate mecanismelor semafor și mutex. Care este problema acestor funcții?

sema_init_struct_semaphore_int_initializes_the_dynamically_created_semaphore_to_the_given_count_init_mutex_struct_semaphore_initializes_the_dynamically_created_semaphore_with_a_count_of_one_init_mutex_locked_struct_semaphore_initializes_the_dynamically_created_semaphore_with_a_count_of_zero_so_it_is_initially_locked_down_interruptible_struct_semaphore_tries_to_acquire_the_given_semaphore_and_enter_interruptible_sleep_if_it_is_contended_down_struct_semaphore_tries_to_acquire_the_given_semaphore_and_enter_uninterruptible_sleep_if_it_is_contended_down_trylock_struct_semaphore_tries_to_acquire_the_given_semaphore_and_immediately_return_nonzero_if_it_is_contended_up_struct_semaphore_releases_the_given_semaphore_and_wakes_a_waiting_task_if_any}

* De ce este clasa StringTokenizer deprecated în Java? Care este înlocuitorul acesteia?

* Care este neajunsul interfeței funcției de sortare cu signatura <tt>int sort(int *array, size_t size)</tt>?

[1] http://lxr.linux.no/linux+v2.6.27.4/block/blk-core.c#L1859

mps/old/2008-2009/laboratoare/laborator-05.txt · Last modified: 2016/09/28 17:08 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0