Relatorio TCC Diogo Jonatas
Relatorio TCC Diogo Jonatas
Relatorio TCC Diogo Jonatas
DIOGO LUDVIG
JONATAS DAVSON REINERT
Florianópolis – SC
Ano 2007 / 2
DIOGO LUDVIG
JONATAS DAVSON REINERT
Banca Examinadora
Rafael Savi
Prof. José Eduardo De Lucca
Profa. Maria Marta Leite
Dedico este trabalho ao meu Vovô
Jonatas
AGRADECIMENTOS
Meus sinceros agradecimentos aos meus avôs, Bruno Reinert não mais
presente e Catarina Reinert por todo incentivo durante esta longa jornada do meu
curso.
A minha inseparável noiva, Elaine, que esteve sempre presente me ajudando
e incentivando na conclusão deste trabalho.
Ao meu grande e inseparável amigo Alexandre por sempre me ouvir nas
minhas horas de desespero.
E por fim, ao meu orientador, Prof. José Eduardo De Lucca e co-orientadora,
Maria Marta Leite por ter acreditado na conclusão deste trabalho.
Muito obrigado!
Jonatas
Resumo
Due to a fast growth of the software industry, a society demand, problems related to
software development such as lack of management and maintenance, complexity
and high costs have become more visible lately. Among them, management seems
to be the main problem related to a software project. This problem has called the
attention of the software development community which has made efforts to improve
processes related to management such as agile processes to decrease bureaucracy,
obtaining, this way, direct results. Aiming at contributing to the improvement of the
performance of these agile processes, the objective of this study is to make a
comparative analysis between easYProcess and Scrum agile methodologies of
software development as well as to show differences between agile and traditional
approaches. In order to achieve its objective, this study applies the methodologies
above mentioned to a partial construction of a software component for City Halls.
Results suggest that both methodologies play their role well: during the process of
software development, the easYProcess seems to be efficient when applied to
documents and artifacts while the Scrum methodology has a good performance when
applied to management and team organization.
1 INTRODUÇÃO ................................................................................................................. 13
1.1 FORMULAÇÃO DO PROBLEMA........................................................................................ 14
1.2 JUSTIFICATIVAS ........................................................................................................... 15
1.3 OBJETIVOS .................................................................................................................. 16
1.3.1 Objetivo Geral ......................................................................................................... 16
1.3.2 Objetivos Específicos............................................................................................... 17
1.4 DELIMITAÇÃO DO ESCOPO ............................................................................................ 17
1.5 ORGANIZAÇÃO DO TRABALHO ....................................................................................... 17
2 ESTUDO DE METODOLOGIAS DE DESENVOLVIMENTO ............................................ 19
2.1 METODOLOGIAS DE DESENVOLVIMENTO DE SOFTWARE ................................................. 19
2.2 METODOLOGIAS TRADICIONAIS ..................................................................................... 20
2.2.1 RUP ......................................................................................................................... 23
2.3 METODOLOGIAS ÁGEIS ................................................................................................. 25
2.3.1 YP ............................................................................................................................ 30
2.3.2 XP ............................................................................................................................ 30
2.3.3 Scrum ....................................................................................................................... 34
2.4 COMPARAÇÃO ENTRE METODOLOGIAS .......................................................................... 36
3 YP – EASYPROCESS ...................................................................................................... 40
3.1 IDENTIFICAÇÃO DO ESCOPO DO PROBLEMA ................................................................... 41
3.2 ESPECIFICAÇÃO DE PAPÉIS .......................................................................................... 41
3.3 CONVERSA COM O CLIENTE .......................................................................................... 43
3.3.1 Documento de Visão ................................................................................................ 43
3.3.2 Requisitos ................................................................................................................ 43
3.3.3 Perfil do Usuário ..................................................................................................... 44
3.3.4 Objetivos de Usabilidade......................................................................................... 45
3.4 INICIALIZAÇÃO .............................................................................................................. 45
3.4.1 Modelagem da Tarefa.............................................................................................. 45
3.4.2 Definição das User Stories ...................................................................................... 46
3.4.3 Protótipo de Interface.............................................................................................. 46
3.4.4 Modelo Lógico de Dados......................................................................................... 47
3.4.5 Projeto Arquitetural ................................................................................................ 47
3.5 PLANEJAMENTO ........................................................................................................... 47
3.6 IMPLEMENTAÇÃO.......................................................................................................... 48
3.6.1 Propriedade Coletiva de Código ............................................................................. 49
3.6.2 Boas Práticas de Codificação ................................................................................. 49
3.6.3 Integração Contínua ................................................................................................ 50
3.6.4 Testes ....................................................................................................................... 51
3.7 FINALIZAÇÃO DA ITERAÇÃO ........................................................................................... 52
3.7.1 Reuniões de Acompanhamento ................................................................................ 52
3.8 VERSÃO DO PRODUTO ................................................................................................. 54
4 SCRUM ............................................................................................................................ 55
4.1 PREPARAÇÃO .............................................................................................................. 56
4.2 PAPÉIS ........................................................................................................................ 58
4.2.1 Product Owner ........................................................................................................ 58
4.2.2 Team Members ........................................................................................................ 58
4.2.3 ScrumMaster ............................................................................................................ 59
4.3 PROCESSO .................................................................................................................. 59
4.3.1 Planejando o Sprint ................................................................................................. 60
4.3.2 Sprint ....................................................................................................................... 62
4.3.3 Reunião Diária do Scrum ........................................................................................ 63
4.3.4 Revisão do Sprint ..................................................................................................... 64
4.3.5 Retrospectiva do Sprint ........................................................................................... 66
4.4 ARTEFATOS ................................................................................................................. 67
4.4.1 Product backlog ....................................................................................................... 67
4.4.2 Sprint Backlog ......................................................................................................... 69
4.4.3 Sprint Burndown ...................................................................................................... 71
4.4.4 Relatórios ................................................................................................................ 72
5 PROPOSTA...................................................................................................................... 75
5.1 INTRODUÇÃO ............................................................................................................... 75
5.2 DESCRIÇÃO DO COMPONENTE ...................................................................................... 75
5.3 PRINCIPAIS PROCESSOS .............................................................................................. 77
5.4 MODELAGEM ............................................................................................................... 77
5.5 COMPARAÇÃO DOS MÉTODOS ÁGEIS YP E SCRUM ........................................................ 79
5.6 IMPLEMENTAÇÃO.......................................................................................................... 87
6 CONCLUSÃO ................................................................................................................... 89
6.1 QUANTO AOS OBJETIVOS ............................................................................................. 89
6.1.1 Objetivo Específico I ............................................................................................... 89
6.1.2 Objetivo Específico II .............................................................................................. 89
6.1.3 Objetivo Específico III ............................................................................................. 90
6.1.4 Objetivo Específico IV ............................................................................................. 90
6.1.5 Objetivo Específico V .............................................................................................. 91
6.2 DIFICULDADES ENCONTRADAS ...................................................................................... 91
6.3 QUANTO ÀS PERSPECTIVAS DE CONTINUIDADE .............................................................. 91
7 REFERÊNCIAS ................................................................................................................ 93
8 ANEXO A – MODELAGEM YP ........................................................................................ 97
8.1 DEFINIÇÃO DE PAPÉIS .................................................................................................. 97
8.2 CONVERSA COM O CLIENTE .......................................................................................... 97
8.2.1 Documento de Visão .............................................................................................. 101
8.2.2 Requisitos .............................................................................................................. 101
8.2.3 Perfil do Usuário ................................................................................................... 102
8.2.4 Objetivos de Usabilidade....................................................................................... 102
8.3 INICIALIZAÇÃO ............................................................................................................ 103
8.3.1 Modelo da Tarefa .................................................................................................. 103
8.3.2 User Stories ........................................................................................................... 104
8.3.3 Testes de Aceitação ............................................................................................... 105
8.3.4 Protótipo da Interface ........................................................................................... 105
8.3.5 Projeto Arquitetural .............................................................................................. 108
8.3.6 ModeLo Lógico de dados ...................................................................................... 109
8.4 PLANEJAMENTO ......................................................................................................... 110
8.4.1 Plano de Release ................................................................................................... 111
8.4.2 Plano de Iteração .................................................................................................. 112
8.4.3 Matriz de Competências ........................................................................................ 113
8.4.4 TAA Parcial ........................................................................................................... 114
8.5 IMPLEMENTAÇÃO........................................................................................................ 114
8.5.1 Versão do Sistema ................................................................................................. 114
8.5.2 Roteiro de Atividades............................................................................................. 114
8.5.3 Questionário Pós-Teste ......................................................................................... 116
8.6 REUNIÕES DE ACOMPANHAMENTO .............................................................................. 117
8.6.1 Big Chart ............................................................................................................... 117
8.6.2 TAA Completa ....................................................................................................... 117
8.6.3 Análise de Riscos ................................................................................................... 119
9 ANEXO B – MODELAGEM SCRUM .............................................................................. 120
9.1 PREPARAÇÃO ............................................................................................................ 120
9.1.1 Product Backlog .................................................................................................... 120
9.2 PAPÉIS ...................................................................................................................... 121
9.3 PROCESSO ................................................................................................................ 121
9.3.1 Sprint ..................................................................................................................... 124
9.3.2 Reunião Diária do Scrum ...................................................................................... 125
9.3.3 Revisão do Sprint ................................................................................................... 125
9.3.4 Retrospectiva do Sprint ......................................................................................... 125
10 ANEXO C – CÓDIGO FONTE ...................................................................................... 127
11 ANEXO D – TELAS DO SISTEMA ............................................................................... 145
12 ANEXO E – ARTIGO .................................................................................................... 150
Índice de Figuras
YP – easYProcess
TI – Tecnologia da Informação
XP – Extreme Programming
AM – Agile Modeling
SVN – Subversion
MVC – Model-view-controller
1 INTRODUÇÃO
Por outro lado, outra metodologia que será abordada neste trabalho é a
Scrum (Scrum Alliance, 2007), onde pesquisas mostram sua grande aceitação pela
comunidade de desenvolvimento de software internacional, como mostra a Figura 1
abaixo:
1.2 JUSTIFICATIVAS
1.3 OBJETIVOS
1
O termo TI (Tecnologia da Informação) serve para designar o conjunto de recursos tecnológicos e
computacionais para geração e uso da informação. (WIKIPEDIA)
17
Este capítulo tem por objetivo apresentar uma visão geral sobre as
metodologias tradicionais e ágeis de desenvolvimento de software. Em seguida é
apresentada uma comparação entre as duas abordagens, mostrando algumas
vantagens e desvantagens do uso de cada uma. Também são apresentadas as
metodologias ágeis easYProcess e Scrum que serão utilizadas na modelagem do
componente de software, bem como as práticas do Extreme Programming (XP) e
Rational Unified Process (RUP). Para a confecção deste capítulo foi utilizado como
base o utilizado no Trabalho de Conclusão de Curso da aluna Cecília Machado de
Felippe (FELIPPE, 2007).
2
Computador de grande porte, dedicado normalmente ao processamento de um volume grande de
23
é o mais eficaz, pois raros projetos de software seguem este fluxo linear, além das
mudanças de requisitos que ocorrerem não serem de fácil adaptação, pois alteram
toda a documentação já desenvolvida (NETO, 2004).
2.2.1 RUP
informações (WIKIPEDIA).
24
Desenvolvimento Iterativo
Gerenciamento de Requisitos
Modelagem
Controle de Mudanças
3
UML (Unified Modeling Language) é uma linguagem para especificação, documentação,
visualização e desenvolvimento de sistemas orientados a objetos. (WIKIPEDIA)
26
4
Sommerville (2004) afirma que os métodos ágeis são fundamentados no Desenvolvimento
Incremental.
29
2.3.1 YP
2.3.2 XP
2.3.2.1 Valores
2.3.2.2 Práticas
5
Releases são módulos do sistema que geram um valor bem definido para o cliente.
6
Iteração são períodos de tempo de poucas semanas na qual a equipe programa um conjunto de
funcionalidades acordado com o cliente (GONÇALVES, 2007).
33
2.3.3 SCRUM
No final de cada Sprint, é feita uma retrospectiva para avaliar como esta o
andamento do processo, posteriormente são levantados os próximos itens a serem
desenvolvidos para a realização de um novo Sprint.
3 YP – EASYPROCESS
7
Inicialmente denominado de Programa Especial de Treinamento, sendo hoje intitulado de Programa
de Educação Tutorial- PET, foi criado em 1979, e a partir do ano 2000, o Programa passou a ser
vinculado à Secretaria de Educação Superior- SESu/MEC. O PET tem uma característica única com
relação aos outros programas de capacitação do ensino superior, pois é o único que atinge o tripé
das universidades: a pesquisa, o ensino e a extensão.
41
• Após a conversa inicial com o cliente, o documento de visão deve ser criado
utilizando uma linguagem de fácil entendimento para o cliente, visto que este
será um elo de comunicação entre o cliente e o desenvolver. O documento de
visão deverá conter as idéias gerais sobre o que o sistema se propõe a fazer.
Depois de concluído este documento de visão pelos desenvolvedores, o
mesmo deve ser validado pelo cliente, a fim de verificar se aqueles
compreenderam a visão do sistema, uma vez que este documento é de suma
importância, pois serve como uma espécie de contrato entre as partes
envolvidas.
3.3.2 REQUISITOS
• Dentro do Documento de Visão deve haver uma sessão em que são descritos
os requisitos funcionais e não funcionais do projeto. Os requisitos são
características e funções de um sistema. Os requisitos funcionais descrevem
as funções que o software deve possuir. Já os requisitos não funcionais
descrevem as propriedades e restrições do sistema. Os requisitos não
44
• Sexo;
• Faixa etária;
3.4 INICIALIZAÇÃO
3.5 PLANEJAMENTO
Portanto, uma User Story somente poderá ser considerada finalizada após a
execução dos testes de aceitação.
3.6 IMPLEMENTAÇÃO
3.6.2.4 Refatoramento
8
O CVS, ou Concurrent Version System (Sistema de Versões Concorrentes) é um sistema de
controle de versão que permite que se trabalhe com diversas versões de arquivos organizados em
um diretório e localizados local ou remotamente, mantendo-se suas versões antigas e os logs de
quem e quando manipulou os arquivos. (WIKIPEDIA)
9
SVN, também conhecido por Subversion, é um sistema de controle de versão desenhado
especificamente para ser um substituto moderno do CVS. (WIKIPEDIA)
51
3.6.4 TESTES
4 SCRUM
10
Rugby é um esporte tendo como objetivo que duas equipes de quinze, dez ou sete jogadores cada
uma, jogando de forma leal e de acordo com as Leis e o espírito desportivo, portando, passando,
chutando ou apoiando a bola, marquem a maior quantidade de pontos possível. A equipe que marcar
mais pontos será a vencedora da partida. E, SCRUM é o nome dado a disputa da bola. Disponível
em:<http://www.rugbynews.com.br>.
56
4.1 PREPARAÇÃO
• Escopo do projeto;
4.2 PAPÉIS
A equipe junto com o Product Owner define o que será feito em cada
Sprint ao final, a equipe mostra o resultado para o Product Owner e o mesmo decida
o que será feito. Uma vantagem do Scrum é que a equipe pode se auto-organizar de
forma participativa tendo a liberdade de realizar o que quiser dentro de cada Sprint
para cumprir o objetivo da iteração. (Scrum For Team System, 2007)
59
4.2.3 SCRUMMASTER
4.3 PROCESSO
• Caso for detectado que o Sprint vai consumir mais que 20% de
trabalho da equipe do que foi planejado após o segundo dia da
reunião de planejamento é sinal que necessita fazer um
planejamento melhor. (Scrum For Team System, 2007).
4.3.2 SPRINT
• Trabalho em equipe;
Uma coisa que pode ser tratado na reunião de retrospectiva do Sprint são
as práticas, a comunicação, o ambiente, os artefatos e as ferramentas que são
utilizados durante cada Sprint.
67
4.4 ARTEFATOS
4.4.4 RELATÓRIOS
5 PROPOSTA
5.1 INTRODUÇÃO
11
Conjunto urbano constituído por uma cidade principal e os seus subúrbios. Fonte: Priberam.
77
5.4 MODELAGEM
Com cada uma das duas metodologias abordadas neste trabalho foi
realizada a modelagem do componente proposto. Estas modelagens servirão de
base para que possamos avaliar com maior propriedade as características de cada
uma delas.
78
Classificação Critério
10 Simplicidade é essencial. S S
5.6 IMPLEMENTAÇÃO
6 CONCLUSÃO
Este objetivo foi atendido com a realização dos capítulos 3 e 4 onde foi
mais bem detalhado o funcionamento das metodologias YP e Scrum
respectivamente.
modelo lógico de dados, porém a metodologia não impede que este artefato seja
criado para facilitar a implementação do sistema sendo que este artefato pode ser
definido como um item do Product Backlog.
7 REFERÊNCIAS
BEEDLE, Mike et al. SRUM: Na extension pattern language for hyperprodutive software
development. Disponível em:
<http://www.controlchaos.com>. Acessado em setembro de 2007.
FERREIRA, Décio; COSTA, Felipe; ALONSO, Filipe; ALVES, Pedro; NUNES, Tiago.
SCRUM Um Modelo Ágil para Gestão de Projetos de Software.
FILHO, Edes Garcia da Costa; PENTEADO, Rosângela; SILVA, Júnia Coutinho Anacleto
Silva; BRAGA, Rosana Teresinha Vaccare. Padrões e Métodos Ágeis: Agilidade no
Processo de Desenvolvimento de Software. 2005. Disponível em:
<http://sugarloafplop2005.icmc.usp.br/papers/9673.pdf>. Acessado em 25 março 2007.
GARCIA, Francile Procópio; LIMA, Aliandro Higino Guedes; FERREIRA, Danilo de Sousa;
JÚNIOR, Fábio Luiz Leite; ROCHA, Giselle Regina Chaves da; MENDES, Gustavo Wagner
Diniz; PONTES, Renata França de; ROCHA, Verlaynne Kelley da Hora; DANTAS, Vinicius
Farias. easYProcess – Um Processo de Desenvolvimento de Software. Universidade
Federal de Campina Grande. Campina Grande: 2007.
KNIBERB Henrik. Scrum and XP from the Trenches. E-book disponível em:
<http://www.crisp.se/henrik.kniberg/ScrumAndXpFromTheTrenches.pdf>. Acesso em 08 de
setembro de 2007.
KUHN, Giovane; PAMPLONA, Vitor. Apresentando XP. Encante seus Clientes com
Extreme Programming. Disponível em:
<http://www.javafree.org/content/view.jf?idContent=5>. Acesso em 11 de junho de 2007.
<http://ftp.mct.gov.br/Temas/info/Dsi/PBQP/EQPS_Campinas_2004/Projeto%202_10.pdf>.
Acessado em 25 março 2007.
MARÇAL, Ana Sofia Cysneiros; FREITAS, Bruno Celso Cunha; SOARES, Felipe Santana
Furtado; MACIEL, Teresa Maria Medeiros; BELCHIOR, Arnaldo Dias. Estendendo o
SCRUM segundo as Áreas de Processo de Gerenciamento de Projetos do CMMI.
CLEI2007: XXXIII Conferencia Latinoamericana de Informática, San Jose, Costa Rica.
Disponível em: <http://www.cesar.org.br/files/file/SCRUMxCMMI-CLEI-2007.pdf>. Acesso27
de agosto de 2007.
SCHWABER, Ken, BEEDLE, Mike. Agile Software Development with SCRUM. Prentice
Hall, 2002.
8 ANEXO A – MODELAGEM YP
EQUIPE PAPÉIS
Cliente Cliente
8) Quais as funcionalidades básicas que o sistema deve ter para que se consiga
administrar o controle de estoque da farmácia?
8.2.2 REQUISITOS
8.2.2.1 Funcionais
• Cadastro de medicamentos;
• Saída de medicamentos;
102
• Geração de relatórios.
8.2.2.2 Não-Funcionais
• Interface WEB;
• Arquitetura em camadas;
OBJETIVO MENSURAÇÃO
8.3 INICIALIZAÇÃO
• Login:
• Cadastro de Medicamentos:
User Stories são pedaços do sistema que o cliente define junto com a
equipe de desenvolvimento. É importante que neste momento o cliente defina quais
são prioridades para estar pronto e funcionando em primeiro. A Tabela 6 abaixo
temos as User Stories do SysFarma com suas respectivas estimativas de tempo:
Lista de User Stories
Incluir funcionalidade de autenticação (restrição)
TA1.1 - Acessar o sistema a partir de um login válido e ativo (autenticação feita
com sucesso);
TA1.2 - Acessar o sistema a partir de um login inválido ou inativo (mensagem
de erro deve ser exibida);
TA1.3 – A partir de um usuário administrador cadastrar novo usuário com
US01
todos os campos obrigatórios (Cadastro efetuado com sucesso);
TA1.4 – A partir de um usuário administrador cadastrar novo usuário sem
informar todos os campos obrigatórios (Cadastro não deve ser efetuado);
TA1.5 - A partir de um usuário administrador alterar dados de um usuário
cadastrado (Alteração efetuada com sucesso);
Estimativa Inicial: 8 horas.
Programar funcionalidades de cadastro de medicamentos
TA2.1 - Cadastrar medicamentos da unidade informando todos os campos
obrigatórios (Cadastro efetuado com sucesso);
TA2.2 - Cadastrar medicamentos da unidade sem informar todos os campos
obrigatórios (Cadastro não deve ser efetuado).
TA2.3 - Alterar dados de um medicamento cadastrado a partir do seu código
US02
ou descrição (Cadastro alterado com Sucesso);
TA2.4 - Excluir um medicamento cadastrado a partir de seu código ou
descrição e que tenham movimentação (Mensagem de erro deve ser exibida);
TA2.5 - Excluir um medicamento cadastrado a partir de seu código ou
descrição e que não tenham movimentação (Exclusão efetuado com sucesso);
Estimativa Inicial: 8 horas
Programar funcionalidades de saída de medicamentos
TA3.1 - Registrar saída de medicamentos da unidade informando todos os
US03 campos obrigatórios (Saída efetuado com sucesso);
TA3.2 - Registrar saída de medicamentos da unidade sem informar todos os
campos obrigatórios (Saída não deve ser efetuado).
105
Estimativa Inicial: 8
Programar funcionalidade de entrada de medicamentos
TA1.1 - Registrar entrada de medicamentos da unidade informando todos os
campos obrigatórios (Entrada efetuado com sucesso);
US04
TA1.2 - Registrar entrada de medicamentos da unidade sem informar todos os
campos obrigatórios (Entrada não deve ser efetuado).
Estimativa Inicial: 4
Programar funcionalidade de pesquisa de medicamentos
TA6.1 - Recuperar dados gerais do medicamento a partir de um código
existente (Dados devem ser retornados com sucesso);
TA6.2 - Recuperar dados gerais do medicamento a partir de um código
inexistente (Mensagem de erro deve ser retornada);
TA6.3 - Recuperar dados gerais do medicamento a partir de uma descrição
existente (Dados devem ser retornados com sucesso);
US06
TA6.4 - Recuperar dados gerais do medicamento a partir de uma descrição
inexistente (Mensagem de erro deve ser retornada);
TA6.5 - Recuperar dados gerais do medicamento a partir de um princípio
existente (Dados devem ser retornados com sucesso);
TA6.6 - Recuperar dados gerais do medicamento a partir de um princípio
inexistente (Mensagem de erro deve ser retornada).
Estimativa Inicial: 8
Programar funcionalidades de relatórios
TA7.1 - Gerar relatório dos medicamentos em estoque;
TA7.2 - Gerar relatório das saídas dos medicamentos por pacientes;
US07 TA7.3 - Gerar relatório de saída dos medicamentos por movimentação;
TA7.4 - Gerar relatório de entrada/saída dos medicamentos a partir de um
período válido.
Estimativa Inicial: 8
8.4 PLANEJAMENTO
Gerente – Jonatas /
Release 02 Diogo
(HORAS/SEMANA)
Jonatas - HTML
- SQL
8
- Java
- Facilidade de Comunicação
Diogo - HTML
- SQL
8
- Java
- Facilidade de Comunicação
8.5 IMPLEMENTAÇÃO
• Acesse o sistema;
o Contém 12 comprimidos;
...
116
Testes de
Aceitação
Páginas *
Unidade
Classes
Stories
Scripts
User
Data Observações
Implementação do modelo de
24/09/07 9 0 0 0 0 0
persistência VO/DAO e conexão.
25/09/07 11 0 0 0 6 0 Inclusão e consulta de Usuários.
26/09/07 12 0 0 0 7 1 Autenticação (login)
Inclusão e consulta de
27/09/07 14 0 0 0 8 0
Medicamentos
Edição de Usuário e
28/09/07 14 0 0 0 8 2
Medicamento.
Tabela 29 – Big Chart
Responsável
Prioridade
Status
Data Risco Providência/Solução
Estudar o assunto,
Uso da
considerando o
tecnologia
24/09 Alta Todos Superado tempo necessário
desconhecida
no plano de
(DAO, VO)
iteração.
Utilizar Foi pesquisado e
tecnologia consultado sobre o
25/09 Hibernate Média Todos Superado assunto com
(desconhecida) pessoas que à
ao sistema dominam.
Foi pesquisado e
Utilização de consultado sobre o
25/09 JSF ao invés Alta Todos Superado assunto com
de JSP. pessoas que à
dominam.
Observações:
• Data da identificação do Risco;
9.1 PREPARAÇÃO
9.2 PAPÉIS
MEMBRO PAPÉIS
9.3 PROCESSO
Sprint. Com isso foi construído uma tabela 3 com as funcionalidades selecionadas
pelo Product Owner juntamente com a equipe para o Sprint 1.
Itens Selecionados
Prioridade Item Descrição Tempo Responsável
Muito Alta
1 Criação do modelo de dados e infra-estrutura 8 Diogo
2 Módulo de Autorização 8 Diogo
3 Cadastro de usuários 8 Diogo
4 Cadastro de Medicamentos 8 Jonatas
Tabela 35 – Itens do Product Backlog selecionadas para o Sprint 1.
Sprint Backlog
Muito Alta
2 - A partir de um usuário
2 administrador cadastrar novo Diogo
usuário sem informar todos os
123
3 - A partir de um usuário
administrador alterar dados de
2 Diogo
um usuário cadastrado (Alteração
efetuada com sucesso).
2 - Cadastrar medicamentos da
unidade sem informar todos os
1 Jonatas
campos obrigatórios (Cadastro
não deve ser efetuado);
3 - Alterar dados de um
medicamento cadastrado a partir
2 Jonatas
do seu código ou descrição
(Cadastro alterado com Sucesso);
4 - Excluir um medicamento
cadastrado a partir de seu código
2 ou descrição e que tenham Jonatas
movimentação (Mensagem de
erro deve ser exibida);
5 - Excluir um medicamento
cadastrado a partir de seu código
1 ou descrição e que não tenham Jonatas
movimentação (Exclusão
efetuado com sucesso).
9.3.1 SPRINT
Figura 25 – Sprint.
Ao final do Sprint foi gerado o gráfico Sprint Burndown, figura 26, que
mostra como foi à execução das tarefas durante o Sprint.
Na revisão do Sprint foi constatado que a maioria das tarefas foi realizada
no tempo estimado. Ficando somente um item em aberto: “4 - Excluir um
medicamento cadastrado a partir de seu código ou descrição e que tenham
movimentação (Mensagem de erro deve ser exibida);”.
Além disso, foi constatada uma situação que não foi prevista na
elaboração das tarefas, que é o impedimento de se cadastrar Usuários com o
atributo usuario igual. O problema foi resolvido sem maiores complicações não
evidenciando qualquer atraso no cronograma do Sprint.
definidas para não haver pausas e atrasos na implementação devido à falta destas
definições.
127
Facesconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<managed-bean>
<managed-bean-name>usuarioMb</managed-bean-name>
<managed-bean-class>br.com.sysfarma.mb.UsuarioMb</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>medicamentoMb</managed-bean-name>
<managed-bean-class>br.com.sysfarma.mb.MedicamentoMb</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>lista_usuarios</from-outcome>
<to-view-id>/listaUsuarios.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>cadastra_usuario</from-outcome>
<to-view-id>/cadastraUsuario.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>cadastra_medicamento</from-outcome>
<to-view-id>/cadastraMedicamento.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>lista_medicamentos</from-outcome>
<to-view-id>/listaMedicamentos.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>principal</from-outcome>
<to-view-id>/principal.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>login</from-outcome>
<to-view-id>/login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Web.xml
<?xml version="1.0"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>sysfarma</display-name>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
128
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<filter>
<filter-name>SysFarmaFilter</filter-name>
<filter-class>br.com.sysfarma.filter.SysFarmaFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SysFarmaFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<context-param>
<param-name>org.ajax4jsf.SKIN</param-name>
<param-value>default</param-value>
</context-param>
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
Persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="sysfarma" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/sysfarma"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.cache.provider_class"
value="org.hibernate.cache.NoCacheProvider"/>
<property name="hibernate.connection.username" value="admin"/>
<property name="hibernate.connection.password" value="admin"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
AbstractDao.java
package br.com.sysfarma.dao;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
129
import br.com.sysfarma.entity.PersistentEntity;
@SuppressWarnings("unchecked")
public List<T> findAll() {
EntityManager em = Manager.getEntityManager();
Query query = em.createQuery(findAllEjbQL);
return query.getResultList();
}
if (t == null)
throw new IllegalArgumentException("Type is null");
EntityManager em = Manager.getEntityManager();
EntityTransaction transaction = em.getTransaction();
try {
transaction.begin();
em.merge(t);
transaction.commit();
} catch (Exception e) {
if (transaction != null && transaction.isActive())
transaction.rollback();
throw new RuntimeException(e);
} finally {
if (em.isOpen())
em.close();
}
}
Dao.java
package br.com.sysfarma.dao;
import java.io.Serializable;
import java.util.List;
import br.com.sysfarma.entity.PersistentEntity;
List<T> findAll();
T findByPk(ID id);
DaoFactory.java
package br.com.sysfarma.dao;
Manager.java
package br.com.sysfarma.dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
131
MedicamentoDao.java
package br.com.sysfarma.dao;
import br.com.sysfarma.entity.Medicamento;
MedicamentoDaoImpl
package br.com.sysfarma.dao;
import br.com.sysfarma.entity.Medicamento;
public MedicamentoDaoImpl() {
super(Medicamento.class);
// TODO Auto-generated constructor stub
}
UsuarioDao.java
package br.com.sysfarma.dao;
import br.com.sysfarma.entity.Usuario;
UsuarioDaoImpl.java
package br.com.sysfarma.dao;
132
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.sysfarma.entity.Usuario;
public UsuarioDaoImpl() {
super(Usuario.class);
}
Medicamento.java
package br.com.sysfarma.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity(name = "medicamento")
public class Medicamento implements PersistentEntity<Long> {
@Id
@Column(name = "id_medicamento", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
PersistentEntity.java
package br.com.sysfarma.entity;
import java.io.Serializable;
Usuario.java
package br.com.sysfarma.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity(name = "usuario")
public class Usuario implements PersistentEntity<Long> {
@Id
@Column(name = "id_usuario", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "tipo", nullable = false)
private Character tipo;
@Column(name = "situacao", nullable = false)
private Character situacao;
@Column(name = "nome", nullable = false)
private String nome;
@Column(name = "usuario", nullable = false)
private String usuario;
@Column(name = "senha", nullable = false)
134
SysFarmaFilter.java
135
MedicamentoMb.java
package br.com.sysfarma.mb;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.richfaces.component.html.HtmlDataTable;
import br.com.sysfarma.dao.DaoFactory;
import br.com.sysfarma.entity.Medicamento;
List<Medicamento> listaMedicamentos;
new FacesMessage(e.getMessage()));
return null;
}
}
UsuarioMb.java
137
package br.com.sysfarma.mb;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.richfaces.component.html.HtmlDataGrid;
import br.com.sysfarma.dao.DaoFactory;
import br.com.sysfarma.dao.UsuarioDao;
import br.com.sysfarma.entity.Usuario;
List<Usuario> listaUsuarios;
|| usuario.getSenha().trim().equals("")) {
Usuario old = dao.findByPk(usuario.getId());
usuario.setSenha(old.getSenha());
}
dao.update(usuario);
listaUsuarios = null;
return "lista_usuarios";
} catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(e.getMessage()));
return null;
}
}
}
139
CadastraMedicamento.jsp
<%@ taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j" %>
<f:view>
<%@include file="menu.jsp" %>
<h:form>
<h:panelGrid columns="2">
<rich:panel style="border:3px; FONT-WEIGHT: bold; BACKGROUND-COLOR: #F1F1F1; width : 631px;">
<h:panelGrid columns="3" style="FONT-FAMILY: 'SansSerif';">
<h:outputLabel value="Código" for="codigo"></h:outputLabel>
<h:inputText id="codigo" value="#{medicamentoMb.medicamento.codigo}" required="true" style="
BACKGROUND-COLOR: #F1F1F1; width : 241px;" requiredMessage="Código é obrigatório!"/>
<h:message for="codigo" style="COLOR: #ff0000;" />
CadastraUsuario.jsp
<%@ taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j" %>
<f:view>
<%@include file="menu.jsp" %>
<h:form>
<h:panelGrid columns="2">
<rich:panel style="border:3px; FONT-WEIGHT: bold; BACKGROUND-COLOR: #F1F1F1; width : 555px;">
</h:panelGrid>
Index.jsp
<jsp:forward page="login.jsf"></jsp:forward>
ListaMedicamentos.jsp
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<f:view>
<%@include file="menu.jsp" %>
<a4j:form >
<a4j:status startText="Processando..." stopText=""/>
<rich:dataTable cellpadding="0" cellspacing="0"
binding="#{medicamentoMb.datatable}"
id="listaMed" rows="7" value="#{medicamentoMb.listaMedicamentos}" var="medicamento" style=" width : 225px;"
onRowMouseOver="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
onRowMouseOut="this.style.backgroundColor='#F1F1F1'">
<f:facet name="header">
<rich:columnGroup>
<rich:column>
<h:outputText value="Código" />
</rich:column>
<rich:column>
<h:outputText value="Descrição" />
141
</rich:column>
<rich:column>
<h:outputText value="Fabricante" />
</rich:column>
<rich:column>
<h:outputText value="Princípio Ativo" />
</rich:column>
<rich:column>
<h:outputText value="Apresentação" />
</rich:column>
<rich:column>
<h:outputText value="Excluir" />
</rich:column>
<rich:column>
<h:outputText value="Editar" />
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:outputText value="#{medicamento.codigo}" />
</rich:column>
<rich:column>
<h:outputText value="#{medicamento.descricao}"/>
</rich:column>
<rich:column>
<h:outputText value="#{medicamento.fabricante}" />
</rich:column>
<rich:column>
<h:outputText value="#{medicamento.principioAtivo}"/>
</rich:column>
<rich:column>
<h:outputText value="#{medicamento.apresentacao}" />
</rich:column>
<rich:column>
<h:commandButton action="#{medicamentoMb.goEditar}" value="Editar" />
</rich:column>
<rich:column>
<h:commandButton action="#{medicamentoMb.actionExcluir}" value="Excluir" />
</rich:column>
</rich:dataTable>
</a4j:form>
</f:view>
listaUsuarios.jsp
<%@ taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j" %>
<style>
.optionList {
height:22px;
}
.vertical-menu-cell {
padding:0px 4px 0px 4px;
}
.label{
font-weight:bold;
}
</style>
<f:view>
<%@include file="menu.jsp" %>
<rich:panel style="border:3px; FONT-WEIGHT: bold; BACKGROUND-COLOR: #F1F1F1; width: 955px;">
<f:facet name="header">
<h:outputText value="Usuários"></h:outputText>
</f:facet>
<h:form>
142
Login.jsp
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%>
<style>
.box {
BACKGROUND-COLOR: #F1F1F1;
height:100px;
width: 200px;
FONT-SIZE: small; FONT-WEIGHT: bold
text-align:center;
}
</style>
<f:view>
<h:graphicImage value="/imagens/inee.jpg"/>
<h:form>
<br>
<rich:panel id="login" styleClass="box" style="border:3px;height : 179px; width : 501px;">
<h:outputText value="Acesse o SysFarma com o seu login" style="FONT-SIZE: small; FONT-WEIGHT:
bold;"/><br>
<br><h:messages style="COLOR: #ff0000;"/>
<h:panelGrid columns="2">
<h:outputLabel value="Usuário" for="usuario" style="FONT-SIZE: small;"></h:outputLabel>
<h:inputText id="usuario" value="#{usuarioMb.usuario.usuario}" required="true"
style="BACKGROUND-COLOR: #F1F1F1; COLOR: #000000; width : 241px;" requiredMessage="Usuário é obrigatório!"/>
<h:outputLabel value="Senha" for="nome" style="FONT-SIZE: small; COLOR:
#000000;"></h:outputLabel>
<h:inputSecret id="senha" value="#{usuarioMb.usuario.senha}" required="true"
style="BACKGROUND-COLOR: #F1F1F1; COLOR: #000000; width : 241px;" requiredMessage="Senha é obrigatório!"/>
<h:commandButton id="btn" action="#{usuarioMb.actionLogin}" value="Acessar"/>
</h:panelGrid>
</rich:panel>
</h:form>
</f:view>
Menu.jsp
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
143
<style>
.optionList {
height:22px;
}
.vertical-menu-cell {
padding:0px 4px 0px 4px;
}
.box {
background-color: #F1F1F1;
height:100px;
width: 200px;
text-align:center;
}
</style>
<f:subview id="menu">
<h:graphicImage value="/imagens/inee.jpg"/>
<h:form>
<h:panelGrid columns="1" columnClasses="optionList" cellspacing="0" cellpadding="0">
<rich:dropDownMenu style="border:1px solid #{a4jSkin.panelBorderColor}" value="Usuários"
rendered="#{usuarioMb.usuarioLogin.tipo == 'A'}" direction="bottom-right" jointPoint="tr">
<rich:menuItem value="Listar" action="lista_usuarios"/>
<rich:menuItem value="Cadastrar" action="#{usuarioMb.goInserir}" />
</rich:dropDownMenu>
<rich:dropDownMenu style="border:1px solid #{a4jSkin.panelBorderColor}"
value="Medicamentos" direction="bottom-right" jointPoint="tr">
<rich:menuItem value="Listar" action="lista_medicamentos"/>
<rich:menuItem value="Cadastrar" action="#{medicamentoMb.goInserir}"/>
</rich:dropDownMenu>
<rich:dropDownMenu style="border:1px solid #{a4jSkin.panelBorderColor}" value="Opções"
direction="bottom-right" jointPoint="tr">
<rich:menuItem value="Principal" action="principal"/>
<rich:menuItem value="Logout" action="#{usuarioMb.actionLogout}"/>
</rich:dropDownMenu>
</h:panelGrid>
</h:form>
</f:subview>
Principal.jsp
<%@ taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j" %>
<style>
.box {
background-color:#F1F1F1;
text-align:center;
FONT-WEIGHT: bold;
}
.cell {
vertical-align:top;
FONT-WEIGHT: bold;
}
.optionList {
height:22px;
}
.vertical-menu-cell {
padding:0px 4px 0px 4px;
}
</style>
<f:view>
<%@include file="menu.jsp" %>
144
12 ANEXO E – ARTIGO
1. Introdução
A sociedade está cada vez mais dependente da indústria de desenvolvimento de software.
Porém, devido aos diversos problemas que esta área possui, como alto custo de
implementação, alta complexidade e falta de manutenção, não conseguem atender a demanda
do mercado.
Com isso, o interesse no estudo a aplicação de metodologias de desenvolvimento de software
tem aumentado. Sommerville (2003, p.147) demonstra que a melhoria no processo de
desenvolvimento de software aperfeiçoa a qualidade do produto final; e como destaca Côrtes
(2001, p.20) a “preocupação com a qualidade deixou de ser um diferencial competitivo e
passou a ser um pré-requisito básico para participação no mercado”.
Dentre as metodologias temos duas linhas distintas, as tradicionais e as ágeis. Enquanto as
tradicionais prezam por uma quantidade excessiva de documentação as ágeis prezam por ter o
software funcionando com o mínimo de documentação necessária. Portanto, adotar processos
mais simplificados, como as metodologias tem despertado um grande interesse entre as
comunidades de desenvolvimento de software. Enquanto que as metodologias tradicionais
têm seus processos baseados na produção de grande quantidade de documentação e de
modelos para guiar o processo de desenvolvimento (FOWLER, 2001).
Um exemplo entre as metodologias ágeis pode-se citar YP – easYProcess (easYProcess,
2006), que é uma metodologia desenvolvida através de um projeto da Universidade Federal
de Campina Grande (UFCG). Por ser um método recente, com pouca pesquisa realizada bem
como sua comprovação acadêmica, surgiu a idéia da realização de um estudo mais profundo a
respeito da metodologia ágil easYProcess. Por outro lado, outra metodologia que será
151
abordada neste trabalho é a Scrum (Scrum Alliance, 2007), onde pesquisas mostram sua
grande aceitação pela comunidade de desenvolvimento de software internacional.
2. Metodologias de Desenvolvimento de Software
Metodologias de desenvolvimento de Software (ou Processo de Software) é o conjunto de
atividades, ordenadas ou não, com a finalidade de produzir um software de qualidade. O
resultado do processo é um produto que reflete a forma como o processo foi realizado.
Embora existam vários processos de desenvolvimento de software, existem atividades comuns
a todos eles [Sommerville (2004)]:
• Especificação do software: definição do que o sistema deve fazer; definição dos
requisitos e das restrições do software;
• Desenvolvimento do software: projeto e implementação do software, o sistema é
desenvolvido conforme sua especificação;
• Validação do software: o software é validado para garantir que as funcionalidades
implementadas estejam de acordo com o que especificado;
• Evolução do software: evolução do software conforme a necessidade de cliente.
O desafio mais comum dentro do Desenvolvimento de Software é entregar um produto que
atenda as reais necessidades do cliente, dentro do prazo e orçamento previsto. Porém, muitas
organizações desenvolvem software sem usar nenhum Processo de Desenvolvimento.
Geralmente porque os Processos Tradicionais não são adequados às realidades das
organizações. O resultado da falta na utilização de Processos
2.1. Metodologias Tradicionais
Na década de 70 a atividade de “desenvolvimento de software” era executada de forma
desorganizada, desestruturada e sem planejamento, gerando um produto final de má
qualidade, que não correspondia com as reais necessidades do cliente (PRESSMAN, 2001). A
partir deste cenário surgiu a necessidade de tornar o desenvolvimento de software como um
processo estruturado, planejado e padronizado (NETO, 2004).
As metodologias consideradas tradicionais também são conhecidas como “pesadas” ou
orientadas a documentação. Têm como característica marcante dividir o processo de
desenvolvimento em etapas e/ou fases bem definidas. Segundo SOARES (2004), essas
metodologias surgiram em um contexto de desenvolvimento de software muito diferente do
atual, baseado apenas em um mainframe e terminais burros. Na época, o custo de fazer
alterações era muito alto, uma vez que o acesso aos computadores era limitado e não existiam
modernas ferramentas de apoio ao desenvolvimento do software, como depuradores e
analisadores de código. Por isso, o software era todo planejado e documentado antes de ser
implementado.
Muitas metodologias pesadas são desenvolvidas em cima do Modelo em Cascata
(SOMMERVILLE, 2004). É um modelo em que as fases definidas são seguidas de maneira
linear (LARMAN, 2002). Cada fase tem associado ao seu término uma documentação padrão
que deve ser aprovada para que se inicie a etapa imediatamente posterior. Cada fase concluída
152
gera um marco, que geralmente é algum documento, protótipo do software ou mesmo uma
versão do sistema (NETO, 2004). De uma forma geral fazem deste modelo as etapas de
análise de requisitos, projeto do software, geração de código e testes.
2.2. Metodologias Ágeis
A partir da década de 90 começaram a surgir novos métodos sugerindo uma abordagem de
desenvolvimento ágil, em que os processos adotados tentam se adaptar às mudanças,
apoiando a equipe de desenvolvimento em seu trabalho (FAGUNDES, 2005). As
metodologias ágeis surgiram como uma reação às metodologias pesadas (FOWLER, 2005) e
tiveram como principal motivação criar alternativas para o Modelo em Cascata (HILMAN,
2004).
O termo “Metodologia Ágil” tornou-se popular em fevereiro de 2001, quando um grupo de 17
especialistas (referências mundiais em desenvolvimento de software) criou a Aliança Ágil e
estabeleceram o Manifesto Ágil para o desenvolvimento de software (HIGHSMITH, 2002).
Conforme Highsmith (2002), os valores do Manifesto Ágil são:
• Indivíduos e interações valem mais que processos e ferramentas;
• Um software funcionando vale mais que documentação extensa;
• A colaboração do cliente vale mais que a negociação de contrato;
• Responder a mudanças vale mais que seguir um plano.
De acordo com Fagundes (2005), para auxiliar as pessoas a compreender o enfoque do
desenvolvimento ágil, os membros da Aliança Ágil refinaram as filosofias contidas em seu
manifesto em uma coleção de doze princípios, aos quais os métodos ágeis de
desenvolvimento de software devem se adequar. Estes princípios são (COCKBURN, 2000):
1. A prioridade é satisfazer ao cliente através de entregas de software de valor contínuas
e freqüentes;
2. Entregar softwares em funcionamento com freqüência de algumas semanas ou meses,
sempre na menor escala de tempo;
3. Ter o software funcionando é a melhor medida de progresso;
4. Receber bem as mudanças de requisitos, mesmo em uma fase avançada, dando aos
clientes vantagens competitivas;
5. As equipes de negócio e de desenvolvimento devem trabalhar juntas diariamente
durante todo o projeto;
6. Manter uma equipe motivada fornecendo ambiente, apoio e confiança necessário para
a realização do trabalho;
7. A maneira mais eficiente da informação circular dentro da equipe é através de uma
conversa face a face;
8. As melhores arquiteturas, requisitos e projetos provêm de equipes organizadas;
153
Como podemos perceber na tabela 1, apenas 1 princípio foi parcialmente satisfatório pelo
Scrum, enquanto os demais foram satisfatórios. Enquanto no YP obtemos 3 princípios como
parcialmente satisfatórios.
A metodologia YP se destaca com suas práticas sistemáticas dando um grande valor a
engenharia de processos, como podemos perceber na análise comparativa do princípio 9. Já a
metodologia Scrum da um maior destaque na gerencia do projeto onde reuniões diárias
acontecem durante o Sprint favorecendo o controle do projeto pelo ScrumMaster.
Na prática as duas modelagens atendem suas necessidades. O YP por ser uma metodologia
voltada para projetos acadêmicos é mais detalhado em documentos e artefatos. Já o Scrum que
é mais voltado para a gerência do processo de desenvolvimento se destaca mais em aspectos
de gerência e organização da equipe durante o processo.
Notamos que em muitos aspectos as duas metodologias se equivalem. Como por exemplo: A
definição dos requisitos em YP se dá na construção do documento de visão onde serão listadas
e geradas as Users Stories, No Scrum, a definição dos requisitos acontece com a criação do
Product Backlog a partir da fase de preparação.
156
GARCIA, Francile Procópio; LIMA, Aliandro Higino Guedes; FERREIRA, Danilo de Sousa;
JÚNIOR, Fábio Luiz Leite; ROCHA, Giselle Regina Chaves da; MENDES, Gustavo Wagner
157
Diniz; PONTES, Renata França de; ROCHA, Verlaynne Kelley da Hora; DANTAS, Vinicius
Farias. easYProcess – Um Processo de Desenvolvimento de Software. Universidade Federal
de Campina Grande. Campina Grande: 2007.
MARÇAL, Ana Sofia Cysneiros; FREITAS, Bruno Celso Cunha; SOARES, Felipe
Santana Furtado; MACIEL, Teresa Maria Medeiros; BELCHIOR, Arnaldo Dias.
Estendendo o SCRUM segundo as Áreas de Processo de Gerenciamento de
Projetos do CMMI. CLEI2007: XXXIII Conferencia Latinoamericana de Informática,
San Jose, Costa Rica. Disponível em:
<http://www.cesar.org.br/files/file/SCRUMxCMMI-CLEI-2007.pdf>. Acesso27 de
agosto de 2007.
SOARES, Michel dos Santos. Comparação entre Metodologias Ágeis e Tradicionais para
o Desenvolvimento de Software. 2004. Disponível em:
<http://www.dcc.ufla.br/infocomp/artigos/v3.2/art02.pdf> . Acessado em 11 janeiro 2007.
SOMMERVILLE, Ian. Engenharia de Software. São Paulo: Addison-Wesley, 2003.