quarta-feira, 26 de janeiro de 2011

Como Relatar Bugs De Maneira Eficaz

Como Relatar Bugs De Maneira Eficaz

por Simon Tatham, programador professional e de softwares de código-livre. Tradução para o português por CJr.

[ English | Português | 简体中文 | Česky | Dansk | Deutsch | Español | Français | Magyar | Italiano | Nederlands | Polski | Русский | 繁體中文 ]

Introdução

Qualquer um que tenha escrito software para uso público provavelmente recebeu ao menos um relatório de bugs ruim. Relatórios que não dizem nada ("Isso não funciona!"); relatórios que não fazem sentido; relatórios que trazem informações erradas. Relatórios contendo problemas que acabam por ser identificados como erros de usuário; relatórios de problemas que acabam sendo identificados como falhas de um programa externo; relatórios de problemas que acabam sendo identificados como falhas de rede.

Existe uma razão pela qual o suporte técnico é visto como um trabalho horrível para se fazer, e esta razão são os relatórios de bugs ruins. Entretanto, nem todos os relatórios de bug são desagradáveis: eu mantenho software livre quando não estou ganhando a vida, e algumas vezes recebo relatórios de bug maravilhosamente claros, úteis, informativos.

Neste ensaio vou tentar identificar claramente o que faz um relatório de bugs ser bom. Idealmente, eu gostaria que todo o mundo lesse esse ensaio antes de fazer qualquer relatório de bug para qualquer um. Certamente eu gostaria que todos os que fizessem relatórios de bug para mim o lessem.

Sinteticamente, o objetivo de um relatorio de bug é tornar os programadores capazes de ver a falha do programa acontecer em frente aos seus olhos. Você pode mostrar a eles pessoalmente, ou fornecer-lhes instruções detalhadas e cuidadosas sobre como fazer o programa falhar. Se eles puderem fazê-lo falhar, tentarão obter informações extras até descobrirem a causa da falha. Se eles não podem fazê-lo falhar, vão ter que pedir a você para conseguir essas informações para eles.

Quando fizer relatórios de bug, tente fazer uma distinção muito clara entre os fatos reais ("Eu estava no computador e isso aconteceu") e especulações ("Eu acho que o problema pode ser esse"). Se quiser, deixe de fora as especulações, mas não os fatos.

Quando você relata um bug, é porque deseja que ele seja consertado. Não faz sentido massacrar os programadores ou ser deliberadamente obscuro: o erro pode ser deles e o problema seu, e você pode estar certo em estar com raiva deles, mas o bug vai ser consertado mais rapidamente se você ajudá-los fornecendo todas as informações de que eles precisam. Lembre-se também de que se o programa é gratuito, então os autores estão fornecendo-o por bondade. Se muitas pessoas forem rudes com eles, eles podem deixar de ser bons.

"Isso não funciona."

Dê aos programadores o crédito de possuírem uma inteligência de nível básico: se o programa realmente não tem nada que funcione, eles provavelmente teriam notado. Como não notaram, ele tem que estar funcionando com eles. Portanto, ou você está fazendo alguma coisa diferente do que eles fazem ou seu ambiente é diferente do deles. Eles precisam de informação; fornecer essa informação é o propósito de um relatório de bug. Mais informação é quase sempre melhor que menos informação.

Muitos programadores, particularmente os que trabalham em softwares livres ou gratuitos, publicam suas listas de bugs conhecidos. Se você encontrar uma lista de bugs conhecidos, vale a pena lê-la para verificar se o bug que você encontrou já é conhecido. Se já é, provavelmente não vale a pena relatá-lo novamente, mas se você acha que tem mais informações para fornecer do que as que constam na lista, deve entrar em contato os programadores. Eles podem consertar o bug mais facilmente se você puder fornecer a eles informações que eles ainda não têm.

Este ensaio está cheio de diretrizes. Nenhuma delas é uma regra absoluta. Programadores específicos gostam de maneiras específicas de relatar bugs. Se o programa vem com diretrizes próprias sobre como relatar bugs, leia-as. Se as dicas que vem com o programa contradizem as descritas neste ensaio, siga-as!

Se você não está relatando um bug, mas apenas pedindo ajuda para utilizar o programa, deveria deixar claro que já procurou pela resposta para a sua pergunta ("Li a seção 5.2 e o capítulo 4, mas não encontrei nada que me dissesse se o que quero fazer é possível.") Isto vai permitir aos programadores saber como as pessoas esperam encontrar as respostas, e assim eles poderão fazer com que a documentação fique mais fácil de usar.

"Mostre-me."

Uma das melhores maneiras de relatar bugs é mostrá-los aos programadores. Coloque-os em frente ao seu computador, inicie o software e demonstre o erro. Deixe-os observar como você inicia a máquina, como você executa o software e interage com ele e também o que o software faz em resposta às suas entradas.

Eles sabem que o software gosta deles. Sabem quais as partes dele em que confiam, e sabem quais as que mais provavelmente contem falhas. Sabem intuitivamente o que esperar. Quando o software faz alguma coisa obviamente errada, eles já podem ter notado algo sutilmente errado que aconteceu antes disso, e que pode lhes fornecer uma pista. Podem observar tudo que o computador faz durante a execução do teste, e escolher as informações relevantes por si mesmos.

Isso pode não ser o suficiente. Eles podem decidir que precisam de mais informações, e pedir a você para mostrar tudo de novo. Podem pedir a você para ensiná-los a realizar os passos do teste, e assim podem reproduzir o bug para si mesmos quantas vezes desejarem. Podem tentar variar os passos por algumas vezes, para verificar se o problema ocorre apenas em um caso ou em uma família de casos relacionados. Se você for azarado, eles podem precisar usar ferramentas de desenvolvimento por algumas horas e realmente começar a investigar. Mais a coisa mais importante é tê-los olhando para o computador quando o erro acontecer. Uma vez que eles possam ver o problema acontecendo, usualmente podem sair dali e começar a consertá-lo.

"Mostre-me como mostrar a mim mesmo"

Esta é a era da Internet. Esta é a era das comunicações globais. Esta é a era em que eu posso enviar meu software para alguém na Rússia com o toque de um botão, e essa pessoa pode me enviar comentários sobre ele com a mesma facilidade. Mas se essa pessoa verifica um problema com o meu programa, ela não pode me ter em frente ao computador quando ele ocorre. "Mostre-me" é bom quando você pode, mas você muitas vezes não pode.

Se você tem que reportar um bug para um programador que não pode estar com você pessoalmente, o objetivo do exercício é capacitá-lo a reproduzir o problema. Você quer que o programador execute a sua própria cópia do programa, faca as mesmas coisas que você fez com ele e faça-o falhar da mesma maneira. Quando eles podem ver o problema acontecendo em frente aos seus olhos, então eles podem lidar com ele.

Então diga exatamente a eles o que você fez. Se o programa tem uma interface gráfica, diga quais botões você pressionou e em que ordem o fez. Se for um programa que você executa digitando um comando, mostre a eles precisamente que comando você digitou. Sempre que possível você deve fornecer uma transcrição fiel da sessão, mostrando quais comandos você digitou e o que o computador exibiu em resposta.

Dê ao programador toda a informação que você puder imaginar. Se o programa lê um arquivo, você provavelmente precisa enviar uma cópia dele. Se o programa troca dados com outro computador através de uma rede, você provavelmente não poderá enviar uma cópia do outro computador, mas pode ao menos dizer que tipo de computador ele é, e (se você puder obter a informação) que software ele está executando.

"Funciona comigo. Então qual é o erro?"

Se você fornecer a um programador uma longa lista de entradas e ações, e ele executá-las em sua própria máquina e nada der errado, então você não forneceu a ele informações suficientes. Possivelmente a falha não vai aparecer em todos os computadores; seu sistema e o dele podem ser diferentes em alguns pontos. Possivelmente você entendeu mal o que o programa deveria fazer, e vocês estão olhando exatamente para o mesmo resultado na tela e você acha que ela está errada e ele sabe que está certa.

Então, descreva também o que aconteceu. Diga a ele exatamente o que você viu. Diga a ele que você acha que o que viu era errado; melhor ainda, diga a ele exatamente o que você esperava ver. Se você disser apenas “e então deu errado”, deixou de fora informações importantes.

Se você viu mensagens de erro, diga ao programador, cuidadosa e precisamente, o que elas eram. Elas são importantes! Neste estágio, o programador não está tentando consertar o problema; ele está apenas tentando encontrá-lo. Ele precisa saber o que aconteceu de errado, e estas mensagens são o melhor que o computador pode fazer para dizê-lo a você. Anote as mensagens se não houver outra maneira de se lembrar delas; não vale a pena relatar que o programa apresentou erros se você não puder relatar também o conteúdo das mensagens de erro.

