Sunteți pe pagina 1din 65

Inginerie software

Curs 1

Instructor : Conf. dr. Cristina Mndru


cmindruta@info.uvt.ro
Sites:
http://sites.google.com/site/ingswcm
http://web.info.uvt.ro/~cmindruta/Curs_IS_SwEng

Site :
https://sites.google.com/site/ingswcm
Acces cu

Google account :

ingsw.student.uvt

Password :

ingswuvt

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

Un program simplu
Fiind dat o colecie de linii de text (iruri) memorate ntr-un fiier, sortai-le n ordine
alfabetic, i scriei-le n alt fiier.
Ct de rapid trebuie
s fie sortarea?
Cum trebuie stocate datele?
Care este formatul datelor?

Cum trebuie tratate


condiiile de eroare?

Care este dimensiunea


datelor de intrare?

Cnd are clientul nevoie de program


i ct e dispus s plteasc?

Ce fel de interfa trebuie s


aib programul?

Ce facem cu caracterele
nealfabetice?

Cum tratm liniile vide i


fiierele vide?

Sortare ascendent
sau descendent?
Pe ce platforme trebuie s
poat fi executat programul?
Se estimeaz extinderea n
viitor a programului?

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 extra-funcionale) : Maniera n care trebuie
ndeplinite cerinele funcionale.

Constrngeri de proiectare : Declaraii care restricioneaz modurile n care


software-ul poate fi proiectat i implementat.

Ce fel trebuie
de intefa
Sortare
trebuie
s
ascendent
aib programul?
sau descendent?
Ct de rapid
s fie
sortarea?
Care este
dimensiunea
Ceviitor
facem
datelor
cu caracterele
de intrare? nonalfabetice?
Se estimeaz
extinderea
n
a programului?
Pe ce platforme trebuie
Cum tratm
s poat
liniile
rula
vide
programul?
i fiierele vide?

Cerine
Cerine funcionale : Ce trebuie s fac programul.
Definesc funcionalitatea programului.
Atribute de calitate (cerine extra-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

Interfeelor cu utilizatorul i cu sistemele externe

Instrumentelor ce se vor utiliza

etc.

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.

Un program simplu procesul de gndire


Atribute de calitate (cerine extra-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: un algoritm cu timp de rspuns corespunztor, selectat pe baza analizei
algoritmilor de sortare existeni.

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.

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.
Portabilitate relativ limitat extracost implicat de suportarea unei noi platforme
compromis ntre dezvoltare pentru portabilitate i necesitatea anticipat 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

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

Un program simplu Testare


Testare verificarea dinamic a codului.
Nivele de testare
-

Unit testing

Testare la integrare

Testare de acceptare

Unit testing procesXUPDWGHXQSURJUDPDWRUSHQWUXDWHVWDILHFDUHSLHVVDX


unitate de software.
Programatorul:
-

Scrie codul

Scrie testele pentru verificarea fiecrui modul, funcie sau metod.

XP programatorii scriu testele nainte de a scrie codul.

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?

Un program simplu Estimare efort


Divizare task n subtask-uri:

Creare clas StringSorter cu trei metode publice: Read, Write, Sort


Implementare rutin de sortare utiliznd un algoritmFDUHLPSOLFJVLUHDFHOXLPDL
mare element, plasare lui la sfritul array-lui, i sortarea restului array-lui utiliznd
acelai mecanism
crearea unei metode IndexOfBiggest care 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

Testare

Implementai soluia i comparai timpul estimat cu cel real.

Un program simplu Estimare efort


Concluzie:

Estimarea este mai corect dup divizarea lucrului n task-uri

Estimarea difer 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.

Un program simplu Implementare


Reguli independente de limbaj:

Fii consisteni n privina numelor,XWLOL]ULLOLWHUHORUPDUL, conveniilor de


programare
ncercai s respectai conveniile limbajului de programare existente

(ex. Java:QXPHFODVFXOLWHUPDUH, 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/procedurile/funciile utilizate n modulele pe care le dezvoltai


trebuie s fie funcionale o posibil problem se datoreaz modulului
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)

Un program simplu Implementare


Modelul de baz al aplicaiei exemplu de implementat:

Decizii:
1. Bune practici : separai funcionalitatea de sortare de interfaa cu utilizatorul
posibilitatea de a schimba independent fie UI fie funcionalitatea de
sortare.
2.

Clasa: StringSorter
Metode:
Read iruri dintr-un fiier
Sort colecia de iruri
Write iruri ntr-un fiier

Preia numele fiierului de intrare i pe cel al fiierului de ieire i


combin metodele anterioare
Excepii: transferate claselor UI.

3. Mai multe clase UI, cte una pentru fiecare tip de UI.

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
(motenete clasa junit.framework.TestCase, conine
metode testXXX(), folosete assertEquals()
pentru a compara valorile ateptate cu cele obinute).

Un program simplu Implementare


import java.io.*;
import java.util.*;
public class StringSorter {
ArrayList lines;

in.txt

one
two
three

public void readFromStream(Reader r) throws IOException{


BufferedReader br=new BufferedReader(r);
lines=new ArrayList();
public class TestStringSorter extends TestCase {
while(true) {
private ArrayList make123() {
String input=br.readLine();
ArrayList lst = new ArrayList();
if(input==null)
lst.add("one"); lst.add("two"); lst.add("three");
break;
return lst;
lines.add(input);
}
public void testReadFromStream() throws IOException{
}
Reader in=new FileReader("in.txt");
}
StringSorter ss=new StringSorter();
}
ArrayList lst= make123();
Pentru a verifica implementarea metodei se
ss.readFromStream(in);
va aplica testul utiliznd un Test Runner.
assertEquals(lst,ss.lines);
}
}

Un program simplu Implementare


Algoritmul ales :

Gsirea celui mai mare element din array

Interschimbarea lui cu ultimul element

Repetarea procedurii cu restul array-lui.

Metode suport:

Interschimbarea a dou elemente din array

Gsirea indexului celui mai mare element dintr-un subarray dat

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.

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;
}
}
public class TestStringSorter extends TestCase {
return idxBiggest;
private ArrayList make123() {...}
}
public void testReadFromStream() throws IOException{...}
public void testSwap() {...}
public void testFindIdxBiggest() {
ArrayList lst = make123();
int i = StringSorter.findIdxBiggest(lst,0,lst.size()-1);
assertEquals(i,1);
}
}
Pentru a verifica implementarea metodei se
va aplica testul utiliznd un Test Runner.

