Accept faptul că acest site folosește cookies pentru statistici, conținut și reclame personalizate.

Banca Românească

Studiu de caz: Calculul dobânzii efective cu Microsoft F#

Pentru acoperirea unor cerințe privind implementarea IFRS, Banca Românească a trebuit să implementeze un sistem de calcul al dobânzii efective aferente portofoliului de credite. Am ales pentru implementarea nucleului acestui sistem limbajul F#. Acest limbaj s-a adaptat cel mai bine cerințelor sistemului, respectiv capacitatea de procesare paralelă a unor volume mari de date, precum și implementarea unor algoritmi de calcul cu performanțe ridicate. Utilizarea tehnologiei F# pentru implementarea acestui sistem reprezintă o premieră la nivelul Băncii Românești și a condus la o optimizare substanțială a procedurilor existente pentru acest tip de calcule financiare - Bogdan Brînzărea-Iamandi, Coordonator colectiv, Banca Românească.


Despre organizație

Cu un capital social de aproximativ 200 milioane Euro și o rețea națională formată din 151 de sucursale, Banca Romanească are 17 ani de activitate pe piața bancară din România.

În octombrie 2003, cel mai mare grup financiar din sud-estul Europei - NBG - a cumpărat pachetul majoritar de la Banca Românească. Un alt acționar important este BERD. În prezent, NBG este banca cu cele mai mari lichidități din sud-estul Europei, fiind lider de piață în Grecia din punct de vedere al depozitelor atrase. NBG este cel mai vechi și cel mai mare grup financiar din Grecia, fiind fondat în anul 1841 și listat la Bursa de Valori din Atena încă din anul 1880. Începând cu octombrie 1999, este listat și la Bursa de Valori din New York - NYSE. NBG are o experiență de peste 160 de ani, cu o puternică prezență internațională prin cele peste 1.700 unități bancare. Dintre companiile reprezentative aflate sub controlul NBG în România se mai numără: NBG Securities România, Garanta Asigurări și NBG Leasing.

Situația inițială

Banca Românească a decis să dezvolte intern o aplicatie prin care să calculeze dobânda efectivă - effective interest rate - un indicator similar DAE, pentru portofoliul de credite. Această decizie a fost motivată de implementarea IFRS, care implică, printre altele, și calculul dobânzii efective.

Achiziția unei aplicații pentru calculul dobânzii efective a fost imposibilă având în vedere faptul ca se dorea o implementare rapidă și un grad destul de ridicat de flexibilitate la modificării...
Bogdan Brînzărea-Iamandi
Coordonator colectiv
Banca Românească

Calculul dobânzii efective se făcea cu ajutorul unor fișiere Excel; acest mod de lucru a funcționat onorabil o vreme, chiar și in condițiile prelucrării unui volum mare de date. Era însă un proces exclusiv manual, consumator de timp, cu riscul major de apariție a erorilor și cu posibilități limitate de automatizare. Conjunctura a făcut necesară utilizarea unui instrument mai performant pentru realizarea acestor operațiuni, declară Bogdan Brînzărea-Iamandi, Coordonator colectiv, Banca Românească.

Pentru obținerea acestui instrument software exista varianta achiziției unei aplicații la cheie de la un furnizor de specialitate sau dezvoltarea internă în cadrul Diviziei IT. O echipă de proiect a făcut o analiză și, în lipsa identificării unui produs software care să acopere cerințele, s-a decis dezvoltarea internă. La acestă decizie a contribuit și faptul că Departamentul Dezvoltare Software din cadrul Diviziei IT mai gestionase astfel de proiecte, iar echipa avea know-how-ul necesar pentru atingerea obiectivelor.

Decizia dezvoltării interne fiind luată, s-a pus problema selectării celor mai potrivite unelte de programare pentru echipa tehnică a Departamentului Dezvoltare Software, Canale Alternative.

Soluția

Alegerea soluției

Echipa de proiect, formată din personal tehnic dar și de business, a evaluat procesele care se desfășurau în Excel și modul în care se făceau calculele și a propus automatizarea și implementarea acestora în cadrul unei aplicații. Era necesară implementarea unei serii de altgoritmi matematici de găsire a rădăcinii unei funcții deoarece în mod nativ Microsoft Excel nu acoperea toate cerințele. Pentru proiectele anterioare, echipa de dezvoltare lucrase cu Visual Studio Team System, Team Foundation Server, C#, Enterprise Library, ASP.NET etc. Însă în urma unei analize a cerințelor, s-a propus utilizarea limbajului F#.

