Webinsider

Desenvolvimento

Repensando o desenvolvimento de software

14 de outubro de 2009, 20:22

Por que falham tantos projetos de criação de software? A metodologia tradicional de desenvolvimento de software, mais usada hoje, perde terreno para a utilização de metodologias ágeis inovadoras.

Por Dyego Luz

Para início de conversa, farei uma introdução de como se desenvolve software hoje e apresentarei a metodologia que solucionará grande parte dos seus problemas durante a criação de uma aplicação.

O objetivo é que você conheça os problemas da metodologia de desenvolvimento de software mais usada atualmente. É de extrema importância que você dedique um tempo para perceber o porquê da necessidade de repensar o desenvolvimento de software tradicional e utilizar metodologias ágeis inovadoras.

Aceitar uma mudança de paradigma como a que será introduzida no final deste artigo exigirá bastante coragem de sua parte.

Pois bem, vamos ao que interessa. Antes de começarmos a discutir e refletir sobre qual a melhor forma de desenvolver softwares de qualidade e de maneira produtiva é preciso buscar uma resposta para a uma pergunta que frequentemente tem voltado à tona: por que uma grande porcentagem dos projetos de criação de softwares falham?

Modelo em cascata

Para chegar a uma colusão definitiva vamos analisar como a maioria dos softwares é desenvolvida hoje em dia. O modelo de desenvolvimento mais utilizado atualmente é conhecido como “modelo em cascata”. Ele funciona de forma puramente sequencial através da distribuição de tarefas específicas para pequenas equipes envolvidas no projeto.

Essa metodologia se parece bastante com a utilizada nas grandes fábricas, principalmente após a revolução industrial.

Apesar de não parecer, isso é um grande problema. Não é porque deu certo no processo industrial que dará certo no desenvolvimento de software. Outro erro comum é pensar na criação de um software como um procedimento de fabricação, criando a idéia da “fábrica de software”.

Para comprovar a total diferença entre como deve ser o desenvolvimento de software e como é o processo de fabricação nas indústrias do mundo todo, vamos entender como funciona o processo industrial.

Assim como no modelo em cascata, as fábricas utilizam a ideia de produção sequencial e divisão de tarefas específicas para cada profissional. Ou seja, em uma fábrica de tecidos esse processo funcionaria da seguinte forma: primeiro seria selecionada a matéria prima, depois feita à pintura, o corte e assim sucessivamente.

Para cada etapa de produção, existem profissionais capacitados para fazer um trabalho manual. Esse trabalho é basicamente mecânico, ou seja, ele aprendeu a fazer e simplesmente o faz. Ele não necessita sempre de um esforço intelectual constante para isso.

É manual ou intelectual?

Dessa forma, também acaba acontecendo no modelo em cascata. Já da pra imaginar onde está o problema no fracasso da maioria dos softwares produzidos nesse modelo. Partindo do principio de que o processo de fabricação não necessita de um trabalho intelectual e sim de um trabalho mais manual, vamos refletir se o processo de desenvolvimento de software é manual ou intelectual.

Quando se desenvolve um software seguindo esse modelo tradicional em cascata, os desenvolvedores ficam limitados a fazer o que foi definido por uma analista anteriormente. Isso torna o trabalho do desenvolvedor algo mais manual do que intelectual, o pode atrapalhar bastante.

Desenvolver software está mais ligado a ideia de desenvolver um livro, uma obra de arte do que produzir tecido. Portanto, deve ser um trabalho bem mais intelectual do que manual.

Talvez isso ainda não seja suficiente para te convencer de que esse modelo pode gerar muitos problemas, então vamos aprofundar um pouco mais.

O desenvolvimento em cascata é dividido em etapas sequenciais conhecidas como análise de requisitos, projeto, implementação, integração, teste e depuração, instalação e manutenção de software.

Vamos analisar, de maneira resumida, cada etapa e os problemas que elas podem causar no produto final.

Análise de requisitos

Vamos iniciar pela primeira etapa, a análise de requisitos. Nessa etapa o cliente apresenta suas necessidades para a equipe de análise que decidirá as funcionalidades do sistema. É quando o primeiro problema já aparece. Normalmente o cliente apresenta algo completamente abstrato como: “Eu quero uma loja online”. A partir disso os analistas é que decidirão quais funcionalidades essa tal loja terá.