Un program simplu Implementare


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);
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();
Pentru a verifica implementarea metodei se
assertEquals(lst2,ss.lines);
va aplica testul utiliznd un Test Runner.
}
}

Un program simplu Implementare


Mai mult eficien dac cunoatem biblioteca standard a limbajului:

Nu avem nevoie de clasele statice swap i findIdxBig


Codul clasei StringSorter este mai simplu.

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);
}
}

import java.io.*;
import java.util.*;
public class StringSorter {
ArrayList lines;

Un program simplu Implementare

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()));
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. }

import java.io.*;
import java.util.*;
public class StringSorter {
ArrayList lines;

Un program simplu Implementare

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);
public class TestStringSorter extends TestCase {
readFromStream(in);
private ArrayList make123() {...}
sort();
public void testReadFromStream() throws IOException{...}
writeToStream(out);
public void testSort1() {...}
in.close();
public void testWriteToStream() throws IOException {...}
out.close();
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. }

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

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 StringSorter arat astfel:


java StringSorterCommandLine a.txt a_sortat.txt

Cnd este util o astfel de interfa?


Care sunt avantajele scrierii unei astfel de interfee?

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!

Rezumat; concluzii

Un singur program
Dezvoltat de o singur persoan
Puini utilizatori

Probleme:

Dar dac ?
Sistem complex cu componente multiple.

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.

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 n care va fi implementat soluia.


Rezultat 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 softwareFDUHUH]ROYSUREOHPD.


Rezultat al procesului de dezvoltare de software.

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

Mrime i complexitate
Mrime :
numrul de

funcii majore

trsturi 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.)

Mrime i complexitate exemplu de expansiune a unei


componente software (modul)

3 task-uri i relaie secvenial

6 task-uri i relaii secvenial, decizional i repetitiv

Dar n cazul creterii mrimii i complexitii unei probleme rezolvate cu un sistem software ?

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

Probleme tehnice
Manipularea mrimii i complexitii:

Descompunerea problemei
Modularizarea soluiei
Separare tematici
Dezvoltare n 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 ?

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.

Probleme tehnice
Proces i metodologie
Procesul de dezvoltare de software (ciclul de via al dezvoltrii de software
SDLC) = Setul de activiti, fluxulDODFHVWRUDFWLYLWi, 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.

Probleme tehnice
Proces i metodologie
Activiti comune n procesul de dezvoltare de software.
Exist o metodologie pentru culegerea
cerinelor? Ce se ntmpl daca sunt
implicate mai multe persoane?

n ce relaie se afl aceste