Se a mensagem de erro contém números, forneça-os ao programador. Só porque você não consegue ver nenhum significado neles isso não significa que não exista algum. Números contêm todos os tipos de informação que pode ser lida por programadores, e é provável que eles contenham pistas vitais. Números em mensagens de erro estão lá porque o computador está muito confuso para relatar o erro em palavras, mas está dando o melhor de si para fornecer a você a informação de algum jeito.

Neste estágio, o programador está na realidade fazendo um trabalho de detetive. Ele não sabe o que aconteceu, e não pode estar perto o suficiente para ver por si próprio o erro acontecer. Ele está então procurando por pistas que podem dizer o que houve. Mensagens de erro, seqüências incompreensíveis de números e mesmo lentidão inesperada são tão importantes quanto impressões digitais em uma cena de crime. Guarde-as!

Se você está usando Unix, o programa pode ter produzido um dump. Dumps são uma fonte particularmente boa de pistas, então não os jogue fora. Por outro lado, muitos programadores não gostam de receber arquivos imensos de dump por email sem ser avisados disso, então peça permissão antes de enviar esses arquivos para qualquer pessoa. Esteja atento para o fato que o dump contém um registro de todos os dados de estado do programa: quaisquer “segredos” envolvidos (talvez o programa estivesse tratando uma mensagem pessoal, ou trabalhando com dados confidenciais) podem estar contidos no arquivo de dump.

"Então eu tentei…"

Há várias coisas que você pode fazer quando um erro ou bug aparece. Muitas delas tornam o problema pior. Uma das minhas amigas da faculdade apagou todos os seus arquivos do Word por engano, e, antes de chamar por ajuda especializada, tentou reinstalar o Word; depois disso, tentou rodar o Defrag. Nada disso ajudou-a a recuperar seus arquivos, e fazendo isso ela bagunçou de tal maneira o seu HD que nenhum programa de recuperação seria capaz de recuperar nada. Se ela tivesse simplesmente deixado como estava, ela poderia ter tido uma chance de resgatar seus arquivos.

Usuários como ela são como uma fuinha acuada num canto: com as costas na parede e vendo a morte certa pela frente, ela ataca freneticamente, porque fazer alguma coisa tem que ser melhor do que não fazer nada. Esta atitude não é bem adaptada ao tipo de problemas que computadores produzem.

Ao invés de ser uma fuinha, seja um antílope. Quando um antílope se confronta com algo inesperado ou assustador, ele congela. Ele fica absolutamente parado e tenta não atrair nenhuma atenção, enquanto pensa e tenta descobrir a melhor coisa a fazer. (Se houvesse suporte técnico para antílopes, eles o chamariam nestes momentos.) Então, uma vez que eles tenham decidido qual é a coisa mais segura a fazer, eles a fazem.

Quando alguma coisa dá errado, pare imediatamente de fazer qualquer coisa. Não clique qualquer botão. Olhe para a tela e tente perceber qualquer coisa fora do comum, e memorize-a ou anote-a. Então, cautelosamente, pressione "OK" ou "Cancel", o que parecer mais seguro. Tente desenvolver um ato reflexo - se um computador fizer algo inesperado, congele.

Se você conseguir se safar do problema, seja fechando o programa afetado ou reiniciando o computador, uma boa coisa a fazer é tentar reproduzir novamente o erro. Programadores gostam de problemas que eles possam reproduzir. Programadores felizes consertam bugs mais rapidamente e com mais eficácia.

"Acho que a modulação do tachyon deve estar com a polarização errada."

Maus relatórios de bug não são produzidos somente por não-programadores. Alguns dos piores relatórios que eu já vi foram feitos por programadores, e algumas vezes por programadores.

Uma vez eu trabalhei com um programador que encontrava bugs em seu próprio código e tentava consertá-los. Muitas vezes ele achava um bug que não conseguia resolver, e me chamava para ajudar. "O que deu errado?", eu perguntava. Ele me respondia dizendo qual a sua opinião sobre o que precisava de ser consertado.

Isto funcionava bem quando a opinião dele estava certa. Isto significava que ele já tinha feito metade do trabalho, e que conseguiríamos finalizar o restante juntos. Era eficiente e útil.

Mas era muito diferente quando ele estava errado. Trabalhávamos por algum tempo tentando descobrir porque uma parte específica do programa estava produzindo dados incorretos, e eventualmente descobríamos que não estava, que estivéramos investigando código perfeitamente funcional por meia hora, e que o problema real estava em outro lugar.

Estou certo de que ele não agiria assim com um médico. "Doutor, preciso de uma receita para Hidroioiodina." As pessoas sabem que não podem dizer isso a um médico: você descreve os sintomas, os desconfortos reais e as dores, as erupções, as febres, e deixa o doutor fazer o diagnóstico de qual é o problema e o que fazer para resolvê-lo. Se não for assim, o doutor acha que você é um hipocondríaco ou drogado e te manda embora, o que é certíssimo.

É a mesma coisa com programadores. Fornecer seu próprio diagnóstico pode ser útil às vezes, mas sempre diga os sintomas. O diagnóstico é um extra opcional e não uma alternativa a fornecer os sintomas. Da mesma maneira, enviar o código-fonte com o conserto do problema é um acréscimo útil a um relatório de bugs, mas não um substituto para ele.

Se um programador pede informação extra a você, colabore! Uma vez alguém me relatou um problema, e eu pedi a essa pessoa para executar um comando que eu sabia que não funcionava. Pedi isso a ela porque queria saber qual das duas mensagens de erro possíveis o comando geraria. Saber isso forneceria uma pista vital. Mas a pessoa não executou o comando - ela só me enviou um email dizendo "Não, isso não vai funcionar.". Levou algum tempo até que eu a convencesse a realmente executar o comando.

Usar sua inteligência para ajudar os programadores é ótimo. Mesmo que suas deduções estejam erradas, eles seriam gratos pela sua tentativa de tornar a vida deles mais fácil. Mas relate os sintomas também, ou você com certeza vai tornar a vida deles muito mais difícil.

"Engraçado, consegui fazer isso há cinco minutos sem problemas."

Diga “problema intermitente” para qualquer programador e veja a careta que ele faz. Os problemas fáceis são aqueles onde repetir uma seqüência de passos simples vai fazer com que o erro ocorra. O programador pode então repetir estas ações em condições de teste bastante monitoradas e ver o que acontece com grande detalhe. Muitos problemas simplesmente não acontecem dessa forma: vai haver programas que falham uma vez por semana, uma vez a cada lua cheia, ou nunca falham quando você tenta reproduzi-los diante do programador, mas sempre falham quando você tem um prazo apertado para cumprir.

A maior parte dos problemas intermitentes não é verdadeiramente intermitente. Muitos deles têm uma lógica escondida em algum lugar. Alguns ocorrem somente quando a máquina está com pouca memória disponível, alguns acontecem apenas quando outro programa tenta modificar um arquivo crítico no momento errado, e alguns outros ocorrerão somente na primeira metade de cada hora! (Eu realmente vi alguns desses.)

Se você consegue reproduzir o bug, mas o programador não, uma causa provável é que o seu computador e o dele são diferentes de alguma maneira e esta diferença é a causa do problema. Eu tive um programa cuja janela se enrolava em uma pequena bola no canto superior esquerdo da tela, ficava lá me aborrecendo . Mas ele só fazia isso em telas com resolução de 800x600 pixels; executava normalmente em meu monitor de 1024x768.

O programador vai querer saber tudo o que você puder descobrir sobre o problema. Tentar reproduzi-lo em outra máquina, talvez. Tente reproduzi-lo duas ou três vezes e ver quantas vezes ele falha. Se ele acontece quando você está fazendo uma tarefa importante, mas não quando está tentando demonstrá-lo, a causa da falha pode ser o grande tempo de execução ou o tratamento de grandes arquivos. Tente lembrar com quantos detalhes puder sobre o que você estava fazendo quando o erro ocorreu e, se identificar padrões, mencione-os. Tudo o que você puder fornecer pode ajudar. Mesmo que seja somente uma informação probabilística (como “o programa tende a falhar quando o Emacs está executando”) que não forneça pistas diretas sobre a causa do problema, ela pode ajudar o programador a reproduzir o erro.

Mais importante ainda, o programador vai querer estar certo de que ele está lidando com um verdadeiro problema intermitente ou com um problema específico da sua máquina. Ele vai querer saber montes de detalhes sobre seu computador, para assim poder descobrir como o computador dele difere do seu. Vários destes detalhes vão depender especificamente do programa, mas algo que você deve estar definitivamente pronto para fornecer são números de versão. O número de versão do programa em si, o do sistema operacional e provavelmente os de qualquer outro programa que esteja envolvido no problema.

"Então eu carreguei o disco no meu Windows..."

Em relatórios de bug, escrever claramente é essencial. Se o programador não consegue entender o que você quis dizer, era preferível que você não tivesse dito nada.

