Técnicas de Testes de Software

[quote=peczenyj]
Em mais de um ano trabalhando com Scrumm eu aprendi muita coisa, principalmente comportamental: eu questiono e sou questionado pelas minhas decisões. Geralmente isso é benefico para o time e todos colaboram no trabalho de uma forma mais ativa. No fim do dia vc sente orgulho do que fez, até.[/quote]

Infelizmente muito poucas pessoas que se intitulam “desenvolvedor” ou “programador” ou algo equivalente não sabem o que é sentir orgulho pelo trabalho bem feito. É dificil que alguem sinta isso num ambiente onde valores não são bem vindos. O unico jeito de sentir orgulho pelo trabalho é trabalhar com uma metodolgia que valorize o seu trabalho tanto quanto vc.

Muitos acham que agil significa “codificar o que quero, quando quero do jeito que quero”. É exatamente o contrário.

[quote=sergiotaborda]
Muitos acham que agil significa “codificar o que quero, quando quero do jeito que quero”. É exatamente o contrário. [/quote]

acho que nao muitos… bem poucos alias. pessoal ja deu uma boooa esclarecida. é como a frase “agil é aquela metodologia que nao precisa de documentacao!”. (quase) ninguem mais fala isso.

[quote=Paulo Silveira][quote=sergiotaborda]
Muitos acham que agil significa “codificar o que quero, quando quero do jeito que quero”. É exatamente o contrário. [/quote]

acho que nao muitos… bem poucos alias. pessoal ja deu uma boooa esclarecida. é como a frase “agil é aquela metodologia que nao precisa de documentacao!”. (quase) ninguem mais fala isso.[/quote]

LoL se vc se refere a pessoas que sabem o que é agil , ou pelo menos usam, então sim.
Agora se vc se refere a todos os desenvolvedores ,não concordo. Especialmente os novatos e aqueles que foram bitolados em metodologias tradicionais acham que agil é a maneira de fazerem menos coisas burucráticas pela simples forma de não fazer nada. Muitos nem sabem o que é escrever codigo bem, quando mais saber que isso é uma forma de documentação.

Realmente, muita gente usa ágil como desculpa. Mas isso é uma atitude irresponsável, não algo que deva ser usado contra a metologia ágil séria, que de fato existe.

[quote=sergiotaborda]
LoL se vc se refere a pessoas que sabem o que é agil , ou pelo menos usam, então sim.
Agora se vc se refere a todos os desenvolvedores ,não concordo. Especialmente os novatos e aqueles que foram bitolados em metodologias tradicionais acham que agil é a maneira de fazerem menos coisas burucráticas …[/quote]

é, talvez eu esteja meio viciado as empresas que estamos dando consultoria e aos alunos que passam por aqui… mas é bom ter pensamento positivo!! :).

O pior é que já vi más consultorias queimarem o filme do ágil, e depois, ser difícil sequer conversar com um gestor de uma empresa, traumatizado, sobre usar uma metodologia assim. :cry:

Isso é uma piada? :lol: 200000 por mes? ta doido???
sou arquiteto, desenvolvedor, testador e ganho miseros 2k por mes fio…
acorda marcio… isto e vida e não ficção… nunca que vc vai ganhar 20k neste pais a menos que vc seja um deputado…
ou tenha um papai com bastante $$$ que monte uma empresa pra vc… senão esqueça…

agora voltando ao topico… ja vi empresas que agil significa hora extra…

[quote]Tem mais um ponto ai. Por que motivos vc quer ser agil?

Isso é uma boa pergunta: existem empresas que não querem. Existem empresas que dão MUITO certo sem ser agil e, quando tentam usar algo como Scrum, falha.

Eu vejo o seguinte: vc precisa responder rapido ao cliente? Se sim, agile é uma boa opção.

Imagine que vc esta desenvolvendo um sistema complexo e vc vai lançando releases de tempos em tempos com alguma funcionalidade suficiente e tem tempo de receber feedback do que o cliente usou e achou: é um bom passo para vc evitar de fazer aquela tela pq o cara de terno azul pediu mas que todo mundo sabe que é inutil, pois vc pode jogar com coisas realmente uteis e, quando chegar a hora de fazer o relatorio detalhado do nada ao lugar nenhum simplesmente não vale a pena investir mais no projeto.

Agora imagine um portal que oferece serviços específicos e, um dia, a concorrência lança um produto ANIMAL e INOVADOR: vc acha que vai fazer frente a isso tendo uma fase de levantamento de requisitos, uma fase de … , uma fase de desenvolvimento, uma fase de teste (e uma fase de demissões pq demorou mais do que o previsto)? Nesse caso a empresa tem que reagir rapido.

