Sunteți pe pagina 1din 64

Slide 1

Inginerie software
Curs 1
Instructor : Conf. dr. Cristina Mndru
cmindruta@info.uvt.ro
Sites:
http://sites.google.com/site/ingswcm
http://www.info.uvt.ro/~cmindruta/Curs_IS_SwEng
Slide 2
Subiecte tratate
Probleme ale dezvoltrii i asigurrii de suport pentru produsele software
Un program simplu

Mrimea i complexitatea unui sistem

Probleme tehnice i non-tehnice

Probleme ale aplicaiilor de dimensiuni mari

Eforturi de coordonare proces, produs i persoane


Slide 3
Fiind dat o colecie de linii de text (iruri) memorate ntr-un fiier, sortai-le n ordine
alfabetic, i scriei-le n alt fiier.
Un program simplu
What is the format of the data?
Cum trebuie stocate datele?
Sortare
ascendent sau
descendent?
Ce facem cu
caracterele
nealfabetice?
Cum tratm liniile vide
i fiierele vide?
Cum trebuie tratate
condiiile de
eroare?
Ct de rapid
trebuie s fie
sortarea?
Se estimeaz extinderea
n viitor a programului?
Ce fel de interfa trebuie
s aib programul?
Care este
dimensiunea datelor
de intrare?
Pe ce platforme trebuie s
poat fi executat
programul?
Cnd are clientul nevoie de
program i ct e dispus s
plteasc?
Slide 4
Cerine
Clarificai CERINELE.
Cerine program : declaraii are definesc i calific ce trebuie s fac programul.

Cerine funcionale : Ceea ce trebuie s fac programul.

Atribute de calitate (cerine non-funcionale) : Maniera n care trebuie


ndeplinite cerinele funcionale.
Constrngeri de proiectare : Declaraii care restricioneaz modurile n care
software-ul poate fi proiectat i implementat.
Ct de rapid trebuie s fie sortarea?
Se estimeaz extinderea n viitor a programului?
Ce fel de intefa trebuie s aib programul?
Care este dimensiunea datelor de intrare?
Pe ce platforme trebuie s poat rula programul?
Slide 5
Cerine
Cerine funcionale : Ce trebuie s fac programul.
Definesc funcionalitatea programului.
Atribute de calitate (cerine non-funcionale) : Maniera n care cerinele funcionale
trebuie ndeplinite.
Exemple tipice: performan, modificabilitate, utilizabilitate, configurabilitate,
fiabilitate, disponibilitate, securitate, scalabilitate.
Decizii i constrngeri de proiectare : Declaraii care restricioneaz modurile n care
software-ul poate fi proiectat i implementat.
Alegerea:
Limbajului de programare

Platformelor pe care ruleaz sistemul

Interfeele cu utilizatorul i cu sistemele externe


Instrumentele ce se vor utiliza
etc.
Slide 6
Un program simplu procesul de gndire
Cerine funcionale : Ce trebuie s fac programul. Definesc funcionalitatea programului.
Formate de intrare:
Care este formatul datelor? ASCII, UNICODE, hibrid?
Cum trebuie stocate datele: cum sunt separate liniile unui fiier?
Decizie: ASCII; CR+LF
Sortare:
Sortare ascendent sau descendent?
Ce facem cu caracterele nonalfabetice? Numerele nainte sau dup litere? Minuscule i
majuscule.
Decizie: sortarea caracterelor n odine numeric, sortarea fiierului n ordine ascendent.
Cazuri speciale, limite, condiii de eroare:
Cum tratm liniile vide i fiierele vide?
Cum trebuie tratate condiiile de eroare?
Decizie: liniile vide nu au un tratament special; pentru fiiere de intrare vide se creaz
fiiere de ieire vide; toate erorile sunt semnalate utilizatorului; premiz: fiierele de
intrare nu sunt corupte.
Slide 7
Un program simplu procesul de gndire
Atribute de calitate (cerine non-funcionale) : Maniera n care trebuie ndeplinite
cerinele funcionale.
Exemple tipice: performan, modificabilitate, utilizabilitate, configurabilitate, fiabilitate,
disponibilitate, securitate, scalabilitate.
Performan:
: Ct de rapid trebuie s fie sortarea?
R: Mai puin de 1 min. Pentru sortarea unui fiier de 100 linii a cte 100 caractere. Decizie:
analiza algoritmilor de sortare i alegerea celui cu timp de rspuns corespunztor.
Modificabilitate :
: Se estimeaz extinderea programului n viitor?
R: E posibil ca n viitor s apar cereri de modificare a ordinii de sortare.
Decizie: Pregtirea programului pentru modificri ulterioare ale ordinii de sortare.
Slide 8
Un program simplu procesul de gndire
Decizii i constrngeri de proiectare : Declaraii are restricioneaz modurile n care
software-ul poate fi proiectat i implementat.
Platforme:
Decizii referitoare la arhitectur, SO, biblioteci disponibile.
Portabilitatea este relativ limitat extracost implicat de suportarea unei noi platforme
compromis ntre dezvoltare pentru portabilitate i necesitatea predicted pentru o viitoare
portabilitate.
Cerine de planificare (grafic de timp) :
Personalul tehnic informeaz despre fezabilitatea i costul diferitelor termene de realizare.
Clientul stabilete termenul final.
Interfaa utilizator: CLI, GUI, Web-
based ?Decizie:

Evitare operaii de upload i download nu Web-based

Permiterea automatizrii i reutilizrii programului ca modul n programe viitoare invocabil din cadrul
unui script CLI
Slide 9
Un program simplu procesul de gndire
Decizii i constrngeri de proiectare : Declaraii care restricioneaz modurile n care
software-ul poate fi proiectat i implementat.
Dimensiuni tipice i maxime pentru intrare:
Mici orice algoritm de sortare cel mai simplu de implementat
Mari, ncap n RAM un algoritm eficient
Mari, nu ncap n RAM algoritm specializat pentru sortare pe disc.
Limbajul de programare:
Poate fi o constngere de proiectare.
Poate fi o decizie de proiectare bazat pe tipul de programare necesar, pe cerinele de
performan i portabilitate, pe expertiza tehnic a dezvoltatorilor.
Algoritmi:
Pot fi dai sub form de constrngeri de proiectare sau ca cerine funcionale.
Pot fi decizii de proiectare influenate de:

Limbajul utilizat i biblioteca disponibil putem utiliza o facilitate standard oferit de


limbajul de programare

Performana cerut compromis cu efortul necesar pentru implementare i expertiza


dezvoltatorilor
Slide 10
Un program simplu Testare
Testare verificarea dinamic a codului.
Nivele de testare
- Unit testing
-
-
Testare la integrare
Testare de acceptare
Unit testing proces urmat de unprogramator pentru a testa fiecare pies sau
unitate de software.
Programatorul:
Scrie codul -
-
Scrie testele pentru verificarea fiecrui modul, funcie sau metod.
XP programatorii scriu testele nainte de a scrie codul.
Slide 11
Un program simplu Estimare efort
Estimare efort aspect important n cadrul unui proiect software.
Estimare efort estimare cost, estimare timp.
Test 1 minut:
Estimai de ct timp avei nevoie pentru a scrie un program care citete linii dintr-un fiier i
scrie liniile sortate ntr-un alt fiier. Trebuie s implementai algoritmul de sortare i s
oferii o GUI cu dou casete text i dou butoane n care utilizatorul poate selecta
fiierul de intrare i fiierul de ieire utiliznd dialogul File Open. Presupunei c putei
lucra fr ntrerupere la aceast program.
Presupunerea de a lucra fr ntrerupere la acest program este realist?
Slide 12
Un program simplu Estimare efort
Divizare task n subtask-uri:

Creare clas StringSortercu trei metode publice: Read, Write, Sort

Implementare rutin de sortare utiliznd un algoritm care implic gsirea celui mai
mare element, plasare lui la sfritul array-lui, i sortarea restului array-lui utiliznd
acelai mecanism crearea unei metode IndexOfBiggestcare returneaz indexul
celui mai mare element dintr-un array.
Tem :
Estimai un timp ideal (asap) i un timp calendaristic pentru fiecare task din lista
urmtoare:
IndexOfBiggest




Sort
Read
Write
GUI
Testing
Implementai soluia i comparai timpul estimat cu cel real.
Slide 13
Un program simplu Estimare efort
Concluzie:

Estimarea este mai corect dup divizarea lucrului n tasks-uri

Estimarea va diferi mai mult sau mai puin de timpul necesar n realitate

Estimarea beneficiaz de experiena anterioar

Estimarea este mai puin corect la nceputul proiectului.


Estimare problem important n managementul proiectelor software.
Slide 14
Un program simplu Implementare
Reguli independente de limbaj:

Fii consisteni n privina numelor, utilizrii literelor mari, conveniilor de


programare
ncercai s respectai conveniile limbajului de programare existente
(ex. Java: nume clas cu liter mare, nume variabil cu liter mic, separare cuvinte cu
liter mare; C: utilizare litere mici i separare cuvinte cu underscore)

Alegei nume descriptive; lungi pentru elemente care au domeniu global (ex. clase,
metode publice), scurte pentru referine locale (ex. variabile locale, nume private).

Metodele utilizate n modulele pe care le dezvoltai trebuie s fie funcionale


o posibil problem se datoreaz modului vostru.

Cunoatei i utilizai ct mai mult posibil biblioteca standard oferit de limbaj