Eu recebo relatórios de bug de todas as partes do mundo. Muitos deles vêm de pessoas que não têm o inglês como sua língua-mãe, e muitos deles pedem desculpas pelo seu inglês ruim. Em geral, os relatórios de bug que contêm pedidos de desculpas pelo mau inglês são realmente claros e úteis. Todos os relatórios mais confusos vêm de pessoas cuja língua-mãe é o inglês e que presumem que eu vou entendê-los mesmo que não façam qualquer esforço por clareza e precisão.

  • Seja específico. Se você puder fazer a mesma coisa de duas maneiras diferentes, diga qual delas usou. "Eu selecionei a opção Carregar" pode significar "Eu cliquei o botão Carregar" ou "Eu pressionei Alt-L". Diga qual delas você usou. Algumas vezes isso é importante.
  • Seja prolixo. Dê mais informação ao invés de menos. Se você der informações demais, o programador pode ignorar algumas delas. Se você der informações de menos, eles tem que voltar a você e perguntar mais. Uma vez tive que gastar semanas para conseguir uma quantidade de informações que fosse útil, porque elas apareciam em pequenas frases de cada vez.
  • Seja cuidadoso com os pronomes. Não use palavras como "isso", ou referências como "a janela" quando o que elas puderem significar não for totalmente claro. Considere a frase: "Eu iniciei o programa FooApp. Ele mostrou uma janela de advertência. Tentei fechar e ele travou." Não está claro o que o usuário tentou fechar. Foi a janela de advertência ou a aplicação FooApp? Isso faz diferença. Ao invés disso, ele poderia ter dito "Eu iniciei o programa FooApp, que mostrou uma janela de advertência. Tentei fechar esta janela, e o programa travou.". Esta última frase é mais longa e mais repetitiva, mas também é mais clara e menos propensa a ambiguidades.
  • Leia o que você escreveu. Leia o relatório para você mesmo, e verifique se o que você pensou está claro. Se você fez uma lista de passos que deveriam produzir a falha, tente segui-los você mesmo, para verificar se esqueceu algum deles.

Sumário

  • O objetivo principal de um relatório de bugs é permitir que os programadores possam ver o erro com seus próprios olhos. Se você não pode estar com eles pessoalmente para reproduzir a falha, dê-lhes instruções detalhadas para que possam reproduzir a falha por si próprios..
  • No caso de o objetivo principal não ter sido alcançado e os programadores não puderem ver a falha por si mesmos, o segundo objetivo de um relatório de bug é descrever o que aconteceu de errado. Descreva tudo em detalhes. Diga o que você viu, e também o que esperaria ver acontecer. Escreva as mensagens de erro, especialmente se elas contém números.
  • Quando o seu computador fizer alguma coisa inesperada, pare.Não faça nada até que esteja calmo, e não faça nada que você ache que possa ser perigoso.
  • Tente por todos os meios diagnosticar a falha por você mesmo se acha que pode fazê-lo; mas mesmo que faça isso, você ainda deve relatar os sintomas.
  • Esteja pronto para fornecer informações extras no caso de os programadores precisarem delas. Se eles não precisassem, não as pediriam. Eles não estão sendo deliberadamente inábeis. Tenha os números de versão do programa à mão, porque provavelmente eles serão necessários.
  • Escreva com clareza. Diga o que tem para dizer, e esteja certo de que o texto não possa ser mal interpretado.
  • Acima de tudo, seja preciso. Programadores gostam de precisão.

Aviso de negação de responsabilidade : Nunca vi uma fuinha ou um antílope ao vivo. Minha zoologia pode ser inexata.

Copyright © 1999 Simon Tatham.
Este documento é OpenContent. Você pode copíá-lo e usar partes do texto nos termos da Licença OpenContent.
Por favor envie comentários e críticas para anakin@pobox.com.
Se você chegou até est página através do site de um software específico, não envie relatórios de bug deste software para o endereço acima. Retorne à página em que estava e encontre nela onde reportar bugs para o software em questão.


retirado de: http://www.chiark.greenend.org.uk/~sgtatham/bugs-br.html

segunda-feira, 24 de janeiro de 2011

Processo de Teste de Software

O teste do software é um processo realizado pelo testador de software que permeia outros processos da Engenharia de Software, e envolve ações que vão do levantamento de requisitos (necessidades) até a execução do teste propriamente dito. O objetivo, por paradoxal que pareça, é encontrar defeitos nos produtos, para que estes possam ser corrigidos pela equipe de programadores, antes da entrega final. A maioria das pessoas pensa que o teste de software serve para demonstrar o correto funcionamento de um programa, quando na verdade ele é utilizado como um processo da engenharia de software para encontrar defeitos.

O processo de teste de software é voltado para o alcance de um nível de qualidade de produto, que durante o processo de desenvolvimento de software muda conforme avanço das atividades - requisitos, protótipos, modelo de dados lógico, modelo de dados físico, código-fonte, módulos funcionais e finalmente um sistema.

O conceito de teste de software pode ser compreendido através de uma visão intuitiva ou mesmo de uma maneira formal. Existem atualmente várias definições para esse conceito. De uma forma simples, testar um software significa verificar através de uma execução controlada se o seu comportamento corre de acordo com o especificado. O objetivo principal desta tarefa é encontrar o número máximo de erros dispondo do mínimo de esforço, ou seja, mostrar aos que desenvolvem se os resultados estão ou não de acordo com os padrões estabelecidos.

Introdução

Não se pode garantir que todos os programas funcionariam corretamente, sem a presença de erros humanos, visto que os mesmos muitas vezes possuem um grande número de estados com fórmulas, atividades e algoritmos complexos. O tamanho do projeto a ser desenvolvido e a quantidade de pessoas envolvidas no processo aumentam ainda mais a complexidade.

Falhas podem ser originadas por diversos motivos, como os listados abaixo:

  • A especificação pode estar errada ou incompleta.
  • A especificação pode conter requisitos impossíveis de serem implementados, devido à limitações de hardware ou software.
  • Talvez a base de dados esteja organizada de forma que não seja permitido distinguir os tipos de usuário.
  • Pode ser que haja um erro no algoritmo de controle dos usuários
  • Pode ser que haja erros no código, o algoritmo pode estar implementado de forma errada ou incompleta.

Portanto, uma falha é o resultado de um ou mais defeitos em algum aspecto do sistema.

O teste de software pode ser visto como uma parcela do processo de qualidade de software. A qualidade da aplicação pode, e normalmente, varia significativamente de sistema para sistema, mas os atributos qualitativos previstos na norma ISO 9126 que são: funcionalidade, confiabilidade, usabilidade, eficiência, manutenibilidade e portabilidade.

Um desenvolvimento organizado de software tem como premissa uma metodologia de trabalho. Esta deve ter como base conceitos que visem a construção de um produto de software de forma eficaz. Dentro desta metodologia estão definidos os passos necessários para chegar ao produto final esperado. Esse é o campo de estudos da Qualidade de Software, uma sub-área da Engenharia de Software.

Assim, quando se segue uma metodologia para o desenvolvimento de um produto de software espera-se um produto final que melhor agrade tanto aos clientes quanto ao próprio fornecedor, ou seja, a empresa de desenvolvimento.

Observando este aspecto, não faz sentido iniciar a construção de um produto de software sem ter uma metodologia de trabalho bem solidificada e que seja do conhecimento de todos os envolvidos no processo. Porém, além de uma crescente demanda por softwares de qualidade, as empresas de desenvolvimento de software sofrem cada vez mais pressão por parte dos clientes para que o produto seja entregue num curto período de tempo. Este fato pode fazer com que uma sólida metodologia de trabalho acabe por se desequilibrar.

Independentemente da metodologia de trabalho empregada no desenvolvimento de um software, para que se obtenha um produto final com certo nível de qualidade é imprescindível a melhoria dos processos de engenharia de software.

Uma maneira viável para se assegurar a melhoria de tais processos seria tomar como base modelos sugeridos por entidades internacionais respeitadas no assunto. Dentro de uma gama de modelos, sejam eles para situações e ambientes específicos ou para soluções genéricas, existem alguns que são mais utilizados e tidos como eficientes, como por exemplo, os SW-CMM, SE-CMM, ISO 15504 e o mais conhecido CMMI.

Outro fator com grande influência sobre a qualidade do software a ser produzido é o que diz respeito aos testes que serão executados sobre tal produto. Todas as metodologias de desenvolvimento de software têm uma disciplina dedicada aos testes. Atualmente esta é uma tarefa indispensável, porém muitas vezes efetuada de maneira ineficiente, seja pelo subestimar dos que desenvolvem, pela falta de tempo ou mesmo pela falta de recursos humanos e financeiros.

Técnicas de Teste

Atualmente existem muitas maneiras de se testar um software. Mesmo assim, existem as técnicas que sempre foram muito utilizadas em sistemas desenvolvidos sobre linguagens estruturadas que ainda hoje têm grande valia para os sistemas orientados a objeto. Apesar de os paradigmas de desenvolvimento ser completamente diferentes, o objetivo principal destas técnicas continua a ser o mesmo: encontrar falhas no software. Abaixo estão descritas as três técnicas mais conhecidas.

