Sunteți pe pagina 1din 32

Diagnoza 87

III. TESTE PENTRU DEFECTE SIMPLE DE TIP


BLOCAT-LA

1.Principii de baza

Generarea testelor este o problema complexa cu multe aspecte


interactive. Cele mai importante sunt:
- costul generarii testului.
- calitatea testului generat.
- costul aplicarii testului.

Costul generarii testelor depinde de complexitatea metodei de


generare a testelor. Generarea aleatoare a testelor(Random Test
Generation) este un proces simplu care implica doar generarea unor
vectori oarecare. Totusi, pentru a obtine un test de calitate, masurat sa
zicem de gradul de acoperire a defectelor a testului generat, avem nevoie
de un set destul de mare de vectori. Desi generarea testelor este simpla,
determinarea calitatii testului poate duce la un proces destul de scump. În
plus, aplicarea unui test mai mare duce la cresterea costului datorita
duratei mai mare de aplicare si a necesarului sporit de memorie.

Generarea aleatoare a testelor opereaza fara a lua în considerare


functia sau structura circuitului ce urmeaza a fi testat. Generarea
determinista a testelor se realizeaza prin procesarea unui model al
circuitului. Aceasta metoda este mai scumpa dar produce teste de
dimensiuni mai mici si de calitate mai buna. Generarea determinista a
testelor poate fi realizata manual sau automat. În continuare ne vom referi
doar la generarea automata a testelor.

Generarea testelor poate fi orientata pe defect sau neorientata.


Într-un proces orientat pe defect testele sunt generate pentru defecte
specifice unui anumit univers de defecte. Generarea neorientata a testelor
functioneaza fara a avea ca tinta un defect individual.

Costul generarii testelor depinde de asemenea de complexitatea


circuitului ce urmeaza a fi testat. Exista metode de reducere a
88 Fiabilitate si Diagnoza

complexitatii circuitului în functie de scopul testarii numite tehnici de


proiectare pentru testabilitate.

Figura B_III- 1 prezinta o vedere generala a unui sistem


determinist de generare a testelor. Testele sunt generate pe baza unui
model al circuitului si a unui model de defect dat. Testele generate includ
atât stimulii aplicati cât si raspunsul asteptat al circuitului în cazul
absentei defectelor. Unele sisteme de generare a testelor realizeaza si o
diagnoza folosita la localizarea defectelor.

Model GAT Teste

Univers de Diagnoza
defecte

Figura B_III- 1. Sistem determinist de generare a testelor

2. Generarea automata a testelor pentru defecte singulare


de tip blocat-la în circuite combinationale

Se vor considera circuite combinationale formate din porti SI, SI-


NU, SAU, SAU-NU si porti inversoare.

2.1. Generatoare automate de teste orientate pe defecte

Circuite fara ramuri fanout

Se vor folosi circuite lipsite de ramuri fanout pentru a introduce


principalele concepte ale generarii automate a testelor pentru circuite. Cei
doi pasi fundamentali în generarea unui test pentru un defect de tip
blocat-la-V (unde v reprezinta una din valorile 0 sau 1) sunt : primul îl
reprezinta activarea (excitarea) defectului, iar al doilea propagarea erorii
Diagnoza 89

rezultate la o iesire primara (PO). Activarea defectului se reduce la


setarea intrarilor primare (PI) la valori care sa conduca linia predispusa la
defect sa ia valoarea v . Aceasta este o instanta a unei probleme de
justificare a unei linii, ce trebuie sa deduca anumite valori ale intrarilor
primare care sa conduca la o valoare dorita pe o linie specificata a
circuitului. Pentru a putea urmari propagarea erorii trebuie considerate
valorile atât în circuitul lipsit de defect, N, cât si în circuitul afectat de
defectul tinta f, Nf. Pentru aceasta vom defini niste valori logice
compozite de forma v/vf, unde v si vf sunt valori ale aceluiasi semnal în
circuitul N respectiv Nf. Valorile logice compozite ce reprezinta erori -
1/0 si 0/1 - sunt notate prin simbolurile D si D . Celelalte doua valori
compozite - 0/0 si 1/1 - sunt notate cu 0 si 1. Orice operatie logica între
doua valori compozite se realizeaza prin procesarea separata a valorilor v
si vf si apoi se compune rezultatul final. De exemplu D +0 = 0/1+0/0 =
0+0/1+0 = 0/1 = D . La aceste patru valori binare compozite mai
adaugam o a valoare (x) pentru a nota o valoare compozita nespecificata
si care poate avea una din formele { 0,1,D, D }. În practica operatiile
logice ce folosesc valori compozite sunt definite prin intermediul
tabelelor (figura B_III- 2). Este usor de observat ca D verifica regulile
algebrei booleana: D+ D = 1, D D = 0, D+D=D, D D =D, D D = D .

v/ SI 0 1 D D x SAU 0 1 D D x
vf 0 0 0 0 0 0 0 0 1 D D x
0/0 0 1 0 1 D D x 1 1 1 1 1 1
1/1 1 D 0 D D 0 x D D 1 D 1 x
1/0 D D 0 D 0 D x D D 1 1 D x
0/1 D x 0 x x x x x x 1 x x x

Figura B_III- 2.Operatii cu valori logice compozite

În figura B_III- 3 se prezinta structura unui algoritm pentru


generarea unui test pentru linia l blocata-la-V. Se initializeaza toate
valorile la x si se implementeaza cei doi pasi principali, reprezentati prin
rutinele Justify si Propagate.
90 Fiabilitate si Diagnoza

begin
set all values to x
Justifica(l, v )
if v=o then Propaga(l,D)
else Propaga(l, D )
end

