FACULDADE NORTE CAPIXABA DE SÃO MATEUS
CURSO SUPERIOR TECNOLÓGICO EM ANÁLISE E DESENVOLVIMENTO DE
SISTEMAS
ALCEMIR MARTINS DA ROCHA
YASMIN CAVALCANTE DE SOUZA SOBRINHO
A UTILIZAÇÃO DO EXTREME PROGRAMMING COMO FERRAMENTA DE
APOIO DESENVOLVIMENTO DE SOFTWARE PARA DESKTOPS, EM
EMPRESAS DE PEQUENO PORTE.
SÃO MATEUS
2012
1
ALCEMIR MARTINS DA ROCHA
YASMIN CAVALCANTE DE SOUZA SOBRINHO
EXTREME PROGRAMMING
2
ALCEMIR MARTINS DA ROCHA
YASMIN CAVALCANTE DE SOUZA SOBRINHO
A UTILIZAÇÃO DO EXTREME PROGRAMMING COMO FERRAMENTA DE
DESENVOLVIMENTO DE SOFTWARE PARA DESKTOPS, EM EMPRESAS DE
PEQUENO PORTE.
Trabalho de Conclusão de Curso apresentado ao
programa
de
Graduação
em
Análise
e
Desenvolvimento de sistemas da Faculdade Norte
Capixaba de São Mateus, como requisito parcial para
obtenção do grau de Tecnólogo em Análise e
Desenvolvimento de Sistemas.
Orientador: Prof. Temístocles Alves Rocha.
SÃO MATEUS
2012
3
FICHA CATALOGRÁFICA
4
ALCEMIR MARTINS DA ROCHA
YASMIN CAVALCANTE DE SOUZA SOBRINHO
EXTREME PROGRAMMING: A UTILIZAÇÃO DO EXTREME PROGRAMMING
COMO
FERRAMENTA
DE
DESENVOLVIMENTO
DE
SOFTWARE
PARA
DESKTOPS, EM EMPRESAS DE PEQUENO PORTE.
Trabalho de Conclusão de Curso apresentado ao Programa de Graduação em Análise e
Desenvolvimento de Sistemas da Faculdade Norte Capixaba de São Mateus, como requisito parcial
para obtenção do grau de Tecnólogo em Análise e Desenvolvimento de Sistemas.
Aprovado em XX de Dezembro de 2012
COMISSÃO EXAMINADORA
_________________________________________________
Prof° Temístocles Alves Rocha
Faculdade Norte Capixaba de São Mateus
Orientador
_________________________________________________
Prof° XXXXXXXXXXXXXXXXXXX
Faculdade Norte Capixaba de São Mateus
Membro 1
_________________________________________________
Profº XXXXXXXXXXXXXXXXXXX
Faculdade Norte Capixaba de São Mateus
Membro 2
5
Dedicamos aos nossos familiares, que
nos apoiaram e fizeram-se presentes em
todos os momentos dessa jornada.
6
À Deus, que plantou o sonho em nós, e
nos deu forças para buscar e conquistar
esse objetivo. Pois, mais importante que o
lugar que ocupas em nós, é a intensidade
de tua presença em tudo que fazemos.
Aos familiares, amigos e professores, pois
poucas foram às oportunidades que
tivemos para agradecer-lhes pelo apoio,
compreensão e incentivo.
7
Perder tempo em aprender coisas que
não interessam, priva-nos de descobrir
coisas interessantes.
Carlos Drummond de Andrade
RESUMO
O desenvolvimento deste trabalho tem como objetivo mostrar o grau de eficiência no
desenvolvimento de softwares com a utilização de metodologias de desenvolvimento
ágil, onde o modelo denominado de Extreme Programming – XP foi determinado
como foco. Para o acompanhamento desse modelo há uma necessidade da
utilização de práticas e valores determinados pela XP, sendo assim, em um
processo de desenvolvimento, a equipe guiada por esta metodologia deve possuir 4
características essenciais: conhecimento, vontade, capacidade e principalmente
competência. Esta pesquisa apresenta também como a utilização da XP pode
reduzir custos, ser ágil, garantir eficiência e eficácia em um projeto. Esse modelo
permite aos stakeholders uma ampla visão do que e como pode ser desenvolvido,
pois o fato de possuir flexibilidade no quesito mudanças tornam os resultados
precisos e satisfatórios. A presente pesquisa abrangeu conceitos de administração,
software, evolução de hardware, SIG – Sistema de Informações Gerenciais.
Desenvolvemos também um questionário que foi respondido por um conceituado
profissional da área tecnológica, José Eduardo Campos Nogueira, conhecido
informalmente como Duda Nogueira. Concluímos que apenas o fato de codificar em
várias linguagens não garante a qualidade nos resultados, existe toda uma estrutura
de trabalho deve ser executada de forma harmônica, para que um resultado positivo
seja alcançado.
PALAVRAS-CHAVE: Softwares. Extreme Programming. XP. Desenvolvimento
LISTA DE FIGURAS
FIGURA 1 - EXEMPLO DE ÁREAS ATUANTES DE UM SIG –
SISTEMA DE INFORMAÇÕES GERENCIAIS
24
FIGURA 2 - ENIAC - ELETRONIC NUMERICAL INTEGRATOR AND
COMPUTER.
27
FIGURA 3 - CAMADAS DA ENGENHARIA DE SOFTWARE
27
31
FIGURA 4 – MODELO EM CASCATA.
FIGURA 5 - MODELO INCREMENTAL.
32
32
32
FIGURA 6 - MODELO RAD.
33
35
FIGURA 7 - ETAPAS DO PROCESSO DE PROTOTIPAGEM
36
FIGURA 8 - MODELO ESPIRAL.
37
FIGURA 9 - MODELO DESENVOLVIMENTO CONCORRENTE.
38
FIGURA 10 - LOCALIZAÇÃO DE SÃO MATEUS.
47
8
SUMÁRIO
1
INTRODUÇÃO.................................................................................................08
13
1.1
JUSTIFICATIVA..............................................................................................09
13
1.2
DELIMITAÇÃO DO TEMA.............................................................................10
14
1.3
FORMULAÇÃO DO PROBLEMA ..................................................................11
14
1.4
OBJETIVO.......................................................................................................12
15
1.4.1 OBJETIVO GERAL............................................................................................. 15
1.4.2 OBJETIVO ESPECÍFICO..................................................................................... 15
1.5
HIPÓTESES....................................................................................................13
16
1.6
META..............................................................................................................14
16
1.7
METODOLOGIA............................................................................................. 16
1.7.1 CLASSIFICAÇÃO DA PESQUISA.......................................................................... 16
1.7.2 TÉCNICAS PARA COLETA DE DADOS................................................................. 17
1.7.3 FONTES PARA COLETA DE DADOS.....................................................................17
1.7.4 CARACTERIZAÇÃO DA AMOSTRA PESQUISADA.................................................. 18
1.7.5 INSTRUMENTO PARA COLETA DE DADOS.............................................................18
1.7.6 POSSIBILIDADE DE TRATAMENTO E ANÁLISE DOS DADOS...................................18
2
REFERENCIAL TEÓRICO.............................................................................20
2.1
INTRODUÇÃO........................................................................................
20
2.2
ADMINISTRAÇÃO GERAL..................................................................
20
2.3
GESTÃO EM AMBIENTES DE TI..........................................................
21
2.3.1 SIG – SISTEMAS DE INFORMAÇÕES GERENCIAIS......................................
2.4
PAPEL EVOLUTIVO DO HARDWARE – GERAÇÃO DE
22
24
COMPUTADORES..............................................................................
2.5
O PAPEL EVOLUTIVO DO SOFTWARE..................................................
27
20
2.5.1 SOFTWARE.................................................................................................
28
18
2.6
ENGENHARIA DE SOFTWARE – UMA TECNOLOGIA EM CAMADAS...... 30
18
2.7
MODELOS PRESCRITIVOS DE PROCESSO........................................
31
19
2.7.1 MODELO EM CASCATA..............................................................................
31
20
8
2.7.2 INCREMENTAL...........................................................................................
2.7.3 RAD.......................................................................................................
32
33
22
2.8
34
MODELOS EVOLUCIONÁRIOS DE PROCESSO DE SOFTWARE......
35
9
2.8.1 PROTOTIPAGEM.........................................................................................
2.8.2 ESPIRAL.....................................................................................................
36
2.8.3 MODELO DE DESENVOLVIMENTO CONCORRENTE............................................
37
2.9
DESENVOLVIMENTO ÁGIL...........................................................................38
2.10 EXTREME PROGRAMMING.............................................................................
38
2.10.1
A EQUIPE XP- EXTREME PROGRAMMING............................................... 39
2.10.1.2
GERENTE DE PROJETO.............................................................................
39
2.10.1.3
COACH......................................................................................................
40
2.10.1.4
ANALISTA DE TESTE...................................................................................
40
2.10.1.5
REDATOR TÉCNICO......................................................................................
40
2.10.1.6
DESENVOLVEDOR.....................................................................................41
2.10.2
VALORES DA XP - EXTREME PROGRAMMING.................................
2.10.2.1
FEEDBACK................................................................................................
41
2.10.2.2
COMUNICAÇÃO..........................................................................................
41
2.10.2.3
SIMPLICIDADE.............................................................................................
41
2.10.2.4
CORAGEM..................................................................................................
42
2.10.3
PRÁTICAS DO XP – EXTREME PROGRAMMING ..............................
2.10.3.1
CLIENTE PRESENTE.....................................................................................
42
2.10.3.2
PLANEJAMENTO..........................................................................................
42
2.10.3.3
STAND UP MEETING...................................................................................
43
2.10.3.4
PROGRAMAÇÃO EM PAR..............................................................................
43
2.10.3.5
CÓDIGO COLETIVO......................................................................................
43
2.10.3 .6
CÓDIGO PADRONIZADO............................................................................43
2.10.3.7
DESIGN SIMPLES.........................................................................................
44
2.10.3.8
DESENVOLVIMENTO ORIENTADO A TESTES..................................................
44
2.10.3.9
REFATORAÇÃO............................................................................................
44
2.10.3.10
INTEGRAÇÃO CONTÍNUA...............................................................................
44
2.10.3.11
RELEASES CURTOS.....................................................................................
44
2.10.3.12
METÁFORA..................................................................................................
45
2.10.3.13
RITMO SUSTENTÁVEL.................................................................................
45
3
APRESENTAÇÃO E ANÁLISE DOS DADOS / ESTUDO DE
41
42
CASO................................................................................................ 46
3.1
MUNICÍPIO/EMPRESA OBJETO DE ESTUDO DA PESQUISA....... 46
48
3.2
APRESENTAR OS DADOS DO ESTUDO...........................................
3.2.1
APRESENTAÇÃO DE QUESTIONARIO............................................. 49
3.3
APRESENTAR ANÁLISE DE DADOS................................................ 51
3.3.1
DESAFIOS DO DESENVOLVIMENTO DE SOFTWARE.................... 52
3.4
QUANDO NÃO UTILIZAR O EXTREME PROGRAMING...............
4
CONCLUSÃO E RECOMENDAÇÕES............................................... 54
4.1
CONCLUSÃO...................................................................................... 54
4.2
RECOMENDAÇÕES........................................................................... 55
5
REFERÊNCIAS BIBLIOGRÁFICAS................................................... 56
53
10
INTRODUÇÃO
Desenvolver um software que atenda as necessidades de um cliente requer
empenho, comprometimento e uso de métodos e ferramentas adequados. O uso
correto
de
uma
metodologia
permite
uma
padronização
nas
etapas
de
desenvolvimento do projeto. O estudo de metodologia de desenvolvimento ágil,
conforme diversos autores busca atingir os objetivos do projeto com base em alguns
princípios, dentre o quais podemos citar: satisfação do cliente, simplicidade,
entregas rápidas e comunicação.
A proposta dessa pesquisa é estudar o Extreme Programming, uma metodologia de
desenvolvimento ágil que se fundamenta em práticas e valores que atuam em
conjunto para promover um desenvolvimento objetivo e rápido, código simples, e
que atendas as necessidades do cliente. Desenvolvido por Kent Beck, por volta de
1997, teve sua primeira aplicação em um projeto da Chrysler, montadora de carros
americana (TELES, 2006). Desta forma, esta pesquisa apresenta o Extreme
Programming como ferramenta de desenvolvimento de software que promove o
desempenho do projeto usando seu conjunto de valores: feedback, comunicação,
simplicidade e coragem, e suas práticas: cliente presente, planejamento, stand up
meeting, programação em par, código coletivo, código padronizado, design simples,
desenvolvimento orientado a testes, refatoração, integração contínua, releases
curtos, metáfora e ritmo sustentável.
1.1 JUSTIFICATIVA
A abordagem deste tema tem está direcionada a apresentar as diversas alternativas
de desenvolvimento de software de forma ágil e de alta qualidade através de
métodos ágeis enfatizando o método Extreme Programming. Por sua vez, esta
abordagem, baseia-se em quatro valores fundamentais: feedback, comunicação,
simplicidade e coragem. É realidade nos ambientes de criação de softwares que
alguns projetos de desenvolvimento ultrapassam prazos, orçamentos, ou não
atendem as expectativas do cliente, como mostram estudos realizados pelo Standish
Group, uma empresa americana que publica a cada dois anos, um estudo chamado
11
Chaos Report, que aborda projetos de software que não atingiram sucesso (TELES,
2006), a adoção de uma metodologia de desenvolvimento eficiente, no caso o
Extreme Programming – XP busca garantir a redução desses indicadores negativos
e proporcionar uma prática de desenvolvimento que atenda as expectativas do
cliente em relação ao projeto. Destacam-se tais práticas como: conclusão dentro do
prazo, do orçamento e definindo funcionalidades exigidas.
A tarefa de desenvolvimento de um software vai muito além de simplesmente
programar linhas e mais linhas de código, os valores da metodologia em questão
trazem o cliente pra mais perto da equipe, deixando de ser apenas um “contratante
de serviços” passando a fazer parte ativa do projeto avaliando módulos do software
que lhe são passadas a cada etapa concluída, sugerindo alterações e correções, o
tratamento da equipe, a comunicação entre os componentes, a forma de trabalho e
outras práticas que corroboram para a excelência da arte de desenvolvimento de
software.
Portanto, a abordagem do tema, está direcionada a apresentar os benefícios que a
adoção da metodologia de desenvolvimento ágil, Extreme Programming – XP pode
trazer ao desenvolvimento de um software.
1.2 DELIMITAÇÃO DO TEMA
“A utilização do XP - Extreme Programming como ferramenta de desenvolvimento de
softwares para desktops, em empresas de pequeno porte.”
1.3 FORMULAÇÃO DO PROBLEMA
O termo “crise do software”, dentro da indústria de desenvolvimento de software
aponta as dificuldades no processo de criação de software. A falta de utilização de
metodologias existentes faz com que o software seja criado de forma subjetiva por
parte da equipe de criação ou do desenvolvedor, que atribui á seu software
características e funcionalidades que ele próprio adquiriu com sua experiência (ou
falta dela) ou simplesmente por vício. O uso eficiente de uma metodologia
12
apropriada pode tornar o desenvolvimento mais uniforme, deixando de ser algo
realizado sem um roteiro. Diante do exposto, abordamos o uso do Extreme
Programming – XP como forma de minimizar os impactos na construção de
software. Com base nessa abordagem surgem perguntas do tipo:
 Como a utilização do XP – Extreme Programming pode influenciar e garantir