Caixa-Branca

Técnica de teste, também chamada de Teste Estrutural, que avalia o comportamento interno do componente de software. Essa técnica trabalha diretamente sobre o código-fonte do componente de software para avaliar aspectos tais como: teste de condição, teste de fluxo de dados, teste de ciclos e teste de caminhos lógicos. Os aspectos avaliados nesta técnica de teste dependerão da complexidade e da tecnologia que determinarem à construção do componente de software, cabendo, portanto avaliação de mais aspectos que os citados anteriormente. O testador tem acesso ao código fonte da aplicação e pode construir códigos para efetuar a ligação de bibliotecas e componentes. Este tipo de teste é desenvolvido analisando-se o código fonte e elaborando-se casos de teste que cubram todas as possibilidades do componente de software. Dessa maneira, todas as variações originadas por estruturas de condições são testadas. Um exemplo bem prático desta técnica de teste é o uso da ferramenta livre JUnit para desenvolvimento de classes de teste (test cases) para testar classes ou métodos desenvolvidos em Java. Também se enquadram nessa técnica testes manuais ou testes efetuados com apoio de ferramentas para verificação de aderência a boas práticas de codificação reconhecidas pelo mercado de software. A aderência a padrões e boas práticas visa principalmente a diminuição da possibilidade de erros de codificação e a busca de utilização de comandos que gerem a melhor performance de execução possível. Apesar de muitos desenvolvedores alegarem que não haverá ganhos perceptíveis com essa técnica de teste aplicada sobre unidades de software, devemos lembrar que, no ambiente produtivo, cada programa pode vir a ser executado milhares ou milhões de vezes em intervalos de tempo pequenos. É na realidade de produção que a soma dos aparentes pequenos tempos de execução e consumo de memória de cada programa poderá levar o software a deixar de atender aos objetivos esperados. A técnica de teste de Caixa-Branca é recomendada para as fases de Teste da Unidade e Teste da Integração, cuja responsabilidade principal fica a cargo dos desenvolvedores do software, que por sua vez conhecem bem o código-fonte produzido.

Caixa-Preta

Técnica de teste, também chamado de Teste Funcional, em que o componente de software a ser testado é abordado como se fosse uma caixa-preta, ou seja, não se considera o comportamento interno do mesmo. Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado esperado previamente conhecido.

O componente de software a ser testado pode ser um método, uma função interna, um programa, um componente, um conjunto de programas e/ou componentes ou mesmo uma funcionalidade. A técnica de teste de Caixa-Preta é aplicável a todas as fases de teste - fase de teste de unidade (ou teste unitário), fase de teste de integração, fase de teste de sistema e fase de teste de aceitação.

A aplicação de técnicas de teste leva o testador a produzir um conjunto de casos de teste (ou situações de teste). A aplicação combinada de outra técnica - Técnica de Particionamento de Equivalência (ou uso de Classes de Equivalência) permite avaliar se a quantidade de casos de teste produzida é coerente. A partir das classes de equivalência identificadas, o testador irá construir casos de teste que atuem nos limites superiores e inferiores destas classes, de forma que um número mínimo de casos de teste permita a maior cobertura de teste possível..

Outras Técnicas

Outras técnicas de teste podem e devem ser utilizadas de acordo com necessidades de negócio ou restrições tecnológicas. Destacam-se as seguintes técnicas: Teste de Performance, Teste de Usabilidade, Teste de Carga, Teste de Stress, Teste de Confiabilidade e Teste de Recuperação. Alguns autores chegam a definir uma técnica de Teste Caixa Cinza, que seria um mesclado do uso das técnicas de Caixa Preta e Caixa Branca, mas, como toda execução de trabalho relacionado à atividade de teste utilizará simultaneamente mais de uma técnica de teste, é recomendável que se fixem os conceitos primários de cada técnica.

Fases de Teste

Teste de Unidade

Também conhecida como Teste Unitário. É a fase do processo de teste em que se testam as menores unidades de software desenvolvidas ( pequenas partes ou unidades do sistema). O universo alvo desse tipo de teste são os métodos dos objetos ou mesmo pequenos trechos de código. Assim, o objetivo é o de encontrar falhas de funcionamento dentro de uma pequena parte do sistema funcionando independentemente do todo.

Teste de Integração

Na fase de teste de integração o objetivo é encontrar falhas provenientes da integração interna dos componentes de um sistema. Geralmente os tipos de falhas encontradas são de envio e recebimento de dados. Por exemplo, um objeto A pode estar aguardando o retorno de um valor X ao executar um método do objeto B, porém este objeto B pode retornar um valor Y, desta forma gerando uma falha. Não faz parte do escopo dessa fase de teste o tratamento de interfaces com outros sistemas (integração entre sistemas). Essas interfaces são testadas na fase de teste de sistema, apesar de, a critério do gerente de projeto, estas interfaces podem ser testadas mesmo antes de o sistema estar plenamente construído..

Teste de Sistema

Na fase de Teste de Sistema o objetivo é executar o sistema sob ponto de vista de seu usuário final, varrendo as funcionalidades em busca de falhas. Os testes são executados em condições similares - de ambiente, interfaces sistêmicas e massas de dados - àquelas que um usuário utilizará no seu dia-a-dia de manipulação do sistema. De acordo com a política de uma organização podem ser utilizadas condições reais de ambiente, interfaces sistêmicas e massas de dados.

Teste de Aceitação

Fase de Teste em que o teste é conduzido por usuários finais do sistema. Os testes são realizados, geralmente, por um grupo restrito de usuários finais do sistema. Esses simulam operações de rotina do sistema de modo a verificar se seu comportamento está de acordo com o solicitado. Teste formal conduzido para determinar se um sistema satisfaz ou não seus critérios de aceitação e para permitir ao cliente determinar se aceita ou não o sistema. Validação de um software pelo comprador, pelo usuário ou por terceira parte, com o uso de dados ou cenários especificados ou reais. Pode incluir testes funcionais, de configuração, de recuperação de falhas, de segurança e de desempenho.

Teste de Operação

Fase de Teste em que o teste é conduzido pelos administradores do ambiente final onde o sistema ou software entrará em ambiente produtivo. Vale ressaltar que essa fase é aplicável somente a sistemas de informação próprios de uma organização, cujo acesso pode ser feito interna e/ou externamente a essa organização. Nessa fase de teste devem ser feitas simulações para garantir que a entrada em produção do sistema será bem sucedida. Envolve testes de instalação, simulações com backup e restore das bases de dados, etc. Em alguns casos um sistema entrará em produção para substituir outro e é necessário garantir que o novo sistema continuará garantindo o suporte ao negócio.

Teste de Regressão

Teste de Regressão é uma fase de teste aplicável a uma nova versão de software ou à necessidade de se executar um novo ciclo de teste durante o processo de desenvolvimento. Consiste em se aplicar, a cada nova versão do software ou a cada ciclo, todos os testes que já foram aplicados nas versões ou ciclos de teste anteriores do sistema. Inclui-se nesse contexto a observação de fases e técnicas de teste de acordo com o impacto de alterações provocado pela nova versão ou ciclo de teste. Para efeito de aumento de produtividade e de viabilidade dos testes, é recomendada a utilização de ferramentas de automação de testes, de forma que, sobre a nova versão ou ciclo de teste, todos os testes anteriores possam ser reexecutados com maior agilidade.

Testes Alpha, Beta e Gama.

Em casos especiais de processos de desenvolvimento de software - Sistemas Operacionais, Sistemas Gerenciadores de Bancos de Dados (SGBD), e outros softwares comerciais disponibilizados no mercado nacional e internacional - os testes requerem fases também especiais antes do produto ser disponibilizado a todos os usuários.

O período entre o término do desenvolvimento e a entrega é conhecido como fase alpha e os testes executados nesse período, como testes alpha. PRESSMAN afirma que o teste alpha é conduzido pelo cliente no ambiente do desenvolvedor, com este "olhando sobre o ombro" do usuário e registrando erros e problemas de uso.

Completada a fase alpha de testes, são lançadas a grupos restritos de usuários, versões de teste do sistema denominadas versões beta. O Teste Beta também é um teste de aceitação voltado para softwares cuja distribuição atingirá grande número de usuários de uma ou várias empresas compradoras. PRESSMAN afirma que o teste beta é conduzido em uma ou mais instalações do cliente, pelo usuário final do software. Diferente do teste alpha, o desenvolvedor geralmente não está presente. Conseqüentemente, o teste beta é uma aplicação "ao vivo" do software num ambiente que não pode ser controlado pelo desenvolvedor. O cliente registra todos os problemas (reais ou imaginários) que são encontrados durante o teste beta e os relata ao desenvolvedor em intervalos regulares. Com o resultado dos problemas relatados durante os testes beta, os engenheiros de software fazem modificações e depois se preparam para liberar o produto de software para toda a base de clientes.