Figura B_III- 3. Generarea unui test pentru un defect de tip linia l blocata-
la-V într-un circuit fara ramuri fanout

Justificarea unei linii (figura B_III- 4) este un proces recursiv în


care valoarea iesirii unei porti este justificata de intrarile sale, si asa mai
departe pâna când se ajunge la o iesire primara. Sa consideram o poarta
SI-NU cu k intrari. Exista doar o singura cale de a justifica valoarea 0 la
iesire, dar pentru a justifica valoarea 1 se pot selecta una din cele 2k-1
combinatii posibile ale intrarii. Cea mai simpla cale este de a atribui
valoarea 0 doar unei intrari (arbitrar selectata) si de a le lasa pe celelalte
nespecificate. Aceasta corespunde selectarii unuia din cele k cuburi
primitive ale portii în care iesirea este 1.
Notam cu c- valoarea logica dominanta a portii, i- valoarea iesirii când
avem o valoare dominanta pe o intrare . Justifica (pe o linie, o anumita
valoare)

Justifica(l,val)
begin
seteaza l la val
if l este o PI then return
inval=c ⊕ i
if(inval= c )
then for every intrare j
Justifica(j,inval)
else
begin
selecteaza o intrare j a portii
Justifica(j,inval)
end
Diagnoza 91

end

Figura B_III- 4. Justificarea unei linii într-un circuit lipsit de


ramuri fanout

Pentru propagarea erorii la iesirea primara a circuitului, este


necesara sensibilizarea caii unice de la linia l la iesirea primara. Fiecare
poarta de pe aceasta cale are doar o intrare sensibila la defect. Restul
intrarilor trebuie setate la valoarea logica nedominanta a portii. Astfel se
transforma o problema de propagare a erorii într-un set de probleme de
justificari de linii (figura B_III- 5).
Notam : k- linia a lui l; c- valoarea logica dominanta a portii; i-
valoarea iesirii când avem o valoare dominanta a portii pe o intrare;
Propaga(pe o linie,o valoare de eroare)

Propaga(l,err)
/* err este D sau D */
begin
seteaza pe linia l valoarea err
if l este o iesire primara then return
for every intrare j a lui k alta decât l
Justifica(j, c )
Propaga(k,err ⊕ i)
end

Figura B_III- 5. Propagarea erorii într-un circuit lipsit de ramuri fanout

Exemplul 1. Sa generam un test pentru defectul linia f blocata-la-


0 în circuitul din figura B_III- 6. Problemele initiale sunt justificarea
valorii 1 pe linia f si propagarea defectului D. Prima parte se rezolva prin
atribuirile a=b=1. Propagarea erorii necesita justificarea valorii 0 pentru g
si propagarea lui D pe linia h. Prin selectarea unei intrari a portii, c sau d,
si atribuirea valorii 0 se justifica g=0. Pentru propagarea erorii este
nevoie de i =1 care conduce la e=0. Acum eroarea a ajuns la iesirea
primara j. Rezultatele sunt prezentata pe figura. Testul generat este
110x0(d poate fi si 0 si 1).
92 Fiabilitate si Diagnoza

Este important de observat ca într-un circuit fara ramuri fanout


fiecare problema de justificare a unei linii poate fi rezolvata independent
deoarece seturile de intrari primare care necesita atribuiri pentru
justificarea valorii sunt disjuncte.

Figura B_III- 6. Exemplu

Circuite cu ramuri fanout

În continuare se considera cazul general de circuite cu ramuri


fanout si se vor face comparatii cu cazul anterior. Trebuie realizate
aceleasi doua obiective - activarea defectului si propagarea erorii. Din
nou activarea erorii se reduce la o problema de justificare a liniei. O
prima diferenta care apare este ca acum sunt mai multe cai de propagare a
erorii la o iesire primara, dar din momentul selectarii uneia dintre ele
problema se reduce din nou la un set de justificari de linii.
Dificultatea majora care apare este ca în general problemele
rezultante de justificarea a unei linii nu mai sunt independente.
Exemplul 2. În circuitul din figura B_III- 7 consideram defectul
G1 blocata-la-1. Pentru a-l activa trebuie sa justificam G1=0. Acum
trebuie aleasa calea de propagare a erorii care poate fi poarta G5 sau G6.
Presupunem ca s-a ales poarta G5. Acum trebuie justificat G2=1. Setul
rezultat de probleme, justificarile de linie G1=0 si G2=1, nu pot avea o
solutie simultana deoarece cele doua solutii unice a=b=c=1 si a=d=0
necesita valori contradictorii pentru a. Aceasta arata ca decizia de
propagare a erorii prin G5 a fost gresita. Deci trebuie încercata a doua
alternativa si anume propagarea erorii prin G6. Aceasta necesita G4=1 si
se fac atribuirile c=1 si e=0. Testul rezultat este 111x0.
Diagnoza 93

Figura B_III- 7. Exemplu

Acest exemplu indica necesitatea explorarii tuturor alternativelor


de propagare. În mod similar trebuie încercate toate posibilitatile de
justificare a unei linii.
Exemplul 3. Consideram defectul h blocata-la-1 în circuitul din
figura B_III- 8. Pentru a activa acest defect trebuie setat h=0. Exista o
singura cale de propagare a erorii si anume
prin p si s. Pentru aceasta apar setarile e=f=1 si q=r=1. Valoarea q=1
poate fi justificata prin l=1 sau k=1. Prima oara încercam sa setam linia l
la 1. Aceasta conduce la c=d=1. Cele doua atribuiri împreuna cu setarea
anterioara l=1 implica r=0 care conduce la o stare inconsistenta. Astfel ca
decizia de justificare a lui q=1 prin l=1 a fost gresita si trebuie încercata
alternativa k=1 care implica a=b=1.
Singura problema de justificare ramasa este r=1. Cele doua
posibilitati m=1 sau n=1 conduc la doua solutii consistente.
94 Fiabilitate si Diagnoza