activiti? (secvene, suprapuneri,
condiii de lansare,...)

Culegerea i specificarea
cerinelor
Modelare
Codare / unit test
Din ce este constituit sprijinul pentru utilizator ?
Ce fel de probleme trebuie remediate?

Sprijinire utilizator i
remediere probleme

Integrare i testare

Probleme tehnice
Proces i metodologie o abordare posibil a procesului:
Cerine

Cerine

Arhitectur

Model

Cerine

Model

Cod

Cod

Dezvoltare incremental (problema i


soluia divizate n incremente) i integrare
continu.

Model

Cod

Cod

Integrare

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 probleme?
Cum este returnat la tester remedierea unei probleme?

Trebuie ca toate remedierile s fie re-testate?

Cum sunt integrate remedierile napoi n cod? &HWUHEXLHIFXWFX problemele care nu sunt remediate?

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.

Probleme nonTehnice
Asignare i comunicare
Asignare persoane la sarcini.

Competene

Disponibilitate

Obiectiv : asignarea celor mai eficiente i potrivite persoane la sarcinile


corespunztoare.
Comunicare.
n
2

Numrul cilor de comunicare directe crete prin C


implicate n dezvoltarea de software.

cu numrul de persoane

Probabilitatea de eroare n comunicare crete cu numrul persoanelor implicate

nevoia de structuri i protocoale de comunicare i de semnificaii standard


pentru mesaje.

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

Sistem stat de plat ipotetic


Cerine

Cerine funcionale: (exemple)

Care sunt informaiile asociate?


Pe cine s ntreb? Utilizator, client, manager proiect?
Trebuie s documentez rspunsurile?

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

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.

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 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.

Sistem stat de plat ipotetic


Cerine
Cerine extra-funcionale: (exemple)

Performan
Care este volumul tranzaciilor de plat?
Care este viteza de procesare pentru o tranzacie?

Utilizabilitate
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?

Pentru a gestiona corect cerinele extra-funcionale sunt necesare


cunotine despre sistemul tehnic i informaii de interfa.

Sistem stat de plat ipotetic


Cerine
Aprox 15% din defectele software-lui se datoreaz erorilor din cerine.
Erorile din cerine sunt foarte dificil de remediatGDFVXQWGHVFRSHULWH
trziu.

REVIZUIREA specificaiilor cerinelor cu clienii / utilizatorii.

Revizuiri graduale pe specificaii de cerine dezvoltate incremental.

Revizuire a cerinelor finale integrate.

Sistem stat de plat ipotetic


Proiectare

Cerinele funcionale adaugare, actualizare,


tergere trebuie grupate ntr-o singur
component numit funcii administrative stat?

DA ! - grupare funcii
nrudite n componente

Trebuie s fiu pregtit s gestionez erorile


i excepiile. S adun rutinele de tratare a
acestora ntr-o component de procesare
a excepiilor?

Trebuie s grupez funciile de procesare


(calcularea tuturor deducerilor i a sumei nete de
plat) ntr-o singur component numit
procesare stat?

S plasez toate funciile de interfa cu


sisteme externe ntr-o component numit
interfee stat.

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 coeziune puternic n cadrul
fiecrei componente i cuplare slab ntre componente.

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 bidimensional a entitilor modelului proiect

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.

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 aplicaiei 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

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

Sistem stat de plat ipotetic


Codificare 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

Sistem stat de plat ipotetic


Testare module
Dezvoltatorul modulului:

Testeaz fiecare unitate de programare (modul) :

Setarea condiiilor modulului

Alegerea datelor de intrare potrivite

Rularea modulului i observarea comportamentului su prin verificarea


ieirilor.

Remediere eroare descoperit


Re-testare modul

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 testare1 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,)

1Cazurile

de testare (scenarii) sunt proiectate pe baza cazurilor de utilizare (scenarii) care


sunt derivate din cerinele funcionale ale sistemului.

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-testareaILHFUXL modul modificat, unitii funcionale corelate cu acesta i
sistemului n ansamblu.
Cnd nu mai apar probleme, protejarea acestei versiuni a sistemului (release)
fa de modificri ulterioare.

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.

Sistem stat de plat ipotetic


Suport i ntreinere

Aplicaie simpl : nu constituie o problem major.

Aplicaie complex :

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?

poate necesita un set foarte complex de activiti.

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?

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.

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

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

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 !!!

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 ?

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 ?

Q&A
Ce ?
INGINERIA SOFTWARE !
De ce?

Cum?

Cine?

Cnd?

S-ar putea să vă placă și