Os testes Gama não são propriamente testes de software. A comunidade do teste de software usa este termo de forma sarcástica referindo-se aos produtos que são mal testados e são entregues aos usuários ("end-users") para que estes encontrem os defeitos já em fase de produção.

Quando Devemos Testar?

Os testes realizados em cada fase do ciclo de desenvolvimento de software permitem que um número maior de erros seja descoberto antecipadamente, evitando a migração destes para as fases seguintes.

Desta forma, a reposta "Quando devemos testar?" torna-se simples. Teste o mais cedo possível e tantas vezes quanto necessário. A cultura do teste cria um ambiente favorável para detecção de erros e identificá-los rapidamente é o objetivo dos profissionais de testes.

Onde estão os erros?

Os erros ocorrem em todas as fases do processo de desenvolvimento de software. Porém, estudos demonstram que a maior incidência dos erros está concentrada nas fases iniciais do processo de desenvolvimento. Muitos dos erros identificados no produto final são provenientes a má especificação e entendimento sobre os objetivos a serem alcançados.

Se nosso objetivo é reduzir, ao máximo, o nível de erros dentro do processo de desenvolvimento de software, devemos nos concentrar nas atividades iniciais do processo. Desta forma, estaríamos identificando prematuramente os erros impedindo que estes migrassem para outras fases.

Entendendo o Processo de teste

Não é possível conceber um processo de teste de software sem integrá-lo com o ciclo de desenvolvimento de software. Um bom processo de teste é aquele que cria uma relação de "um-para-um" entre as fases de desenvolvimento e testes. Esta relação bilateral promove a colaboração entre as áreas e reforça a idéia do objetivo comum.

Modelo de Processo

O Processo de Teste de Software esta decomposto em fases. Cada fase tem uma numeração indicando a seqüência de execução dos testes a serem aplicados.

Paulo Tozelli

Running PHPUnit tests in Zend Studio


Why unit testing? There are quite a few reasons, but those I can think of right now are:

  1. It’s not hard, all it takes is some time to think things through
  2. Whenever I get a bugreport, I try to write it as a test to make sure this bug can never slip into my code unnoticed.
  3. It’s a nice way to make sure that the things you already wrote, keep working after you’ve changed some of your code.

Let’s take a look at the steps you need to do to get this working in Zend Studio (currently I’m using 6.1.2). First you need to add the PHPUNIT library location to the include of the project you want to write unit tests for. Right click your project, then click ‘properties’.

zend-unit-testing-project-properties

Then click on the ‘include path’ to the left. You will see an overview of the already added ‘include paths’ to this project.

zend-unit-testing-include-path

Click the ‘add variable’ option and select ‘PHPUNIT_HOME’ and click ‘OK’.

zend-unit-testing-add-include-path

So far, so good. Now we have to create a PHPUNIT Test Case. Rightclick on the folder where you want to this new file to go and click ‘new’ > ‘PHPUnit Test Case’.

zend-unit-testing-add-test-case

I used the details below and did not select a specific element to test. If you do choose an element or class to test, all the default test methods will be added to the new file.

zend-unit-testing-add-test-case-details

When you’re done adding the test file, you’ll get a pretty messy generated file. I’ve changed bits of it and added a few ‘demo’ functions as you can see below.

zend-unit-testing-code-example

I wrote 4 tests, using the 3 methods ‘returnTrue’, ‘returnFalse’ and ‘greaterThan’. These methods are obviously pretty straightforward, but it gives you an idea of the way that you can test them.

You can run the test by rightclicking the editor area and choosing ‘run as’ > ‘PHPunit Test’.

zend-unit-testing-run-test

You should, considering your configuration has been set properly, get the next results.

zend-unit-testing-success-results

I broke the ‘greaterThan’ function on purpose, to make sure that those tests would fail and then you get the following results.

zend-unit-testing-error-results

So far this little basic post about unit testing with PHPUnit from within Zend Studio. There are a lot more ways to test your code, but this brief introduction should get you started.


retirado de : http://blog.bauffman.be/2009/10/14/running-phpunit-tests-in-zend-studio/

sexta-feira, 21 de janeiro de 2011

Creio que ainda a atividade de teste sofre com problemas de vocabulário, pois quando se está em reuniões de trabalho discutindo-se teste de software, é uma festa! Cada um tem seu próprio termo para ser usado dado um determinado conceito de teste. Para contribuir com a melhoria do vocabulário utilizado na área de testes, segue abaixo as quatro fases dos testes de software:

Teste Unitário

É também conhecido como teste de unidade, e tem o objetivo de testar as menores unidades de software desenvolvidas ( pequenas partes, unidades do sistema ou uma classe).

Em sistemas orientados a objetos o foco desse tipo de teste são os métodos dos objetos ou mesmo pequenos trechos de código, visando encontrar falhas de funcionamento dentro de uma pequena parte do sistema funcionando independentemente do todo.

É considerada uma das fases mais importante dos testes, já que se procura identificar bugs na menor unidade de software possível, o mais cedo possível, se traduzindo em uma excelente estratégia para se obter um software de melhor qualidade

Teste de Integração

Nesta fase o objetivo é encontrar falhas provenientes da integração interna dos componentes de um sistema. Os tipos de falhas encontradas são de envio e recebimento de dados.

Por exemplo, um objeto A pode estar aguardando o retorno de um valor X ao executar um método do objeto B. Entretanto este objeto B pode retornar um valor Y, desta forma gerando uma falha.

Não faz parte do escopo dessa fase de teste o tratamento de interfaces com outros sistemas (integração entre sistemas). Essas interfaces são testadas na fase de teste de sistema

Teste de Sistema

Tem o objetivo de executar o sistema sob ponto de vista de seu usuário final, buscando identificar falhas nas funcionalidades do sistema. Os testes são executados em condições similares de ambiente, interfaces sistêmicas e massas de dados – àquelas que um usuário utilizará no seu dia-a-dia de manipulação do sistema.

Teste de Aceitação

É um teste conduzido por usuários finais do sistema. São realizados, geralmente, por um grupo pequeno de usuários do sistema, que simulam operações de rotina do sistema de modo a verificar se seu comportamento está de acordo com os requisitos do sistema. para permitir ao cliente determinar se aceita ou não o sistema. Pode incluir testes funcionais, de configuração, de recuperação de falhas, de segurança e de desempenho.

quinta-feira, 20 de janeiro de 2011

Ferramentas de Teste: Testlink


Bem, vou falar um pouco do Testlink, que é uma ferramenta de gerenciamento de casos de teste e execução Open Source desenvolvida usando plataformas também free como PHP e MYSQL por ser uma aplicação WEB você pode usar o servidor de sua preferência.

No meu caso, como já uso a um tempo o Apache, usei ele. Para quem está partindo para a primeira instalação do trio (PHP, MYSQL e Apache) aconselho o uso de “pacotes” de instalação que facilitam a vida instalando-os e configurando-os para você. Aconselho o EasyPHP, mas uma busca rápida no google por PHP, MYSQL e Apache lhe dará outras opções.

Mas isso não é o foco do post, quero mostrar o funcionamento da aplicação para servir como base para uma tomada de descisão.

Bem, uma vez instalado e configurado a tela inicial do Teslink é assim

image

Antes de comecar a usar o sistema o usuário com perfil de administrador deve cadsatrar o projeto, observe figura abaixo.

image

Apos a criação do projeto o sistema o levará para a a tela inicial do sistema, onde você poderá comecar a realizar seu projeto de testes (design dos casos de testes).

No entanto antes de comecar esta atividade é necessário criar primeiro um Plano de Testes, observe indicação em vermelho na figura abaixo

image

Apos selecionar opção “Test Plan Management” ele irá mostrar a seguinte tela

image

A criação do Plano de Testes é bem intuitva, como mostrada nas proximas telas

image image

Depois disso, você está com todos os pré-requisitos para comecar o projeto de testes ou design de casos de testes.

A tela inicial do Teslink agora irá lhe mostrar opções que no passo anterior ao de criação do Plano de Testes na existiam, isso porque no Teslink tudo que você faz segue a seguinte hierarquia Projeto > Plano > Build.

Bem, agora que estamos aptos, vamos a criação dos casos de teste.

Na tela inicial do Teslink (conforme próxima tela) a iremos na opção “Specification”.

image image

Agora é uma parte que considero importante, pois a forma com que você organizar as coisas aqui será mostrada nos relatórios, mas como cada caso é um caso apenas lembre-se de pensar 2 minutos aqui antes de começar a escrever, e tentar entender como seu cliente prefere vizualizar os relatórios.

O Teslink irá basicamente nos relatórios, organizar os resultados de acordo com o primeiro nivel na hierarquia, ou seja, ex.: Projeto > Nivel 1 > Nivel 2 > Nivel 3, o Teslink irá agrupar seus resultados mostrando apenas o Nivel 1 (suite de testes), que por sua vez tem o Nivel 2 e Nivel 3 como seus filhos.