Todos sabem que os clientes nunca pensam em necessidades da forma como analistas pensam. Ou seja, o sistema terá funcionalidades que para o cliente não são tão necessárias, assim como não terá as funcionalidades que são realmente necessárias ao cliente.

O projeto

Segunda etapa, o projeto. É exatamente nessa etapa que começa um dos maiores problemas desse modelo - a falta de comunicação. O processo de desenvolvimento vira um verdadeiro telefone sem fio.

Durante essa etapa, os projetistas irão documentar o sistema pelo que receberam dos analistas. Surge outro problema. Quase sempre a análise feita pelos analistas não é suficientemente concreta para fazer com que os projetistas criem uma documentação realmente significativa de como o sistema deverá funcionar.

Implementação

Chegamos à terceira etapa, implementação. Aqui começa o estresse. Os programadores recebem a documentação dos projetistas e começam a criar as funcionalidades. Mais um problema. Os programadores desenvolvem todo o software com base em um documento (já bem diferente do que o cliente gostaria). Mas não para por ai. Pela falta de comunicação que existe entre o cliente e o desenvolvedor, o software termina se tornando algo totalmente diferente do que o cliente imagina que receberá no final do projeto. Ele não ficará nem um pouco feliz em saber que todo o dinheiro que investiu está indo pra lata do lixo.

Integração

Quarta etapa. Como os programadores se dividem para desenvolver partes diferentes do software, é necessário que exista uma etapa só para integrar essas partes. Encontramos outro problema. Programadores pensam diferentes e geralmente tem dificuldade em se comunicar bem com outros programadores por medo de ter um código ruim ou se mostrar inexperiente em determinadas áreas. Isso, além de ser uma bobagem, é preocupante na hora de integrar o sistema e pode gerar códigos difíceis de reutilizar. Além disso, pode criar as chamadas ilhas de conhecimento na equipe, onde alguns programadores conhecem bem uma parte do código, mas não conhecem nada sobre a outra parte. Imagine se um sair da equipe de repente.

Teste e depuração

Em fim chegamos à quinta etapa. Tirem as crianças da sala. Esta é a etapa mais complicada, chata e preocupante nesse modelo de desenvolvimento. Testes e depuração. É nessa parte que as maiores dores de cabeça começam a surgir em toda a equipe. A partir de agora é só problema, problema e problema. Nesse modelo de desenvolvimento o custo de alteração aumenta exponencialmente a cada minuto que passa e para chegar a esta etapa já se passaram muitas e muitas horas, dias ou meses.

Como o sistema foi todo desenvolvido sem testes, só agora aparecem os erros. Acreditem, eles muitas vezes não são corrigidos. Isso quando os projetos já não fracassaram antes dessa parte. O porquê disso é fácil de explicar.

Quando se tem milhares de linhas de código, corrigir um erro pode levar meses ou até anos. E como tempo é dinheiro, no desenvolvimento de software isso se torna muito custoso. Para que você possa entender melhor, seria como se você criasse um ônibus espacial e quando fosse testar ele explodisse por culpa de um simples parafuso.

Não é necessário comentar as outras etapas, já que na maioria dos casos os projetos nem chegam nelas. Acabam fracassando na etapa de testes.

A solução?

Qual a solução para que isso não aconteça?

Você não deve se limitar a esse modelo de desenvolvimento só porque ele é o mais usado. Ao contrário, você deve abrir a sua mente para conhecer e estudar novas metodologias de desenvolvimento de software com qualidade e de forma produtiva. Ainda discutiremos muitos sobre essas metodologias ágeis.

Para quem se interessou em se livrar desses problemas e desenvolver softwares de qualidade, acompanhem os próximos textos. Em breve estarei postando sobre eXtreme Programming ou simplesmente XP, uma metodologia de desenvolvimento ágil com valores na comunicação, simplicidade, feedback e coragem.

XP parte do princípio de que desenvolver software de qualidade está totalmente relacionado com a comunicação entre o cliente e o desenvolvedor, além de buscar encurtar o espaço de tempo entre a codificação e a entrega das funcionalidades, tentar fazer todos trabalharem em todo o código, entre outras características.