Mas como ela reage? Tem muitas formas, uma delas é lançar algo O MAIS RAPIDO POSSIVEL. Ah mas ai alguem diz ‘puxa, mas o css ta feio, tem um dropbox no lugar de um [buzzword da web 2.0], ta incompleto, não tem toda a experiência imersiva, etc’. Ok, nesse meio tempo alguem mais vai lançar alguma coisa e, quando vc perceber, só vc não seguiu o bonde e vc perdeu audiência. Numa situação dessas Agile é interessante, mas Agile intrincado na estratégia empresarial. Se eu preciso responder e trabalhar sem ficar preenchendo planilha que não serve pra nada ou juntar buzzwords para manter o meu trabalho, então eu preciso do anti-agile.

Agora se eu só quero trabalhar e, de repente, melhorar o meu processo, eu posso ver que caracteristicas do Agile me servem. De repente um Kamban para certas atividades pode ajudar, ou simplesmente trabalhar com iterações curtas e retrospectivas.

Em mais de um ano trabalhando com Scrumm eu aprendi muita coisa, principalmente comportamental: eu questiono e sou questionado pelas minhas decisões. Geralmente isso é benefico para o time e todos colaboram no trabalho de uma forma mais ativa. No fim do dia vc sente orgulho do que fez, até. E olha q antes eu trabalhava numa coisa q tentava aplicar esses conceitos bonitinhos de teste de software que, no fim das contas, só me deixava ocioso em varios momentos - não que isso seja ruim.[/quote]

Eu esperava justamente uma resposta dessas como desvantagem. estava tentando demonstrar que tudo tem desvantagens e o mundo não vira uma metodologia só, como foi dito aqui.

Imagem criar um software para medir e controlar a temperatura do bico dos foguetes de ônibus espaciais. Você usaria método ágil???


Tudo depende do objetivo.

[quote=fernando.palma]
Ok, temos opiniões diferentes. Eu não sobrevivo sem um superior a quem passar certas decisões. Há não ser que eu seja sócio único da empresa. Eu posso até mudar de opinião um dia, não descarto a possibilidade.

Sim, até ai tudo bem. É como os modelos de gestão japonesas de cooperação, já abordavam menos hierarquia, com esta metáfora da colmeia . Isso já tem anos.[/quote]

O que não significa de forma alguma que desenvolvimento de software seja uma atividade que não se beneficie dos líderes. Líderes são fundamentais sendo difícil acreditar num projeto de sucesso sem um papel de líder. Todas empresas, projetos open source, e até projetos de final de semana tem seus líderes. Mas o que as metodologias ageis são boas mesmo é em ressaltar as habilidades de cada um para o melhor aproveitamento da equipe. Neste caso, mesmo que o papel de gerente não tenha vez, existe sempre alguma coisa que se pode contribuir. Não são líderes que são desnecessários aqui, mas os gerentes. Pra ser um líder este alguém precisa ter o modelo do software a ser desenvolvido sobre o seu domínio para não parecer um idiota quando lhe forem exigir que tome uma decisão de projeto.

Menos hierarquia não significa ausência de líder, e metodologias ageis não são pela sua exterminação. Mas não sei como é no Japão.

[quote=peczenyj][quote=sergiotaborda][quote=fernando.palma]
Me responda uma pergunta: quais são as desvantagens das metodologias ágeis? Em que casos elas terão dificuldades de ser utilizadas?
[/quote]

As desvantagem são politicas. Agil não funciona dentro de uma cultura militar. Não funciona quando as pessoas não sabem se responsabilizar perante as outras. Quanto todo o mundo é mestre em “tirar o seu da reta” não funciona. quando a equipe não é realmente uma equipe mas um conjunto de pessoas, não funciona. quando não existe um responsável pelo produto, não funciona.
Quando não existe um facilitador - que seja uma pessoa diferente do responsavel pelo produto - não funciona. Quando os valores não são aceites no coração dos membros não funciona. Quando as pessoas envolvidas não entendem o que estão fazendo nem o pq, não funciona. Quando o cliente tem sempre razão, não funciona. Quando a documentação de ha 6 meses vale mais que a palavra do desenvolvedor, não funciona. Quando a equipa de desenvolvedor não se pode auto-gerenciar, não funciona.
quando alguém teima em cotar as coisas em horas-homem não funciona. Quando não se deixa os desenvolvedores desenvolverem, não funciona. Quando não se entende o que é um Story Point, Velocidade,Fator de Foco e a diferença entre Estoria e Tarefa não funciona.
a
A desvantagem principal é que existe uma mudança de paradigma que é complexa e difícil se as pessoas não estão preparadas, e o processo de implantação deixa bem claro quem está preparado e quem não está. Isso pode levar a diversos problemas politico-hierarquicos.

