Você recebeu um software em C++ que implementa um banco, e sua missão é encontrar e consertar bugs desse código. Você já escreveu uma especificação em Quint com as funcionalidades desse software, verificando propriedades relevantes e ajustanto a especificação até que todas elas fossem satisfeitas (assim como fizemos no trabalho 1). Com isso, você consegue afirmar que o modelo está correto.
Contudo, a sua missão é sobre o código, não sobre o modelo. Então, agora você precisa utilizar o modelo para aumentar a confiança no software em si. Não é possível, com testes, garantir que o modelo e o software correspondem 100%. Mas, quanto mais testes forem rodados, menor a chance de termos diferenças de comportamento.
Conecte o modelo existente ao código existente com testes baseados em modelos. Para cada teste que falhar, ou seja, para cada execução onde o comportamento do modelo for diferente do comportamento do código, ajuste o código para que o teste passe a suceder.
Você recebe:
bank.qnt
)
bank.hpp
)
test.cpp
)
lib
: g++ -I lib test.cpp
Atenção: Atualizem a versão do Quint! A mais recente é v0.22.4
Para atualizar: npm install -g @informalsystems/quint@latest
quint run bank.qnt --mbt --out-itf=traces/out.itf.json --n-traces=10000
traces
para que todos os arquivos JSON sejam escritos nela.Os testes deverão falhar (até que todos os bugs tenham sido consertados). Se o teste suceder em alguma iteração, repita o processo algumas vezes para adiquirir mais confiança.
Quando um teste falhar:
Quando um teste suceder:
Atenção: Deve ser entregue em PDF!
O relatório deve justificar cada alteração feita na implementação do banco
(arquivo bank.hpp
). Cada alteração deve ser mínima: quanto menor, melhor. Isso
demonstra que você está utilizando o método corretamente, e que conseguirá
aplicá-lo mesmo em uma implementação muito complexa.
Seu relatório deve conter uma seção explicando brevemente como seu teste está funcionando: quais dados estão sendo impressos e quais comparações estão sendo feitas; e uma seção com as modificações que você fez.
Para cada modificação, você deve apresentar:
A princípio, seu relatório pode conter apenas a descrição do teste e das modificações, sem necessidade de mais seções como introdução e conclusão. Se houverem mais informações relevantes, podem acrescentar.