Upload
internet
View
103
Download
0
Embed Size (px)
Citation preview
Metodologia de geração de teste para sistemas embarcados – uma experiência no INPE
Ana Maria Ambrosio 06/out/2007
Tópicos
• Visão geral do INPE
• Metodologia de teste CoFI
• Aplicação da CoFI no projeto QSEE: lições aprendidas e resultados obtidos
INPE
Instituto Nacional de Pesquisas Espaciais
Missão: Produzir ciência etecnologia nas áreas espacial edo ambiente terrestre eoferecer produtos e serviçossingulares em benefício doBrasil.
Subordinado ao Ministério de Ciência e tecnologia - MCT
Instalações do INPE
Principais áreas de atuação
Engenharia e Tecnologia Espacial
Ciências espaciais e atmosféricas
Observação da Terra
Previsão de tempo e estudos climáticos
Laboratório de Integração e Testes
Centro de rastreioe controle de satélites
Áreas favorecidas pelo programa espacial brasileiro no contexto do INPE
energia
ecosistemas
desastres
biodiversidade
agricultura
saúde
clima
Missões espaciais realizadas
MECB – Missão espacial completa brasileira
SCD1/93 SCD2/98 SCD2A/97
CBERS – China-BrazilEarth Resources Satellite
CBERS1/99 CBERS2/03 CBERS2B/07
SACI-1/99
Satélites científicos etecnológicos
SACI-2/99 Satec/03 Mirax -
CBERS3 -CBERS4 -
Metodologia de geração de teste para sistemas embarcados
COFI
Conformidade e Falhas Injetáveis
Motivação
• “Os excelentes resultados de geração automática de teste de software, apresentados pela academia ainda não estão sendo adotados na indústria. “
Fonte: Lai, 2002
Condado
ConDado
senddata (U, SENDrequest) recdata (L, CR)senddata (L, CC) recdata (U, SENDconfirm)senddata (U, DATArequest, “xHn*e”, 2, 14) recdata (L, DT)senddata (L, ACK) recdata (L, DISrequest)senddata (L, DISrequest) recdata(U, DISindication)
Seqüência abstrata de casos de teste
Idle
WaitConnection
Connected
WaitDisconnection
T1: ?U.SENDrequest !L.CR
T2: ?L.CC !U.SENDconfirm counter := 0
T3: ?U.DATArequest(SDU, NbofSegment, Blkbound) !L.DT(SDU) counter := counter + 1
T5: ?L.DISrequest !U.DISindication
T4: ?L.ACK counter > Blkbound !L.DISrequest
inicial(Idle)trans(Idle,t1,WCon,L0,Ln):-
transmitu(‘SENDr',L2,Ln).receiveu(‘CR',L0,L1),
trans(WCon,t2,C,L0,Ln):-transmit(‘CC’,L2,Ln).
receiveu(‘SEND',L0,L1),
...
Geração automática de teste a partir de FSM/EFSM
Dificuldades
• teste de conformidade com geração automática:
– baseada em métodos formais,– requer um modelo formal completo que
represente o comportamento do software difícil de ser obtido
– pode gerar um número intratável de casos de testes
CoFI- Conformidade e Falhas Injetáveis
• Sistematizar a criação de casos de testes
• Atender necessidades de teste de software em aplicações espaciais
• Fazer uso das técnicas e ferramentas de geração automática de teste a partir de FSM/EFSM
• Incluir a técnica de injeção de falhas
Objetivo:
Visão geral da CoFI
Passos de
transformação da
descrição do
software
diagramas UMLTest Engine
Sistema de Teste Sistema em Teste
FIMFICUTLT
...
Canal de teste ...Canal de teste
Pontos de Controle e
Observação
Passive FerryActive Ferry
Ferry Channel
UUTRoteiro
Executável
Descrição formal
do software
FinNOK( f )<f1>----------------------------TM( FinFail_rep(f ))
TC(...)----------------------a1: verifica sintaxe
do pacote TC
StartOK [bit2=1]----------------------------TM(StartSucc_rep)
PrNOK(p, f) <f1>-----------------------------TM(PrFail_rep(p, f))
PrOK(p) [bit1=1]---------------------------TM(PrSucc_rep(p))
TC Inicializ
ado
TC Aceito
TC recebid
o
AccOK [bit3=1]-----------------------------
TM(AccSucc_rep)a9: avaliar viabilidade
de execução
ViabiliddNOK( f )----------------------------TM(StartFail_rep( f ))
Sintaxe correta
ViabiliddOK------------------------------a8: disparar execução
Inicial
StartNOK( f )<f1>----------------------------TM( StartFail_rep(f ))
FinNOK( f )<f1>----------------------------TM(FinFail_rep(f ))
Seqüência Teste
Casos de teste
Casos de falha
Especificações textuais
Arquitetura de teste
1. SERVIÇO /propósitos de teste
CENÁRIOS NORMAIS CENÁRIOS EXCEPCIONAIS
5. Diagrama Seqüência Normal
6. Diagrama Estados Normal
10. Diagrama Seqüência Excepcional
Seqüência de teste CoFI
2. Usuários, meio físico
8. Matriz de Transições
3. Entradas, Saídas, Arq. Teste, PCOs
7. Deriva casos de teste 12. Deriva casos de falha
4. Casos de uso
11. Diagrama Estados Excepcional
9. Modelo de Falhas
Definição do contexto da IUT
Transformações
Geração automática
Passos da CoFI
Decomposição do SuT na CoFI
Por serviço (ou por propósito de teste), que por sua vez é dividido em cenários
Por tipo de comportamento: – normal;– exceções especificadas, – caminhos furtivos (entradas inoportunas) – tolerância a falhas (falhas provocadas pelo hardware)
Modelos parciais do comportamento
Serviços
Tipo de comportamento
Tolerância à Falhas
Caminhos Futivos
Exceções especificadas
Normal
S1 S2 S3 Sn...
Aplicação da CoFI no projeto
QSEE – Qualidade de Software Embarcado em aplicações Espaciais :
lições aprendidas e resultados obtidos
Projeto QSEE Qualidade de Software Embarcado em aplicações Espaciais
• Transferência de tecnologia do INPE para a indústria nacional de software
• Uso das normas ECSS pela Ciências Espaciais e Atmosféricas (CEA/INPE) no desenvolvimento de software de cargas úteis de satélite
• Desenvolvimento de um processo de aceitação de software para o INPE apoiado na abordagem de Verificação e Validação Independente de Software
Objetivos:
SWPDC - aplicação em teste
• software embedded in an Payload Data handling Computer that controls scientific experiments on-board of a MIRAX satellite under development at INPE
• C language; Labview
• Main functions:– Scientific data aquisition– housekeeping, test & diagnostic data preparation – error recognition and handling mechanism for commmunication,
memory and processor failures – Communication with OBDH, event processors, thermistors
Ambiente de teste do SWPDC
`
`
QSEE-TAS EPPs Simulator
SWPDC embarcado Na placa do PDC
Watchdog simulationMem. error
Restrições,Facilidades de Teste
Modelo de falhas de hardware: memória, processador comunicação
Ambiente de teste no INPE
Criação dos modelos de estado
Segurança Aguardando Adq E!
CmdPararAquisicaoDadosRspCmdRec
SegurançaDesligando CmdMudarModoNom,Tipo,00
ObsTimeoutObsDispararTimer8184ms
ObsFim8184ms
CmdTransmDadosCientRspNenhumDado
ObsDispararTimer8184s
Segurançacom
dados E!
Nominal Adq
CmdPararAquisicaoDadosRspCmdRec
ObsInterrAqsDdoCient
CmdMudarModoSegRspCmdRec
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer5s
ObsFim5s
NominalAdq Sem
dados
NominalNaoAdqCom 2pc
CmdTransmDadosCient,Tipo,00ObsTimeout
NominalNaoAdqSem pc
CmdTransmDadosCientRspDadosCient,CSR,1
NominalAdq com
dados
CmdTransmDadosCientRspNenhumDado
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer8184ms
ObsFim8184ms
Nominal Aguardando Adq
880s
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer880s
ObsFim880sObsRelatoBuffer90%
ObsSobrepDadosCient
Nominal Aguardando Adq
800sCmdMudarModoNom
RspCmdRecObsIniciaAqsDdoCientObsDispararTimer800s
NominalCom
Dados
ObsFim800s
CmdTransmDadosCientRspDadosCientObsAtéCSR,0
Segurança
EPP OFFObsLigarPDC
ObsDispararTimer60s
ObsFim60s
ObsFim30s
LigandoEPPs
CmdLigarEPP1RspCmdRec
CmdLigarEPP2RspCmdRec
ObsDispararTimer30s
SegurançaEPPs ON
ObsDesligarPDC ObsPDCDesligado
Nominal Prep.HK
CmdPrepDadosHKRspCmdRec
Aguarda cmd
Tx-HKCmdTransmDadosHK(2X)RspDadosHK
ObsHKParaVerRelatos
S1
S2
S3...
Sn
EspecificaçãoServiços
Modelos
Tipos de comportamento
Entradas/Saídas
(Norm)
(SExc)
(SPat)
(M&Pr)
Nomes dos eventosComandos para o injetor de falhas
Tipos de falhas de hw, parâmetros, temporizadores
Test Environmnt
QSEE-TAS PDC
SWPDC
EPPsSim
Ambiente de teste
Tipos de falhas x entradas/saídasDados corrompidos CmdTurnOnEPP2,CKS{badcks}
CmdPrepMemoryDumpData,Mem,18,EndI,8000,EndF,FFFF
Comando repetido CmdTransTestData_2X
Comando fora-de-ordem
Comando truncado CmdTurnOffEPP1,NU,{sup}
Comando atrasado ou adiantado
ObsEndT
Erro simples ObsSingleError
Erro duplo ObsDoubleError
Primeira ocorrência da falha de processador
ObsErrorProc1
Segunda ocorrência da falha de processador
ObsErrorProc2
Comunicação
Memória
Processador
S4 - serviço Dados de teste – M&Pr
CmdTurnOnPDC ObsStartTimer60s
ObsEnd60s
CmdTurnOnEPP1 RspCmdRec
CmdTurnOnEPP2 RspCmdRec
ObsStartTimer30s
ObsEnd30s
ObsErrorProc1 ObsWriteHKReport
CmdPrepTestData RspCmdRec
ObsStarTimer10s
ObsDoubleError ObsWriteHKReport
ObsEnd10s
CmdTransmTestData
RspTestData,CSR,1
ObsSingleError ObsCorrectError
ObsWriteHKReport
ObsErrorProc2 ObsWriteHKReport
ObsReset
CmdTransmCientData
RspNoData
ObsTurnOffPDC ObsPDC_Off
Derivação de casos de teste e casos de falhas
MME para edição
Condado para
geração
Arquivo de saída CTest.seq
`
Type_OK-------------
a2:próximo
Sub-type_OK
----------------a2: próximo
Cksum_OK---------------a3: analisaresposta
Apid_OK------------------a2: próximo
AppData_OK-------------------a2: próximo
Subtipocorreto
Tipocorreto
DadoAplaceito
Verificando
campos
APIDcorreto
Comprimentocorreto
Lenght_OK---------------a2:próximo
InicialTC(...)-----------------------a1: verifica sintaxe
do pacote TC
AccOK [N=0 ^ bit3=0]----------------------------
-
AccOK [N=0 ^ bit3=1]-----------------------------
TM(AccSucc_rep)
Campos
corretos
CmdDesc----------------------------TM( StartFail_rep( f ))
TC(...)----------------------a1: verifica sintaxe
do pacote TC
StartOK [N>1 ^ bit2=1]----------------------------TM(StartSucc_rep)
CmdDesc-----------------------------TM(PrFail_rep( p, f ))
PrOK(p) [N>2 ^ bit1=1]---------------------------
TM(PrSucc_rep)
PrOK(p) [p<N ^ bit1=0]-----------------------TM(PrSucc_rep)
TcInicializa
do
TCAceito
Execução em
Progresso
Final
TCrecebid
o
CmdDesc----------------------------TM(FinFail_rep( f ))
PrNOK(p, f )-----------------------------TM(PrFail_rep( p, f ))
AccOK [N=0 ^ bit3=1]-----------------------------
TM(AccSucc_rep)a4: avaliar viabilidade
de execução
ta----------------------------TM( StartFail_rep( f ))
Sintaxecorreta
ViabiliddOK---------------
respostainicial
atrasada
Resposta final
atrasada
Resposta prog
atrasada
tb----------------------------TM( StartFail_rep( f ))
ta----------------------------TM( PrFail_rep( f ))
tb----------------------------TM( PrFail_rep( f ))
ta [p<N]----------------------------TM( PrFail_rep( f ))
ta [p=N]----------------------------TM( FinFail_rep( f ))
tb--------------------------TM( FinFail_rep( f )) Inicial
Type_OK-------------
a2:próximo
Sub-type_OK
----------------a2: próximo
Apid_OK------------------a2: próximo
AppData_OK-------------------a2: próximo
Subtipocorreto
Tipocorreto
DadoAplaceito
verificando
campos
APIDcorreto
Comprimentocorreto
Lenght_OK---------------a2:próximo
Apid_NOK(*)-------------------------TM(AccFail_rep(0))
Lenght_NOK------------------------TM(AccFail_rep(1))
Type_NOK----------------------TM(AccFail(3))
Sub-type_NOK----------------------TM(AccFail(4))
AppData_NOK----------------------TM(AccFail(5))
Cksum_NOK----------------------TM(AccFail(2))
Inicial
TC(...)------------------------a1: verifica sintaxedo pacote TC
final
SExc M&P
CmdDesc----------------------------TM( StartFail_rep( f ))
TC(...)----------------------a1: verifica sintaxe
do pacote TC
StartOK [N>1 ̂bit2=1]----------------------------TM(StartSucc_rep)
CmdDesc-----------------------------TM(PrFail_rep( p, f ))
PrOK(p) [N>2 ̂bit1=1]---------------------------
TM(PrSucc_rep)
PrOK(p) [p<N ̂bit1=0]-----------------------TM(PrSucc_rep)
TcInicializa
do
TCAceito
Execução em
Progresso
Final
TCrecebid
o
CmdDesc----------------------------TM(FinFail_rep( f ))
PrNOK(p, f )-----------------------------TM(PrFail_rep( p, f ))
AccOK [N=0 ̂ bit3=1]-----------------------------
TM(AccSucc_rep)a4: avaliar viabilidade
de execução
ta----------------------------TM( StartFail_rep( f ))
Sintaxecorreta
ViabiliddOK---------------
respostainicial
atrasada
Resposta final
atrasada
Resposta prog
atrasada
tb----------------------------TM( StartFail_rep( f ))
ta----------------------------TM( PrFail_rep( f ))
tb----------------------------TM( PrFail_rep( f ))
ta [p<N]----------------------------TM( PrFail_rep( f ))
ta [p=N]----------------------------TM( FinFail_rep( f ))
tb--------------------------TM( FinFail_rep( f )) Inicial
SPat
Segurança Aguardando Adq E!
CmdPararAquisicaoDadosRspCmdRec
SegurançaDesligando CmdMudarModoNom,Tipo,00
ObsTimeoutObsDispararTimer8184ms
ObsFim8184ms
CmdTransmDadosCientRspNenhumDado
ObsDispararTimer8184s
Segurançacom
dados E!
Nominal Adq
CmdPararAquisicaoDadosRspCmdRec
ObsInterrAqsDdoCient
CmdMudarModoSegRspCmdRec
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer5s
ObsFim5s
NominalAdq Sem
dados
NominalNaoAdqCom 2pc
CmdTransmDadosCient ,Tipo,00ObsTimeout
NominalNaoAdqSem pc
CmdTransmDadosCientRspDadosCient,CSR,1
NominalAdq com
dados
CmdTransmDadosCientRspNenhumDado
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer8184ms
ObsFim8184ms
Nominal Aguardando Adq
880s
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer880s
ObsFim880sObsRelatoBuffer90%
ObsSobrepDadosCient
Nominal Aguardando Adq
800sCmdMudarModoNom
RspCmdRecObsIniciaAqsDdoCientObsDispararTimer800s
NominalCom
Dados
ObsFim800s
CmdTransmDadosCientRspDadosCientObsAtéCSR,0
Segurança
EPP OFF
ObsLigarPDCObsDispararTimer60s
ObsFim60s
ObsFim30s
LigandoEPPs
CmdLigarEPP1RspCmdRec
CmdLigarEPP2RspCmdRec
ObsDispararTimer30s
SegurançaEPPs ON
ObsDesligarPDC ObsPDCDesligado
Nominal Prep.HK
CmdPrepDadosHKRspCmdRec
Aguarda cmd
Tx-HKCmdTransmDadosHK(2X)RspDadosHK
ObsHKParaVerRelatos
Type_OK-------------
a2:próximo
Sub-type_OK
----------------a2: próximo
Apid_OK------------------a2: próximo
AppData_OK-------------------a2: próximo
Subtipocorreto
Tipocorreto
DadoAplaceito
verificando
campos
APIDcorreto
Comprimentocorreto
Lenght_OK---------------a2:próximo
Apid_NOK(*)-------------------------TM(AccFail_rep(0))
Lenght_NOK------------------------TM(AccFail_rep(1))
Type_NOK----------------------TM(AccFail(3))
Sub-type_NOK----------------------TM(AccFail(4))
AppData_NOK----------------------TM(AccFail(5))
Cksum_NOK----------------------TM(AccFail(2))
Inicial
TC(...)------------------------a1: verifica sintaxedo pacote TC
final
CmdDesc----------------------------TM( StartFail_rep( f ))
TC(...)----------------------a1: verifica sintaxe
do pacote TC
StartOK [N>1 ^ bit2=1]----------------------------TM(StartSucc_rep)
CmdDesc-----------------------------TM(PrFail_rep( p, f ))
PrOK(p) [N>2 ^ bit1=1]---------------------------
TM(PrSucc_rep)
PrOK(p) [p<N ^ bit1=0]-----------------------TM(PrSucc_rep)
TcInicializa
do
TCAceito
Execução em
Progresso
Final
TCrecebid
o
CmdDesc----------------------------TM(FinFail_rep( f ))
PrNOK(p, f )-----------------------------TM(PrFail_rep( p, f ))
AccOK [N=0 ^ bit3=1]-----------------------------
TM(AccSucc_rep)a4: avaliar viabilidade
de execução
ta----------------------------TM( StartFail_rep( f ))
Sintaxecorreta
ViabiliddOK---------------
respostainicial
atrasada
Resposta final
atrasada
Resposta prog
atrasada
tb----------------------------TM( StartFail_rep( f ))
ta----------------------------TM( PrFail_rep( f ))
tb----------------------------TM( PrFail_rep( f ))
ta [p<N]----------------------------TM( PrFail_rep( f ))
ta [p=N]----------------------------TM( FinFail_rep( f ))
tb--------------------------TM( FinFail_rep( f )) Inicial
Segurança
EPP OFF
NominalNaoAdq
ObsDesligarPDC ObsPDCDesligado
Iniciação
Standby
ObsLigarPDCObsDispararTimer60s
ObsFim60s
ObsFim20s
Nominal Aguardando Adq
CmdPararAquisicaoDadosRspCmdRec
ObsInterrAqsDdoCient
CmdMudarModoSegRspCmdRec
LigandoEPPs
SegurançaAguardan
do
SegurançaEPPs ON
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer10s
ObsFim10sCmdTransmDadosCient
RspDadosCientObsDispararTimer10s
Nominalcom
dados
CmdLigarEPP2RspCmdRec
ObsDispararTimer10s
CmdMudarModoNomRspCmdRec
ObdDispararTimer20s
CmdTransmDadosCientObsNenhumDado
ObsDisparaTimer20s
SegurançaAguardan
do 10s
ObsFim10s
CmdReiniciarAquisicaoObsTimeout
CmdReiniciarAquisicaoRspCmdRec
CmdPararAquisicaoDadosRspCmdRec
Nominal Aguardan
do
ObsFim20sObsIniciaAqsDdosCientObsDispararTimer10s
Segurança Aguardando Adq E!
CmdPararAquisicaoDadosRspCmdRec
SegurançaDesligando CmdMudarModoNom,Tipo,00
ObsTimeoutObsDispararTimer8184ms
ObsFim8184ms
CmdTransmDadosCientRspNenhumDado
ObsDispararTimer8184s
Segurançacom
dados E!
Nominal Adq
CmdPararAquisicaoDadosRspCmdRec
ObsInterrAqsDdoCient
CmdMudarModoSegRspCmdRec
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer5s
ObsFim5s
NominalAdq Sem
dados
NominalNaoAdqCom 2pc
CmdTransmDadosCient ,Tipo,00ObsTimeout
NominalNaoAdqSem pc
CmdTransmDadosCientRspDadosCient,CSR,1
NominalAdq com
dados
CmdTransmDadosCientRspNenhumDado
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer8184ms
ObsFim8184ms
Nominal Aguardan
do Adq 880s
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer880s
ObsFim880sObsRelatoBuffer90%ObsSobrepDadosCient
Nominal Aguardan
do Adq 800s
CmdMudarModoNomRspCmdRec
ObsIniciaAqsDdoCientObsDispararTimer800s
NominalCom
Dados
ObsFim800s
CmdTransmDadosCientRspDadosCientObsAtéCSR,0
Segurança
EPP OFF
ObsLigarPDCObsDispararTimer60s
ObsFim60s
ObsFim30s
LigandoEPPs
CmdLigarEPP1RspCmdRec
CmdLigarEPP2RspCmdRec
ObsDispararTimer30s
SegurançaEPPs ON
ObsDesligarPDC ObsPDCDesligado
Nominal Prep.HK
CmdPrepDadosHKRspCmdRec
Aguarda cmd
Tx-HKCmdTransmDadosHK(2X)RspDadosHK
ObsHKParaVerRelatos
Norm
Modelos
File.seq
Arquivo com casos de teste de uma máquina
Resultados
11 serviços foram definidos
97 modelos gerados
770 casos de teste
51 erros
Serviços Modelos
Norm SExc SPat Com M&Pr Total
S1 Inicialização 2 1 1 1 1 6
S2 Dados Científicos 2 2 1 1 1 7
S3 Dados de Housekeeping 3 3 3 1
111
S4 Dados de Teste 2 4 4 1 1 12
S5 Dados de Diagnóstico 2 4 4 2 2 14
S6 Descarga de Memória 5 3 5 2 1 16
S7 Mudança de modo de operação 1 0 0 0
12
S8 Carga e execução de programa 1 5 4 3
215
S9 Sintaxe de mensagem do OBDH 1 0 0 1
02
S10 Sintaxe de mensagem dos EPPs 1 0 0 1
02
S11 Comandos Especiais4 0 0 2 4 10
Total 24 24 22 13 14 97
Casos de falha
Tipo de falha de hw Casos de falha Erros
Comunicação 283 31
Processador 80 5
Memória 88 3
Total 451 39
319 normais
451 Casos de falha
12
39770 casos
51 erros
Comentários sobre os resultados do projeto QSSE
Os resultados surpreenderam com 51 erros ainda encontrados
Considerando que a validação se deu sobre um software fornecido por uma empresa Brasileira de Software proeminente, desenvolvido por uma equipe competente sob rigorosas regras de garantia de qualidade
45% erros de código 33% erros de não-conformidade nos documentos 22% ambos
Considerando que todas as não-conformidades entre código e documentos foram computadas.
Atenção às falhas é mais efetivo que no comportamento normal para a validação
Lições aprendidas – CoFI em um caso real
O esforço de criar os modelos foi compensado pela superior
organização dos testes alcançada com a aplicação da metodologia CoFI em comparação com o projeto dos testes de forma ad-hoc
Os modelos voltam a atenção dos testadores para falhas e exceções que podem ocorrer durante a operação do software levando ao projeto de situações que os desenvolvedores normalmente não pensam
Os casos de teste gerados pela Condado são auto-contidos, i.é, cada caso pode ser executado independentemente, desta forma o veredicto não depende da ordem de execução dos casos e facilita a re-execução.
Comentários sobre a metodologia de teste CoFI
A metodologia CoFI reduz a distância entre a prática (geração de teste a partir de uma especificação textual) e o uso de métodos formais (especificação em autômatos)
É de fácil aprendizagem e permite automação dos passos, pois usa modelos UML
Possibilita reuso em teste, porque a geração parte da especificação
Orienta a definição de experimentos determinísticos para Injeção de Falhas
Sputnik – 1º satélite artificial a orbitar a terra - USRR 1957
Estação Espacial Internacional
Construção 1998 - 2005