Figura B_III- 8. Exemplu

Strategia cu revenire (backtracking)

S-a vazut ca gasirea unei solutii implica un proces de decizie.


Atunci când apar mai multe alternative de justificare a unei linii sau de
propagare a erorii se alege una dintre ele si se continua procesul de
cautare. Apare însa posibilitatea selectarii unei alternative ce conduce la
o inconsistenta. De aceea este necesara folosirea unei strategii de revenire
care permite exploatarea sistematica a întregului câmp de posibile solutii
si revenirea în cazul unei decizii eronate. Aceasta revenire presupune
restaurarea variabilelor de calcul la starea anterioara luarii deciziei
incorecte.
De obicei atribuirile obtinute ca rezultat al unei decizii determina
noi valori. Procesul de deducere al acestor valori si de verificare a
consistentei lor poarta denumirea de implicatie. În majoritatea
algoritmilor ce folosesc tehnici de revenire valorile asignate ca rezultat al
unei decizii sunt înregistrate pentru a le putea sterge în cazul în care
decizia conduce la o inconsistenta. În exemplul 3 toate valorile rezultate
din decizia l=1 sunt sterse când apare inconsistenta.
Figura B_III- 9 defineste o schema a unui algoritm recursiv de
generare a testelor pentru detectarea unui defect. Problema care
trebuie rezolvata la generarea testului este justificarea valorii v pe linia
l si propagarea erorii la iesirea primara. Ideea principala este ca daca o
Diagnoza 95

problema nu poate fi rezolvata direct, aceasta se transforma într-un set de


subprobleme care se încearca a fi rezolvate.
Rezolvarea unei probleme poate duce la SUCCES sau ESEC.

Solve()
begin
if Imply_and_check()=ESEC then return ESEC
if(toate liniile sunt justificate si eroarea a ajuns la o PO)
then return SUCCES
if(nici o eroare nu poate fi propagata la o iesire primara)
then return ESEC
selecteaza o problema nerezolvata
repeat
begin
selecteaza o alta cale de rezolvare
if Solve()=SUCCES then return SUCCES
end
until toate caile de rezolvare au fost încercate
return ESEC
end

Figura B_III- 9. Schema generala a unui algoritm de generare a


testelor

Mai întâi algoritmul trateaza problemele care au o unica solutie si


deci care pot fi rezolvate prin implicatii. Aceasta se realizeaza prin
procedura Imply_and_check care verifica si consistenta solutiei.
Procedura Solve returneaza ESEC daca solutia nu este consistenta. În
cazul în care sunt îndeplinite scopurile propuse, adica eroarea a fost
propagata la o iesire primara si au fost rezolvate toate problemele de
justificare a liniilor, se returneaza SUCCES. Chiar si în cazul unei stari
consistente algoritmul poate determina ca eroarea nu se poate propaga la
o iesire primara si deci nu mai are rost continuarea cautarii si se
returneaza ESEC.
Daca rutina Solve nu poate determina un raspuns de ESEC sau
SUCCES atunci se selecteaza una din problemele nerezolvate. Aceasta
poate conduce la o justificare de linie sau la o problema de propagare a
96 Fiabilitate si Diagnoza

erorii. În acest punct exista mai multe alternative de a rezolva problema


selectata. Algoritmul alege una dintre ele si încearca sa rezolve problema
la un nivel nou de recursivitate. Acest proces continua pâna când este
gasita o solutie sau toate alternativele posibile au esuat. Daca prima
activare a procedurii Solve esueaza, atunci algoritmul n-a reusit sa
genereze un test pentru defectul specificat.
Selectarea unei probleme si a unei cai de rezolvare poate fi în
principiu arbitrara. Daca defectul este detectabil, se va genera un test
independent de ordinea de abordare. Totusi procesul de selectie are o
mare influenta asupra eficientei algoritmului.
Exista mai multi algoritmi de generare a testelor a caror structura
este similara cu cea a procedurii Solve. Mai întâi se analizeaza
elementele comune dupa care se vor detaila elemente specifice fiecarui
algoritm.

2.1.1 Concepte comune

Arborele de decizie

Executia algoritmului de generare a testelor poate fi vizualizata cu


ajutorul unui arbore de decizie (figura B_III- 10). Un nod de decizie
reprezinta o problema ce trebuie rezolvata.
O ramura ce paraseste un nod de decizie corespunde unei decizii
cum ar fi încercarea uneia din caile alternative de rezolvare. Un nod
terminal ESEC (reprezentat printr-un patrat notat cu E) sugereaza detectia
unei inconsistente sau atingerea unei stari din care nu mai este posibila
propagarea erorii.
Un nod terminal SUCCES (notat cu S) sugereaza gasirea unui
test. Executia algoritmului poate fi urmarita prin traversarea în adâncime
a arborelui de decizie asociat. De exemplu în figura B_III- 10(b) pornind
din nodul de decizie q=1, urmarim ramura l=1care ajunge la un nod
terminal E. Apoi revenim la ultimul nod de decizie si urmam ramura k=1
care conduce la un nou nod de decizie (r=1). Aici prima decizie (m=1)
ajunge la un nod terminal S.
Diagnoza 97

Figura B_III- 10 .(a) Structura unui arbore de decizie(b) Arborele de


decizie pentru exemplul3

Enumerari implicite

Algoritmul este exhaustiv, garantând gasirea unei solutii daca