Uma característica do XP que pode deixar você um pouco confuso no início é conhecida como TDD - desenvolvimento guiado por testes.

TDD consiste em criar testes antes de desenvolver. Como assim? Vou testar algo que ainda não existe? Exatamente.

Primeiro são criados os testes de cada funcionalidade ainda não existente. Logicamente elas vão falhar. Aí entra o desenvolvedor para criar um código suficiente para que o teste valide e passe. Com isso você consegue códigos melhores, mais simples, com menos linhas e que fazem apenas o necessário, diminuindo em 90% a probabilidade de erros futuros.

Ufa… Se você foi guerreiro e chegou ao final deste texto enorme, parabéns. Provavelmente você deve ter ficado bastante curioso para conhecer mais sobre as metodologias ágeis. Mas seria querer demais que você aprendesse tudo isso de primeira.

Por isso nos próximos textos vamos apresentar uma metodologia de desenvolvimento ágil capaz de desenvolver, em apenas três meses, softwares que costumam ser desenvolvidos em três anos. Pois é, o tal do Extreme Programming é capaz de ajudar a realizar façanhas como essa. Aos poucos vamos ver outros detalhes do XP, para não tornar o assunto muito confuso.

Acompanhe, vamos tentar explicar como o XP funciona e, dessa forma, ajudar você a eliminar de vez a probabilidade de fracasso no seu projeto. XP vai mudar sua vida profissional para melhor. Acredite! [Webinsider]

.

Acompanhe o  Webinsider no Twitter

.

Sobre o autor

Dyego Luz (dyegodiscipulo@gmail.com) é estudante de Ciência da Computação e fascinado por desenvolvimento de aplicações web. Mantém o blog Repensando a web e o Twitter dyegoluz.

Apoio:

  • LayerDev Serviços de Webhosting Profissional

Palavras-chave relacionadas a este texto: [ formação profissional ]

Comentários

18 pessoas comentaram o artigo "Repensando o desenvolvimento de software"

C'est moi Data: 14/10/2009 às 8:58 pm

Atividade:

Cidade:

Não me sai da cabeça a suspeita que essas novas metodologias e regras que surgem todos os dias são necessárias devido a popularização da informática.

Cada dia chegando ao mercado gente menos preparada e o pior: sem espírito crítico, reflexão sobre o que faz.

Então passa a ser necessário regras e mais regras.

Começa a parecer aqueles avisos em eletrodomésticos americanos:

“Não coloque a mão dentro do liquidificador quando ele estiver ligado.”

“Animais vivos podem se machucar se colocados dentro do micro-ondas ativado”.

Rafael Ramos Data: 14/10/2009 às 10:20 pm

Atividade:

Cidade: Rio de Janeiro

Dyego,

Belo texto. Porém, ficaria muito mais completo se ao final você falasse um pouco sobre cada metodologia ágil, sobretudo, sobre o Scrum que vem crescendo a passos largos no Brasil.

Grande abraço. Vou visitar seu site.

Ellicristian Data: 14/10/2009 às 10:42 pm

Atividade: programador

Cidade: presidente prudente - sp

Acho que para desenvolver um sistema o que mais conta é a experiencia. Quanto mais eu desenvolvo mais eu aprendo, melhores meus sistemas ficam.
Tudo bem que trabalho sozinho, talvez esteja ai o motivo do meu sucesso, + eu creio que o grande problema de se desenvolver em grupo é a falta de experiencia, muitos acham que o que aprenderam na faculdade é o modelo ideal, e as vezes a experiencia te mostra que não é este o caminho.
Já programo a pelo menos uns 15 anos, e creio que a experiencia é o caminho do sucesso e de produtos de qualidade.

Douglas Camargo Data: 15/10/2009 às 8:55 am

Atividade:

Cidade:

Como se compara XP ao Scrum?

Guilherme de Carvalho Carneiro Data: 15/10/2009 às 9:27 am

Atividade: Desenvolvimento de sistemas

Cidade: Palmas

Douglas na verdade o XP e Scrum são duas metodologias que se complementam, a XP está mais para a parte de desenvolvimento em si e o Scrum na parte de gerenciamento. O mais indicado seria trabalhar com as duas, e isto é o legal das metodologias ágeis, nada é fixo, você pode até pegar alguma característica que ache interessante de outra metodologia e trabalhar também no seu projeto.