mbuntirea timpului de dezvoltare, (re)uutilizarea de cod depanat i
optimizat.

Revzuii codul, dac e posibil cu alte persoane. (dar nu i temele de cas


individuale)
Slide 15
Un program simplu Implementare
Modelul de baz al aplicaiei exemplu de implementat:
Decizii:
1.
Bune practici : separai funcionalitatea de sortare de interfaa cu utilizatorul
possibilitatea de a schimba independent fie UI fie funcionalitatea de
sortare.
2. Clasa: StringSorter
Metode:
Readiruri dintr-un fiier
Sortcolecia de iruri
Writeiruri ntr-un fiier
Preia numele fiierului de intrare i pe cel al fiierului de ieire i
combin metodele anterioare
Excepii: pasate claselor UI.
3.
Mai multe clase UI, cte una pentru fiecare tip de UI.
Slide 16
Un program simplu Implementare
import java.io.*;
import java.util.*;
public class StringSorter
{
ArrayList lines;
...
}
Unit testare pentru aplicaia exmplu:
Decizie: Utilizare JUnit
Scrierea unei clase ce conine toate unit testele
(inherits from junit.framework.TestCase, contains
testXXX()methods, uses assertEquals()to
compare expected with actual values).
Slide 17
Un program simplu Implementare
import java.io.*;
import java.util.*;
public class StringSorter
{
ArrayList lines;
public void readFromStream(Reader r) throws IOException{
BufferedReader br=new BufferedReader(r);
lines=new ArrayList();
while(true) {
String input=br.readLine();
if(input==null)
break;
lines.add(input);
}
}
public class TestStringSorter extends TestCase {
private ArrayList make123() {
ArrayList lst = new ArrayList();
lst.add("one"); lst.add("two"); lst.add("three");
return lst;
}
public void testReadFromStream() throws IOException{
Reader in=new FileReader("in.txt");
StringSorter ss=new StringSorter();
ArrayList lst= make123();
ss.readFromStream(in);
assertEquals(lst,ss.lines);
}
}
}
Pentru a verifica implementarea metodei
se va aplica testul utiliznd un Test
Runner.
Slide 18
Un program simplu Implementare
Algoritmul ales :

Gsirea celui mai mare element din array


Interschimbarea lui cu ultimul element
Reptarea procedurii cu restul array-lui.
Metode suport:

Interschimbarea a dou elemente din array

Gsirea indexului celui mai mare elemenet dintr-un subarray dat


