AGRADECIMENTOSAgradeço a Deus, o Criador de todas as coisas e único dono daverdadeira sabedoria. Sem ele, confesso, não teria capacidade eforças para alcançar meus sonhos.Agradeço a minha esposa, Ana Flávia L. M. Souza, pelo companheirismo,amor e preocupação. Por estar ao meu lado em todos osmomentos. Amo você, minha linda!!!Agradeço a todos os familiares que se fizeram presentes na minhavida, principalmente pela compreensão quando me fiz ausente, emespecial a minha mãe, Ana Sueli de Souza, pelas constântes orações.Agradeço também a minha orientadora, Anamaria Martins Moreira,pela dedicação na orientação, pelos conselhos e pelo aprendizado.Professora que se preocupa com seus alunos, fazendo com que oconhecimento seja verdadeiramente produzido. Sua ajuda foi desuma importância na conclusão deste trabalho. Muito obrigado.Ao professor Umberto, pelas dicas na modelagem, desenvolvimentodo compilador e otimização do código. O Sr. teve participaçãodecisiva no desenvolvido do <strong>JCML</strong>c.Agradeço as colegas do PPgSC, pela amizade, força e até mesmopela paciência em me transmitir alguns conteúdos importantes nodecorrer desses 2 anos. Principalmente ao pessoal do ConSiste:Bruno, Cláudia, Itamir, Katia e Thiago.Gostaria muito de agradecer aos professores do CEFET-RN, JoãoMaria Filgueira, Cláudia Ribeiro, Francisco de Assis e RobinsonLuís pelo exemplo e por se preocuparem com o ensino. E a instituiçãoCEFET-RN, na qual trabalho, pela oportunidade de aplicar oaprendizado adiquirido nesta Pós-graduação.Obrigado a todos!5
ResumoMétodos formais poderiam ser usados para especificar e verificar software on-cardem aplicações <strong>Java</strong> <strong>Card</strong>. O estilo de programação para smart cards requer verificaçãoem tempo de execução para condições de entrada em todos os métodos <strong>Java</strong> <strong>Card</strong>, onde oobjetivo principal é preservar os dados do cartão. Projeto por Contrato, em particular, alinguagem JML, é uma opção para este tipo de desenvolvimento e verificação, pelo fato daverificação em tempo de execução ser parte da implementação pela JML. Contudo, JMLe suas respectivas ferramentas para verificação em tempo de execução não foram projetadascom o foco nas limitações <strong>Java</strong> <strong>Card</strong>, sendo, dessa forma, não compatíveis com<strong>Java</strong> <strong>Card</strong>. Nesta dissertação, analisamos o quanto esta situação é realmente intrínsecaàs limitações <strong>Java</strong> <strong>Card</strong> e, se é possível re-definir a JML e suas ferramentas. Propomosrequisitos para uma nova linguagem, a qual é compatível com <strong>Java</strong> <strong>Card</strong> e apresentamoscomo o compilador desta linguagem pode ser construído. <strong>JCML</strong> retira da JML aspectosnão definidos em <strong>Java</strong> <strong>Card</strong>, como por exemplo, concorrência e tipos não suportados. Istopode não ser o bastante, contudo, sem o esforço em otimização de código de verificaçãogerado pelo compilador, não é possível gerar código de verificação para rodar no cartão.O compilador <strong>JCML</strong>, apesar de ser bem mais restrito em relação ao compilador JML,está habilitado a gerar código de verificação compatível com <strong>Java</strong> <strong>Card</strong>, para algumasespecificações lightweight. Como conclusão, apresentamos uma variante da JML compatívelcom <strong>Java</strong> <strong>Card</strong>, <strong>JCML</strong> (<strong>Java</strong> <strong>Card</strong> <strong>Modeling</strong> <strong>Language</strong>), com uma versão de seucompilador.Área de Concentração: Engenharia de SoftwarePalavras-chave: Métodos Formais, <strong>Java</strong> <strong>Card</strong>, JML, <strong>JCML</strong>, Verificação Runtime,Compilador6