Existe uma outra metodologia menos famosa a OpenUP, que pelo que lí é bem legal para equipes mínimas.

Pedro José Rodrigues Data: 16/10/2009 às 12:05 am

Atividade:

Cidade:

Artigo muito bom. Parabéns!!!

Flávio Elorza Data: 16/10/2009 às 10:08 am

Atividade: Coordenador de TI

Cidade: São Paulo

Dyego, voçe tem dados que comprovam a eficácia do scrum ? O que entende por falha?
Processo de software é um processo construtivo como todos, é de fato como uma fábrica que produz o que foi especificado e qualifica as entregas produzidas.
Vale lembrar que se o resultado de requisito é ruim não é culpa do método em cascata e sim do analista de sistemas que é fraco tecnicamente, da mesma forma vale para a implementação e testes.
TDD não é absolutamente nada de novo. Voçe conhece algo chamado teste de mesa?

sds,
Flavio

Dyego Luz Data: 16/10/2009 às 2:50 pm

Atividade: Desenvolvedor de Software / Designer

Cidade: Natal

Cara, o que procurei mostrar são as “vantagens ” em desenvolver software utilizando metodologias ágeis. No próximo artigo vou introduzir o desenvolvimento ágil de software e vocês verão que o que torna o XP, scrum, ou qualquer metodologia ágil utilizada ser tão interessante e produtiva é a filosofia por traz e não apenas as práticas como simples regras. Sobre os dados que comprovam a eficácia do scrum, eu não tenho dados diretos, porém possuía gráficos que comprovam a ineficiência dos projetos de softwares desenvolvidos no Brasil (utilizando a idéia do desenvolvimento em cascata) e como o manifesto ágil veio para reformular a forma como se desenvolve software e tentar “corrigir ” os problemas existentes na maneira “trabalhosa e arriscada” que se desenvolve software tradicionalmente. Tudo isso sem falar que a ineficiência dos projetos de softwares no Brasil reduziu com a utilização de metodologias ágeis. Como ocorre no manifesto ágil, devemos nos preocupar mais com pessoas e não ferramentas ou documentos abstratos. Além de tudo isso, se observamos o texto do “criador” do modelo em cascata vamos ver que ele mesmo fala que esse modelo provavelmente apresentará muitas falhas e nas paginas seguintes apresenta soluções que estão muito próximas das metodologias ágeis. Mas parece que todos observaram apenas a primeira pagina escrita.

Leiam:
http://pt.wikipedia.org/wiki/Modelo_em_cascata
http://agilemanifesto.org/
http://www.manifestoagil.com.br/

PS: Não achei os dois gráficos sobre os fracassos dos projetos de software ( andei formatando o notebook a um tempo ) e o que evoluiu nos últimos anos com a introdução as metodologias ágeis. A evolução ainda não e extraordinária mais já existe. Seria ótimo, se alguém conseguir achar na net os gráficos, postar nos comentários deste artigo. Aconselho também que vocês leiam o artigo do Royce, citado nesse texto da Wikipédia, para entender como ele apresentou o que seria chamado de modelo em cascata e como ele próprio definia “ser um risco e um convite para falhas”.

Att,

Dyego Luz

Renato Medina Data: 16/10/2009 às 4:33 pm

Atividade: Desenvolvedor

Cidade: Pinheiros/ES

Olá Diego,

Aguardo ansioso por seus posts. Venho lendo alguns artigos a respeito do desenvolvimento ágil e de fato ele vem melhorar e muito nossa área.

Seus artigos serão de grande valia para qualquer desenvolvedor que queira melhorar a forma como trabalha.

Abraços.

10° Rodrigo Cavicchiolli Maia Data: 16/10/2009 às 8:54 pm

Atividade: Empresário

Cidade: Bauru

Diego,

Um bom resumo sobre os problemas da metodologia cascata, só acho arriscado dizer que metodologias ágeis são a salvação do mundo e solução de todos os problemas. Penso em produção de software muito mais análoga a construção em engenharia, do que processos fabrís. Cada software é único, e sua produção esta inserida em um cenário, esses fatores devem ser analisados para só então determinar a metodologia adequada.

11° Dyego Luz Data: 17/10/2009 às 12:15 pm