“Preparadas” significa podem acatar valores como respeito, abertura, comunicação, etc… Por exemplo, às vezes o cara quer usar Scrum, mas não quer publicar um burndown chart. Ou seja, ele não está sendo aberto, logo está fazendo reserva mental ao não acatar esse valor. Esta pessoa não está preparada para usar Scrum.

Então, quando as pessoas não estão preparadas a implantação de agil não cola e fica a impressão que a culpa é do agil, mas a culpa é na realidade das pessoas que não conseguem seguir valores simples como respeito e abertura, entre outros…[/quote]

Tem mais um ponto ai. Por que motivos vc quer ser agil?

Isso é uma boa pergunta: existem empresas que não querem. Existem empresas que dão MUITO certo sem ser agil e, quando tentam usar algo como Scrum, falha.

Eu vejo o seguinte: vc precisa responder rapido ao cliente? Se sim, agile é uma boa opção.

Imagine que vc esta desenvolvendo um sistema complexo e vc vai lançando releases de tempos em tempos com alguma funcionalidade suficiente e tem tempo de receber feedback do que o cliente usou e achou: é um bom passo para vc evitar de fazer aquela tela pq o cara de terno azul pediu mas que todo mundo sabe que é inutil, pois vc pode jogar com coisas realmente uteis e, quando chegar a hora de fazer o relatorio detalhado do nada ao lugar nenhum simplesmente não vale a pena investir mais no projeto.

Agora imagine um portal que oferece serviços específicos e, um dia, a concorrência lança um produto ANIMAL e INOVADOR: vc acha que vai fazer frente a isso tendo uma fase de levantamento de requisitos, uma fase de … , uma fase de desenvolvimento, uma fase de teste (e uma fase de demissões pq demorou mais do que o previsto)? Nesse caso a empresa tem que reagir rapido.

Mas como ela reage? Tem muitas formas, uma delas é lançar algo O MAIS RAPIDO POSSIVEL. Ah mas ai alguem diz ‘puxa, mas o css ta feio, tem um dropbox no lugar de um [buzzword da web 2.0], ta incompleto, não tem toda a experiência imersiva, etc’. Ok, nesse meio tempo alguem mais vai lançar alguma coisa e, quando vc perceber, só vc não seguiu o bonde e vc perdeu audiência. Numa situação dessas Agile é interessante, mas Agile intrincado na estratégia empresarial. Se eu preciso responder e trabalhar sem ficar preenchendo planilha que não serve pra nada ou juntar buzzwords para manter o meu trabalho, então eu preciso do anti-agile.

Agora se eu só quero trabalhar e, de repente, melhorar o meu processo, eu posso ver que caracteristicas do Agile me servem. De repente um Kamban para certas atividades pode ajudar, ou simplesmente trabalhar com iterações curtas e retrospectivas.

Em mais de um ano trabalhando com Scrumm eu aprendi muita coisa, principalmente comportamental: eu questiono e sou questionado pelas minhas decisões. Geralmente isso é benefico para o time e todos colaboram no trabalho de uma forma mais ativa. No fim do dia vc sente orgulho do que fez, até. E olha q antes eu trabalhava numa coisa q tentava aplicar esses conceitos bonitinhos de teste de software que, no fim das contas, só me deixava ocioso em varios momentos - não que isso seja ruim.[/quote]

Compartilho da opinião sobre o prazer de entregar software funcionando e tal, mas discordo da visão de metodologias ageis como ferramenta pra clonar sensações web da noite pro dia. Se não me engano essa já é a motivação do Rails. :lol:

[quote=fernando.palma]
Me responda uma pergunta: quais são as desvantagens das metodologias ágeis? Em que casos elas terão dificuldades de ser utilizadas?
.[/quote]

Voce sabe, existem varias metodologias ágeis, existem diferentes sabores para diferentes tipos de projeto, desde projetos distribuidos não.

Existe alguma característica além de colocação que dificultaria o processo. Não estou lembrado. Hardware é baratos, pizzas tb.

As metodologias ágeis se baseiam numa premissa: é barato modificar software.

Em todos os locais onde essa premissão não é verdadeira, será difícil aplicar um método muito iterativo:

  1. Em software que irá embarcado em hardware;
  2. Em software que exige extrema performance e testes;
  3. Em software que será distribuído em larga escala, muitas vezes para clientes sem internet.
  4. Em software produzido através de equipes externas;

[quote=ViniGodoy]As metodologias ágeis se baseiam numa premissa: é barato modificar software.

Em todos os locais onde essa premissão não é verdadeira, será difícil aplicar um método muito iterativo:

  1. Em software que irá embarcado em hardware;
  2. Em software que exige extrema performance e testes;
  3. Em software que será distribuído em larga escala, muitas vezes para clientes sem internet.
  4. Em software produzido através de equipes externas;[/quote]

