Trabalho Final da Graduação em Ciência de Computação na Unicarioca em 2006. Foi desenvolvido o Sistema Colaborativo de Tradução para demonstrar os principais conceitos de teste unitário, integração dos processos de desenvolvimento e testes.
Importância do Teste Unitário na Qualidade do Software
1. A Influência dos testes unitários
automatizados na qualidade
dos softwares desenvolvidos
Por : Edison Moreira,
Luis Octavio Godoy e
Michel David
Orientação : Prof. Hamilton Athanazio
UNICARIOCA – Ciência da Computação
2. Objetivos da Apresentação
Mostrar a vital importância de testes nos
componentes do software durante todo
seu ciclo de vida, para a qualidade do
software desenvolvido
Agenda
Panorama Conceitual
Demonstrações da Prova de Conceito
Conclusões
3. Monografia
Objetivo
Demonstrar a influência dos testes unitários
automatizados na melhoria da qualidade dos softwares
desenvolvidos
“Atualmente as organizações desenvolvedoras de software
não tratam o processo de testes como um verdadeiro
processo,ou seja, não existe uma gestão formal do
mesmo, por isso as atividades de testes são confundidas
com o próprio processo de desenvolvimento. Sendo
assim, os custos para se identificar e corrigir as falhas
podem ser 50 a 100 vezes maiores do que se fossem
realizadas logo após a sua inclusão no software. “
Emerson Rios e Trayahù Moreira
Justificativa
4. Metodologia de Trabalho
I – Revisão da Literatura
II – Pesquisa e Análise dos modelos a serem
seguidos
III – Especificação do Sistema SCT
IV – Análise e Definição das ferramentas a serem
utilizadas
V – Prova de Conceito
VI - Método de Automação dos Testes junto com o
Desenvolvimento
VII – Conclusão
5. “o ramo da Engenharia relacionado a aplicação prática
no projeto e na construção de programas e na
documentação necessária para construir, manter e
operar estes programas”.
Barry Boehm (1990)
Engenharia de software
“os engenheiros de software utilizam o seu
conhecimento sobre computadores e a
computação para ajudar a resolver problemas”
Pfleeger (2001)
7. “existe uma dificuldade em garantir
compatibilidade entre as fases de análise e
de projeto e, posteriormente, do projeto para
a implementação”
Melo, Ana Cristina
Orientação a Objetos
Justificativa
8. Linguagens Tradicionais Orientadas a Objeto
Função A
Função B
Função C
Função D
Dados
Dados X
Função X
Dados Y
Função Y
Dados Z
Função Z
Objeto X Objeto Y
Objeto Z
9. Para entendimento, modelagem e desenvolvimento do
sistema devem ser trabalhadas as seguintes visões e
respectivos diagramas :
I) Estrutural – que é suportada pelos diagramas de classes,
de componentes, de implantação e de objetos, que
registram os estados da classe e seus relacionamentos.
Os relacionamentos podem ser de associações, herança
(generalização e especialização), dependência ou
refinamentos.
UML
II) Dinâmica – que é suportada pelos diagramas de
atividades, diagramas de estado, seqüência e
colaboração.
III) Comportamental (“Behavorial”) - que é representado
pelos Diagramas e Descrição de Casos de Uso.
13. XP – Extreme Programming
Conceitos
Simplificação do processo de desenvolvimento
Integração dos processos de testes e de desenvolvimento
Desenvolvimento e liberação rápida de requisitos
14. Model-View-Controller MVC
É um Padrão de Projeto
Características principais
Isolamento das camadas
Facilidade de mudança
Diagrama de Componentes
15. SCT
Sistema Colaborativo de Tradução
Objetivo
Ser uma ferramenta de trabalho em grupo
colaborativo que ofereça apoio ao processo
de tradução entre idiomas existentes ou que
estejam em construção.
18. Ferramentas Utilizadas
Ambiente de Desenvolvimento Eclipse versão 3.1
Ambiente de Testes Junit
Ferramenta de automatização ANT
Ferramenta de Modelagem UML JUDE TAKE
Linguagem de desenvolvimento JAVA versão 1.5
Linguagem XML
SGBDR MySql versão 4.1
FrameWork STRUTs
FrameWork Hibernate 2.0
Servidor de Aplicação Web Apache Tomcat
19. Procedimento
Uso do método assertEquals, disponível
no JUNIT, para comparação de entrada de
dados com a informação de um objeto na
camada de persistência
Prova de Conceito
Testes Unitários
20. Junit
Estão disponíveis as interfaces: uma para texto
(junit.textui.TestRunner), uma para AWT
(junit.awtui.TestRunner) e uma para Swing
(junit.swingui.TestRunner)
Para se testar uma classe específica, basta criar uma classe
que deve ser herdeira da classe junit.framework.TestCase
O JUnit cria as classes de testes. Estas contêm um ou mais
métodos para testes, podendo ser organizados de forma
hierárquica, para que o sistema seja testado em partes
separadas (testes unitários), algumas integradas ou todas de
uma só vez.
Ele permite escrever testes que retenham seu valor ao longo
do tempo, ou seja, que possam ser reutilizáveis, o que
implementa a automatização dos mesmos.
28. Hibernate Principais Componentes
Mapeamento Objeto/Relacional
É uma descrição XML (Extended Markup Language) que
mapeia o modelo de objetos no modelo relacional
(tabelas)
Preserva no SGBDR as características dos objetos (por
exemplo :atributos multivalorados, coleções de objetos)
Linguagem para consulta HQL
Disponibiliza acesso natural as associações
Semelhante ao SQL
API (pacotes org.hibernate e org.hibernate.cfg)
Principais interfaces
Configuration, Session Factory, Session, Transaction
e Query
29. Modelo Proposto para Integração dos Processos de Desenvolvimento e Testes
P
L
A
N
E
JA
M
E
N
T
O
Modelo Proposto para Integração dos Processos de Desenvolvimento e Testes
Gerência dos Requisitos
Especificação
Teste
Iteração 1
Iteração 2
Entrega
Desenho Lógico
e
Especificação
Desenvolvimento
Construção
Implementação
Entrega
P
L
A
N
E
J
A
M
E
N
T
O
P
L
A
N
E
J
A
M
E
N
T
O
30. Conclusão
os pré-requisitos para um bom funcionamento dos testes
automatizados são :
Implementação dos ambientes
Configuração correta dos inúmeros parâmetros
Pelas limitações e pela complexidade e esforço houve
necessidade de diminuir o escopo, reduzindo a prova conceitual
para testes unitários;
A UML atendeu a necessidade de especificação conjunta
das Classes de Negócio e de Testes;
31. Conclusão
É viável e necessária a integração dos
processos de desenvolvimento e de testes
Pesquisa, estudo, instalação e configuração dos ambientes
foram muito trabalhosos, porém mostraram que a curva de
aprendizado é mais rápida
Implantados o núcleo da Infra-estrutura e a automatização
dos testes, aumentam a produtividade dos profissionais e a
qualidade do software
Os ambientes Struts e Hibernate facilitam e agilizam o
desenvolvimento de software
As ferramentas JUnit e ANT usadas juntas automatizam os
testes, reduzindo o re-trabalho dos desenvolvedores