Atividade: Desenvolvedor de Software / Designer

Cidade: Natal

Mesmo fazendo uma relação com a engenharia existem algumas características que me fazem ver o processo de desenvolvimento de um software como algo diferente disso e mais próximo a uma produção artística. Nenhum cliente pede algo como “Da pra colocar essa casa um pouco mais pra esquerda” depois de pronta. Porém esse tipo de coisa acontece com freqüência e projetos de software. E assim como acontece na criação de livros entre outras artes, no software é sempre importante criar o software, repensando tudo sempre e refatorando códigos entre outras praticas que são mais parecidas nos processos de criações artísticas. Mudanças sempre acontecerão durante esse processo, a grande “sacada” é está preparado para elas sempre que forem necessárias. Por exemplo, quando se escreve um livro não se escreve tudo em uma ordem sem voltar atrás e alterar parágrafos, se escreve fora de ordem geralmente. Por essas e outras que gosto de comparar o desenvolvimento de software a um processo de criação artística. Sobre ser a salvação de todos problemas… Vejo como uma “salvação” para os problemas relacionados acima no texto. Lógico que sempre existirão problemas nos projetos de software e que dificilmente serão resolvidos mas eles podem ser minimizados utilizando metodologias ágeis.

Estou adorando o feedback de vocês em relação aos textos, gosto bastante de poder ouvir outras opiniões e discutir sobre vários temas. Só assim nossa comunidade pode se desenvolver e se atualizar com as novas tecnologias, metodologias ou qualquer coisa que possa surgir para melhorar nosso trabalho aumentando nossa produtividade e qualidade dos nossos produtos.

Abraço,

Dyego Luz

12° Leandro S. Data: 19/10/2009 às 6:48 pm

Atividade: Programador

Cidade: Ourinhos

Muito bom artigo, e vem de encontro a nossa adoção do XP na empresa. XP é uma forma totalmente nova de pensar e equacionar os problemas. XP a primeira vista, parece algo sem pé nem cabeça, idiot e que jamais vai funcionar, mas que quando você vai testando e entendo a metologia ágil, no final, sempre sobra a pergunta: “Porque eu não uso isso a muito mais tempo?”.. É simplesmente fantástico o grau de produtividade e de acertividade no projeto, melhoramos muito isso na empresa.. Estou amando XP, tem muito pela frente ainda, mas o que já botamos em prática, ficou jóia.

Abraço
Valeu Dyego

13° Flávio Elorza Data: 19/10/2009 às 9:33 pm

Atividade: Coordenador de Projetos de TI

Cidade: São Paulo

Dyego,
Entendi perfeitamente seu texto e, antes de mais nada achei o conteúdo bem válido.
No entanto, acho que não há mais tanta demanda para grandes projetos de sistemas, isto posto metodologias como análise estruturada de sistemas, RUP e outras que se baseiam em um modelo esperial (e não cascata como diz) tornam-se improdutivas em face ao modelo “ágil” - que suporta muito bem projetos menores.
Por fim, penso que não existe uma receita de bolo ou o “ovo de colombo”, onde basta aplicar uma metodologia e pronto, mas sim a combinação delas adequado a proposta e a condição da empresa.
Por fim, vale lembrar que a essência continua a mesma, isto é fazemos software para atender requerimentos de negócio e não metodologias.

É isso e um grande abraço.
Flávio

14° Dyego Luz Data: 20/10/2009 às 7:53 pm

Atividade: Desenvolvedor de Software / Designer

Cidade: Natal

Flávio Elorza obrigado pelos comentários, entendi o que você disse e concordo em partes, são exatamente comentários desse tipo que engrandecem as discussões sobre esses assuntos!

Abraço,

Dyego Luz

15° Filipe Data: 21/10/2009 às 7:17 am

Atividade: Programador

Cidade: Fpolis

Dyego, é preciso ter muita cautela quando falamos “por isso que os projetos de software falham” pois pode parecer que as metodologias ágeis fazem verdadeiras mágicas nas empresas de software e isso você sabe que não é verdade.

Na minha humilde opinião fazer uma junção de metodologias ainda é a melhor solução para as empresas.

Abraços

16° Rodrigo Mourão Data: 21/10/2009 às 12:41 pm