În timpul facultății, am urmat în cadrul programului Erasmus un an universitar în Franța, la Ecole Politehnique. Cursurile de compilatoare și sisteme de operare s-au desfășurat folosind ca limbaj de programare OCaml, limbaj ce reprezintă și nucleul limbajului F#. Cunoscând principiile programării funcționale dar și limbajul în sine, am identificat oportunitatea folosirii acestui limbaj pentru implementarea proiectului Efective Interest Rate în cadrul Băncii Românești. Am realizat că proiectul se preta foarte bine limbajului F# ca mod de implementare al algoritmilor, ca mod de tratare a datelor, dar și prin ușurința cu care se poate scrie codul respectiv prin existența unor caracteristici specifice programării funcționale, spune Bogdan Brînzărea-Iamandi.

Funcționalitățile oferite de F# au fost destul de evidente și au contribuit la fundamentarea deciziei, chiar dacă, la momentul respectiv, în lumea .NET F# era un proiect aflat în fază beta CTP, adică doar un potențial produs a cărei dată oficială de lansare nu era stabilită. Eu ca structură sunt un early adopter, cea ce poate fi o lamă cu două tăișuri: bine din punct de vedere tehnologic și funcțional, dar mai riscant din punct de vedere al managementului, mai ales prin prisma serviciilor de suport. Totuși, nu a fost o decizie personală, am identificat oportunitățile și am prezentat proiectul managementului, care, pe baza unui "proof of concept", a agreat propunerea, declară Bogdan Brînzărea-Iamandi.

Derulare proiect

Proiectul a început la 15 august 2009 și s-a finalizat la 15 decembrie 2009. Toate obiectivele inițiale au fost acoperite, cerințele primare de business au fost rezolvate, și, în plus, modalitatea de calcul al dobânzii efective realizată cu noua aplicație a fost validată și de o misiune de audit. Proiectul s-a derulat în două etape: realizarea efectivă a soluției, care a implicat scrierea, testarea și ulterior optimizarea acesteia. Aplicația este disponibilă utilizatorilor din mai multe departamente și aplică algoritmul de calcul al dobânzii efective pentru portofoliul de credite.

F# este un limbaj de programare funcțională din cadrul .NET Framework , care combină stilul succint, expresiv și compozițional al programării funcționale cu bibliotecile, interoperabilitatea și modelul orientat pe obiect al .NET. Astfel, existența unor funcționalități pentru prelucrarea paralelă a datelor și a unor mecanisme de tratare a excepțiilor, specifice F# și diferite față de modul de lucru în alte aplicații .NET, a permis optimizarea calculelor, necesară prelucrării unui volum mare de date.

Pentru că oferea interoperabilitate nativă cu restul limbajelor .NET, echipa de proiect a utilizat F# pentru dezvoltarea nucleului aplicației, urmând ca acesta să fie integrat cu alte instrumente software existente în cadrul băncii, prin diverse interfețe.

Practic, am ajuns după 4-5 luni să putem avea o aplicație funcțională care să răspundă în întregime solicitărilor de business. Dezvoltarea s-a făcut ținând cont de ceea ce oferea limbajul la momentul respectiv, ulterior în funcție de evoluția limbajului am efectuat unele optimizări posibile prin noile versiuni lansate. A fost o sincronizare fericită cu lansarea versiunii din octombrie 2009 și a unui PowerPack pe care le-am exploatat în optimizarea proiectului, consideră Bogdan Brînzărea-Iamandi.

În vederea eliminării riscurilor utilizării unui produs nou, s-a optat pentru realizarea unei versiuni de backup în C#. Informațiile de suport au fost prealuate din comunitățile online, în care o activitate intensă o avea personalul implicat în dezvoltarea proiectului F#.