exista. Daca algoritmul esueaza în încercarea de a genera un test pentru
un defect specificat atunci se spune ca defectul este nedetectabil.
Exemplul 4. Se doreste generarea unui test pentru defectul f
blocata-la-0 în circuitul din figura B_III- 11(a). Pentru a putea justifica
f=1 se încearca setarea liniei b la 0 ( Figura B_III- 11. Generarea unui test
pentru un defect nedetectabil si arborele de decizie din figura B_III-
11(b)).
98 Fiabilitate si Diagnoza

Aceasta implica e=1 si duce la împiedicarea propagarii erorii prin poarta


h.

Figura B_III-11 (a)Circuitul (b)Arborele de decizie

Alternativa c=0 conduce la un esec similar si se trage concluzia ca nu


exista nici un test pentru defectul specificat.
Algoritmul garanteaza gasirea unui test, daca exista, prin
enumerarea implicita a tuturor solutiilor posibile. Conceptul enumerarii
implicite este mai bine înteles prin compararea cu enumerarea explicita,
care (în acest context) se reduce la generarea unor vectori de intrare si
verificarea daca defectul tinta a fost detectat.
Folosirea enumerarii implicite directioneaza cautarea catre
vectorii care pot satisface constrângerile impuse de setul de linii ale caror
valori trebuie simultan justificate. Pe masura ce setul de constrângeri
creste pe durata executiei algoritmului, setul de vectori care le pot
satisface se restrânge. Avantajul enumerarii implicite este ca limiteaza
spatiul de cautare.
Sa comparam rezultatele obtinute folosind enumerarea implicita
si explicita pentru exemplul 4. Folosind enumerarea implicita se începe
prin limitarea cautarilor la setul de vectori ce satisfac f=1. Din acest set se
elimina subsetul vectorilor cu b=0. Apoi se elimina
subsetul vectorilor cu c=0 si cu aceasta cautarea ia sfârsit. Folosind
enumerarea explicita se genereaza toti cei 2k vectori de intrare.
Diagnoza 99

Factori de complexitate

Datorita caracterului exhaustiv al procesului de cautare numarului


operatiilor realizate creste exponential cu numarul de porti. Cazul cu
performante cele mai scazute este caracterizat de multe decizii
redundante si de un timp mare de cautare pâna la gasirea unei solutii sau
la etichetarea defectului ca nedetectabil. Pentru a micsora timpul de
lucru, orice aplicatie practica de generare a testelor are un timp limitat de
cautare; în cazul în care numarul de decizii incorecte sau timpul de lucru
depasesc o anumita limita cautarea este abandonata. Aceasta poate duce
la cazul în care nu se genereaza nici un test pentru un defect detectabil.
Situatia cea mai performanta apare când generarea testului este
obtinuta fara revenirea dintr-o decizie eronata. Aceasta înseamna ca fie
rezultatul este gasit doar prin implicatii (atunci arborele de decizie
degenereaza la un singur nod terminal) sau ca au fost luate doar decizii
corecte. Numarul de operatii creste liniar cu numarul de porti din circuit.
Cazul acesta este specific circuitelor fara ramuri fanout si fara
ramuri reconvergente deoarece în aceste circuite nici o decizie nu poate
provoca un conflict.
Din analiza celor doua cazuri se poate trage concluzia ca factorul
cheie în controlarea complexitatii algoritmului consta în minimizarea
numarului de decizii incorecte. Se introduce un principiu care ajuta la
minimizarea acestor decizii prin reducerea numarului de probleme care
necesita luarea unei decizii. Acesta este principiul implicatiilor maxime
care obliga la realizarea tuturor implicatiilor posibile.
Realizarea unui numar mai mare de implicatii fie duce la
reducerea numarului de probleme ce altfel ar necesita luarea unei decizii
fie conduce la o inconsistenta.
Exemplul 5. Consideram circuitul din figura B_III- 12 si
presupunem ca într-un anumit stadiu al algoritmului trebuie justificata
valoarea 0 pe liniile f si e. Presupunem ca justificam f=0 prin c=0. În
cazul procesarii tuturor implicatiilor nu apare ca necesar nici un nod de
decizie. Mai întâi c=0 implica d=1. Aceasta conduce la o singura
posibilitatea de justificare a lui e=0 si anume b=0 care la rândul ei
implica c=0.
100 Fiabilitate si Diagnoza

Figura B_III- 12. Exemplu

Frontiera D

Frontiera D consta din portile a caror iesiri au valoarea curenta


necunoscuta si care au la intrare unul sau mai multe semnale de eroare (D
sau D ). Propagarea erorii se realizeaza prin alegerea uneia din portile de
pe frontiera D si atribuirea de valori intrarilor nespecificate ale portii asa
încât iesirea sa ia valoarea D sau D . Daca frontiera D devine goala pe
durata executiei algoritmului atunci eroarea nu poate ajunge la o iesire
primara si apare ca necesara revenirea asupra ultimei decizii.

Frontiera J
Pentru a putea urmari problemele curente de justificare a liniei se
foloseste un set denumit frontiera J care consta din portile ce au valoarea
de iesire cunoscuta dar nejustificata de valorile de intrare.

Procesul de implicatii

Sarcinile procesului de implicatii sunt :


- calcularea tuturor valorilor care pot fi unic determinate prin implicatii
- verificarea consistentei
- mentinerea frontierelor D si J
Ca si în cazul unei simulari se începe prin atribuirea unor valori;
aceste atribuiri pot determina noi valori si asa mai departe pâna când se
realizeaza toate implicatiile posibile. Toate valorile sunt atribuite si
procesate via unei liste de atribuire. Spre deosebire de simulare, unde
Diagnoza 101

valorile se propaga doar înainte, aici valorile se pot propaga si înapoi. O