Ok, agora vamos a comecar o processo de escrita dos casos de teste, o primeiro passo para esta tarefa é mostrada abaixo. Estamos criando primeiro a suite de testes para depois criarmos os casos de teste

image image

E a tela para a escrita, na figura abaixo

image

De vizualização…

image image

Bem, depois que a escrita deu-se por encerrada, vamos a execução

Para a execução, a esta altura temos apenas a criação das builds e associação dos casos de teste como pré-requsito.

Criação de Builds (figura abaixo)

image image

Associando casos de teste ao plano de testes

image image

OK, OK vamos executá-los

Uma vez informadas a build e associando os testes ao plano de testes, nos resta agora encontrar os bugs! ;)

A tela de execução segue

image image

Acabando a execução, vamos aos relatórios

image image

A vizualização dos resultados segue a maneira mais intuitiva possível, permitindo que qualquer pessoa entenda o que esta se passando…

image

Concluindo esta apresentação, espero ter esclarecido algumas dúvidas referentes a esta ferramenta de gerenciamento e execução de testes.

Teslink é uma ferramenta Open Source e foi desenvolvida com tecnologias tambem Open Source e bastante populares, existem outras ferramentas que tambem utilizam códigos abertos, como é o caso do Salmoé, que é em java.

No meu caso o que me levou a aderir ao Teslink, foram 2 motivos básicos:

1. Escalabilidade - Como é uma ferramenta WEB posso ter tantos quantos usuários quiser, apenas restando ao hardware suportar a expansão. Quanto ao cliente não é preciso nada como pre-requisito, apenas um browser
2. Manutenção - Isso é um ponto controverso, apesar das facilidades de se ter um sistema em PHP, se ele não for organizado, isso pode ser um problema…é o caso do Teslink. Ele é em PHP….mas não é nem um pouco organizado.

No entanto existe um ponto muito grave contra o Testlink

1. Segurança - Simplesmente não existe, não falo em telas de login, criação de perfils, restrição de acessos, etc… falo em segurança da aplicação como produto. Desaconselho fortemente a utilizar o Teslink em uma organização em que ele é a unica ferramenta de gerenciamento e execução, onde vários projetos o utilzam e algumas centenas de pessoas o acessam…no no no não use ele, infelizmente. Existem erros graves de XSS (Cross Site Scripting), URL Manipulation que se você souber as consequências disso (e você sabe…) você realmente não usará o Testlink.

Teslink é uma ferrameta que não está preocupada (ainda) com segurança, logo use-a em projetos onde a equipe de teste é pequena 3 ou 4. Neste caso você tem controle total sobre a informação, tudo está sob seu alcance e o controle está na palma da sua mão e o teslink irá lhe ajudar muito nisso.

Atualização