Esta dizendo que nesses tipos de software o programador não escreve código de forma iterativa?

Eu discordo. O software ser barato pra criar/modificar é uma constante. O que muda em cada caso é o custo elevado do código mal especificado.

[quote=mochuara]Esta dizendo que nesses tipos de software o programador não escreve código de forma iterativa?

Eu discordo. O software ser barato pra criar/modificar é uma constante. O que muda em cada caso é o custo elevado do código mal especificado.[/quote]

Ele pode escrever de forma iterativa até a distribuição. Depois disso, o custo do software torna-se astronomicamente caro. Estou falando em:

  1. Equipes de campo para ter que fazer update no cliente;
  2. Equipamentos de hardware que terão que ser recolhidos, e atualizados manualmente;
  3. Sistemas onde a falha do software pode causar processos, destruição, mortes ou outras coisas catastróficas.

Nem todo software é barato de se modificar.

As metodologias ágeis se baseiam no princípio de estar preparado para o erro, e para a mudança. Em deixar o cliente especificar mal, ver o resultado, e modifica-lo cedo, dentro do ciclo de desenvolvimento dinâmico. E isso efetivamente acontece, pois nossos clientes não entendem nada de informática.

Entretanto, alguns casos a metodologia torna-se de difícil aplicação, justamente porque o fator “barato de se modificar” deixa de se verificar. E é aí que a metodologia ágil torna-se cada vez mais difícil de ser vantajosa. Veja, não é o caso da maior parte dos sistemas hoje, especialmente os sistemas web, ou os sistemas onde enviar patches via internet é possível.

Eu usaria agile num programa desses da NASA amarradão. Entretanto só imagino gente absurdamente animal programando essa parada e eu fazendo cafezinho.

[quote]O que não significa de forma alguma que desenvolvimento de software seja uma atividade que não se beneficie dos líderes. Líderes são fundamentais sendo difícil acreditar num projeto de sucesso sem um papel de líder. Todas empresas, projetos open source, e até projetos de final de semana tem seus líderes. Mas o que as metodologias ageis são boas mesmo é em ressaltar as habilidades de cada um para o melhor aproveitamento da equipe. Neste caso, mesmo que o papel de gerente não tenha vez, existe sempre alguma coisa que se pode contribuir. Não são líderes que são desnecessários aqui, mas os gerentes. Pra ser um líder este alguém precisa ter o modelo do software a ser desenvolvido sobre o seu domínio para não parecer um idiota quando lhe forem exigir que tome uma decisão de projeto.

Menos hierarquia não significa ausência de líder, e metodologias ageis não são pela sua exterminação. Mas não sei como é no Japão. [/quote]

Ok, legal. Algumas coisas eu vou obtendo explicação com o tempo.

É parecido sim com um modelo de amdministração Japonesa. Não me refiro a administração Japonesa como um todo.

Mas seria posível? Este projeto exige um planejamento macho. O projeto dura muito mais do que o ciclo de desenvolvimento.

Outrs pontos:

  • Este é um tipo de software que não evului muito, quando for entregue é aquilo mesmo.

  • O fator agilidade aqui não conta muito, a variável de sucesso aqui é 99% eficácia (cumprir o objetivo, senão a nave explode)

  • Não da pra fazer pequenas entregas pro cliente testar, da?

  • A especificação será revisada mil vezes. Não é só desenvolvimento de código. O TDD não resolve tudo.

Mas pq não haveria de ser possivel?

Com agile posso produzir todos os artefatos necessários em ciclos iterativos…

Aqui em Salador conheci uma empresa que trabalhou em um projeto para software de controle de calderões em usinas. Se o sftware falhar, explode o calderão.

O software quando é entregue é uma vez só e tem que estar 100%. O que eu fico em dúvida (não tenho certeza) é de como realizar iteratividade neste caso?

Em ambos os exemplos, os produtores do software deverão planejar e garantir que o software funcione. A iteratividade pode não ser justificada, porque o “cliente” desse projeto não vai saber avaliar o artefato, você tem que ser o especialista em produzir o sistema confiável e entregá-lo. Entede?

No caso desta empresa que eu descrevi, se ela fizesse uma pequena entrega e pedisse uma avaliação, o cliente - a usina - provavelmente iria dizer: quem vai me dizer se está avaliado é você.

Nestes casos também a agilidade não e fator crítico e não existem funcionalidades, requisitos de usabilidade, etc, para serem avaliados. O software tem apenas uma fncionalidade: manter a temperatura.

A linha de evolução de software como estes exemplificados é baixa. Ao contrário de ferramentas web que estamos acostumados a entregar: linha de evoluçao quase exponencial.