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.