Estudo sobre Métodos de Avaliação de COTS - IC

Propaganda
Run Time Safety Checking
MO828 – Tópicos em Engenharia
de Software II
Profa. Eliane Martins
Safety Assurance




Safety x Reliability: validação consiste
de processos diferentes
Reliability: há formas quantitativas para
medir
Safety: não há formas diretas para
medição
Importância do processo: “garante” o
nível de safety
Validando Safety

Provas de corretude de código:



código atende especificação de safety
esforço e custos altos
Alternativa: garantir que, em execução,
o programa não entra em um estado
inseguro conhecido

pré-condições do estado inseguro não
devem ser atendidas pelas pós-condições
das rotinas
Exemplo: Insulin Pump
Ov erdos e
admi nist ered
Ad mini st er
i ns ul in
Ins ul i n_do se >
Maxi mum_d os e
Pre-con di ti on
fo r un safe s tat e
or
Co nt radi cti on
Ins ul i n_ do se >= Min imu m_d os e and
Ins ul i n_ do se <= Maxi mu m_d os e
Co nt radi cti on
i f s tat emen t 2
n ot execut ed
Co nt radi cti on
Ins ul i n_ do se = 0
Ins ul i n_ do se =
Maxi mu m_d os e
Ins ul i n_ do se := 0
Ins ul i n_ do se :=
Maxi mu m_d os e
i f s tat emen t 2
t hen part
execu ted
i f s tat emen t 2
els if p art
execu ted
Exemplo: Insulin Pump
static void administerInsulin ( ) throws SafetyException {
int maxIncrements = InsulinPump.maxDose / 8 ;
int increments = InsulinPump.currentDose / 8 ;
// currentDose <= InsulinPump.maxDose
if (InsulinPump.currentDose > InsulinPump.maxDose)
throw new SafetyException (Pump.doseHigh);
else
for (int i=1; i<= increments; i++) {
generateSignal () ;
if (i > maxIncrements)
throw new SafetyException
(Pump.incorrectIncrements);
} // for loop
} //administerInsulin
JAVA: comando assert




assert Expressao1 [: Expressao2];
Se Expressao1 for verdadeiro, segue a
execução
Se Expressao1 for falso, lança um
AssertionError
Expressao2 (opcional) é passado para o
construtor do AssertionError
JAVA: comando assert


Uso: pré e pós condições, invariantes e
“salvaguardas”
Asserções presentes no código podem
ser “ligadas e desligadas”


javac -source 1.4 MyClass.java
java [-enableassertions | -ea:
<packagename>”...”] [classname]
JAVA: comando assert
static void administerInsulin ( ) {
int maxIncrements = InsulinPump.maxDose / 8 ;
int increments = InsulinPump.currentDose / 8 ;
assert currentDose <= InsulinPump.maxDose : Pump.doseHigh;
for (int i=1; i<= increments; i++)
{
generateSignal () ;
assert i<= maxIncrements : Pump.incorrectIncrements;
} // for loop
} //administerInsulin
Referências


SOMMERVILLE, Ian - Software
Engineering, chapter 21.4, 6th edition,
Addison-Wesley, 2001
Programming with Assertions
http://java.sun.com/j2se/1.4/docs/guide/lang
/assert.html

GRIES, David - The Science of
Programming, Spring Verlag, 1981
Perguntas?
?
Obrigado!
[email protected]
Download