






















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Artigo Científico apresentado como requisito parcial para obtenção do título de Especialista em Gestão de Tecnologia da Informação do Centro Universitário Barriga Verde – UNIBAVE ORIENTADOR: ALESSANDRO ZANINI
Tipologia: Manuais, Projetos, Pesquisas
1 / 30
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Lorival Warmeling Matias 1
Resumo:
Este artigo apresenta métodos que podem ser aplicados no desenvolvimento de software. Inicialmente é feito um detalhamento de alguns dos métodos de desenvolvimento tradicionais e ágeis, e por último, como esse artigo é bibliográfico e comparativo, é apresentado um posicionamento sobre esses métodos e como aplicá-los em uma empresa de software.
Os resultados obtidos foram conclusivos, foi possível verificar a relação entre as metodologias ágeis: FDD, XP e SCRUM, os modelos tradicionais: sequencial linear, prototipagem, clássico, incremental, espiral, RUP e RAD, e a relação entre ágil e tradicional.
Foi possível verificar que indiferente da metodologia escolhida, o que deve ficar definido é o processo, suas relações com os papéis (pessoas) e os valores/práticas/regras relacionadas, desta forma, a empresa deve possuir essa metodologia bem definida e para isso deve escolher qual método melhor se adapta, para garantir a conclusão dos projetos de desenvolvimento de software.
Palavras-chave: Desenvolvimento de Software. Desenvolvimento Clássico. Desenvolvimento Ágil.
Introdução O termo engenharia de software surgiu em 1968 em uma conferência organizada para discutir problemas no desenvolvimento de software, a experiência inicial do desenvolvimento informal mostrou-se ineficaz, com muitos atrasos e alto custo. Novas técnicas e métodos eram necessários para controlar as etapas de desenvolvimento, principalmente em sistemas grandes e complexos (SOMMERVILLE, 2007).
A abordagem inicial para elaboração desses métodos era produzir software de qualidade, dentro do prazo e com custos previsíveis. Métodos como a análise estruturada, desenvolvida na década de 70, tentaram identificar componentes funcionais básicos de um sistema, esse método foi complementado por métodos orientados a
(^1) Dados do autor ao final do artigo
objetos nas décadas de 80 e 90. Todas essas abordagens foram integradas em uma única abordagem chamada Unified Modeling Language (UML) (SOMMERVILLE, 2007).
Esses métodos são utilizados até os dias atuais devido a sua vasta abordagem na condução dos levantamentos de requisitos, controles de projetos, controle sobre o desenvolvimento, controle sobre a manutenção e finalização dos projetos (SBROCCO; MACEDO, 2012).
Em contrapartida, como o desenvolvimento de software não se assemelha ao desenvolvimento de um produto físico, por exemplo, hardware, onde a matéria-prima é palpável e a dificuldade é em reproduzi-lo, com o software, o problema principal é no desenvolvimento, já que sua replicação tem praticamente custo zero. Pensando nisso, na década de 90, iniciaram-se estudos para definição de metodologias que focaram nos fatores humanos e no atendimento das expectativas dos clientes e não meramente em atender a burocracia do processo, essa técnica ficou conhecida como metodologia leve. Como a aplicação dessa técnica teve retorno positivo, em 2001, seus idealizadores promoveram um manifesto reunindo todas essas práticas que são conhecidas atualmente como métodos ágeis (BASSI FILHO, 2008).
Como o objetivo deste artigo é avaliar os métodos de desenvolvimento para aplicação em uma empresa de desenvolvimento de software, serão apresentados os métodos tradicionais e ágeis e por fim será feito uma comparação entre eles e como aplicá-los.
Métodos de desenvolvimento tradicionais É fato que um processo de qualidade gere produtos de qualidade, seguindo essa premissa, os métodos tradicionais buscam uma organização dos processos para garantir a qualidade, prazo e custo aceitáveis.
A idéia de aprimoramento de processos veio originalmente do engenheiro William Edwards Deming, que trabalhou na indústria japonesa depois da segunda guerra mundial com o objetivo de aumentar a qualidade dos produtos, Deming
A modelagem desse método inicia fazendo o levantamento de todos os requisitos para todas as partes do sistema e é necessária uma análise de alto nível e também um conhecimento estratégico sobre regras de negócio. Nesse caso o analista precisa ter tanto domínio sobre as informações do software quanto das funções necessárias, nesse método os requisitos do sistema são documentados e revistos pelo cliente.
O projeto é um processo de múltiplos passos que engloba os seguintes temas: estrutura de dados; arquitetura do software; representação da interface e detalhes procedimentais.
Inevitavelmente ao colocar o software em uso, são detectadas omissões ou erros nos requisitos levantados inicialmente, erros de programação ou ainda a necessidade de adicionar novas funcionalidades, desta forma, deve haver uma evolução do software para que o mesmo se torne útil. Outro aspecto desse método é que o programa executável somente é liberado quando todas as funcionalidades estiverem desenvolvidas, o que pode ocasionar divergências que serão vistas somente quando o sistema for liberado (SOMMERVILLE, 2007).
Modelo de prototipagem É quando o cliente define os objetivos do sistema, mas não faz o detalhamento das entradas, processamento e saídas. Partes do software são desenvolvidas e já liberadas, permitindo ao cliente interagir com as entradas e saídas tornando assim a descoberta e/ou melhoria de requisitos mais fáceis.
Esse modelo estabelece o ciclo de processos: ouvir o cliente, construir/revisar o protótipo e o cliente testar o protótipo, esse ciclo pode ser reiniciado tantas vezes quanto for necessário.
Por mais que o cliente e o desenvolvedor gostem desse tipo de método, ele pode apresentar sérios problemas (SBROCCO; MACEDO, 2012): Quando uma parte do software é liberada, o cliente acredita ser a versão completa, e normalmente reclama se for exposta a
necessidade de ajustes para garantir a qualidade ou a evolução das funcionalidades. A fim de liberar mais rapidamente, o desenvolvedor desconsidera pontos importantes, como por exemplo: linguagem de programação ou sistema operacional, ficando assim, limitado ao que conhece ou está facilmente disponível. E que pode, ao passar do tempo, tornar- se parte integral do sistema por desconhecimento dos pontos frágeis do desenvolvimento.
Modelo clássico Esse modelo surgiu em uma época diferente da atual onde imperava os mainframes e os chamados "terminais burros", onde os desenvolvimentos e alterações tinham alto custo, devido às ferramentas de desenvolvimento não possuírem, por exemplo, depuradores de código. Devido a isso o planejamento e a documentação eram amplamente utilizados.
Composto de etapas de fácil entendimento foi o primeiro processo de desenvolvimento de software publicado (SBROCCO; MACEDO, 2012), segue abaixo imagem demonstrando as etapas:
Figura 1 - Modelo clássico.
Desenvolvimento em espiral Esse modelo combina técnicas de prototipagem com aspectos controlados e sistemáticos do modelo sequencial linear. Esse modelo oferece suporte ao desenvolvimento de verões incrementais, como por exemplo, em versões iniciais pode ser prototipagem, em versões finais pode ser entregue funcionalidades ainda mais completas.
A estrutura do modelo espiral é distribuída em atividades normalmente conhecidas como regiões de tarefa, segundo Pressman (2001 apud Sbrocco e Macedo, 2012, p.66), existem de três a seis destas regiões de tarefas, conforme descrito a seguir:
Esse modelo pode ser aplicado tanto para pequenos, quanto grandes projetos, cada tarefa pode definir um conjunto de atividades e essas variam dependendo do tamanho do projeto. Diferentemente do modelo clássico, o modelo espiral pode ser utilizando durante todo o clico de desenvolvimento do software, visto que sempre requer um novo planejamento após a realimentação da avaliação do cliente. Da mesma forma que ocorre com outros modelos clássicos, é fundamental a avaliação apurada dos ricos para garantir aos clientes que o modelo é sustentável, a imagem a seguir ilustra o desenvolvimento em espiral.
Figura 3 - Modelo espiral, segundo Sbrocco e Macedo (2012).
IBM Rational Unified Process® (RUP) Esse modelo foi inicialmente desenvolvido pela Rational Corporation e em seguida adquirido pela IBM. É uma plataforma de processos de desenvolvimento de software onde tarefas são distribuídas para garantir que a qualidade esteja de acordo com as necessidades dos clientes.
Esse modelo possui três perspectivas que demonstram como são relacionadas às atividades, a distribuição do tempo e as práticas durante a sua execução (SOMMERVILLE, 2007): Estática - eixo vertical: representa as atividades do fluxo de trabalho (workflow), são elas:
Segue imagem ilustrando as fases do RUP®:
Figura 4 - Fases do RUP®
Fase de iniciação Nessa fase e feito o levantamento do esforço, riscos, as exigências que devem ser analisadas antes de dar sequência no projeto. E importante também nesse momento fazer a formulação do escopo do projeto. Essa fase deve proporcionar um caminho no gerenciamento dos requisitos e no gerenciamento do projeto. Se o projeto não tiver aderência ao negócio, o mesmo pode ser cancelado nessa fase.
Fase de elaboração Nesse momento é desenvolvido o entendimento sobre o projeto, é definido e validado a arquitetura a ser utilizada (execução, desenho e implementação da fase de construção). Ao final dessa fase tem-se uma descrição dos requisitos (casos do uso da UML), da arquitetura e um plano de desenvolvimento.
Fase de construção Nessa fase é feito a elaboração do projeto, programação e os testes, desta forma, não é interessante adicionar processos ou ferramentas nesse momento,
para assim, garantir um processo estável. Nessa fase ainda existe um esforço, principalmente nas primeiras interações, de design e um contato muito próximo com o cliente e os demais stakeholders. Ao final dessa fase tem-se um sistema do software desenvolvido juntamente a documentação para ser liberara para os usuários.
Fase de transição Nessa fase são finalizados todos os materiais que serão disponibilizados aos usuários finais, como também é feito os testes das funcionalidades diretamente na base do cliente. Nesse momento é criado um release do produto. Também são recebidos os feedbacks dos usuários para fazer os ajustes necessários. Idem a fase de construção, não se deve adicionar processos ou ferramentas, isso pode ser feito nos próximos projetos. Ao final dessa fase, tem- se o software documentado e funcionando na base operacional.
A abordagem RAD (Rapid Application Development) Desenvolvimento rápido de aplicação, ou simplesmente RAD, utiliza o método incremental e destaca o ciclo extremamente curto de desenvolvimento, esse método é parecido com o desenvolvimento linear, só que utilizando componentes. Se o entendimento dos requisitos e do objetivo do projeto e claro e simplificado, é possível utilizar esse método para construção de aplicações em curto espaço de tempo.
A abordagem RAD é dividida em cinco fases, conforme a seguir:
O conceito de gestão orientada a pessoas requer um time muito eficaz, que interajam entre si de forma eficiente. Já no processo tradicional isso não se faz necessário, visto que o conhecimento sobre o que deve ser feito encontra-se no processo e não nas pessoas, desta forma, pessoas são partes substituíveis do projeto (SBROCCO; MACEDO, 2012).
Com base na crescente necessidade de mais dinamismo das empresas e respostas mais rápidas as mudanças do mercado, a aplicação de metodologias ágeis acaba sendo mais eficientes, pois vem de encontro com essas necessidades.
A seguir serão apresentadas algumas das técnicas de desenvolvimento ágil.
Feature Driven Development (FDD) A metodologia FDD foi criada em Singapura nos anos 90, mais especificamente entre 97 e 98, foi utilizada pela primeira vez para o desenvolvimento de um sistema bancário internacional, que já havia sido considerado inviável dentro do prazo determinado (SBROCCO; MACEDO, 2012).
A modelagem FDD divide os papeis em três grandes grupos (BASSI FILHO, 2008):
(^3) Toolsmith é o responsável por criar ferramentas de apoio à equipe de desenvolvimento e testes. Pode atuar também como centralizador de conhecimento gerenciando sites intranet (Wiki). Normalmente é atribuição de programadores júnior ou recém graduados.
Os processos do FDD são compostos por cinco etapas que abrangem as fases de modelagem e implementação (BASSI FILHO, 2008), são elas:
Essa metodologia também possui um conjunto de oito práticas recomendadas, que combinadas, aumentam a integração e o entendimento do projeto (BASSI FILHO, 2008), são elas: modelagem de domínio de objetos, desenvolvimento por funcionalidade, propriedades de classes, equipes por funcionalidade, inspeções, versões com regularidade, gerenciamento de configuração e relatórios de progresso.
Extreme Programming (XP) A metodologia XP foi criada por Kent Beck em 1996. Esse método foi resultado de um projeto crítico na empresa Chrysler, ela possuía um sistema de folha de pagamento com sérios problemas de custo e prazo, que após a aplicação das técnicas de Beck, o projeto que foi iniciado do zero, foi entregue com excelente qualidade e dentro do prazo (BASSI FILHO, 2008).
de um desenvolvimento mais complexo para melhorar o sistema, esse deve ser desenvolvido quando for necessidade do cliente. Por outro lado, a simplicidade não quer dizer desenvolver de qualquer jeito, sem levar em consideração recursos que poderão comprometer o sistema ou o processo do cliente no futuro.
Práticas No primeiro livro de Beck foram propostas doze práticas, que transformam os valores em ações e segundo ele, devem ser seguidas (BASSI FILHO, 2008), são elas: versões pequenas, jogo do planejamento, design simples, programação em pares, testes, refatorações, integração continua, propriedade coletiva do código, ritmo sustentável, cliente presente, metáfora e padrões de código.
Uma consideração importante sobre a prática de teste, ou desenvolvimento guiado por teste, essa prática sugere que toda funcionalidade
tenha um teste automatizado (testes unitários), em algumas situações é necessário o teste por aceitação, que são aprovados pelo cliente.
Após algum tempo, grupos que utilizam essa metodologia entenderam que era necessário uma adaptação dessas práticas, pois não era possível sua aplicação integral, desta forma, essas práticas foram reformuladas e derem origem a dois grupos chamados: práticas primárias e práticas corolário.
As praticas primárias são descritas por treze práticas que ajudam na introdução da metodologia, são elas: integração contínua, programação em pares, trabalho energizado, desenvolvimento dirigido por testes, sentar junto, time completo, área de trabalho informativa, histórias, ciclo semanal, ciclo trimestral, folga, build ágil e design incremental.
As práticas corolário, divididas em onze, são de aplicação mais difícil, principalmente sem ter aplicado as práticas primárias, são elas: código compartilhado, envolvimento real com o cliente, implantação incremental, continuidade da equipe, redução da equipe, análise de causa inicial, código e testes, repositório de código unificado, implantação diária, contrato de escopo negociável e pague-pelo-uso.
Papéis Os papéis são importantes dentro da equipe, porém não necessariamente todos precisam coexistir ou serem atribuídos as mesmas pessoas, Beck descreveu em seu livro os seguintes papéis (BASSI FILHO, 2008) e (SBROCCO; MACEDO, 2012):
Papéis São divididos em três:
Cerimônias Ao longo da sprint existem pelo menos quatro cerimônias (reuniões):
Como no Scrum não tem a definição de tempo das tarefas, e sim do tamanho delas, existem uma técnica que pode ser utilizada para medir o tamanho das tarefas, é o Planning Poker ou pôquer do planejamento.
Nessa técnica a equipe senta ao redor de uma mesa e o facilitador apresenta a funcionalidade que deve ser desenvolvida, após o entendimento de todos sobre a tarefa em questão, cada membro escolhe uma das cartas e coloca na mesa virada para baixo, assim que todos escolherem as cartas, elas são apresentadas e a equipe e essa deve chegar a um consenso entre os valores, em que cada integrante pode expor os motivos pela seleção e assim convencer o restante da equipe, assim que houver consenso o número selecionado é associado à funcionalidade. Essa mesma sequência é feita com todas as funcionalidades da SprintBacklog.
Figura 5 - Cartas do pôquer do planejamento.
Existem cartas especiais, como por exemplo, a zero que significa que a funcionalidade tem um tamanho insignificante e que levaria minutos para ser realizada, a carta com interrogação indica que o integrante não tem noção de quanto tempo levaria para a tarefa ser realizada e por último a xícara de café, que sugere ao grupo uma pausa, pois existe um cansaço que pode