Au existat riscuri, pornind de la simplul fapt că eram singurii cunoscători de programare funcțională, până la faptul că am jucat o carte având o serie de constrângeri de timp, destul de ferme. Existau constrângeri de timp atât la nivel intern cât și extern pentru implementarea cu succes a proiectului, pentru că nu existau jumătăți de măsură, la finele anului fiind programată o misiune de audit, afirmă Bogdan Brînzărea-Iamandi.

Beneficiile

Decizia de utilizare a limbajului F# pentru realizarea aplicației de calcul a dobânzii efective a adus Bancii Românești o serie de beneficii care țin atât de reducerea costurilor cât și de reducerea timpului de realizare a aplicației. Mai mult, testele ulterioare au arătat și o rulare mai eficientă a aplicației scrise cu F# pe infrastructura hardware existentă precum și oportunități ulterioare de optimizare. Principalele beneficii sunt:

  • Reducerea timpului de realizare a calcului pentru obținerea dobânzii efective la nivel de minute: În termen de timp, avantajele față de utilizarea altor soluții sunt evidente - timpul necesar operațiunilor s-a redus considerabil, procesarea se face automat, iar erorile umane au fost eliminate.
  • Reducerea costurilor de achiziție și implementare: Banca Românească a făcut o economie substanțială prin alegerea opțiunii dezvoltării interne deoarece aplicația este complexă și necesită atât cunoștințe de business cât și cunoștințe tehnice foarte avansate. Alături de costurile de producție, s-ar fi adăugat și costurile aferente serviciilor de implementare.
  • Reducerea la jumătate a volumului de cod necesar scrierii aplicației: Datorită fluenței limbajului funcțional și a principiilor care se pretează procesării datelor, volumul de cod este de două ori mai mic în F# față de C#, Bogdan Brînzărea-Iamandi.
  • Reducerea numărului de bug-uri: F# oferă o paradigmă diferită față de programarea imperativă clasică, specifică C#, Java, C/C++. Chiar dacă este mult mai greu să ajungi la un cod care să compileze, e posibil să nu existe niciun bug deoarece modul de programare este natural; cu excepția unor erori sintactice, codul scris poate să fie aproape de forma finală. Varianta scrisă în C# a avut mai multe bug-uri, în timp ce pentru F# am observat o reducere la minim a erorilor, Bogdan Brînzărea-Iamandi.
  • Optimizarea importului datelor și a calcului paralel: Nu am avut niște obiective în termen de timp de procesare, însă ne-am propus să atingem un nivel ridicat de performanță. În mod sigur se poate și mai bine, însă nu este justificat economic, Bogdan Brînzărea-Iamandi.
  • Curbă rapidă de învățare: Adoptarea F# este un proces rapid facilitat de existența unei documentații oficiale bogate dar și a unor informații relevante în cadrul comunităților online. Trecerea de la OCaml la F# se face rapid, în cazul meu a fost de 3 zile. Pentru colegii fără cunoștințe solide în domeniul programării funcționale am organizat o serie de prezentări interne care au facilitat familiarizarea cu noul limbaj, Bogdan Brînzărea-Iamandi.
  • Exploatare mai eficientă a infrastructurii hardware a băncii: Și cu alte limbaje se pot obține aceleași performanțe pe un hardware deja instalat, dacă aplicația este scrisă foarte bine, însă ai nevoie de mai mult timp, iar partea de programare concurentă și paralelă necesită cunoștințe și atenție sporită. Cu F#, paralelizarea este o problemă foarte simplă, de adăugarea unei litere spre exemplu, Bogdan Brînzărea-Iamandi.
  • Reducerea timpului de procesare cu 10-20% față de aplicația scrisă în C#: Am făcut un profiling și ca timp: varianta în F# se comportă cu 10-20% mai bine decât în C#. Este o diferență de ordinul minutelor și poate părea nesemnificativă, însă dacă am aplica raționamentul unui volum de date mult mai mare, valoarea ar fi relevantă, Bogdan Brînzărea-Iamandi.

În urma rezultatelor obținute în cadrul acestui proiect, Departamentul Dezvoltare Software al Băncii Românești este deschis la folosirea limbajului F# și pentru alte proiecte similare. Nu voi ezita să folosesc F# în orice proiect unde cred că poate aduce un beneficiu major. Folosim tehnologia potrivită în funcție de fiecare proiect pentru a obține un maxim de eficiență - Bogdan Brînzărea-Iamandi.