intrare în lista are forma (l,v’,directie) unde v’ este valoarea atribuita
liniei l si directia apartine setului {înainte, înapoi}. La generarea unui test
pentru defectul l blocata-la-1 cele doua intrari initiale ale listei sunt
(l,0,înapoi) si (l, D ,înainte).
Procedura Imply_and_check proceseaza fiecare intrare din lista.
Initial se verifica consistenta atribuirii prin compararea cu valoarea v a
liniei l (toate valorile sunt initializate la x). O inconsistenta este detectata
daca v ≠ x si v ≠ v’ ( O exceptie este permisa pentru liniile cu defect unde
o valoare binara este propagata înapoi si o valoare de eroare este
propagata înainte). O valoare consistenta este atribuita si procesata
conform directiei sale.
Propagarea înapoi este ilustrata în figura B_III- 13. În partea
dreapta a figurii se prezinta efectele ale atribuirilor realizate în partea
stânga. O sageata lânga valoarea logica arata directia în care se propaga
valoarea. Atribuirea a=0 în figura B_III- 13(c) adauga pe a frontierei J.
Figura B_III- 13(d) ilustreaza cum propagarea înapoi pe o ramura fanout
poate induce propagarea înainte pe alte ramuri fanout ale aceleasi
radacini.
102 Fiabilitate si Diagnoza

Figura B_III- 13. Implicatii înapoi

În figura B_III- 14 este ilustrata propagarea înainte a valorilor.


Diagnoza 103

Figura B_III-14. Implicatii inainte

Se observa în figura B_III- 4(d) cum propagarea înainte pe o


intrare a unei porti poate induce propagarea înapoi pe o alta intrare a
aceleiasi porti.
Daca dupa ce toate valorile au fost propagate frontiera D contine
doar o singura intrare, sa spunem a, atunci exista o singura cale de
propagare a erorii si anume prin poarta a.

Implicatii globale

Sa consideram exemplul din figura B_III- 15(a). Frontiera D este


formata din portile d si e.
104 Fiabilitate si Diagnoza

Se poate observa ca indiferent de alegerea facuta la propagarea erorii


(prin d sau e) se ajunge la situatia propagarii prin g. Astfel se pot face
implicatiile prezentate în figura B_III- 15(b).
Implicatiile anterioare pot fi descrise ca locale deoarece constau
în propagarea valorilor de la o linie la succesorii sau predecesorii
imediati. Implicatia descrisa în figura B_III- 15 poate fi caracterizata ca
globala deoarece implica o arie mai mare a circuitului.

Figura B_III- 15

Consideram circuitul din figura B_III- 16. Presupunem ca a fost


facuta atribuirea F=1 printr-o propagare înapoi. Nici o alta valoare nu
poate fi determinata prin implicatii locale. Dar se poate observa ca
independent de modul de justificare a acestei valori(prin D=1 sau E=1)
apare implicatia B=1. Implicatia este valabila independent de restul
valorilor din circuit. Pot apare si implicatii globale generate de anumite
atribuiri anterioare. Astfel F=0 implica B=0 când A=1.

Figura B_III- 16
Diagnoza 105

Inversarea deciziilor incorecte

Consideram problema justificarii valorii 0 la iesirea unei porti SI


cu trei intrari. Presupunem ca prima decizie a=0 s-a dovedit incorecta.
Aceasta demonstreaza ca a nu poate fi 0 independent de valoarea lui b si
c. De aceea tragem concluzia ca a trebuie sa fie 1. Înainte de a lua
urmatoarea decizie - b=0 - se seteaza a=1 si se realizeaza implicatiile
posibile. În mod similar daca decizia b=0 se dovedeste eronata se seteaza
a=0 si b=0 înainte de a încerca c=0. Beneficiul acestor tehnici este
marirea numarului de implicatii.

Predictia propagarii erorii

Consideram circuitul si valorile din figura B_III- 17. Frontiera D


este alcatuita din a si b. Se poate observa ca independent de calea de
propagare a erorii în cele din urma frontiera D va deveni goala deoarece
defectul nu poate fi propagat nici prin e nici prin f.
Fie o cale-x o cale care are toate liniile cu valoarea nespecificata.
Fie G o poarta pe frontiera D. Erorile de la intrarea lui G se pot propaga
la o iesire primara Z doar daca exista cel putin o cale-x între G si Z.
Nici o poarta de pe frontiera D din figura B_III- 17 nu satisface
aceasta conditie. Avantajul identificarii situatii este ca se pot evita toate
deciziile care conduc la un esec. Folosind

Figura B_III- 17. Necesitatea predictiei în propagarea erorii

aceasta tehnica de predictie se pot recunoaste starile care conduc la un


esec si pot fi eliminate.
106 Fiabilitate si Diagnoza

2.1.2 Algoritmi de generare a testelor


Multe din conceptele prezentate sunt comune unei clase de
algoritmi de generare de teste denumiti algoritmi de sensibilizare a caii.

2.1.2.1. Algoritmul D
Structura algoritmului D este prezentat în figura B_III- 18. O
trasatura caracteristica a acestuia o reprezinta abilitatea de propagare a
erorii pe mai multe cai reconvergente. Aceasta caracteristica denumita si
sensibilizarea multipla a caii este necesara pentru detectarea anumitor
defecte care altfel nu ar fi detectate.

D-alg()
begin
if Imply_and_check=ESEC then return ESEC
if (eroarea nu a ajuns la iesirea primara) then
begin
if (frontiera D este goala) then return ESEC
repeat
begin
selecteaza o poarta (G) de pe frontiera D
c= valoarea logica dominanta a portii G
atribuie valoarea c la fiecare intrare nespecificata a
portii G
if D-alg()= SUCCES then return SUCCES
end
until (toate portile de pe frontiera D au fost încercate)
return ESEC
end
/* propagarea erorii la o iesire primara */
if (frontiera J este goala) then return SUCCES
selecteaza o poarta (G) de pe frontiera J
c = valoarea logica dominanta a portii
repeat
begin
selecteaza o intrare nespecificata j a portii G
atribuie lui j valoarea c
Diagnoza 107

