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]