Slide 19
Un program simplu Implementare
static void swap(List lst, int i1, int i2) {
Object tmp=lst.get(i1);
lst.set(i1, lst.get(i2));
lst.set(i2.tmp);
}
public class TestStringSorter extends TestCase {
private ArrayList make123() {...}
public void testReadFromStream() throws IOException{...}
public void testSwap() {
ArrayList lst1=make123();
ArrayList lst2=new ArrayList();
lst2.add("one"); lst2.add("three"); lst2.add("two");
StrinSorter.swap(lst1,1,2);
assertEquals(lst1,lst2);
}
}
Pentru a verifica implementarea metodei
se va aplica testul utiliznd un Test
Runner.
Slide 20
Un program simplu Implementare
static void findIdxBiggest(List lst, int from, int to) {
String biggest=(String)lst.get(from);
int idxBiggest=from;
for(int i=from+1; i<=to; ++i) {
if(biggest.compareTo((String)lst.get(i)<0) {
biggest=(String)lst.get(i);
idxBiggest=i;
}
}
return
idxBiggest; }
public class TestStringSorter extends TestCase {
private ArrayList make123() {...}
public void testReadFromStream() throws IOException{...}
public void testSwap() {...}
public void testFindIdxBiggest() {
ArrayList lst = make123();
int i = StringSorter.findIdxBiggest(lst,0,l.size()-1);
assertEquals(i,1);
}
}
Pentru a verifica implementarea metodei
se va aplica testul utiliznd un Test
Runner.
Slide 21
Un program simplu Implementare
public class TestStringSorter extends TestCase {
private ArrayList make123() {...}
public void testReadFromStream() throws IOException{...}
public void testSwap() {...}
public void testFindIdxBiggest() {...}
public void testSort1() {
StringSorter ss = new StringSorter();
ss.lines=make123();
ArrayList lst2=new ArrayList();
lst2.add("one"); lst2.add("three"); lst2.add("two");
ss.sort();
assertEquals(lst2,ss.lines);
}
}
import java.io.*;
import java.util.*;
public class StringSorter
{
ArrayList lines;
public void readFromStream(Reader r) throws IOException{...}
public void sort() {
for(int i=lines.size()-1; i>0; --i) {
int big=findIdxBiggest(lines,0,i);
swap(lines,i,big);
}
}
}
Pentru a verifica implementarea metodei
se va aplica testul utiliznd un Test
Runner.
Slide 22
Un program simplu Implementare
import java.io.*;
import java.util.*;
public class StringSorter
{
ArrayList lines;
public void readFromStream(Reader r) throws IOException{...}
void sort() {
java.util.Collections.sort(lines);
}
}
Mai mult eficien dac cunoatem biblioteca standard library a limbajului:

Nu avem nevoie de clasele statice swapi findIdxBig

Codul clasei StringSortereste mai simplu.


Slide 23
import java.io.*;
import java.util.*;
public class StringSorter
{
ArrayList lines;
public void readFromStream(Reader r) throws IOException{...}
public void sort() {...}
public void writeToStream(Writer w) throws IOException {
PrintWriter pw=new PrintWriter(w);
Iterator i=lines.iterator(i);
while(i.hasNext()) {
pw.println((String)(i.next()));
}
}
Un program simplu Implementare
public class TestStringSorter extends TestCase {
private ArrayList make123() {...}
public void testReadFromStream() throws IOException{...}
public void testSort1() {...}
public void testWriteToStream() throws IOException {
StringSorter ss1 = new StringSorter();
ss1.lines=make123();
Writer out=new FileWriter(test.out);
ss1.WriteToStream(out);
out.close();
Reader in=new FileReader(test.out);
StringSorter ss2=new StringSorter();
ss2.readFromStream(in);
assertEquals(ss1.lines,ss2.lines);
}
}
Pentru a verifica implementarea metodei
se va aplica testul utiliznd un Test
Runner.
Slide 24
import java.io.*;
import java.util.*;
public class StringSorter
{
ArrayList lines;
public void readFromStream(Reader r) throws IOException{...}
public void sort() {...}
public void writeToStream(Writer w) throws IOException {...}
public void sort(String inputFileName, String outputFileName) throws
IOException{ Reader in=new FileReader(inputFileName);
Writer out=new FileWriter(outputFileName);
readFromStream(in);
sort();
writeToStream(out);
in.close();
out.close();
}
}
Un program simplu Implementare
public class TestStringSorter extends TestCase {
private ArrayList make123() {...}
public void testReadFromStream() throws IOException{...}
public void testSort1() {...}
public void testWriteToStream() throws IOException {...}
public void testSort2() throws IOException {
StringSorter ss1=new StringSorter();
ss1.sort(in.txt,test2.out);
ArrayList lst= new ArrayList();
lst.add("one"); lst.add("three"); lst.add("two");
Reader in=new FileReader(test2.out);
StringSorter s2=new StringSorter();
ss2.readFromStream(in);
assertEquals(lst,ss2.lines);
}
}
Pentru a verifica implementarea metodei se
va aplica testul utiliznd un Test Runner.
Slide 25
Un program simplu Interfee utilizator
Pn acum : implementare, testat ca unitate (dar nu complet), a clasei
StringSorter.
Interfaa utilizator un program care va permite accesul la funcionalitatea clasei
StringSorter.
Variante :
CLI
GUI
Slide 26
Un program simplu Interfee utilizatpr
import java.io.IOException;
public class StringSorterCommandLine
{
public static void main(String args[]) throws IOException {
if(args.length!=2) {
System.out.println(Use: cmd inputfile
outputfile); }else{
StringSorter ss=new StringSorter();
ss.sort(args[0],args[1]);
}
}
}
Linia de comand pentru utilizare StringSorterarat astfel:
java StringSorterCommandLine a.txt a_sortat.txt
Cnd este util o astfel de interfa?
Care sunt avantajele scrierii unei astfel de interfee?
Slide 27
Un program simplu Interfee utilizator
import java.io.IOException;
public class StringSorterGUI1
{ public static void main(String args[]) throws IOException {
try{
StringSorter ss=new StringSorter();
String inputFileName=JOptionPane.showInputDialog(Please enter input file name);
String outputFileName=JOptionPane.showInputDialog(Please enter output file name);
ss.sort(inputFileName,outputFileName);
}finally{
System.exit(1);
}
}
}
V place acest GUI ?
Propunei unul mai prietenos!
Slide 28
Rezumat; concluzii
Un singur program

Dezvoltat de o singur persoan

Puini utilizatori
Probleme:

Cerine funcionale i atribute de calitate


Constrngeri i decizii de proiectare
Testare
Estimare efort
Detalii de implementare

Activiti:

nelegerea cerinelor
Estimarea efortului i posibil planificarea dezvoltrii
Proiectarea soluiei
Implementarea soluiei
Testarea corectitudinii i a acceptrii de ctre utilizator
Un process (simplu).
Documentaie minimal.
Dar dac ?
Sistem complex cu componente multiple.
Slide 29
Terminologie
Problema ce trebuie rezolvat de un sistem software.
Spaiul problemei domeniul business n care este definit
problema
specificat
.
de cerinele utilizator.
Modelul domeniului entitile i relaiile din domeniul business care definesc
problema de rezolvat.
Rezultat al analizei cerinelor.
Spaiul soluiei domeniul software domain n care va fi implementat soluia.
Reezultat al deciziilor i constrngerilor de proiectare.
Modelul proiect (design) reprezentare a entitilor i relaiilor din spaiul soluiei
care definesc sistemul software soluie nainte de a fi codificat (implementat).
Rezultat al procesului de proiectare.
Soluia un sistem software care rezolv problema.
Rezultat al procesului de dezvoltare de software.
Slide 30
Subiecte tratate
Probleme ale dezvoltrii i asigurrii de suport pentru prdusele software
Un program simplu

Mrimea i complexitatea unui sistem

Probleme tehnice i non-tehnice

Probleme ale aplicaiilor de dimensiuni mari

Eforturi de coordonare proces, produs i persoane


Slide 31
Mrime i complexitate
Mrime : numrul de

funcii majore

trsturile din cadrul fiecrei arii funcionale

interfee cu sisteme externe


utilizatori simultani

tipuri de date i de structuri de date


Complexitate :

legturi (partajare date, transfer de control, ambele)

relaii (ierarhic, sevenial, bucl, recursiv, etc.)


Slide 32
Mrime i complexitate exemplu de expansiune a unei
componente software (modul)
6 task-uri i relaii secvenial, decizional
i repetitiv
3 task-uri i relaie secvenial
Dar n cazul creterii mrimii i complexitii unei probleme rezolvate cu un sistem software ?
Slide 33
Subiecte tratate
Probleme ale dezvoltrii i asigurrii de suport pentru prdusele software
Un program simplu

Mrimea i complexitatea unui sistem

Probleme tehnice i non-tehnice

Probleme ale aplicaiilor de dimensiuni mari

Eforturi de coordonare proces, produs i persoane


Slide 34
Probleme tehnice
Manipularea mrimii i complexitii:
Descompunerea problemei

Modularizarea soluiei
Separare tematici

Iteraii incrementale
Discuie:
Divizarea problemei n segmente mai mici
Ex. dup funcie i trstur
Divizm soluia de-a lungul liniilor de divizare stabilite de segmentele
problemei ?
Slide 35
Probleme tehnice

Technologie i unelte
Alegeri tehnice:
Limbajul de programare:...
Unelte de dezvoltare : IDEs,
Infrastructur : SGBD, reea, middleware,...
Unelte de management : controlul versiunilor,
Diversitatea pregtirii i experienei membrilor echipei acord asupra deciziilor, planuri de
instruire, etc.
Slide 36
Probleme tehnice
Proces i metodologie
Procesul de dezvoltare de software (ciclul de via al dezvoltrii de software
SDLC) = Setul de activiti, de secvene i flux al acestor activiti, intrrile
i ieirile acestor activiti, i precondiiile i postcondiiile fiecrei activiti
implicate n producerea de software.

Conine activitile necesare dezvoltrii i ntreinerii software-lui.

Utilizat n ghidarea i n coordonarea i managementul proiectelor complexe


ce implic mai multe persoane.
Metodologie o procedur particular sau un set de proceduri.
Slide 37
Probleme tehnice
Proces i metodologie
Activiti comune n procesul de dezvoltare de software.
Culegerea i specificarea
cerinelor
Modelare
Codare / unit test
Sprijinire utilizator i
remediere probleme
Integrare i testare
Exist o metodologie pentru
culegerea cerinelor? Ce se ntmpl
daca sunt implicate mai multe
persoane?
Din ce este constituit sprijinul pentru
utilizator ?Ce fel de probleme trebuie
remediate?
n ce relaie se afl aceste
activiti? (secvene,
suprapuneri, condiii de
lansare,...)
Probleme tehnice
Proces i metodologie o abordare posibil a procesului:
Cerine
Model
Integrare
Cerine Cerine

Cod
Model Model
Arhitectur
Cod Cod Cod

Test Fix Test Fix


Test Fix
Cteva ntrebri referitoare la o parte a procesului:
Exist un grup de testare separat i independent ? Cum i cui i este raportat o problem gsit?
Ct informaie trebuie s conin descrierea unei probleme? Cine decide nivelul de severitate al unei
Cum este returnat la tester remedierea unei
probleme? Cum sunt integrate remedierile napoi
n cod?
Trebuie ca toate remedierile s fie re-
testate?Ce trebuie fcut cu problemele care nu sunt
remediate?
Dezvoltare incremental (problema i
soluia divizate n incremente) i integrare
continu.
slide 38
Slide 39
Probleme nonTehnice
Estimare efort i planificare
Probleme:

Dificil nainte de nelegerea cerinelor.

Necesit cunotine despre productivitile individuale ale membrilor echipei.

Dificultatea n relaie direct cu mrimea i complexitatea problemei.

Mai corecte pe msur ce proiectul avanseaz.

Mai corecte dac exist experien cu proiecte similare.


Slide 40
Probleme nonTehnice
Asignare i comunicare
Asignare persoane la sarcini.
Competene
Disponibilitate
Obiectiv : asignarea celor mai eficiente i potrivite persoane la sarcinile
corespunztoare.
Comunicare.

Numrul cilor de comunicare directe crete prin C


n
2
cu numrul de persoane
implicate n dezvoltarea de software.

Probabilitatea de eroare n comunicare crete cu numrul persoanelor implicate


nevoia de structuri i protocoale de comunicare i de semnificaii standard
pentru mesaje.
Slide 41
Subiecte tratate
Probleme ale dezvoltrii i asigurrii de suport pentru prdusele software
Un program simplu

Mrimea i complexitatea unui sistem

Probleme tehnice i non-tehnice

Probleme ale aplicaiilor de dimensiuni mari

Eforturi de coordonare proces, produs i persoane


Slide 42
Sistem stat de plat
ipotetic Cerine
Cerine funcionale: (exemple)

Adugare, modificare, tergere nume i informaii personale asociate ale tuturor angajailor

Adugare, modificare, tergere toate beneficiile asociate cu toi angajaii

Adugare, modificare, tergere toate taxele i alte deduceri asociate tuturor angajailor

Adugare, modificare, tergere toate veniturile brute asociate tuturor angajailor

Adugare, modificare, tergere toi algoritmii relativi la calcularea plii nete pentru fiecare
angajat

Generarea unui cec de plat sau a unui depozit bancar direct pentru fiecare angajat
Care sunt informaiile asociate?
Pe cine s ntreb? Utilizator, client, manager
proiect?Trebuie s documentez rspunsurile?
Ce nseamn toate beneficiile?
Ce implicaii are posedarea unui beneficiu asupra plii unui angajat?Exist
o list cu toate beneficiile posibile? Va fi aceasta modificat n viitor?
Pentru a gestiona corect Cerinele funcionale trebuie nelese
cunotinele specifice domeniului aplicaiei relative la problem.
Slide 43
Sistem stat de plat
ipotetic Cerine
Care este ciclul de realizare a statului de plat?
Care este termenul de transmitere a informaiilor (ex. cretere de salariu).
Pentru a gestiona corect Cerinele funcionale trebuie nelese
cunotinele specifice domeniului aplicaiei relative la problem.
Cerine funcionale: (exemple)

Adugare, modificare, tergere nume i informaii personale asociate ale tuturor angajailor

Adugare, modificare, tergere toate beneficiile asociate cu toi angajaii

Adugare, modificare, tergere toate taxele i alte deduceri asociate tuturor angajailor

Adugare, modificare, tergere toate veniturile brute asociate tuturor angajailor

Adugare, modificare, tergere toi algoritmii relativi la calcularea plii nete pentru fiecare
angajat

Generarea unui cec de plat sau a unui depozit bancar direct pentru fiecare angajat
Slide 44
Sistem stat de plat
ipotetic Cerine
Cerine non-funcionale: (exemple)

Performan
Utilizabilitate
Care este volumul tranzaciilor de plat?
Care este viteza de procesare pentru o tranzacie?
Pentru a gestiona corect cerinele non-funcionale sunt
necesare cunotine despre sistemul tehnic i informaii de
interfa.
Ce experien are utilizatorul n folosirea de interfee grafice?
Care sunt profilele utilizatorilor?
Cum se anuleaz i reproceseaz un cec de plat bazat pe o
nregistrare incorect?
Slide 45
Sistem stat de plat
ipotetic Cerine
Aprox 15% din defectele software-lui se datoreaz erorilor din cerine.
Erorile din cerine sunt foarte dificil de remediat dac sunt descoperite

trziu.

REVIZUIREA specificaiilor cerinelor cu clienii / utilizatorii.

Revizuiri graduale pe specificaii de cerine dezvoltate incremental.

Revizuire a cerinelor finale integrate.


Slide 46
Sistem stat de plat ipotetic
Proiectare
Cerinele funcionale adaugare, actualizare,
tergere trabuie grupate ntr-o singur
component numit funcii administrative stat?
Trebuie s grupez funciile de procesare
(calcularea tuturor deducerilor i a sumei nete de
plat) ntr-o singur component numit
procesare stat?
Trebuie s fiu pregtit s gestionez erorile
i excepiile. S adun rutinele de tratare a
acestora ntr-o component de procesare
a excepiilor?
S plasez toate funciile de interfa cu
sisteme externe ntr-o component numit
interfee stat.
DA !
Slide 47
Sistem stat de plat ipotetic
Proiectare
Avantajele gruprii funciilor nrudite n componente:

Ofer un grad de coeziune n cadrul componentei

Corespunde fluxului business i contextului de procesare a statului

Ofer o potenial asignare pe componente a sarcinilor de lucru

Permite mpachetarea mai simpl a software-lui, pe componente.


Proiectanii trebuie s considere att caracteristicile de coeziune ct i de cuplare
ale unui model proiect software, urmrind conexiune puternic pentru
fiecare component i cuplare slab ntre componente.
Slide 48
Sistem stat de plat
ipotetic Proiectare
Servicii business : grupate n componente coezive.
Servicii comune (ex. help, ecrane comune) : utilizate de mai multe componente
grupate ntr-o component de servicii.

Vedere dimensional a entitilor modelului proiect


Slide 49
Sistem stat de plat ipotetic
Proiectare
Prototipul interfeei utilizator :
Arhitectura ecranului
Layout i stil
Coninut
Relaii de navigare
Obs. Nu e o preocupare central de proiectare deoarece aplicaia este puternic orientat pe
procesare n loturi de lucrri i slab interactiv.
Proiectarea bazei de date :
tabele
chei
Obs. Preocupare central de proiectare deoarece aplicaia lucreaz intensiv cu multe date.
Slide 50
Sistem stat de plat ipotetic
Proiectare
Competene de proiectare din perspectiva mrimii :
Baz de date





Reea
Interfee de transmisie
Interfee de imprimare
Interfee cu sisteme de operare
Medii de dezvoltare
Domeniul aplicaie stat de plat
Competente de proiectare din perspectiva complexitii :

Performan
Procesare erori

Tratarea nregistrrilor angajat ce nu pot fi procesate includere exit-uri ctre


procesare manual i reconcilierea nregistrrilor procesate manual cu sistemul
stat de plat automat.

Tratarea informaiilor conflictuale


Slide 51
Sistem stat de plat ipotetic
Proiectare
Tehnici aplicate:

Descompunere funcional

Sintez

Definirea interaciunilor dintre componente

Definirea interaciunilor din componente


Diferene fa de proiectarea unui program cu un singur modul:

Disciplin superioar
Principii de ghidare suplimentare

Echipe cu mai muli membri


Slide 52
Sistem stat de plat ipotetic
Codificare i testare module
Pentru fiecare unitate funcional dintr-o component dat construii
una sau mai multe uniti de programare (module):

Codificai layout-ul exact al interfeei ecran ntr-un limbaj de programare dat

Codificai logica exact de funcionare ntr-un limbaj de programare dat

Codificai logica exact de acces la date i de stocare a acestora, ntr-un


limbaj de programare dat

Codificai logica exact de interfa ntr-un limbaj de programare dat


Stabilii standarde n cazul mai multor uniti de programare, pentru:

Convenii de numire pentru identificarea unic a modulului ntr-o ierarhie de


componente i module

Comentarii pentru descriere : condiii de intrare i de ieire din modul, date vitale
pentru procesare, funcie urmrit.
Mesaje de eroare
Slide 53
Sistem stat de plat ipotetic
Codificare i testare module
Dezvoltatorul modulului:
Testeaz fiecare unitate de programate (modul) :

Setarea condiiilor modulului


Alegerea datelor de intrare potrivite

Rularea modulului i observareacomportamentului su prin verificarea


ieirilor.
Remediere eroare descoperit
Re-testare modul
Slide 54
Sistem stat de plat ipotetic
Integrare i testare funcionalitate
Integrarea (compilare i editare de legturi) tuturor modulelor testate n cadrul
unitii funcionale corespunztoare.
Aplicarea cazurilor de testare
1
asupra unitii funcionale.
Remedierea erorilor n modulele specifice.
Re-testarea unitii funcionale.
Dup ce testarea funcional a fost trecut, blocarea modulelor din unitatea
funcional fa de modificri ulterioare.
Aplicarea unui mecanism de management al configuraiilor. Acesta poate fi
automatizat utiliznd unelte pentru managementul configuraiilor (ex.
CVS, Subversion,)
1
Cazurile de testare (scenarii) sunt proiectate pe baza cazurilor de utilizare (scenarii) care
sunt derivate din cerinele funcionale ale sistemului.
Slide 55
Sistem stat de plat ipotetic
Lansare
Integrarea tuturor componentelor i testarea pentru a ne asigura c ntreg
sistemul funcioneaz ca ansamblu i n contextul de la utilizatorul final.
Detectarea problemelor la interfaa sistemului.
Detectarea problemelor de interaciune ntre componente.
Remedierea problemelor descoperite.
Re-testarea fiecrui modul modificat, uniti funcionale corelate i sistemului n
ansamblu.
Cnd nu mai apar probleme, protejarea acestei versiuni a sistemului (release)
fa de modificri ulterioare.
Slide 56
Sistem stat de plat ipotetic
Lansare
Educarea utilizatorilor pentru utilizarea sistemului:

Pregtirea materialului de instruire


Instruirea utilizatorilor
Pregtirea personalului ce asigur suport utilizatorilor instruit n:

Sistemul stat de plat


Contexte utilizator

Instrumente necesare n acordare de asisten utilizatorilor


LANSARE (RELEASE) sistem stat de plat.
Slide 57
Sistem stat de plat
ipotetic Suport i ntreinere
Aplicaie simpl : nu constituie o problem major.
Aplicaie complex :
poate necesita un set foarte complex de activiti.
Pe cine apeleaz utilizatorul (dup ce a consultat
manualul utilizator) cnd aplicaia se oprete i afieaz
un mesaj cu mai multe opiuni pentru utilizator nainte de
ca sistemul s poat continua procesarea?
Pe cine apeleaz utilizatorul cnd banca a
modificat interfaa de transfer direct a sumelor
pltite? Pe cine apeleaz utilizatorul cnd sistemul stat
de plat expune o problem de comportament
dup remedierea unei probleme anterioare?
Slide 58
Sistem stat de plat
ipotetic Suport i ntreinere
Estimarea i alocarea resursei umane, bazat pe:
Numrul ateptat de clieni i utilizatori
Numrul i tipurile problemelor cunoscute ce existau la lansarea sistemului
Estimarea numrului de probleme ce vor fi descoperite de utilizator
Gradul instruirii utilizatorilor
Gradul instruirii personalului de asisten utilizator
Numrul personalului de dezvoltare edetermint s se implice n asigurare de asisten utilizator
Numrul estimat de lansri pentru remediere probleme i pentru modificri funcionale.
Se consider cel puin dou grupuri de personal de suport:

Un grup pentru a rspunde i a gestiona utilizarea sistemului i a rezolva problemele


simple
Competene: comunicare, cunoaterea utilizrii sistemului

Un grup pentru remedierea problemelor dificile i implementarea modificrilor


ulterioare.
Competene: proiectare, codificare

Obs. Organizaia de suport i ntreinere este comparabil n dimensiune i complexitate cu


echipa original de dezvoltare.
Slide 59
Subiecte tratate
Probleme ale dezvoltrii i asigurrii de suport pentru prdusele software
Un program simplu

Mrimea i complexitatea unui sistem

Probleme tehnice i non-tehnice

Probleme ale aplicaiilor de dimensiuni mari

Eforturi de coordonare proces, produs i persoane


Slide 60
Eforturi de coordonare
Ultimul exemplu demonstreaz necesitatea mai multor activiti ale
ingineriei software (specificarea i analiza cerinelor,
proiectarea, implementatarea, testarea i integrarea, suport,).
Sisteme mari i complexe scalare a:
Procesului necesar

Structurii de proiectare i coninutului produsului


Personalului necesar
Slide 61
Eforturi de coordonare
Proces:
anii 1990 - mbuntit (extins, complicat) prin:

Mai multe revizuiri, inspecii, testri, ntruniri de lucru

Eforturi mari pentru asigurarea calitii i realizarea de msurtori cu


scopul de a preveni, detecta i corecta problemele, a mbunti
calitatea software-lui i a crete productivitatea dezvoltatorilor de
software.
anii 2000 simplificat pentru a rspunde provocrilor referitoare la vitez
i cost ale pieii de produse software.
Nu exist un proces valabil n orice situaie !!!
Slide 62
Eforturi de coordonare
Produs:
Produsul software conine:
Codul executabil

Documentaie: specificaiile cerinelor, modelul proiect, scenariile testelor


funcionale, manualul utilizator
Kit instruire utilizator (optional)
Suport (optional)
Motivaie coordonare modificri:

O coeziune iniial puternic i o cuplare slab se vor eroda pe msur ce


se aplic modificri.

Crete complexitatea cresc eforturile de testare


Cum s proiectm modificrile ?
Cum s coordonm modificrile ?
Slide 63
Eforturi de coordonare
Persoane:
Resursa uman este crucial n dezvoltarea i asigurarea de suport pentru
produse software !!!
Industria de software este nc labor intensive (! Munc intelectual de
nalt calificare !)
Cum s coordonm activitile persoanelor implicate n dezvoltarea
produsului software ?
Cum gestionm resursa uman ?
Slide 64
Ce ?
INGINERIA SOFTWARE !
De ce?
Cum?
Cine?
Cnd?
Q&A