Recentemente (23/10/07) fiz uma verredura no Teslink por vunerabilidades e simplesmente achei 22 erros em XSS o que é considerado um ALTO pelo Acunetix :(

Eudes Costa
http://www.zezologs.org/blog/ferramentas-de-teste-testlink/

retirado de: http://www.testexpert.com.br/?q=node/650

Integração do TestLink com o MantisBugTracker


Neste tutorial aprenderemos a configurar a integração entre o TestLink e o Mantis BugTracker
O TestLink possui a funcionalidade de habilitar o cadastro de um bug diretamente de sua interface para o Sistema de Gestão de Defeitos suportados (Mantis, BugZilla, Eventum, Trackplus, Jira, Trac)
Precondições para a configuração
Ter um servidor Apache, um banco de dados e o PHP instalado. Neste mini tutorial utilizo o WampServer para Windows.
Ter o Testlink instalado. Neste mini tutorial utilizo a versão 1.7.4
Ter o Mantis instalado. Neste mini tutorial utilizo a versão 1.1.1


PS: A versão 1.7.4 já está obsoleta. Utilize as versões mais atuais através do site http://teamst.org
Caminho das aplicações
Tanto o TestLink quanto o Mantis estarão na pasta WWW do WampServer, que pela instalação padrão do Windows é C:\wamp\www.
Caso você utilize outro programa para gerenciar esta tríade (apache, php e mysql) utilize o diretório em que são colocadas as aplicações web
Primeiro Passo – Criando um usuário no Mantis para acesso anônimo
O primeiro passo para iniciar a configuração é configurar o Mantis para acesso anônimo à aplicação. Para isso entre na aplicação, vá ao link Manage (Gerenciar) e clique no botão Create New Account (Criar nova Conta) e crie um usuário que será o nosso usuário anônimo. Neste caso eu utilizarei o nome “testlink”. É importante dar o acesso somente como “reporter” e deixar a checkbox Enabled marcada.
Atenção: Caso você já tenha a configuração de envio de email definida insira um email válido. Caso contrário deixe o email em branco. Neste exemplo não temos configurado o envio de email. Para o Mantis aceitar a inserção da senha no cadastro de usuário copie a variável $g_send_reset_passwor= ON; do arquivo config_defaults_inc.php para config_inc.php e altere seu valor de ON para OFF.
Estes arquivos estão na pasta de instalação do Mantis, no meu caso ela está em C:\wamp\www\mantis-1.1.1
Como não temos o envio de email habilitado e temos a configuração acima efetuada, será apresentada uma mensagem de confirmação de utilização da senha em branco. Clicamos em Empty Password.
Segundo Passo – Habilitando o Mantis para login anônimo (não obrigatório)
Esse passo não é obrigatório! Se você não o fizer a diferença é que você ou terá que já estar logado no sistema para aparecer a tela de report de bugs ou você terá de efetuar o login para acessar a página!
Copie a variável $g_allow_anonymous_login= OFF; e $g_anonymous_account = ''; do arquivo config_defaults_inc.php para o arquivo config_inc.php. Altere o valor da variável $g_allow_anonymous_login para ON e insira na variável $g_anonymous_account o usuário que criamos que é testlink. (nas esqueça de colocá-lo entre as aspas)
O arquivo config_inc.php deve estar semelhante ao da imagem abaixo:
Terceiro Passo – Configurar a interface do TestLink com o Mantis
Agora iremos manipular os arquivos necessários no TestLink para habilitar a utilização do Mantis.
Abra o arquivo mantis.cfg.php que está no diretório de instalação do TestLink na pasta cfg. No meu caso está em C:\wamp\www\testlink\cfg
Teremos que alterar o parâmetro destes arquivos para que o TestLink e o Mantis possam “conversar”.
A tabela abaixo mostra o texto que devemos substituir e por qual valor:
Parâmetro
Descrição
Substituir por este valor
[CONFIGURE_BUG_TRACK_DB_HOST]
Qual o host do banco de dados da ferramenta de bugtraker
localhost
[CONFIGURE_BUG_TRACK_DB_NAME]
Qual o nome do banco de dados da ferramenta de bugtracker
mantis
[CONFIGURE_BUG_TRACK_DB_TYPE]
Qual o tipo de banco de dados da ferramenta de bugtracker
mysql
[CONFIGURE_BUG_TRACK_DB_USER]
Qual o usuario de conexão com o banco do bugtracker
root
[CONFIGURE_BUG_TRACK_DB_USER_PASS]
Qual a senha do usuário de conexão com o banco do bugtracker
[em branco]
Nas duas ultimas configurações altere, se necessário o nome da aplicação do Mantis, referente a aplicação do caminho. No meu caso, como a pasta de acesso a aplicação é mantis-1.1.1 fica assim:
define('BUG_TRACK_HREF', "http://localhost/mantis-1.1.1/view.php?id=");
define('BUG_TRACK_ENTER_BUG_HREF',"http://localhost/mantis-1.1.1/");
Atenção: substitua somente os parâmetros da tabela pelo valor e mantenha as aspas.
Quarto Passo – Habilitando a integração no TestLink com o Mantis
Copie a variável $g_interface_bugs='NO'; do arquivo config.inc para o arquivo custom_config.inc.php e altera o valor NO para MANTIS, ficando assim:
$g_interface_bugs='MANTIS'
Estes arquivos estão na pasta da aplicação do TestLink. No meu caso o caminho é C:\wamp\www\testlink
Quinto Passo – Executando o Caso de Teste e marcando ele como Falha no TestLink
Agora para ver a integração do TestLink com o Mantis teremos que executar um Caso de Teste no TestLink e marcá-lo como falha (failed) para ver tal integração
Note que foi criado uma coluna a mais chamada “BUG Management” e um botão. Clicamos então no botão. Será apresentada a seguinte tela:
Se já existe um bug cadastrado no Mantis insira o código do bug e clique em Add bug, caso contrário clique no link “Access to Bug Tracking System (Mantis)”. Este link acessa o Mantis para que o testador possa cadastrar o bug. Feito isso ele deve inserir o código do bug cadastrado para que ele possa ser inserido no TestLink.
Executado estes passos clique no botão Close e visualize a tela de execução do Caso de Uso.
Abaixo do status de execução do Caso de Teste no TestLink será inserido uma nova tabela contendo o Build, Código do Bug e Descrição do Bug e um botão de remoção desta informação.
Clicando no link da descrição do bug ele será aberto no Mantis, com a visualização dele.
Para todos os status de execução do Caso de Teste existirá o botão do Bug management. Para todas as execuções que inserirmos o bug ela será exibida. Podemos clicar no botão “Show complete execution history” para visualizar.
Necessito habilitar o login anônimo para fazer a integração?
Não! Na verdade habilitamos o login anônimo para ter acesso direto ao bug que foi inserido na execução do teste no TestLink sem precisarmos efetuar o login no Mantis.
Quando inserimos um bug do Mantis no TestLink as informações são obtidas diretamente no banco de dados do Mantis, não influenciando o login.


Chegamos ao final deste mini-tutorial.
Notamos que a integração pode não ser aquela “Brastemp” que pensamos em já abrir a ferramenta de Bug Tracker e ter os dados já cadastrados de forma automática, mas já nos dá uma boa visualização para que o TestLink se propõe que é fazer a gerência de testes.
Não deixe de ver o tutorial sobre a Integração do Testlink e Trac.
Espero que tenham gostado! Qualquer duvida, por favor, postem um comentário!



retirado de: http://sembugs.blogspot.com/2008/06/integrao-do-testlink-com-o.html

Dica de Livro

Pra quem esta aprendendo esse livro é muito bom.... ensina como dominar o Zend Framawork de um jeito menos técnico e mais lúdico, diferente daquelas chatices que a gente esta acostumado.


Autor: Flávio Gomes da Silva Lisboa
ISBN: 978-85-7522-158-7
Páginas: 184
Ano: 2008
Preço: R$ 37,00

tenho quase certeza que o autor é jogador de RPG :P

terça-feira, 18 de janeiro de 2011




75+ Ferramentas PHP extremamente úteis

A linguagem PHP é uma das linguagens Open Source mais utilizadas nos dias de hoje. Existem mais de 20 milhões de domínios PHP indexados, incluindo os mundialmente conhecidos Facebook, WordPress ou Digg, e há boas razões para os criadores Web preferirem esta linguagem a outras, como Python ou Ruby.

PHP é mais rápido, é a linguagem de script mais utilizada, tem documentação detalhada, uma enorme comunidade, uma quantidade astronómica de scripts prontos a usar, e mais importante do que isso, é bastante fácil de aprender PHP, ao contrário de outras linguagens de script como Python. É por tudo isto que faz sentido fornecer à enorme comunidade de programadores PHP uma panóplia de ferramentas úteis e recursos que podem tornar a programação mais simples e eficaz.

Ferramentas de correcção de erros

Webgrind – É uma ferramenta Xdebug de profiling com interface gráfica. Implementa algumas das particularidades do kcachegrind, é instalado em segundos e corre em todas as plataformas. Para optimizações rápidas, é o ideal.

Xdebug – É uma das mais populares extensões de correcção de erros PHP. Fornece uma grande quantidade de informações úteis para ajudar a encontrar erros rapidamente no código. Xdebug pode ser inserido em várias das mais populares aplicações PHP, tal como PHPEclipse e phpDesigner.

Gubed PHP Debugger – Como o nome indica, é uma ferramenta de correcção de erros para caçar erros de lógica.

DBG – É uma ferramenta de correcção de erros robusta para uso local ou remoto. Pode ser inserido em vários PHP IDE’s e ser facilmente usado com a linha de comandos.

PHP Debug - Projecto Open Source que fornece informação útil acerca do código PHP que pode ser usado para correcção de erros. Pode mostrar informação dos tempos de processamento do código PHP e MySQL, verificar a performance de um trecho de código específico e mostrar as variáveis em formulários gráficos, o que é óptimo se precisar de mais do que a informação dada por print_r() ou var_dump()

PHP Dyn – Outra excelente ferramenta de correcção de erros Open Source. Pode seguir a execução da função e ter o output do argumento, bem como valores das funções.

MacGDBp – É um corrector de erros para Mac OS. Tem todas as ferramentas que seria de esperar de um corrector de erros completo, tal como a possibilidade de saltar código e definir pontos de paragem.

Ferramentas de Teste e Optimização

PHPUnit – É um addon de testes unitários JUnit para PHP5. É uma ferramenta que o ajuda a testar a estabilidade da aplicação Web. Escrever testes na aplicação PHPUnit é fácil, basta seguir estes passos.

SimpleTest – É uma plataforma de testes para aplicações PHP. Para correr o SimpleTest rapidamente, leia este explícito tutorial.

Selenium – O controlo remoto Selenium é uma ferramenta que permite que escreva teste UI de aplicações Web em qualquer linguagem, sobre qualquer site HTTP usando um browser com JavaScript.

PHP CodeSniffer – Um script para detectar se o código PHP segue as regras standard. É uma ferramenta útil para manter código unificado em grandes projectos programados por várias pessoas.

dBug – É um cfDump Coldfusion para PHP. Dá o output de tabelas que contêm informação sobre objectos, recursos da base de dados, recursos XML, sendo útil para processos de correcção de erros.

PHP Profile Class – Uma ferramenta de profiling para aplicações Web que o ajudará a ter uma visão melhor sobre que partes da aplicação necessitam de optimização.

Ferramentas de Documentação

phpDocumentor – Também conhecido como phpdoc ou phpdocu, é uma ferramenta de documentação para o código PHP. Tem várias características, incluindo a possibilidade de output em HTML, PDF, CHM e XML em formato DocBook, e possui também uma interface Web e uma de linha de comandos, bem como especificação de código. Para aprender mais sobre phpDocumentor, leia o manual online

PHP DOX – É um motor de busca baseado em AJAX que permite pesquisar títulos em todas as páginas de documentação PHP.

Ferramentas de Segurança

Securimage – Script Open Source CAPTCHA para criar imagens complexas e códigos CAPTCHA para proteger de spam e abusos.

Scavenger – Ferramenta Open Source para gerir as vulnerabilidades de código, ajudando os administradores de sistema a responder rapidamente a situações de vulnerabilidade, podendo procurá-las com esta ferramenta.

PHP-IDS – PHP-Intrusion Detection System (Sistema de detecção de intrusões PHP) é simples de usar, rápido e bem estruturado para a sua aplicação PHP.

Pixy: PHP Security Scanner – é um programa Java que faz pesquisas automáticas em código PHP4, com objectivo de detectar vulnerabilidades de injecção de código XSS e SQL. Cria um relatório com as possíveis vulnerabilidades tal como informação para perceber essas vulnerabilidades.

Manipulação de Imagem e Gráficos

PHP/SWF Charts – Permite criar gráficos web apartir de dados dinâmicos. Pode usar scripts PHP para criar e obter dados apartir das bases de dados, e depois passar para esta ferramenta para criar conteúdo Flash (SWF).

pChart – Cria gráficos apartir de querys SQL ou ficheiros CSV, tendo também a possibilidade de inserir dados manualmente.

WideImage – Permite fazer manipulação de imagens dinâmicas e processar PHP5. Para poder usar esta livraria, deve ter a extensão GD PHP instalada no servidor Web.

MagickWand for PHP – é um módulo para trabalhar com API ImageMagick, que permite criar e editar imagens bitmap. É útil se pretender inserir edição de imagem nas aplicações PHP.

Melhoramento de Código PHP

PHP Beautifier – É um pacote PEAR para automaticamente melhorar e formatar o código PHP4 e PHP5.

PHPCodeBeautifier - É uma ferramenta que lhe permite salvar horas de recriação de código para ficar do jeito que você pretende. Uma versão GUI permite-lhe trabalhar os ficheiros visualmente, a versão de linha de comandos pode ser integrada com outras ferramentas (CVS, SubVersion IDE, etc) Tem também uma ferramenta integrada de PHPEdit.

GeSHi: Generic Sintax Highlighter – Simples mas poderoso a realçar texto, com o objectivo de suportar uma vasta gama de linguagens populares. Programadores podem facilmente adicionar novas linguagens para realce de texto e definir facilmente os formatos de output.

Sistemas de Controlo de Versão

Phing - é um controlador de versão popular para PHP, útil para organizar e manter diferentes versões do projecto.

Xinc – Controlador de versão com integração continua escrito em PHP5. Funciona muito bem com outros sistemas como Subversion e Phing.

Programação orientada a objectos, Utilidades e Extensões úteis

Simplepie – é uma class que o ajuda a trabalhar com feeds RSS. Veja o leitor RSS e Atom que demonstra uma aplicação web simples que usa SimplePie.

HTML Purifier – É um filtro Open Source de livraria de formato standard escrito em PHP. Não remove apenas código maligno como também assegura que os documentos estão com formato standard

TCPDF - Programação orientada a objectos, Open Source , linguagem PHP para criar documentos PDF.

htmlSQL – É uma ferramenta única de programação orientada a objectos para querying valores HTML em sintax SQL. Veja a demonstração.

The Greatest PHP Snippet File Ever (Using Quicktext for Notepad++) – Usado para programação PHP que pode ser usado com QuickText e Notepad++, embora haja possibilidade de adaptar a outros editores de texto.

Creole – Cria código limpo e orientado a objectos baseado no API de JDBC.

PHPLing – LINQ é um componente que adiciona query de dados nativamente ao PHP usando uma sintax de SQL. Define uma quantidade de operadores query que podem ser usados para fazer query, projectar e filtrar dados em arrays, bases de dados.

PHPMathPublisher – Permite publicar documentos matemáticos na web usando apenas um script PHP (sem usar programas LaTeX e sem MathML)

phpMyAdmin – Se está a trabalhar com PHP, há uma grande hipótese de usar uma configuração LAMP. phpMyAdmin é uma aplicação baseada na Web, para controlar, criar, importar ou exportar bases de dados MySQL

PHPExcel – É um conjunto de programação orientada a objectos PHP para trabalhar com ficheiros do Microsoft Excel. Permite ler e escrever nos ficheiros, útil para criar folhas de cálculo de Excel dinamicamente para download.

Phormer – Uma galeria baseada em PHP para ajudar a guardar, distribuir por categorias e cortar imagens online.

xajax PHP Class Library – Xajax é programação orientada a objectos para trabalhar com aplicações PHP AJAX . Concede-lhe API fácil de usar para rapidamente manusear tarefas relacionadas com PHP AJAX. Veja isto em acção em xajax Multiplier e Graffiti Wall.

PHP User Class – É um excelente script para o ajudar a criar sistemas para autenticação de utilizadores (registo, login, perfil de conta, etc). É uma ferramenta útil se quer implementar registo de utilizador nas suas aplicações Web

PHP-GTK – É uma extensão para o kit de ferramentas GTK+. Tem várias funções OOP e programação orientada a objectos para ajudar a criar rapidamente GUI’s multi-plataforma para aplicações.

Ferramentas e fontes online PHP

Minify – É uma aplicação PHP5 que combine vários ficheiros CSS ou JavaScript, comprime o seu conteúdo e apresenta os resultados através de encriptação HTML (usando Gzip/deflate). Ajudá-lo-à a seguir asregras de alta performance para websites da Yahoo.

HTTP StaticMerger – Junta automaticamente ficheiros estáticos CSS e JavaScript e acelera o tempo de abertura de página.

PHP Object Generator – Ferramenta Open Source e baseada na Web para construir rapidamente objectos PHP , tirando vantagem de princípios OOP no código.

gotAPI/PHP – gotAPI é uma ferramenta online para procurar funções e programação orientada rapidamente em PHP. Veja aqui um exemplo.

koders – É um motor de busca para código Open Source que possa ser baixado. Tem cerca de 1 bilião de linhas de código indexadas e não está limitado apenas a PHP

PECL – É um directório de todas as extensões PHP conhecidas e um sítio onde se pode fazer download e criar extensões PHP.

Ferramentas para Browser (Addons para Firefox)

FirePHP – É uma extensão para Firefox que permite que guarde dados no Firebug. Tem uma variedade de características, podendo alterar os erros e manusear as excepções. Para aprender mais sobre FirePHP visite este guia. Se pretende associar FirePHP com Zend, visite este guia.

phpLangEditor – Permite traduzir ficheiros de linguagem e variáveis no script.

PHP Lookup – é um campo de pesquisa integrado para procurar referencias na sintax PHP.

PHP Manual Search – Um campo de pesquisa de documentação PHP oficial apartir do browser.

PHP Frameworks

Dwoo – É um motor de templates alternativo ao Smarty. É quase 100% compatível com os templates e plugins, mas está a ser escrito apartir do zero e o objectivo é ir um passo à frente com uma base de código mais limpa.

CodeIgniter – É um framework de alta performance, Open Source, que o ajuda a criar aplicações PHP rapidamente. É conhecido por conceber um código limpo, reduzindo desta forma a carga do servidor. Tem um manual online, tutoriais em vídeo e um fórum de utilizadores activo.

YII Framework – Framework de alta performance, supostamente mais eficiente que CodeIgniter, CakePHP, ZF e Symfony. É uma boa solução para criar aplicações Web em larga escala. Suporta MVC, DAO/ActiveRecord, I18N/L10N, caching, AJAX baseado em jQuery, autenticação, controle de acesso, validação de entradas, entre outros.

NetBeans – Ambiente dedicado de programação PHP com total integração nos standards Web. O editor é integrado dinamicamente com HTML NetBeans, JavaScript e edição de características CSS como realçar sintax e o corrector de erros JavaScript.

Solar – É um ambiente de programação de framework PHP5, derivado do motor de templates Savant. Usa a arquitectura MVC e tem programação orientada a objectos de forma a proteger a aplicação Web contra injecção de SQL, XSS e outros comuns.

Symfony – Aplicação framework PHP5 Open Source que é conhecido pela modulação e livraria de programação orientada a objectos bastante útil. Para configurar mais rapidamente deve ver o manual online que o leva a uma configuração passo-a-passo.

PEAR: PHP Extension and Application Repository – PEAR é um popular framework e sistema de distribuição para componentes PHP reutilizáveis. O objectivo é fornecer uma livraria estruturada de código PHP Open Source para todos os utilizadores, um sistema para distribuição de código, manutenção de pacotes e um estilo standard para o código PHP.

Propel – É um framework ORM para PHP5. Permite-lhe o acesso à base de dados para usar um conjunto de objectos, fornecendo um API simples para guardar e ler dados.

{{macro}} template engine – {{macro}} compila os templates inicias em script PHP executáveis com sintax limpa (mais limpa do que WACT e Smarty) e executa-os de forma bastante rápida. O motor não usa sintax XML; há apenas dados globais e locais, todos os dados são mostrados em variáveis PHP regulares e o sistema suporta características WACT.

Zend Framework – É uma aplicação Web muito popular que aceita os princípios OOP PHP. Tem utilidades integradas para trabalhar com API de serviços Web gratuitos, como Google, Flickr e Amazon.

Qcodo - Excelente aplicação PHP framework Open Source. Esta dividido em duas partes, o criador de código e Qforms. O criador de código manuseia a criação do código de objecto , enquanto que Qforms é um sistema intuitivo para ligar e criar formulários Web HTML guiados por código PHP.

Sajax – Aplicação framework JavaScript e AJAX que trabalha muito bem com PHP. Veja Sajax a funcionar nesta demonstração.

Smarty – É um sistema de templates que o ajuda a separar lógica PHP e código de output (HTML, CSS; JavaScript). Irá manter os projectos mais facilmente manuseáveis.

CakePHP - É um dos frameworks líderes para criar aplicações Web robustas e completas. Tem um manual online extenso e bem organizado . Se desejar aprender através de tutoriais em vídeo, pode consultaraqui.

Savant2 – É outro sistema de templates PHP orientado a objectos. Ao invés de utilizar sintax específica do Savant2, utiliza a sintax PHP para criar o template do seu projecto.

PHP Spec – Framework simples e intuitivo segue o princípio “Behavior-Driven Development” e assim permite-lhe escrever código orientado a comportamentos, a maior parte das vezes em Inglês simples.

PHP IDE’s e Editores

PHP Eclipse – Editor de código Open Source e corre na maioria dos sistemas operativos, como Windows, Linux e Mac OS. Tem todas as ferramentas que se devem esperar de um editor de código de PHP, como realce de sintax, dicas para melhoria de edição, e suporte para Xdebug e DBG.

PhpED – É um excelente IDE para utilizadores de Windows. Um dos mais robustos e mais completo de momento no mercado e tem ferramentas úteis como um profiler de código integrado para encontras engarrafamentos no código PHP e conta também com excelente integração com aplicações e serviços exteriores.

phpDesigner – Editor/IDE PHP leve que lida bastante bem com código de output. Veja os tutoriais online, bem como tutoriais em vídeo.

Zend Studio – É um óptimo PHP IDE para Eclipse. Ajuda-o a programar e lidar com Rich Internet Applications (RIA) num interface muito intuitivo.

Aptana PHP - Uma extensão/plugin IDE PHP para ser usado em conjunto com o Aptana Studio. Para saber mais visite a documentação online.

PDT - Uma ferramenta framework PHP que é parte do projecto Eclipse. Inclui as ferramentas necessárias para criar aplicações Web.

VS.Php – É um IDE PHP para Microsoft Visual Studio, fazendo dele um óptimo IDE para criadores ASP que tenham usado Microsoft Visual Studio para desenvolver aplicações Web. Para correr ASAP com VS.Php, consulte este manual, bem como a documentação online.

PHPEdit – Editor e IDE PHP com imensas ferramentas úteis e uma interface muito intuitiva. Veja os vídeos online aqui.

Inspirado na Smashing Magazine

Retirado de: http://www.escolacriatividade.com/75-ferramentas-php-extremamente-uteis/