agilidade mantendo a qualidade no desenvolvimento de Softwares?
 Quais as práticas e valores do XP devem ser seguidos para garantir sucesso
na utilização deste método?
 Quando o XP deve ser ou não utilizado?
1.4 OBJETIVOS
1.4.1 OBJETIVO GERAL
Apresentar o Extreme Programming - XP como uma ferramenta de desenvolvimento
de software, que visa qualidade, rapidez, com base na utilização de valores:
feedback, comunicação, simplicidade e coragem, e práticas que compõem essa
metodologia: cliente presente, planejamento, stand up meeting, programação em
par, código coletivo, código padronizado, design simples, desenvolvimento orientado
a testes, refatoração, integração contínua, releases curtos, metáfora, ritmo
sustentável.
1.4.2 OBJETIVO ESPECÍFICO
 Demonstrar como
a metodologia
de
desenvolvimento ágil,
Extreme
Programming - XP pode ser utilizada como ferramenta auxiliar no processo
criação de sistemas voltados para desktop.
 Mostrar os valores e práticas características dessa metodologia de
desenvolvimento ágil.
1.5 HIPÓTESE
A utilização do XP - Extreme Programming garante agilidade, flexibilidade e
qualidade no desenvolvimento de software, baseando-se em práticas e valores
adotados por esse método, com o objetivo de modificar a forma tradicional de
desenvolvimento. O uso dessa metodologia visa garantir um desenvolvimento rápido
e que atenda as expectativas do cliente, obedecendo aos prazos definidos e
também as metas e o orçamento. As práticas em que se baseia o Extreme
Programming, garante melhorar o desempenho no processo de desenvolvimento
reduzindo os riscos nos projetos de software. A adoção das práticas e valores do
Extreme Programming buscam diferenciais como comunicação entre a equipe
desenvolvedora, entre a equipe e o cliente, feedbacks constantes, a fim de atingir o
resultado.
1.6 META
A abordagem do tema na presente pesquisa procura mostrar que o uso correto de
uma metodologia de desenvolvimento de software pode reduzir os riscos como:
atraso, não atendimento das necessidades do cliente, baixa qualidade no resultado
final, que envolvem essa atividade, busca também a apresentação dos valores e
práticas que regem o Extreme Programming, metodologia de desenvolvimento ágil,
como alternativa as metodologias tradicionais de desenvolvimento de software.
1.7 METODOLOGIA
1.7.1 CLASSIFICAÇÃO DA PESQUISA
Segundo Gil (2002, p.17) “pode-se definir pesquisa como o procedimento racional e
sistemático que tem como objetivo proporcionar respostas aos problemas
propostos”, portanto, a pesquisa vem a ser um canal de respostas às questões que
são levantadas a diferentes assuntos. A classificação de uma pesquisa se dá por
três tipos: exploratória, descritiva e/ou explicativa. Pesquisas classificadas como
exploratórias tem por objetivo a formulação de hipóteses, tornar a questão levantada
mais clara e compreensível. Já as classificadas como descritivas, têm como o
objetivo mais contundente a descrição de características dos objetos estudados, ou
13
14
relação entre as variáveis. As pesquisas explicativas são as que apresentam a razão
e o porquê de determinados eventos, fenômenos ou coisas, segundo Gil (2002), é
possível dizer que pesquisas explicativas são as bases do conhecimento científico.
Para o desenvolvimento da presente pesquisa, será utilizada a pesquisa
exploratória, embasada em pesquisas bibliográficas e virtuais, análise e estudos de
artigos relacionados ao tema proposto pela pesquisa.
1.7.2 TÉCNICAS PARA COLETA DE DADOS
Sendo a pesquisa baseada em material já elaborado, como livros e artigos, a técnica
utilizada para coleta de dados será a pesquisa bibliográfica.
1.7.3 FONTES PARA COLETA DE DADOS
Segundo Andrade (2001, p. 43) “as fontes para coleta de dados são classificadas
em primária e secundária”.
Fontes primárias são constituídas por obras ou textos originais, material
ainda não trabalhado, sobre determinado assunto.
São consideradas fontes primárias os documentos fotográficos, recursos
audiovisuais, tais como programas radiofônicos ou televisivos, desenhos,
pinturas, músicas, esculturas e objetos de arte em geral.
As fontes secundárias referem-se a determinadas fontes primarias, isto é
são construídas pela literatura originada de determinadas fontes primárias e
constituem-se em fontes da pesquisa bibliográficas.
Para o levantamento de dados para realização dessa pesquisa, serão utilizadas
fontes secundárias, visto que as fontes utilizadas para coleta de dados serão
baseadas em pesquisa bibliográfica e virtual, análise e estudo de artigos publicados,
que estão relacionados ao tema da presente pesquisa.
15
1.7.4 CARACTERIZAÇÃO DA AMOSTRA PESQUISADA
Para a realização do presente estudo não foi utilizada pesquisa de campo para o
levantamento de dados, portanto a definição da caracterização da amostra
pesquisada não se faz necessária.
1.7.5 INSTRUMENTO PARA A COLETA DE DADOS
O instrumento para coleta de dados será a pesquisa bibliográfica (análise de livros e
artigos, impressos e/ou publicados em sites).
1.7.6 POSSIBILIDADE DE TRATAMENTO E ANÁLISE DOS DADOS
O tratamento e análise dos dados utilizados para a elaboração da pesquisa serão
realizados de forma atenciosa, para que se possa construir um estudo consistente,
fundamentado nas obras dos autores usados como referência.
1.8 APRESENTAÇÃO DO CONTEÚDO DAS PARTES DO TRABALHO
O presente trabalho realizado está composto por 04 capítulos, sendo que:
No primeiro capítulo é feita a introdução, justificativa da escolha do tema,
delimitação e formulação do problema, os objetivos gerais e específicos, a hipótese,
a meta e a metodologia utilizada.
No segundo capítulo é apresentado o referencial teórico que apresenta a
importância do tema abordado nesse estudo.
Já no terceiro capítulo é realizada a apresentação dos dados, bem como a análise
correspondente aos mesmos.
No quarto capítulo é abordada a conclusão do trabalho e as possíveis
recomendações para pesquisas posteriores, ou sugestões relacionadas ao tema
apresentado nesta pesquisa.
Encerrando, são apresentadas as referências usadas como base para o
desenvolvimento dessa pesquisa.
16
2 REFERENCIAL TEÓRICO
2.1 INTRODUÇÃO
Este capítulo foi desenvolvido com base em conceitos de vários autores, que foram
utilizados como auxílio para a elaboração das respostas ao tema proposto. São
autores conhecedores das áreas de engenharia e desenvolvimento de software,
hardware, análise e projeto de sistemas. Os trechos utilizados como base dessa
pesquisa, foram retirados das publicações dos respectivos autores, para promover
uma associação entre suas ideias e dos desenvolvedores desse trabalho.
2.2 ADMINISTRAÇÃO GERAL
Segundo Chiavenato (2003, p. 11):
A palavra administração vem do latim ad (direção, tendência para) e
minister (subordinação ou obediência) e significa aquele que realiza uma
função sob o comando de outrem, isto é, aquele que presta um serviço a
outro. No entanto, palavra administração sofreu uma radical transformação
em seu significado original. A tarefa original da administração passou a ser
a de interpretar os objetivos propostos pela organização e transformá-los
em ação organizacional por meio de planejamento, organização, direção e
controle de todos os esforços realizados em todas as áreas e em todos os
níveis da organização, a fim de alcançar tais objetivos da maneira mais
adequada à situação e garantis a competitividade em um mundo de
negócios altamente concorrencial e complexo.
Diante desse conceito, podemos afirmar que dentro do cenário de uma empresa, as
práticas oriundas da administração, são peças fundamentais na sua caminhada em
direção a atingir seus objetivos. A necessidade de se ter alguém que direcione e
organize todos os níveis de uma organização é extremamente visível, diante do
atual cenário financeiro.
Segundo Maximiano (1995, p. 85) “organização é uma combinação de esforços
individuais que tem por finalidade realizar propósitos coletivos. Além de pessoas, a
organização utiliza outros recursos como máquinas e equipamentos, dinheiro,
tempo, espaço e conhecimentos”. O contexto de organização sempre esteve
presente na história do ser humano, é comum relacionar o senso de coletividade à
busca de objetivos comuns ao um grupo de indivíduos.
Os primeiros trabalhos, desenvolvidos no fim do século XIX e início do século XX,
relacionados à administração foram desenvolvidos por Frederick Winslow Taylor e
Henri Fayol. Taylor que era americano desenvolveu a chamada Administração
Científica que priorizava a eficiência por meio da racionalização do trabalho, já
Fayol, europeu, desenvolveu a chamada Teoria Clássica que buscava a eficiência
por meio da organização e aplicação de conceitos da administração.
Segundo Chiavenato (2003) Fayol e Taylor, fundamentaram os pilares da
administração moderna e definiram as funções básicas da organização, os trabalhos
desenvolvidos por eles serviram de procedimentos universais para abordar qualquer
organização. Portanto, se faz necessário em qualquer projeto, seja ele baseado na
administração de uma empresa ou o desenvolvimento de um software, a utilização
de estratégias ou até mesmo premissas que definam os objetivos a serem
alcançados mantendo o foco no objetivo principal.
2.3 GESTÃO EM AMBIENTES DE TI
O ambiente empresarial não é mais o mesmo, e a necessidade da Tecnologia da
Informação (TI) é cada vez mais visível, segundo Laudon (2011, p.4) “Em 2009, as
empresas norte-americanas investiram quase 1 trilhão de dólares em hardware e
software para sistemas de informação e em equipamentos de telecomunicação.”
Isso só reforça a importância dos ambientes de TI, e gerir esse recurso pode ser o
grande passo para a formação de uma organização competitiva e de sucesso. A
necessidade de estar sempre conectado, a atual velocidade das informações e o
17
18
valor desses dados, faz dos ambientes de TI peças chaves dentro do cenário
empresarial moderno.
Gerir um ambiente de TI de uma organização está relacionado à elaboração da
infraestrutura, promover a coordenação e prestação dos serviços ligados a TI,
avaliação de riscos e gerenciamento de projetos bem como os gastos envolvidos.
Essa relação entre os processos internos da empresa e os componentes de TI ajuda
a diferenciação da organização no mercado. Poder realizar a manipulação das
informações possibilita a organização tomar decisões ou traçar um plano para o
futuro da empresa, e fazer uso de um sistema que forneça relatórios de
monitoramento e controle, auxilia aos gerentes a formulação dos conceitos para a
tomada das decisões. E esse papel é desempenhado pelos SIGs – Sistemas de
Informações Gerenciais.
2.3.1 SIG – SISTEMAS DE INFORMAÇÕES GERENCIAIS
Os Sistemas de Informações Gerenciais – SIG são sistemas que transformam
informações de forma que são utilizadas na tomada de decisão de uma empresa,
segundo REZENDE e ABREU (2001, p. 111) ”Sistemas que tem esse efeito sobre
uma organização literalmente mudam pela qual a empresa faz negócios.” Diante
disso podemos observar na figura 01, a importância da TI dentro de uma
organização, podendo imprimir a essa empresa novos padrões de comportamento,
deixando o posto de apenas fornecer suporte, passando auxiliar na tomada de
decisões.
19
Figura 01: Exemplo de áreas atuantes de um SIG – Sistema de Informações Gerenciais. Fonte:
http://natabergmann.blogspot.com.br/2011/04/sig-sistema-integrado-de-gestao.html
Segundo DENNIS (2005, p. 317) “sistema de suporte de decisão, é projetado não
para pesquisar um registro específico, mas para exibir informações que estão
agregadas em vários de muitos registros”, sistemas de Informações Gerenciais
atuam no plano estratégico das organizações, fornecendo vantagens competitivas
que, embora sejam temporárias em um primeiro momento, essas vantagens podem
consolidar-se e levar a organização a patamares de liderança cada vez mais sólidos.
Outra habilidade desses sistemas a capacidade de possibilitar a fidelização de
clientes e fornecedores da empresa, devido a um possível alto custo relacionados a
esse tipo de mudança. É fato que vantagens competitivas devem ser sempre
analisadas pelos administradores, pois ela tem suas limitações, as constantes
mudanças no mercado, dependência que a organização passa a ter em relação ao
departamento de TI, são tópicos que merecem devida atenção.
Laudon (2011, p. 43) define SIG da seguinte forma:
“O termo sistemas de informações gerenciais (SIGs) também designa uma
categoria específica de sistemas de informação que atendem aos gerentes
de nível médio. Os SIGs proporcionam relatórios sobre o desempenho
corrente da organização. Com essa informação, é possível monitorar e
controlar a empresa, além de prever seu desempenho futuro.”
É fato que o mundo dos negócios está em constante mudança e a tecnologia se faz
cada vez mais presente, e manter uma base forte, é essencial para toda
organização. As informações passaram a serem itens de extrema importância e
20
poder gerenciá-las as torna peças chaves no mundo empresarial, e nesse cenário o
uso dos SIGs pode garantir um diferencial na tomada de decisões.
Os SIGs filtram as informações vindas dos setores da empresa, das transações
feitas e as transformam em relatórios usados pela gerência. Os dados fornecidos por
esses sistemas podem ser relatórios semanais, mensais ou anuais, porém sendo
permitidos também relatórios diários e até mesmo horários.
2.4 PAPEL EVOLUTIVO DO HARDWARE – GERAÇÃO DE COMPUTADORES
É fato que a evolução do software só foi permitida pela também evolução do
hardware, maior capacidade de armazenamento e processamento de dados,
tornaram possível a construção de software mais elaborado e complexo
(PRESSMAN, 2006).
O avanço tecnológico pode ser facilmente observado, pequenos aparelhos são
capazes de realizar inúmeras funcionalidades, algumas que antes só eram possíveis
em desktops. Esse avanço permite aos desenvolvedores, ousarem cada vez mais
em suas criações.
A atual situação do Hardware disponível permite que sistemas sejam desenvolvidos
para serem cada vez mais robustos, desempenhando funcionalidades mais
elaboradas, porém o uso de dispositivos para auxiliar o homem em suas atividades,
não é algo tão recente, segundo Murdocca (2000):
Dispositivos mecânicos para controlar operações complexas têm sido
usados desde o século XVI, quando cilindros rotativos eram usados em
caixas de música de forma muito semelhante a que são usados ainda hoje.
Máquinas que calculam, ao contrário de simplesmente repetir uma melodia
predeterminada, se tornaram realidade no século seguinte.
Exemplo disso é a calculadora mecânica desenvolvida por Blaise Pascal (16231662), dispositivo que foi criado para auxiliar no cálculo dos impostos de seu pai.
Porém somente no século XIX, que Charles Babbage, uniu os conceitos de cálculo e
controle mecânico e desenvolveu algo semelhante aos computadores digitais. Os
21
dispositivos criados por ele, liam, armazenavam dados e os processava, atividades
encontradas em todos os computadores atuais, por isso Charles Babbage pode ser
considerado o “avô” dos computadores atuais.
Contudo, após mais de um século, que houve uma evolução quando na Segunda
Guerra Mundial surgiu à necessidade interpretar códigos transmitidos pelos alemães
a seus submarinos, essa máquina usado pela Alemanha ficou conhecida como
Enigma. Diante do sucesso que essa máquina estava proporcionando, os ingleses
se propuseram a desenvolver uma máquina que fosse capaz de decifrar essas
mensagens criptografadas, foi quando Alan Turing (1912-1954) e outros cientistas
se especializaram nessa forma de codificação, com o intuito de promover a
decodificação dessas mensagens. Foi quando surgiu Colossus, uma máquina capaz
de decifrar esses códigos, no mesmo período, também com finalidades militares
J. Presper Eckert e John Mauchly projetaram o Eniac (Eletronic Numerical Integrator
and Computer), que funcionava por meio de troca de cabos, conforme figura 02.
Figura 02 – ENIAC - Eletronic Numerical Integrator and Computer.
Fonte: http://esplay.blogspot.com.br/2012/01/o-primeiro-computador-do-mundo.html
Mais tarde esses dois pesquisadores tiveram auxílio de Jonh Von Neuman, em um
novo projeto de um computador que armazenasse programas, já que o Eniac não
tinha essa funcionalidade, a máquina desenvolvida por esse três ficou conhecido
com EDVAC, porém desavença entre eles causou a separação da equipe, contudo
esse conceito de armazenamento evoluiu e surgiu o EDSAC, desenvolvido por
Maurice Wilkes, em 1947.
22
A configuração dos computadores atuais baseia-se no modelo desenvolvido por
Jonh Von Neumann. O modelo Von Neumann consiste em cinco componentes
principais:
 Unidade de entrada;
 Unidade de memória;
 Unidade aritmética e lógica;
 Unidade de controle;
 Unidade de saída