Atividade:

Cidade: SP

Dyego,

Acho interessante esta idéia de comparação entre as metodologias de desenvolvimento de software pois sou, meio que interessadíssimo neste tipo de assunto.

Até hoje ouço de diversos métodos de desenvolvimento e que cada um com sua particularidade traz ganhos, mas não consigo enxergar detalhes práticos na aplicação deles na empresas.

Será mesmo que metodologias ágeis são o ideal ?

Será que ainda não chegamos a uma forma de garantir o bom desenvolvimento de software com bons profissionais, com uma base de conhecimento científico e técnológico ?

17° Cristiane Nayara Oliveira Data: 23/10/2009 às 8:16 pm

Atividade: Acadêmica de Sistemas de Informação

Cidade: Montes Claros - MG

Dyego,

Artigos como esse são de grande valia para a formação profissional de estudantes como eu. Afinal durante a graduação é tudo muito lindo e teórico. Discussões, como a que está ocorrendo nos comentários, contribuem bastante para o desnvolvimento de uma visão crítica, muito importante em uma carreira profissional.

Finalizando, gostaria de ressaltar que nada é 100%. Então, não se esqueça de relatar os contras das metodologias ágeis.

18° Dyego Luz Data: 24/10/2009 às 2:58 pm

Atividade: Desenvolvedor de Software / Designer

Cidade: Natal / RN

Rodrigo, essa questão sobre as metodologias ágeis serem ideais, vai muito da experiência usando ou de pessoas que a usam. Todos que conheço e que usam da maneira correta, entendendo o porque de usa-las e a filosofia por trás se deram muito bem usando.

Abraço,

Dyego Luz

Avisos
Os ítens com asterisco ( * ) são campos de preenchimento obrigatório.
Todos os links inseridos nos comentários possuem o atributo rel="nofollow" para impedir com que user agents (como os mecanismos de busca) sigam os links inseridos para desestimular spammers.
Todos devem se identificar através de e-mail válido.
Os e-mails dos usuários não serão divulgados no site.
Comentários:

Preencha os dados abaixo e clique em enviar

Outrolado.com.br

Leia

Uma proposta para a classificação de projetosUma sugestão para classificar tipos de projetos em TI: projetos de sistemas, mapeamento de processos, infraestrutura, estratégia, produtos, serviços, legislação, mercado, gerência de mudanças e melhoria contínua. Por Edivan Fulgencio

Linguagens de programação, qual devo escolher?Como desenvolvedor, procure uma linguagem que facilite o avanço de seu conhecimento da melhor e menos dolorosa forma possível. Caso você consiga, essa é a ideal. Por Dyego Luz

Viva cada dia de um projeto como se fosse o últimoTodas as etapas do projeto devem ser imbuídas de um sentimento comum de que hoje tudo tem que ser realizado perfeitamente para que cada dia seja agradável para todas as partes, inclusive o último. Por Gilberto Alves Jr.

Uma breve história do gerenciamento de projetosA construção das pirâmides do Egito, a montagem da Estátua da Liberdade, a Torre Eiffel, a construção da bomba atômica e a expedição do homem à Lua são exemplos históricos de gerenciamento de grandes projetos.
Por André Luís Lima de Paula

Um critério para saber se o meu projeto vale a pena Estabeleça um prazo e trabalhe com toda a sua energia até lá. Depois faça uma estimativa da distância que se encontra do objetivo final, e decida se vale a pena continuar trabalhando no projeto.
Por Marco Gomes

Produtividade vem da simplicidade e do foco Nas equipes de desenvolvimento, o caminho mais fácil para a produtividade é retirar tudo que não é essencial e se concentrar no objetivo. Use ferramentas, metodologias, mas liberte-se das distrações. Por Marco Gomes

Desenvolvimento de software é sempre valorizadoUm desenvolvedor dedicado e competente tem lugar na empresas, que atualmente valorizam Java e .NET. Se você tem a aptidão e se preparar bem, seu caminho em TI estará garantido desde o começo. Por Charles Niza

Handerson Ferreira Gomes

Porque usar ScrumMetodologias ágeis têm em seu cerne a certeza da mudança e a falta de detalhes… e oferecem formas de lidar com elas. Por Handerson Ferreira Gomes

Webinsider