if D-alg() = SUCCES then return SUCCES


atribuie lui j valoarea c /* inversarea deciziei */
end
until (toate intrarile portii G sunt specificate)
return ESEC
end
Figura B_III- 18. Algoritmul D

Exemplul 6. Aplicam algoritmul D pentru circuitul si defectul


prezentat în figura B_III- 19. În figura B_III- 19(b) se urmaresc pasii de

calculai algoritmului. Se observa cum algoritmul


108 Fiabilitate si Diagnoza

Decizii Implicatii
a=0 Activarea defectului
h=1
b=1 Propagarea erorii prin g
c=1
g=D
d=1 i= D Propagarea prin i
d’=0
j=1 n=D Propagarea prin n
k=1 e’=0
l=1 e=1
m=1 k= D Contradictie
e=1 k= D Propagarea prin k
e’=0
j=1
l=1 n=D Propagarea prin n
m=1 f’=0
f=1
m= D Contradictie
f=1 m= D Propagarea prin m
f’=0
l=1
n=D

(b) Figura B_III- 19. Exemplu

încearca sa propage eroarea mai întâi doar prin i, apoi prin i si j si la


urma reuseste când toate cele trei cai (i,k,m) au fost simultan
sensibilizate.
Diagnoza 109

2.1.2.2. Algoritmul 9-V

Algoritmul 9-V este similar cu algoritmul D, singura trasatura


caracteristica fiind folosirea a înca patru valori compozite partial
specificate. Valoarea x a algoritmului D este complet nespecificata, nici v
si nici vf nefiind cunoscute. Pentru o valoare compozita partial
specificata v/vf, fie v are o valoare binara si vf este necunoscuta(n) sau
invers. De exemplu 1/n putând fi atât 1/0 cât si 1/1. Aceasta înseamna ca
1/n poate fi D sau 1. Figura B_III- 20 prezinta setul de valori partial
specificate si setul de valori compozite pe care le reprezinta.

0/n {0, D }
1/n {D,1}
n/0 {0,D}
n/1 { D ,1}

Figura B_III- 20

O operatie între doua valori compozite poate fi realizata prin


procesarea separata a celor doua valori si apoi compunerea lor. De
exemplu Dx=( 1/0 )( n/n ) = (1n ) ( 0n ) = n/0. Se observa ca folosind
doar cele cinci valori compozite rezultatul ar fi x. Sistemul cu noua valori
furnizeaza mai multa informatie: Dx = n/0 - rezultatul poate fi 0 sau D.
Când algoritmul încearca sa propage un defect D printr-o poarta
cu valoarea logica dominanta c, valoare atribuita intrarilor nespecificate
ale portii G corespunde setului { c ,D}. De exemplu pentru a conduce un
defect D printr-o poarta SI, intrarilor nespecificate li se atribuie valoarea
n/1(care poate 1 sau D ) si este sarcina procesului de implicatii sa
determine daca valoarea este 1 sau D . O valoare compozita partial
specificata n/b sau b/n (unde b este o valoare binara) atribuita unei intrari
primare este imediat transformata într-o valoare b/b deoarece o intrare
primara nu poate propaga efectele erorii.

Exemplul 7. Se aplica algoritmul 9-V problemei de la exemplul


6. Figura B_III- 21 urmareste pasii de calcul ai algoritmului. Acest test
este generat fara a fi nevoie de revenirea de pe urma unei decizii eronate.
110 Fiabilitate si Diagnoza

Decizii Implicatii
a=0 Activarea defectului
h=1
b=1
c=1
g=D Propagare erorii prin poarta
i=n/1 g
k=n/1
m=n/1
d=1 i= D Propagare prin i
d’=0
n=1/n
l=n/1 n=D Propagarea prin n
j=n/1 f’=n/0
f=1
e’=n/0
e=1
e’=0
k= D
m= D

Figura B_III- 21. Pasii de executie ai algoritmului 9-V aplicat problemei


de la exemplul 6

În cazul a k cai posibile de propagare a erorii algoritmul D va


încerca toate cele 2k-1 combinatii de cai. Algoritmul 9-V încearca la un
moment dat doar una din cai fara a împiedica propagarea erorii pe
celelalte k-1 cai. Aceasta este posibil datorita valorilor compozite partial
specificate care indica posibilele propagari ale erorii. Astfel într-o situatie
în care algoritmul D va enumera pâna la 2k-1 combinatii de cai,
algoritmul 9-V va enumera cel mult k cai de propagare.

2.2.2.3. Algoritmul PODEM

Scopul oricarui algoritm de generare a unui test (orientat pe


defect) este de a gasi un test pentru un defect dat, adica un vector de
Diagnoza 111

intrare ce detecteaza defectul. O decizie în cadrul procesului de cautare


consta fie în selectarea unei porti de pe frontiera D fie a unei cai de
justificare a unei valori a unei porti de pe frontiera J. Efectele acestei
decizii ajung pâna la urma la intrarile primare, dar totusi, procesul de
cautare este unul indirect.

PODEM (Path Oriented Decision Making) este un algoritm de


generare a testelor caracterizat de un proces de cautare direct, unde
deciziile constau în atribuiri de valori intrarilor primare. S-a vazut ca
problema de activare si propagare a erorii conduce la mai multe seturi de
probleme de justificare de linie. PODEM trateaza o valoare vk ce trebuie
justificata pentru linia k ca un obiectiv(k,vk) ce trebuie realizat prin
atribuiri ale intrarilor primare. În figura B_III- 22 se prezinta o procedura
recursiva ce, plecând de la un obiectiv dorit, conduce la o atribuire unei
intrari primare care poate contribui la atingerea obiectivului.