Conceito facilmente notado nos computadores modernos onde teclado compõe a
unidade de entrada, o monitor a unidade de saída e a unidade central de
processamento (CPU) a unidade de aritmética. É fato a evolução do hardware, hoje
em dia temos dispositivos capazes de inúmeras funcionalidades e que cabem na
palma de nossa mão, porém para que chegasse a esse nível muito teve que ser
feito.
Abaixo segue o demonstrativo da evolução do hardware, através de dados
coletados, estão destacados alguns pontos fundamentais que marcaram desde o
surgimento da informática até os dias atuais.
23
Tempo
2000
MICROPROC
ESSAMENTO;
1980
UTILIZAÇÃO
DO
TRANSISTOR;
1970
REDUÇÃO DO
CONSUMO DE
ENERGIA;
1960
CÓDIGO
DE MÁQUINA;
1950
CIRCUITOS
INTEGRADOS;
COMPUTADOR S.O. ;
VALVULADO;
FABRICAÇÃO
EM SÉRIE
REDUÇÃO DE
CUSTOS;
SISTEMAS
ESPECÍFICOS
;
BANCO DE
DADOS;
INTELIGÊNCIA
ARTIFICIAL;
CONSUMO
PESSOAL;
MAIOR
CAPACIDAD
E DE
ARMAZENAMENTO;
INTERNET
SEM FIO;
AUMENTO
NA
VELOCIDAD
E DE
TRANSMISSÃO DE
ARQUIVOS;
SISTEMAS
ESPECÍFICOS;
TECNOLOGIAS
ORIENTADA
A OBJETOS;
SURGIMENTO DA
INTERNET;
COMPUTAÇÃO
PARALELA;
0
Evolução
1ª ERA
2ª ERA
3ª ERA
4ª ERA
Gráfico 01 – Demonstrativo da Evolução do Hardware. Fonte: http://www.ic.uff.br/~aconci
/evolucao.html
O gráfico 01 acima demonstra de forma resumida, a evolução do hardware nos
últimos 50 anos, trazendo informações das primeiras máquinas que fizeram parte da
1ª era até os computadores modernos que compõem a 4ª era, bem como algumas
evoluções dos componentes de software.
24
2.5 O PAPEL EVOLUTIVO DO SOFTWARE.
Atualmente software possui dupla atuação, segundo Pressman (2006, p.02) “Ele é o
produto e, ao mesmo tempo, o veículo para entrega do produto.” Como produto, o
software independente de sua plataforma e de onde ele esteja operando, quer seja
em dispositivos móveis ou em computadores pessoais, até equipamentos de grande
porte, ele continua criando, manipulando e gerindo informações das mais variadas
formas e tipos. Como veículo o software irá executar a função para qual foi
desenvolvido.
No papel de transformador de informações, o software tem a capacidade de
manipular as informações e torná-las mais importantes dependendo do contexto
onde esse dado é utilizado, essa transformação pode ser de vital importância dentro
do cenário financeiro atual, pois segundo Pressman (2006) o software trata do bem
mais importante da atual época, a informação, exemplo disso é possível citar o
cruzamento de informações, a mineração de dados, que pode influir diretamente na
competitividade de uma organização e também a velocidade que os dados trafegam
via internet por dispositivos móveis ou não.
É notável a evolução que o software tem passado ao longo dos anos, a exponencial
transformação no desempenho, armazenamento e arquitetura dos computadores,
permitiram a elaboração de softwares mais complexos. Atualmente as indústrias de
software se tornaram personagens de extrema importância no cenário econômico
mundial, a imagem que se tinha dos profissionais dessa indústria também foram
sofrendo mudanças, estereótipos antigos, que ilustravam a figura do programador
solitário, deu lugar a equipes especializadas trabalhando em conjunto visando o
objetivo final, que é o desenvolvimento do sistema, porém dúvidas antigas ainda
permeiam o cenário de criação de software, questões relacionadas a prazos de
conclusão, custo e falhas ainda são presentes dentro do contexto da indústria do
software.
25
2.5.1 SOFTWARE
De acordo com Pressman (2006, p.1),
“Software de computador é o produto que os profissionais de software
constroem e, depois, mantêm ao longo o tempo. Abrange programas que
executam em computadores de qualquer tamanho e arquitetura, conteúdo
que é apresentado ao programa a ser executado e documentos tanto em
forma impressa quanto virtual que combina todas as formas de mídia
eletrônica.”
Os computadores são dispositivos que podem ser utilizados de diversas formas,
desde a utilização para criação de documentos até o controle de outras máquinas, o
que irá definir a sua utilidade são os softwares nele instalados.
Os softwares possuem três características que os diferenciam do hardware: uma
delas é que, o software é desenvolvido através de projetos, códigos, modelagem dos
dados, análise de requisitos, testes de forma lógica. Traduzindo para o hardware,
algumas dessas funções (análise, projeto e testes) são consideradas de forma física.
A segunda característica é de que o software não se desgasta, onde Pressman
(1995, p.14) afirma,
“À medida que o tempo passa, entretanto, o índice de falhas eleva-se
novamente conforme os componentes do hardware sofrem os efeitos
cumulativos de poeira, vibração, abuso, temperaturas extremas e muitos
outros males ambientais. Colocado de maneira simples o hardware começa
a se desgastar. O software não é sensível aos problemas ambientais que
fazem com que o hardware se desgaste.”
Ao longo do tempo de sua utilização o software sofre alterações, como
manutenções, podendo corrigir as falhas existentes, bem como acarretar novas
falhas. Um exemplo que pode descrever essa característica é quando um
componente de hardware se desgasta sendo necessário sua substituição por um
novo componente, no software não há essa substituição física, o que demonstra que
houve falhas no projeto ou em algum processo específico e que talvez seja possível
realizar algumas alterações em seu código.
A terceira delas é que muitos softwares são desenvolvidos por encomenda e não
criados a partir de partes isoladas de softwares já existentes, como ocorre na
criação do hardware. O software não possui catálogos de componentes, diferente do
hardware que possui um catálogo de componentes digitais, onde os mesmo
possuem numeração, funções e padrões pré-definidos e validados.
26
Independente de sua funcionalidade e características, os softwares em sua maioria
irão se enquadrar em duas categorias: software básico e software aplicativo. A
categoria de software básico é composta por sistemas operacionais que são
voltados para o gerenciamento das máquinas. Já o software aplicativo, são sistemas
específicos voltados para as necessidades dos usuários.
2.6 ENGENHARIA DE SOFTWARE – UMA TECNOLOGIA EM CAMADAS
De acordo com Bauer (apud PRESSMAN, 2006, p.17) “[Engenharia de Software é] a
criação e utilização de sólidos princípios de engenharia a fim de obter softwares
econômicos que sejam confiáveis e que trabalhem eficientemente em máquinas
reais.”.
A engenharia de software baseia-se em camadas, conforme a figura 03 abaixo:
Figura 03: Camadas da engenharia de software, fonte: http://walterdominguez.com/contextoconteudo
/macrotema/engenharia%20de%20software/engenhariadesoftware.html.
O foco principal está na qualidade, buscando o aperfeiçoamento no desenvolvimento
dos processos na qual está envolvida. A base da engenharia de software é o
processo, que realiza a ligação entre as outras camadas. Esses processos estão
diretamente relacionados às atividades de desenvolvimento de um sistema,
envolvendo todas as atividades de gestão de sua criação, como: estabelecimento de
prazos, qualidade e definição de escopo.
27
Os métodos definem as técnicas que devem ser utilizadas para a construção do
software, compreendendo atividades como a modelagem, análise de requisitos e
testes. As ferramentas fornecem apoio automatizado ou semi-automatizados para os
métodos e processos, passando pela modelagem, análise de requisitos e testes.
2.7 MODELOS PRESCRITIVOS DE PROCESSO
2.7.1 MODELO EM CASCATA
O modelo em cascata sugere que as fases de desenvolvimento de software sejam
sequenciais, como mostra a figura 04 abaixo:
Figura 04 – Modelo em cascata. Fonte: http://julianakolb.com/2012/02/01/o-modelo-em-cascata
Esse modelo é um dos mais antigos da engenharia de software, segundo Teles
(2006) as fases que compõem o desenvolvimento em cascata dependem do
resultado final das fases anteriores a ela. O modelo em cascata tem sofrido críticas
nos últimos anos, sobretudo relacionado à eficiência de seus conceitos, entre eles
podemos destacar o fato de um projeto de desenvolvimento não seguir sempre uma
sequência, a dificuldade em fixar os requisitos desse modelo e entrega de um
28
módulo do sistema apenas no final, não existindo um protótipo ou versão para uma
demonstração ao cliente.
Outro ponto importante a observar está relacionado à necessidade de esperar o
término de uma fase para o início da outra, o que pode gerar atrasos e bloqueios. O
dinamismo atual compromete o uso desse modelo, porém, mesmo assim para
alguns projetos o conceito de modelo em cascata pode ser útil desde que o modo
linear seja aceito no processamento do projeto.
2.7.2 INCREMENTAL
O modelo incremental usa conceitos do modelo em cascata, sendo incrementado a
cada etapa desenvolvida. Esses incrementos são adicionados de forma linear ao
projeto, fornecendo ao cliente um software com mais funcionalidades a cada
entrega, abaixo a figura 05, representa graficamente o modelo incremental.
Figura 05 – Modelo Incremental. Fonte: http://infomarcio.wordpress.com/2010/10/30/ciclo-de-vida-desistemas-de-informacao/
É notado na figura 05 que as etapas que compõem cada incremento, são baseadas
no modelo em cascata, e também a iteração característica do modelo incremental. A
primeira etapa é conhecida como núcleo do produto (PRESSMAN, 2006), é nela que
29
as solicitações mais básicas do cliente são implementadas. O núcleo do produto é
disponibilizado ao cliente, ou passa por uma análise detalhada, a partir daí é gerado
um feedback, vindo do cliente ou originado da análise, que servirá de “marco” inicial
para o desenvolvimento do próximo incremento, onde serão atendidos as
solicitações do cliente e acréscimo das outras funcionalidades, e esse processo vai
sendo executado até a finalização do projeto.
2.7.3 RAD
O modelo RAD (Rapid Application Development, desenvolvimento rápido de
aplicação) se enquadra no conceito incremental que também faz uso da sequência
linear encontrada no modelo incremental, esse modelo é uma versão mais rápida do
modelo em cascata, onde o entendimento dos requisitos e restrições deve ser
realizado em pouco tempo, para que seja dado início a construção de uma versão
do software, em cerca de 60 a 90 dias.
De acordo com Pressman (2006), o modelo RAD também se enquadra no uso de
atividades genéricas como base para o desenvolvimento de software, como em
outros modelos de processos. As etapas como entendimento das necessidades do
cliente, regras de negócio, fica a cargo da comunicação, de posse desses dados o
planejamento promove o gerenciamento da equipe, visto que as responsabilidades
são distribuídas entre os membros da equipe. A parte de modelagem é desenvolvida
e relacionada aos negócios, dados e processos, que irão traçar a base do projeto. O
uso dos componentes já existentes e a aplicação do código ficam por conta da
construção, e posteriormente a implantação.
30
Segue abaixo a figura 06 com o demonstrativo do modelo RAD:
Figura 06 – Modelo RAD. Fonte: http://julianakolb.com/2012/02/01/o-modelo-rad
2.8 MODELOS EVOLUCIONÁRIOS DE PROCESSO DE SOFTWARE
O software também evolui, à medida que regras de negócios ou requisitos de
negócio sofrem alterações, que por sua vez são refletidas no processo de
desenvolvimento, podendo ocorrer atrasos na finalização do projeto. Para atender a
essas possíveis “urgências” que são impostas pelo mercado, uma versão com
funcionalidades básicas e reduzidas referente a sistema inicialmente planejado pode
ser fornecida para satisfazer essa necessidade. Para que isso aconteça, um modelo
de processo é necessário, pois através dele, é possível projetar um sistema que seja
passível de evolução, segundo Pressman (2006, p.42) “Os modelos evolucionários
são iterativos. Eles são caracterizados de forma a permitir aos engenheiros de
software desenvolver versões cada vez mais completas do software.” Dentre eles
podemos citar a Prototipagem, o Modelo Espiral e o Modelo de Desenvolvimento
Concorrente.
31
2.8.1 PROTOTIPAGEM
Ao solicitar um software, o cliente costuma ser mais direto com suas expectativas
em relação ao sistema, descrevendo suas funcionalidades, porém detalhes como
entrada de dados, processamento e saída na grande maioria das vezes não fazem
parte dessa descrição, algumas vezes também a equipe os desenvolvedores ficam
inseguros com o que será implementado, para esses dois casos pode ser aplicado o
conceito de prototipagem, que permite ao cliente e a equipe terem uma melhor visão
do software a ser desenvolvido e também, esclarecer dúvidas sobre o sistema.
A base para aplicar a prototipagem, é a comunicação com o cliente, com intuito de
traçar os objetivos gerais do sistema, a partir das informações recolhidas é realizada
uma rápida modelagem, elaborando um rápido projeto que irá conter uma primeira
visão do software para o cliente, terá aspectos mais externos do sistema (interface,
telas). A partir desse projeto rápido será feito um protótipo que por sua vez será
implementado e avaliado pelo cliente em questão. Após essa avaliação, de posse do
feedback fornecido pelo cliente serão feitas possíveis correções e alterações.
Figura 07 – Etapas do processo de prototipagem. Fonte: http://www.hlera.com.br/clientes/
ciclo_de_vida/index. php?s=prototipagem
Na figura 07 é apresentada as etapas do processo de prototipagem. O uso da
prototipagem apesar de ser interessante tanto para o cliente quanto para a equipe
de desenvolvimento, é preciso ter atenção quanto ao que for apresentado ao cliente,
sendo um protótipo o software foi feito com rapidez, podendo der falho em alguns
aspectos, que podem ser encarados de forma não muito amigável pelo cliente, outro
ponto que se deve ter cuidado é em relação implementação, pois o que foi
32
desenvolvido para conseguir um resultado rápido apenas com a finalidade de
demonstração, poder ser tornar parte integrante do sistema.
2.8.2 MODELO ESPIRAL
O modelo espiral é uma combinação do modelo em cascata e a prototipagem, e
permite o desenvolvimento de versões mais e completas, nesse modelo as primeiras
versões podem ser protótipos e conforme o sistema vai evoluindo, nas últimas
versões mais completas.
Esse modelo é dividido em atividades que são representadas graficamente em
forma de espiral. À medida que as atividades são concluídas é indicado como uma
volta no circuito da espiral, no sentido horário. São avaliados os riscos de cada
atividade, os marcos de ancoragem são formados pelo conjunto dos resultados do
trabalho bem como as condições ao longo do caminho. Pressman (2006, p. 45)
define o funcionamento desse modelo da seguinte forma:
O primeiro circuito em torno da espiral poderia resultar no desenvolvimento
da especificação de um produto; passagens subsequentes em torno da
espiral poderiam ser usadas para desenvolver um protótipo e depois,
progressivamente, versões mais sofisticadas do software. Cada passagem
pela região de planejamento resulta em ajustes do plano do projeto. O custo
e o cronograma são ajustados com base no feedback derivado do cliente
após a entrega. Além disso, o gerente do projeto ajusta o número planejado
de iterações necessárias para completar o software.
Figura 08 – Modelo Espiral. Fonte: http://questaodeti.blogspot.com.br/
2008/07/ modelo-incremental-e-espiral.html
O modelo espiral conforme mostra a figura 08 acima, poder ser usado também após
o término do projeto, onde cada volta pode ser encarada com o um aperfeiçoamento
do projeto, uma evolução do sistema. Esse tipo de modelo permite ao desenvolvedor
33
usar a prototipagem em qualquer etapa do desenvolvimento, vale ressaltar que esse
conceito de evolução é controlável, outro ponto importante é a avaliação de riscos,
pois se algum risco não for devidamente avaliado, ou até mesmo esquecido, poderá
gerar problemas futuros.
Deve-se atentar também para a questão de orçamento, pois a cada evolução no
circuito o custo também é revisado.
2.8.3 MODELO DE DESENVOLVIMENTO CONCORRENTE
O modelo de desenvolvimento concorrente pode ser definido como uma associação
das tarefas e ações que estão relacionadas ao desenvolvimento e os estados que
elas se encontram (o estado é definido pelo comportamento da atividade em
questão), ou seja, quando uma atividade é realizada, outras tarefas e ações serão
envolvidas.
Todas as atividades existem ao mesmo tempo, porém em estados diferentes, que
pode ser alterado conforme cada comportamento for alterado, pela conclusão ou
alteração das atividades. Os estados das atividades podem sofrer mudanças a
qualquer momento, exemplo disso é o fato de uma atividade ter o estado dado como
“pronto”, e posteriormente ser encontrados erros ou necessidades de alteração, daí
a mudança seria feita e esse estado mudaria de “pronto” para outra definição,
conforme demonstrativo da figura 09 abaixo.
Figura 09 – Modelo Desenvolvimento Concorrente. Fonte: http://www.async.com.br/~kiko/qual
34
2.9 DESENVOLVIMENTO ÁGIL
A partir da década de 90, profissionais da indústria do software buscavam uma
melhor forma de envolvimento humano no processo de desenvolvimento de
sistemas. Mesmo com a existência de alguns conceitos com a essência do
desenvolvimento ágil, o marco iniciatório da metodologia ágil foi em 2001, quando
um grupo de 17 profissionais da indústria do software assinou o “Manifesto para o
Desenvolvimento Ágil de software”.
O conceito de agilidade no contexto de criação de software está diretamente
relacionado à flexibilidade diante das modificações do projeto, tendo como prioridade
a satisfação do cliente. Ela também é responsável pela frequente entrega de
versões funcionais do software ao cliente.
De acordo com Dennis (2005, p.13) o desenvolvimento ágil “Enfoca o
aperfeiçoamento do ciclo de vida do software, eliminando grande parte do excesso
de modelos e de documentação e o tempo gasto nessas tarefas.”. Por isso faz-se
necessário o feedback em curtos períodos, para que as modificações sejam
avaliadas e adaptadas regularmente, fazendo com que as alterações estejam
sempre de acordo como o que foi solicitado.
2.10 EXTREME PROGRAMMING
O Extreme Programming – XP é um processo ágil de desenvolvimento de software
voltado para projetos que sofrem constantes mudanças em seu desenvolvimento.
Esse modelo de desenvolvimento ágil de software foi publicado em meados da
década de 90, tendo como pioneiro Kent Beck.
O XP destaca-se pela sua forma de desenvolvimento incremental, onde o projeto é
implementado no início e conforme as necessidades e requisitos, o mesmo vai
adquirindo novas funcionalidades. Uma de suas premissas é a interação com o
cliente ao longo do desenvolvimento do sistema, pois deste modo é possível
35
reavaliar as necessidades e requisitos para que a manipulação dos dados possam
ser realizadas e implementadas no software.
Essa metodologia é bem sucedida, pois visa a qualidade do software em um
desenvolvimento rápido e econômico, e flexibilidade para alterações, o que promove
a satisfação do cliente, pois o mesmo não precisa solicitar um software e aguardar
até que ele fique pronto para saber se o que foi solicitado realmente foi atendido.
Devido ao fato de que, essa metodologia de desenvolvimento possibilita o cliente
acrescentar ao projeto novas funcionalidades, reavaliar suas necessidades e realizar
constantes modificações. Sendo assim, os desenvolvedores sentem-se mais
confiantes para realizar devidas alterações, pois passam por testes em curtos
períodos, logo as modificações solicitadas são atendidas e verificadas, para que o
projeto resulte no que foi planejado por ambas as partes envolvidas.
Através dos valores como feedback, comunicação, simplicidade e coragem; e de
suas práticas, cliente presente, jogo de planejamento, stand up meeting,
programação em par, desenvolvimento guiado pelos testes, refactoring, código
coletivo, código padronizado, design simples, metáfora, ritmo sustentável, integração
contínua e releases curtos;
ao qual baseia-se a Extreme Programming para
alcançar seus objetivos e obter sucesso em projetos de desenvolvimento ágil.
2.10.1 A EQUIPE XP- EXTREME PROGRAMMING
2.10.1.1 GERENTE DE PROJETO
O gerente de projeto é responsável pelas informações passadas ao cliente, como
negociações, andamento do projeto, fazendo com que o mesmo participe ativamente
fornecendo
informações
para
equipe
de
desenvolvimento.
Tem
como
responsabilidade também a resolução das questões administrativas do projeto.
Portanto, faz-se necessário que o gerente entenda bem as práticas e valores do XP
– Extreme Programming, para conduzir e cobrar de sua equipe mantendo o
equilíbrio entre a equipe e o cliente.
36
2.10.1.2 COACH
De acordo com Teles (2006, p.206), “O papel do coach é assegurar que a equipe
respeite e utilize diariamente os valores e práticas do xp. Ele é uma pessoa que
possui bastante conhecimento técnico e conhece profundamente o processo de
desenvolvimento.”
O coach é peça fundamental dentro da equipe, pois o sucesso do XP – Extreme
Programming está diretamente ligado à execução de suas práticas. Ele também
pode fazer parte da equipe exercendo a função de desenvolvedor, o que é viável no
início do projeto, pois se faz presente no dia-a-dia da equipe acompanhando o
desenvolvimento do software e realizando eventuais correções, fruto de erros
cometidos pela equipe.
2.10.1.3 ANALISTA DE TESTE
A qualidade das versões do projeto é de responsabilidade do analista de teste, que
junto ao cliente deve elaborar os testes de aceitação, para avaliar cada versão do
sistema que for liberada.
É importante que o analista tenha a visão semelhante à do cliente, para que não
sofra influência do código e mantenha uma atuação imparcial, por isso esse papel
não deve ser realizado por um desenvolvedor.
2.10.1.4 REDATOR TÉCNICO
O redator técnico é responsável por documentar o software e manter estes arquivos
sempre atualizados. Dessa forma ele permite que os desenvolvedores concentremse apenas na codificação do projeto. Para o desempenho dessa função é necessário
que se mantenha um bom relacionamento com os desenvolvedores e o cliente.
37
2.10.1.5 DESENVOLVEDOR
O desenvolvedor tem como função analisar, modelar, implementar, desenvolver o
software. Sendo que, no processo de construção do sistema ele poderá assumir
diversas funções como, analista, redator técnico, pois na Extreme Programming os
desenvolvedores exercem várias funções ao longo do projeto.
2.10.2 VALORES DA EXTREME PROGRAMMING
2.10.2.1 FEEDBACK
A cada etapa completada, parte do software é repassada ao cliente, para teste,
avaliações e possíveis sugestões. O feedback se torna uma importante ferramenta
de levantamento de requisitos, mesmo com o projeto já em andamento, pois de
posse de parte do sistema, o cliente pode verificar se as funcionalidades, por
exemplo, atende as suas necessidades e também, facilita a compreensão do cliente,
permite que o mesmo sugira funcionalidades que precisará, mas que em um
primeiro momento não as identificou.
2.10.2.2 COMUNICAÇÃO
Entre a equipe de criação, e também da equipe com o cliente (usuário), visto que ele
é o alvo do produto final. Em primeira hipótese, comunicação por parte do usuário,
sobre suas necessidades com relação ao sistema, em seguida, por parte da equipe
de criação, que repassará informações sobre prazos, considerações técnicas.
2.10.2.3 SIMPLICIDADE
O Extreme Programming aposta em um código simples, com poucos métodos e
classes, evitando implementação de funcionalidades que podem ser úteis no futuro,
38
procurando implementar apenas requisitos atuais, que atenda as necessidades
atuais do cliente.
2.10.2.4 CORAGEM
Vários temores envolvem o processo de desenvolvimento de um software, tanto por
parte do cliente como por parte da equipe de desenvolvimento, a coragem envolve
os três valores anteriores, afinal é preciso coragem para aplicá-los, ter coragem no
Extreme Programming significa confiar nos procedimentos, e saber que problemas
poder acontecer, porém a aplicação correta da metodologia ajudará a reduzir ou
eliminar os impactos.
2.10.3 AS PRÁTICAS DA EXTREMME PROGRAMMING
2.10.3.1 CLIENTE PRESENTE
A interação entre equipe de criação e cliente é de grande importância, fazer do
cliente parte da equipe reduz falhas no desenvolvimento, pois sua presença nas
fases de desenvolvimento, permite um diálogo, sobre as funcionalidades que
deverão ser implementadas.
2.10.3.2 PLANEJAMENTO
O conceito de planejamento no Extreme Programming, engloba a tomada de
decisão em relação ao que é necessário ou o que pode ser adiado, e também o que
deve ser implementado ou não.
39
2.10.3.3 STAND UP MEETING
É uma reunião realizada no inicio do dia, onde todos permanecem em pé e tem
duração de aproximadamente 20 minutos. Esse tipo de reunião tem como intuito,
garantir objetividade na abordagem dos assuntos, mantendo o conceito de agilidade
e simplicidade.
2.10.3.4 PROGRAMAÇÃO EM PAR
Essa prática propõe que dois desenvolvedores trabalhem ao menos tempo no
mesmo computador, sendo um que codifica (condutor), e outro revisa o código,
(navegador). Enquanto implementa o código, o outro analisa o que foi
implementado, corrigindo pequenos erros, a programação em par, permite também a
troca de experiências entre os desenvolvedores, fortalecendo ainda mais o conceito
de comunicação.
2.10.3.5 CÓDIGO COLETIVO
O código aos membros da equipe, todos tem acesso a todas as partes do código,
permitindo que alterações possam ser feitas por qualquer integrante da equipe,
mesmo que o mesmo não tenha desenvolvido essa parte. Todos são responsáveis
pelo projeto, não havendo apenas uma pessoa que é responsável por determinada
parte.
2.10.3.6 CÓDIGO PADRONIZADO
Padrões de desenvolvimento são adotados desde o início do projeto, o uso de um
padrão facilita a identificação e leitura do código, permitindo uma melhor
compreensão.
40
2.10.3.7 DESIGN SIMPLES
O projeto a ser desenvolvido deve ser o mais simples, possível e atender as
necessidades do cliente. Deve se utilizar de requisitos atuais, evitando adicionar
funcionalidades que o cliente poderá vir a precisar, permitindo assim um código
simples, legível, mas que esteja apto a alterações futuras quando necessárias.
2.10.3.8 DESENVOLVIMENTO ORIENTADO A TESTES
Trata-se de uma medida preventiva, todo código implementado deve estar
associado a um teste automatizado. Com base nesses testes é que alterações,
correções são feitas e se determinadas funcionalidades implementadas estão
realizando suas determinadas funções.
2.10.3.9 REFATORAÇÃO
Tornar o código mais compreensível, sem alterar o comportamento do sistema. Esta
prática, esta intimamente ligada ao código coletivo, visto que a toda equipe é
permitido fazer alterações no código.
2.10.3.10 INTEGRAÇÃO CONTÍNUA
Trata-se de integrar toda a equipe de desenvolvimento com todas as partes do
software em desenvolvimento, se possível que essa integração seja feita diversas
vezes ao dia, para todos esteja a par das fases do sistema.
2.10.3.11 RELEASES CURTOS
O Extreme Programming considera o projeto de desenvolvimento de um software um
investimento, portanto entrega de versões pequenas, porém com o máximo de valor
41
para o negócio, são de extrema importância, pois através delas o cliente terá noção
do que foi feito, ou do que precisa ser feito. Essas entregas são feitas a cada um ou
dois meses, isso reforça o feedback e a comunicação com o cliente.
2.10.3.12 METÁFORA
É o uso de comparações, analogias para descrever o projeto, buscando a
compreensão de todos os envolvidos, para que haja uniformidade em toda a equipe
de desenvolvimento sobre as funcionalidades do software, aonde as novas partes
irão se encaixar, como devem ser.
2.10.3.13 RITMO SUSTENTÁVEL
A falta de tempo para concluir o projeto em um modelo tradicional de
desenvolvimento propõe o uso dos recursos ao máximo e horas extras. O Extreme
Programming, aborda a questão das horas trabalhadas, defendendo uma semana
de trabalho de 40 horas respeitando a individualidade de cada membro da equipe, a
intenção é manter os desenvolvedores sempre renovados mesmo que sua condição
física o permita longas jornadas de trabalho. Uma equipe que esteja cansada está
mais propensa a erros.
42
3
APRESENTAÇÃO E ANÁLISE DOS DADOS / ESTUDO DE CASO
3.1 MUNICÍPIO/EMPRESA OBJETO DE ESTUDO DA PESQUISA.
Localizada no litoral norte do estado do Espírito Santo, a cerca de 220 km da capital
do estado capixaba, Vitória, a cidade de São Mateus, segundo Nardoto (2005, p.
08), “é determinada pelo paralelo 18°42’56’’ de latitude ao sul, em sua interseção
com o meridiano de 39°51’36’’ de longitude oeste – W. Greenwich (marco no adro da
Igreja Matriz)”, segue abaixo na figura 10 a localização descrita.
Figura 10 – Localização de São Mateus. Fonte: http://www.ibge.gov.br
De topografia plana e clima seco sub-úmido, a cidade de São Mateus possui em sua
paisagem hidrográfica os rios Barra Seca, Itaúnas e São Mateus. A cidade possui
alto potencial turístico, de acordo com Nardoto (2005, p. 17) “São Mateus tem 43 km
de costa com praias de águas limpas, mornas e sem nenhum tipo de poluição, o que
atrai muitos turistas”. Tendo a Ilha de Guriri a mais conhecida.
Sendo considerada uma das cidades mais antigas do país, São Mateus possui uma
mistificação de povos devido à colonização. Segundo Nardoto (2005), a vila de São
Mateus como foi conhecida no início de sua colonização, tornou-se cidade em 3 de
abril de 1848, por Ato Provincial que a reconhece como município. Porém adotou-se
43
a data de 21 de setembro de 1544 por se comemorar nessa mesma data o padroeiro
da cidade, São Mateus, e início de sua colonização.
A cidade também possui uma grande quantidade de petróleo reservada em seus
solos, tendo como descoberta no final da década de 60 e explorados mais adiante
pela Petrobras, nesta mesma época outras empresas ganhavam forças em São
Mateus e região com o plantio de eucalipto, um exemplo é a empresa Aracruz
Celulose.
No entanto, a economia está voltada basicamente para a exploração de petróleo:
Atualmente a economia do Município de São Mateus está baseada na
exploração e produção do petróleo. Na década de 1970, foram descobertos
vários campos de petróleo em São Mateus e Linhares, e na década de
1980, essas descobertas foram ampliadas. Com o preço do petróleo ainda
em alta no mercado internacional, a Petrobras decidiu criar o Distrito de
exploração do Espírito Santo, na cidade de São Mateus a partir de então, a
economia da cidade se transformou completamente. Paralelamente,
acontecia uma revolução no uso das terras em São Mateus e Conceição da
Barra, com a implantação das florestas de eucalipto, tendo como grandes
iniciativas as empresas Aracruz Celulose S/A e Companhia Vale do Rio
Doce, com a iniciação de grandes plantios de eucalipto. Disponível em <
http://www.saomateus.es.gov.br/site/perfil-sao-mateus.php>. Acesso em: 24
outubro 2012.
A descoberta do petróleo aconteceu na localidade denominada de Nativo de Barra
Nova em São Mateus. Além da grande economia gerada através da exploração de
petróleo, produção de celulose a cidade possui uma cultura diversificada o que é
favorável para produção e economia de um município.
A agricultura também tem papel importante na economia mateense, gerando grande
parte dos empregos e da renda municipal, englobando culturas condimentares
(urucum, aroeira e outras pimentas), fruticultura (cacau, coco, mamão, etc.), cultivo
de café conilon, etc., Nardoto (2005).
Devido ao fato de possuir uma economia estável, uma diversificação de culturas e
de produção agrícola, a cidade tem se tornado visada pelas grandes empresas e por
empresários de todos os ramos, como é o caso da área industrial, que tem ganhado
força não só na cidade de São Mateus, assim como, em todo o estado do Espírito
Santo. Logo, o avanço e a utilização da tecnologia fazem-se necessárias. Desta
forma, o setor tecnológico passa a ser visado de forma estratégica e ao mesmo
44
tempo surge a necessidade de profissionais qualificados para decidir, planejar,
implantar, executar processos e soluções de forma ágil, econômica e eficaz.
Com isso, a cidade tem despertado atualmente o interesse de empresas, que
planejam instalar suas fábricas em solo mateense, exemplo disso temos: A
Marcopolo, empresa gaúcha fundada em 1949, que atua no ramo de montagem de
ônibus,
que
segundo
Rita
Bridi
em
sua
matéria
publicada
no
site
http://gazetaonline.globo.com no dia 11 de junho de 2012, “será a primeira
montadora de ônibus o estado do Espírito Santo, com um investimento de R$ 35
milhões, irá abrir 300 vagas de emprego quando estiver funcionando”.
Outra empresa é a Paranapanema, uma das maiores produtoras do país de
semielaborados de cobre, que segundo Rita Bridi em sua matéria publicada no site
http://gazetaonline.globo.com, no dia 14 de julho de 2011, “terá uma filial aqui e São
Mateus, com um orçamento de R$ 170 milhões...”, desta forma, a procura por
profissionais qualificados será muito grande, nesse momento o setor tecnológico
ganha espaço, pois as indústrias possuem grandes máquinas que operam através
de
softwares
específicos,
necessitam
de
um
hardware
com
capacidade
considerável, mão-de-obra qualificada para que possam operar os aparelhos, sejam
eles (micros, servidores, switchs) e softwares que administram e controlam as
máquinas de produção.
3.2 APRESENTAR OS DADOS DO ESTUDO
Os dados a serem apresentados foram coletados mediante a formulação de um
questionário elaborado pelos desenvolvedores desse trabalho de conclusão de
curso e respondido pelo José Eduardo Campos de Nogueira, conhecido
informalmente como “Duda Nogueira”, que gentilmente colaborou com essa
pesquisa, compartilhando seu conhecimento e experiência em desenvolvimento de
software.
Duda Nogueira dentre outras atividades, foi coordenador de grade da Latinoware
2012, que é a Conferência Latino-Americana de Software Livre, evento que já está
45
em sua nona edição e conta com vários cursos e palestras. Esse ano a Latinoware
ocorreu entre os dias 17 a 19 de outubro, em Foz do Iguaçu, no estado do Paraná.
O questionário a ser apresentado, foi elaborado buscando objetividade e clareza
quanto ao tema proposto.
3.2.1 APRESENTAÇÃO DO QUESTIONÁRIO
1. Quais os maiores desafios enfrentados hoje no mercado tecnológico?
Um dos grandes desafios, principalmente no Brasil é a falta de mão de obra
qualificada. Existem empregos, mas muitas vezes não existem pessoas
qualificadas para ocupá-los.
Esse problema acontece tanto em outras
áreas técnicas como principalmente na Tecnologia da Informação, onde a
grande gama de conhecimentos necessários exige cada vez mais um
profissional especializado e que possa contribuir em diferentes áreas dentro
da Tecnologia.
2. Quanto ao processo de desenvolvimento de sistemas, quais as maiores
dificuldades?
Na minha experiência, o principal problema para o desenvolvimento de
sistemas sob medida é a falta de especificações avindas do cliente e a
pouca percepção pelos mesmos de que os requisitos são a principal
atividade num processo de desenvolvimento. Muitas vezes os clientes
perguntam o preço sem nem mesmo passar as especificações e requisitos
básicos, e às vezes não percebem que esta também é uma parte do
processo, e que deve ser cobrada assim como o desenvolvimento do
sistema em si.
3. Quantos
colaboradores
estão
envolvidos
diretamente
nas
atividades
desenvolvimento dos softwares?
No meu caso desenvolvo em grande parte desenvolvo sozinho ou com pelo
menos 2 pessoas. Já tive equipes de desenvolvimento com mais de 5
46
pessoas, e muitas vezes uma quantidade maior de desenvolvedores não é
tão benéfico quanto poderia ser.
4. Como está dividida essa equipe (funções de cada colaborador)?
O ideal, na minha experiência, é que todos os colaboradores estejam aptos
a tanto desenvolver, quanto testar e definir requisitos junto ao cliente sendo
um deles responsável pela programação e execução de testes unitários.
5. Qual modelo de desenvolvimento é usado no desenvolvimento das
aplicações? Exemplo: Modelo em cascata, incremental, RAD.
Devido à necessidade de rapidez nas entregas, somada ao constante reuso
de códigos (e às tecnologias que uso, que incentivam o reuso), procuro
adotar um modelo como o incremental, buscando sempre um viés para a
“componetização”, procurando desenvolver módulos independentes que se
integram com outros módulos já desenvolvidos.
6. Quanto ao relacionamento com o cliente, ele é informado das etapas do
desenvolvimento do software ou adaptação de alguma funcionalidade ao
sistema? É ouvido quanto as suas sugestões?
Como desenvolvo software sob demanda, o aceite e requisitos do cliente
estão sempre na primeira importância. Busco seguir a idéia do “release
soon, release often”, ou seja, a liberação de “mini releases” onde o próprio
cliente pode
ir
testando e avaliando o
produto final durante
o
desenvolvimento. Durante a fase de desenvolvimento, busco montar um
ambiente de testes dentro do cliente, e regularmente, algo como duas vezes
por semana, enviamos as atualizações que são realizadas. Dessa maneira
conseguimos evitar que algum requisito seja mal interpretado com
antecedência, evitando desperdícios com retrabalho. Este processo pode
ser um pouco mais trabalhoso, mas ao longo prazo, compensa.
7. Em relação à equipe de desenvolvimento, qual a sua jornada diária?
Costumam reunir-se para discutir sobre o andamento dos projetos? Todos
têm acesso ao código do sistema desenvolvido?
47
Quando estou à frente de um projeto em desenvolvimento, busco realizar as
reuniões com bastante frequência. São reuniões rápidas, para esclarecer
algumas dúvidas e conferir os próximos passos do desenvolvedor. Todos
devem possuir acesso ao código, preferencialmente integral, quando
possível.
8. Quanto aos prazos de entrega (versões, correções, adaptações, etc.), como
são estipulados? Já ocorreu algum atraso? Se a resposta for sim, qual foi o
motivo?
Após a definição dos requisitos e após uma análise junto à equipe,
conseguimos fazer a definição de um prazo aproximado. Sempre
salientamos com o cliente que o prazo é aproximado e que normalmente
atrasa. Os atrasos são justificados, pois nem sempre uma demanda para
desenvolvimento do sistema que parece simples de fato é simples, mas
também algo que parece complicado, às vezes é facilmente resolvido.
Atrasos são frequentes, principalmente se algum processo necessita retorno
do cliente, que em geral coopera com este atraso não dando o retorno com
a agilidade necessária para que o desenvolvimento não atrase.
9. O que você considera como software de qualidade?
Um software de qualidade deve atender aos requisitos básicos, ser
orientado a testes, ou pelo menos ter uma boa suíte de testes. Deve ser
robusto, com rápida resposta.
Deve ser escalável, permitindo suas
aplicações tanto para situações de baixa demanda quanto grandes
demandas. Deve ser passível de ser adaptado ou alterado, possuindo o
código fonte aberto/acessível. Deve usar componentes robustos e também
com código fonte aberto/acessível e deve ter uma interface palatável ao
usuário.
3.3 APRESENTAR A ANÁLISE DOS DADOS
Após a análise dos dados levantados com o questionário apresentado, o que
promoveu um entendimento maior da aplicação dos conceitos do tema proposto
nesse trabalho de conclusão de curso, no caso, a utilização do extreme
48
programming como ferramenta de apoio desenvolvimento de software para
desktops, em empresas de pequeno porte.
3.3.1 DESAFIOS DO DESENVOLVIMENTO DE SOFTWARE
O processo de desenvolvimento de um software, por mais simples que essa
aplicação possa parecer, sempre será um desafio, segundo Dennis (2005), a etapa
de ciclo de vida de sistemas (SLDC), pode até parecer simples, mas não é.
Abordaremos duas formas de desenvolvimento o tradicional e o ágil.
O termo desenvolvimento tradicional é usado por alguns autores para designar uma
forma de desenvolvimento baseado no modelo em cascata. Esse modelo sugere
que as etapas de desenvolvimento, sejam feitas obedecendo a uma sequência onde
fase é dependente de uma anterior. Esse modelo é considerado ineficaz por alguns
autores, Teles (2006, p.30) afirma que: “Embora o desenvolvimento em cascata seja
reconhecidamente
ineficaz,
ainda
é
o
processo
mais
utilizado
para
o
desenvolvimento de sistemas”.
Outros modelos de desenvolvimento como o Incremental e RAD (Rapid Application
Development, desenvolvimento rápido de aplicação) também se encaixam no
desenvolvimento tradicional, mas seguem o mesmo princípio de sequência linear.
O conceito de desenvolvimento ágil está ligado como o próprio nome sugere ao
conceito de agilidade, mas também com praticidade e facilidade, Dennis (2005, p.
13) resalta sobre o desenvolvimento ágil, “o enfoque é dado ao ciclo de vida do
software, eliminando grande parte do excesso de documentação e o tempo gasto
com essas respectivas atividades”.
O fato de buscar a agilidade, praticidade nos processos dentro do ciclo de vida do
software, não quer dizer que algumas coisas são deixadas de lado ou feitas à grosso
modo, sem a busca pela qualidade. A construção de um software de qualidade faz é
o alvo dessa metodologia.
49
Uma das premissas do desenvolvimento ágil, é a comunicação, tanto com o cliente
que se origina no feedback dado ao cliente e recebido do mesmo, quanto com os
membros da equipe de desenvolvimento. Trazer o cliente “pra mais perto” do
projeto,
por
assim
dizer,
é
uma
das
intenções
dessa
metodologia
de
desenvolvimento.
Dentro
desse
conceito
de
desenvolvimento
ágil
encontra-se
o
Extreme
Programming, tema central da presente pesquisa, segundo Teles (2006) “o Extreme
Programing, é um processo de desenvolvimento que busca assegurar que o cliente
receba o máximo de valor de cada dia de trabalho de equipe de desenvolvimento.”.
Essa afirmação dada pelo respectivo autor, resalta ainda mais o conceito de
feedback e qualidade nos processos.
Baseada em um conjunto de quatro valores:
 Feedback
 Comunicação
 Simplicidade
 Coragem