Valorile sunt atribuite doar prin simularea valorilor intrarilor


primare.

Backtrace(k,vk)
begin
v=vk
while (k este iesirea unei porti)
begin
selecteaza o iesire nespecificata j a lui k
v=v ⊕ i /* i - valoarea nedominanta a iesirii portii */
k=j
/* k este o iesire primara */
return (k,v)
end

Figura B_III- 22

Exemplul 8. Consideram circuitul din figura B_III- 23 si


obiectivul (f,1). Presupunem ca procedura Backtrace(k,1) urmeaza calea
(f,d,b) si returneaza (b,1). Simularea valorii b=1
112 Fiabilitate si Diagnoza

nu duce la îndeplinirea obiectivului (f,1). O noua executie a procedurii


Backtrace urmeaza calea (f,d,c,a) si returneaza (a,1). O simulare a acestei
valori conduce la f=1.

Figura B_III- 23. Exemplu

Obiectivele sunt astfel selectate (figura B_III- 24) asa încât


defectul tinta este activat; apoi eroarea rezultata este propagata catre o
iesire primara.
Obiectiv()
begin
/* defectul tinta este l bl-la-v */

if (valoarea lui l este x) then return (l, v )


selecteaza o poarta G de pe frontiera D
selecteaza o intrare nespecificata j a lui G
c= valoarea logica dominanta a portii
return (j, c )
end

Figura B_III- 24. Selectarea unui obiectiv

În figura B_III- 25 se schiteaza structura algoritmului PODEM. Se


folosesc aceleasi cinci valori - 0,1,x,D, D . Initial toate valorile sunt
setate la x. Valorile non-x sunt generate doar prin simularea valorilor
intrarilor primare.
Diagnoza 113

PODEM() begin
if(eroarea este la iesirea primara) then return SUCCES
if(testul nu este posibil) then return ESEC
(k,vk)=Obiectiv()
(j,vl)=Backtrace(k,vk) /* j este o intrare primara */
Imply(j,vl)
if PODEM()=SUCCES then return SUCCES
/* inversarea deciziei */
Imply(j, v l)
if PODEM()=SUCCES then return SUCCES
Imply(j,v)
return ESEC; end

Figura B_III- 25. Algoritmul PODEM

Simularea este realizata de rutina Imply care mentine si frontiera


D. La fiecare nivel de recursivitate PODEM analizeaza valorile stabilite
anterior pentru detectarea unei stari de SUCCES sau ESEC. Daca o iesire
primara are valoarea D sau D indicând faptul ca o eroare a fost propagata
pâna la iesire se returneaza SUCCES. În cazul în care valorile curente
indica imposibilitatea generarii unui test se returneaza ESEC. Acest caz
apare în urmatoarele conditii:
- defectul tinta l blocat-la-v nu poate fi activat deoarece linia l are
valoarea v;
- nici o eroare nu poate fi propagata la o iesire primara deoarece
fie frontiera D este goala fie predictia erorii prognozeaza golirea ei.
Daca PODEM nu poate determina imediat SUCCES sau ESEC se
genereaza un obiectiv (k,vk) ce conduce la o atribuire unei intrari
primare. Setarea j=vl este simulata de rutina Imply si se introduce un nou
nivel de recursivitate. Daca acesta esueaza PODEM revine si inverseaza
decizia luata. Daca si aceasta esueaza, j se seteaza la x si PODEM
returneaza ESEC. Selectarea unei porti de pe frontiera D si a unei intrari
nespecificate ale acestei porti poate fi în principiu arbitrara.

Exemplul 9. Aplicam algoritmul PODEM problemei din


exemplul 6. Figura B_III- 26 urmareste pasii de executie ai algoritmului,
114 Fiabilitate si Diagnoza

prezentând obiectivele, atribuirile intrarilor primare determinate de


obiective, implicatiile generate de simularea setarilor la intrarile primare
si frontiera D corespunzatoare. Se observa ca atribuirea c=0 conduce la o
valoare binara la iesirea primara si verificarea existentei unei cai-x
esueaza ; aceasta arata ca generarea unui test pentru defectul tinta nu mai
este posibil si conduce la inversarea deciziei incorecte. De asemenea se
noteaza ca PODEM trateaza sensibilizarea multipla a caii fara o
procesare speciala.
Obiectiv Atribuiri ale Implica Frontiera
e PI tii D
a=0 a=0 h=1 g
b=1 b=1 g
c=1 c=1 g=D i,k,m
d=1 d=1 d’=0 m,n,k
i= D .
k=1 e=0 e’=1 m
j=0
k=1
n=1
e=1 e’=0 m,n
j=1
k= D .
l=1 f=1 f’=0
l=1
m= D .
n=D

Figura B_III- 26. Exemplu

Cum o decizie în cadrul algoritmului o reprezinta alegerea unei


valori vj ∈{0,1} pentru a fi atribuite unei intrari primare j, arborele de
decizii este un arbore binar unde un nod corespunde unei intrari primare j
ce urmeaza setata si o ramura ce plecând din nodul j este etichetata cu
valoarea selectata. Procesul de cautare se bazeaza enumerarea implicita a
tuturor vectorilor posibili de intrare. Ca si la algoritmul D cautarea este
exhaustiva, astfel ca se returneaza ESEC doar daca nu exista nici un test
Diagnoza 115