Consorciados com as seguintes práticas:
 Cliente presente

Planejamento

Stand up meeting

Programação em par

Código coletivo
 Código padronizado
 Design simples
 Desenvolvimento orientado a testes
 Refatoração

Integração contínua
 Releases curtos

Metáfora
 Ritmo sustentável
50
O Extreme Programming busca a harmonia entre valores e práticas, no processo de
desenvolvimento do software, para um retorno positivo quanto ao investimento do
cliente.
3.3.2 APRESENTAÇÃO DA ANÁLISE DO QUESTIONÁRIO
Quando apresentada a questão relacionada quanto aos desafios enfrentados hoje no
mercado tecnológico, Duda Nogueira disse que:
Um dos grandes desafios, principalmente no Brasil é a falta de mão de obra
qualificada. Existem empregos, mas muitas vezes não existem pessoas
qualificadas para ocupá-los. Esse problema acontece tanto em outras áreas
técnicas como principalmente na Tecnologia da Informação, onde a grande
gama de conhecimentos necessários exige cada vez mais um profissional
especializado e que possa contribuir em diferentes áreas dentro da
Tecnologia.
A questão levantada por ele, resalta a necessidade de qualificação, a busca por
novas tecnologias, técnicas e formas de trabalho, promove um enriquecimento
intelectual da equipe e consequentemente será refletida nos resultados por ela
mostrados, uma equipe que atenda as necessidades do projeto e que esteja dentro
dos conceitos do Extreme Programming e fundamental para o sucesso dos
processos envolvidos.
Na questão 2, quando questionado sobre as dificuldade quanto ao processo de
desenvolvimento de sistemas o entrevistado disse que:
Na minha experiência, o principal problema para o desenvolvimento de
sistemas sob medida é a falta de especificações avindas do cliente e a
pouca percepção pelos mesmos de que os requisitos são a principal
atividade num processo de desenvolvimento. Muitas vezes os clientes
perguntam o preço sem nem mesmo passar as especificações e requisitos
básicos, e às vezes não percebem que esta também é uma parte do
processo, e que deve ser cobrada assim como o desenvolvimento do
sistema em si.
Nota-se aqui, um fator que sugere a uma das premissas do desenvolvimento ágil,
que é a presença do cliente, segundo Teles (2006, p. 41) “O desenvolvimento ágil se
51
baseia na premissa de que o cliente aprende ao longo do desenvolvimento, à
medida que é capaz de manipular o sistema”.
Nem sempre o cliente sabe necessariamente o que quer de um sistema, ele
apresenta apenas sua necessidade primária, ou muitas vezes sugere algumas
funcionalidades que não serão necessárias para a sua necessidade. O feedback, um
dos valores do Extreme Programming, quando aplicado fornece solução para essa
questão.
Na questão 3, quando foi levantada a questão sobre a quantidade de colaboradores
envolvidos diretamente nas atividade de desenvolvimento, a seguinte resposta foi
dada:
No meu caso desenvolvo em grande parte desenvolvo sozinho ou com pelo
menos 2 pessoas. Já tive equipes de desenvolvimento com mais de 5
pessoas, e muitas vezes uma quantidade maior de desenvolvedores não é
tão benéfico quanto poderia ser.
Aqui encontramos um dos critérios da formação de equipe segundo o Extreme
Programming, ou seja, pequenas equipes, um ponto que vai de encontro a outro
critério dessa metodologia é a programação em par, segundo o Duda Nogueira,
grande parte dos códigos são desenvolvidos por ele, a aplicação da programação,
em par, umas das práticas do Extreme Programming Teles (2006), nesse contexto,
poderia permitir a revisão dos códigos, tornando-os mais eficazes e simples, visto
que dois desenvolvedores juntos aumentariam a possibilidade de diferentes formas
de implementar algo.
Na questão 5, foi abordada a questão do modelo de desenvolvimento, e obtivemos a
seguinte resposta:
Devido à necessidade de rapidez nas entregas, somada ao constante reuso
de códigos (e às tecnologias que uso, que incentivam o reuso), procuro
adotar um modelo como o incremental, buscando sempre um viés para a
“componetização”, procurando desenvolver módulos independentes que se
integram com outros módulos já desenvolvidos.
Essa afirmação mostra o uso de um modelo incremental, porém, digamos com uma
filosofia mais ágil, pois busca o desenvolvimento dos módulos de forma
independente, ou seja, usando releases, que no fim, irão se integrar a outros
módulos já desenvolvidos. O “reuso” apresentado por ele, está ligado a uma das
práticas do Extreme Programming, o refactoring, onde altera-se parte do código sem
afetar sua funcionalidade, e assim poder reutilizá-lo.
Na questão 6, tratamos a questão de relacionamento com o cliente, como era feito
esse feedback quanto ao desenvolvimento ou adaptação de novas funcionalidades,
segundo Duda Nogueira:
Como desenvolvo software sob demanda, o aceite e requisitos do cliente
estão sempre na primeira importância. Busco seguir a ideia do “release
52
soon, release often”, ou seja, a liberação de “mini releases” onde o próprio
cliente pode ir testando e avaliando o produto final durante o
desenvolvimento. Durante a fase de desenvolvimento, busco montar um
ambiente de testes dentro do cliente, e regularmente, algo como duas vezes
por semana, enviamos as atualizações que são realizadas. Dessa maneira
conseguimos evitar que algum requisito seja mal interpretado com
antecedência, evitando desperdícios com retrabalho. Este processo pode
ser um pouco mais trabalhoso, mas ao longo prazo, compensa.
Nota-se que o entrevistado, aplica conceitos do Extreme Programming, valor como o
feedback, e práticas como releases curtos, desenvolvimento guiado a testes, outra
afirmação do Duda Nogueira, complementa com muita categoria esses conceitos, é
a seguinte, “Este processo pode ser um pouco mais trabalhoso, mas ao longo prazo,
compensa.”
Na questão 7, abordamos a questão relacionada ao acesso ao código do sistema
desenvolvido, a resposta foi a seguinte:
Quando estou à frente de um projeto em desenvolvimento, busco realizar as
reuniões com bastante frequência. São reuniões rápidas, para esclarecer
algumas dúvidas e conferir os próximos passos do desenvolvedor. Todos
devem possuir acesso ao código, preferencialmente integral, quando
possível.
Outra resposta que atende aos conceitos do Extreme Programming, segundo Teles
(2006, p.26) “Os desenvolvedores têm acesso a todas as partes do código e podem
alterar aquilo que julgarem importante”, caso fique um pouco confuso, outro par de
programadores pode utilizar o refactoring e torná-lo mais legível.
Na questão 9, tratamos sobre o que seria um software de qualidade, segundo Duda
Nogueira:
Um software de qualidade deve atender aos requisitos básicos, ser
orientado a testes, ou pelo menos ter uma boa suíte de testes. Deve ser
robusto, com rápida resposta. Deve ser escalável, permitindo suas
aplicações tanto para situações de baixa demanda quanto grandes
demandas. Deve ser passível de ser adaptado ou alterado, possuindo o
código fonte aberto/acessível. Deve usar componentes robustos e também
com código fonte aberto/acessível e deve ter uma interface palatável ao
usuário.
Os critérios apresentados por ele refletem boa parte da, digamos filosofia do
Extreme Programming, onde questões como orientação a testes, código coletivo, ser
passível de alteração ou adaptação e tudo isso focado no bem estar do cliente.
53
3.4 QUANDO NÃO UTILIZAR O EXTREME PROGRAMING
Segundo Telles (2006, p. 276) “O XP é um processo de desenvolvimento de
software simples e bastante eficaz. Entretanto, sua adoção não é fácil e, em alguns
casos, e pouco viável.”. Em termos técnicos o XP atende perfeitamente a maioria
dos projetos, desde que obedeça ao critério de 12 desenvolvedores no máximo por
equipe, o que torna complicada sua aplicação, tem mais a ver com questões
culturais de algumas empresas. Hábitos como: sistema de premiação, contratos de
escopo fechado, e outras questões como possíveis adaptações no escritório onde o
projeto será executado e as mudanças na forma de trabalhar que o XP acaba
promovendo, Telles (2006), podem impedir a perfeita execução dessa metodologia.
54
4
CONCLUSÃO E RECOMENDAÇÕES
4.1 CONCLUSÃO
De acordo com Teles (2006, p. 295), “processos ágeis, em particular o Extreme
Programming (XP) têm varrido empresas de desenvolvimento de software no mundo
todo”. Diante dessa afirmação concluímos que o desenvolvimento de sistemas, não
é apenas conhecer linguagens, ou escrever centenas de linhas de código, todo o
componente, digamos, organizacional dos processos envolvidos, tem um papel de
vital importância para o sucesso para a conclusão do projeto.
E quando o que está em pauta é o desenvolvimento sob demanda ou até mesmo
alteração de algo já pronto, a forma de como isso será feito, os envolvidos, quais
serão as alterações, são detalhes que fazem toda diferença. Ter uma estratégia é
fundamental para qualquer empresa, alcançar determinado objetivo, por menor que
ela seja, da mesma forma, ter uma metodologia no processo de desenvolvimento de
software deve ser presente nas empresas que atuam nesse ramo, ou possuem um
setor que seja responsável por essa atividade.
Dentro desse contexto, mais precisamente no capítulo 3, ao analisarmos os dados
coletados, mostramos como o Extreme Programming pode ser uma ferramenta de
extrema importância no processo de desenvolvimento de sistemas, assim atendendo
ao primeiro objetivo específico proposto. O segundo objetivo o de mostrar os valores
e práticas do Extreme Programming, foi apresentado praticamente e quase todo o
trabalho, desde o capítulo 2 e dentro da análise de dados do capítulo seguinte.
O mercado torna-se cada vez mais competitivo, e a busca por técnicas que
melhorem o desempenho, fornecendo um melhor resultado final na execução dos
processos entre outras vantagens, pode ser um diferencial para qualquer
organização.
O grande marco dessa pesquisa foi o questionário, respondido por alguém que já é
profissional do ramo, que é atuante no setor tecnológico, mostrar seu ponto de vista
e conceitos sobre a temática abordada, mesmo não sendo utilizador do Extreme
55
Programming, creio que por sua experiência, utiliza conceitos muito semelhantes
aos apresentados do Extreme Programming. As opiniões expressas por ele deram
uma visão, digamos, prática sobre todo o conceito antes visto na teoria, o que
reforçou os valores e as práticas do Extreme Programming.
4.2 RECOMENDAÇÕES
Estagnar em qualquer setor que seja oferece muito risco ao sucesso, enxergar com
maus olhos mudanças de hábitos, culturais ou sociais dentro da organização,
compromete a possibilidade de crescimento profissional, portanto, a busca por
novos conceitos e formas de trabalhar pode ser o primeiro passo para o sucesso.
Recomenda-se
que
organizações
que
desconhecem
metodologia
de
desenvolvimento ágil, sobretudo o Extreme Programming (XP), possam pesquisar
sobre o assunto, empresas que já o utiliza, e assim verão que essa metodologia
pode contribuir e muito para a melhoria na forma de trabalho e nos resultados que
surgirão deles.
56
5 REFERÊNCIAS BIBLIOGRÁFICAS
ANDRADE, Maria Margarida. Introdução á metodologia do trabalho científico.
4ª ed. São Paulo: Atlas, 2001.
CHIAVENATO, Idalberto. Introdução à Teoria Geral da Administração. 7 ed. Rio de
Janeiro: Editora Campus, 2003.
DEMO, P. Metodologia científica em ciências sociais. São Paulo: Atlas, 1992.
DENNIS, Alan. Análise e Projeto de Sistemas. 2. ed. Rio de Janeiro: LTC, 2005.
GIL, Antonio Carlos. Como elaborar projetos de pesquisa. 4. ed. São Paulo: Atlas,
2002.
LAUDON, Kenneth; LAUDON, Jane. Sistemas de Informação Gerenciais. 9. ed. São
Paulo: Pearson Prentice Hall, 2010.
MAXIMINIANO, Antônio Cesar A. Introdução à administração. 4. ed. São
Paulo: Editora Atlas, 1995.
MURDOCCA, Miles. Introdução à Arquitetura de Computadores. Rio de Janeiro:
Elsevier, 2000.
NORTON, Peter. Introdução à Informática. São Paulo: Pearson MakronBooks, 2007.
PRESSMAN, Roger S. Engenharia de Software. 6. ed. São Paulo: McGraw-Hill,
2006.
PRESSMAN, Roger S. Engenharia de Software. São Paulo: Pearson Makron Books,
1995.
REZENDE, Denis Alcides; ABREU, Aline França. Tecnologia da Informação –
Aplicada a Sistemas de Informação Empresarias. São Paulo: Atlas 2001.
TELES, Vinícius Manhães. Extreme Programming : Aprenda como encantar seus
usuários desenvolvendo software com agilidade e alta qualidade. São Paulo:
Novatec Editora, 2006.
<http://www.saomateus.es.gov.br/site/perfil-sao-mateus.php> acesso em: 17 outubro
2012
<http://gazetaonline.globo.com/_conteudo/2012/06/noticias/a_gazeta
/economia/
1269682-fabrica-de-onibus-vai-abrir-300-empregos-em-sao-mateus.html>
acesso
em: 24 outubro 2012.
57
< http://gazetaonline.globo.com/_conteudo/2011/07/noticias /a_gazeta /economia
/904569-paranapanema-vai-abrir-fabrica-de-cobre-em-sao-mateus.html> acesso em:
24 outubro 2012.
Download

A utilização do Extreme Programming como ferramenta de apoio