pentru defectul tinta (în practica timpul de cautare este limitat de


utilizator) .
În algoritmul PODEM valorile sunt calculate doar prin propagarea
înainte a valorilor intrarilor primare. Ca urmare valorile calculate sunt
întotdeauna consistente si toate valorile sunt justificate. Astfel ca
PODEM nu are nevoie de :
- verificarea consistentei deoarece nu pot aparea conflicte;
- frontiera J deoarece nici o valoare nu trebuie justificata;
- implicatii înapoi deoarece valorile se propaga doar înainte.
O alta consecinta a procesului direct de cautare este un mecanism
simplificat de revenire. În algoritmii descrisi anteriori, salvarea unei stari
si restaurarea ei este un proces explicit. Cum în algoritmul PODEM o
stare depinde doar de valoarea intrarilor primare si deciziile lucreaza doar
cu valoarea unei singure intrari; orice schimbare a unei stari se realizeaza
usor prin propagarea unei noi valori a unei intrari primare. Astfel
revenirea este implicit realizata prin simulare si nu printr-un proces
explicit de salvare/restaurare.
Datorita acestor avantaje PODEM este mult mai simplu decât
ceilalti algoritmi si simplitatea este un factor cheie pentru succesul în
practica.

2.2.1.4. Algoritmul FAN

Algoritmul FAN(Fanout-Oriented TG) introduce doua extensii


majore la conceptul de revenire din PODEM:
- procesul de revenire se poate opri la linii interne;
- FAN foloseste o procedura multipla de revenire care încearca sa
satisfaca simultan un set de obiective.
116 Fiabilitate si Diagnoza

Figura B_III- 27. Exemplu

Liniile interne la care se poate opri procesul de revenire sunt


definite precum urmeaza. O linie la care se poate ajunge prin o ramura
radacina se spune ca este o linie de legatura. Restul liniilor se spune ca
sunt libere. O linie principala este o linie libera care are o legatura directa
cu o linie de legatura. De exemplu în circuitul din figura B_III- 27
A,B,C,E,F,G,H si J sunt linii libere, K,L si M sunt linii de legatura si H si
J sunt linii principale. Cum subcircuitul ce are ca iesire o linie principala l
este lipsita de ramuri fanout, o valoare a lui l poate fi justificata fara
conflicte cu celelalte valori atribuite anterior în circuit.
Astfel procesul de propagare înapoi se poate opri la linia l si
problema de justificare a valorii liniei se poate amâna pentru ultimul
stadiu al algoritmului.

Exemplul 10. Presupunem ca pentru circuitul din figura B_III- 27


într-un anumit punct dorim sa setam linia J la 0. Presupunem ca setarile
pentru obiectivul J=0 au condus la ESEC (frontiera D a devenit goala).
Figura B_III- 28(a) prezinta portiunea din arborele de decizie al
algoritmului PODEM corespunzatoare acestei situatii. Cum J este o linie
principala, procesul de revenire în algoritmul FAN se opreste la J si se
încearca setarea J=0 înaintea oricarei tentative de justificare a
obiectivului J=0.
Diagnoza 117

Figura B_III- 28. Arborele de decizie (a) Pentru PODEM (b) Pentru FAN

Activarea defectului si propagarea erorii s-a vazut ca se reduc la


un set de probleme de justificare a liniei. În PODEM fiecare din aceste
probleme se transforma într-un obiectiv care este individual procesat. Dar
setarea unei intrari primare pentru satisfacerea unui obiectiv poate duce la
excluderea altuia. Pentru a minimiza aceasta cautare, procedura multipla
de revenire folosita de algoritmul FAN porneste de la un set de obiective
(Obiective curente) si determina o atribuire k=vk care este posibil sa
contribuie la atingerea unui subset din obiectivele initiale sau sa indice ca
un anumit subset din aceste obiective nu pot fi simultan atinse.
Situatia din urma poate apare doar când obiective diferite sunt
procesate pâna la aceeasi radacina cu valori conflictuale pe ramurile
fanout(figura B_III- 29).
118 Fiabilitate si Diagnoza

Figura B_III- 29.


Generarea de valori
conflictuale pe o
radacina

Pentru detectarea acestei situatii algoritmul se opreste când s-a


ajuns la o linie radacina si urmareste de câte ori a fost ceruta valoarea 0
sau 1 pentru radacina.

2.1.2.5. Alti algoritmi

Se vor prezenta sumar alti algoritmi de generare a tetelor care


extind conceptul de linii principale prin identificarea unor linii de nivel
înalt ale caror valori pot fi justificate fara aparitia unui conflict si care
conduc la oprirea procesului de revenire.
O linie total reconvergenta folosita în algoritmul TOPS
(Topological Search) este iesirea l a unui subcircuit C asa încât toate caile
dintre orice linie a lui C si o iesire primara trec prin l. Cu alte cuvinte l
reprezinta singura legatura dintre C si restul circuitului. O linie principala
satisface definitia unei linii total reconvergenta (în acest caz C este un
subcircuit lipsit de ramuri fanout). Totusi, subcircuitul C limitat de o linie
total reconvergenta poate avea ramuri fanout cu conditia ca acestea sa fie
reconvertite înainte de linia l.

Presupunând ca functia implementata de C nu este constanta (0


sau 1) orice valoare atribuita lui l poate fi justificata fara conflicte cu
celelalte valori existente în circuit.
Atât liniile principale cât si cele total reconvergente pot fi gasite
printr-o analiza topologica a circuitului. O linie de oprire a procesului de
revenire folosita în algoritmul FAST(Fault-Oriented Agorithm for
Sensitized-path Testing) reprezinta o alta generalizare a conceptului de
linii principale bazata pe o analiza atât topologica cât si functionala. În
algoritmul FAST o linie l opreste procesul de revenire pentru o valoare v
daca atribuirea l=v poate fi justificata fara aparitia unui conflict.