Testar o Inkscape
Índice
Inkscape é um projeto jovem e a ênfase está ainda em adicionar recursos. Ainda assim é gratificante que a estabilidade do Inkspace tem vindo aumentado constantemente a cada lançamento.
A parte mais importante de 'Teste' é simplesmente usar o Inkscape para trabalho normal -- confirmando que o Inkscape atingiu esse nível de maturidade,exercite os novos recursos e verifique se o aplicativo funciona como esperado.
Reporte um erro se você encontrar qualquer coisa que não se comporta como deveria. Um relatório de bug deve incluir pelo menos uma descrição passo a passo de como reproduzir o bug e/ou um arquivo de teste que demonstra o bug (o menor/mais direto e simples o arquivo de teste melhor).
Utilizadores
O campo está bastante aberto. Estamos ansiosos para receber relatórios de erros e solicitações de funcionalidades (sob a forma de um relatório de bug). Estas muitas vezes exigem análise, esclarecimento e ação posterior. Qualquer um pode fazer isso.
Melhor ainda seria fornecer patches para qualquer parte do aplicativo que não está à altura do que esperam - é a confirmação de que o projeto está evoluindo.Observe que teste sério deve ser feito com uma versão 'instável', qualquer um que você fez você mesmo (ver CompilandoInkscape), ou um snapshot que você tenha baixado. Também gostaríamos de ouvir sobre as áreas em que não temos paridade com aplicações comparáveis. Se você acha que você está tendo idéias interessantes sobre deficiências no Inkscape, ou planos para seu futuro, envolva-se com o grupo de testadores do Inkscape.
Precisamos de pessoas para criar e atualizar documentação, ajuda online,tutoriais e capturas de tela. Observando defeitos nestes é uma forma perfeitamente válida de teste - não queremos lançamentos com documentação obsoleta.
Testadores do Inkscape
Uma comunidade de testadores de Inkscape tem crescido e que tem sua própria lista de discussão, e é de esperar que isso irá liderar todo o trabalho sobre usabilidade e fatores humanos. Este grupo deve ser seu primeiro porto de escalapara estas áreas:
- Teste de Conformidade
- Teste de regressão do Inkscape
- TesteDeInteroperabilidade
- TesteDeUsabilidade
- TesteDePerformance
- Conformidade HIG
Veja também TestingFramework.
Testes de Representação
Além disso, o Inkscape tem testes de renderização que não precisam necessariamente de um desenvolvedor para criar, executar e analisar. Os testes reais podem ser encontrados no SVN (veja abaixo). Abaixo você pode encontrar informações sobre como executar e criar estes testes você mesmo.
Veja esta lista para resultados actualizados.
Correr testes de representção
Além de executar testes de unidade de baixo nível Inkscape também pode ser testado em um nível mais elevado (Veja também Suite de testes de Conformidade SVG. Atualmente 2008-7-26) existe uma ferramenta de teste de renderização (juntamente com alguns casos de teste) no SVN ([1]), que pode ser usado para automatizar parcialmente testes de renderização.
To run the rendering tests:
- Se necessário, compile usando 'g++ -o tester tester.cpp' de tester.cpp (existe um .exe pré-compilado no SVN para usuários de Windows).
- Execute o runtests.py. Se necessário você pode especificar o caminho do Inkscape e algumas outras coisas (executar 'runtests.py --help' para ver quais opções estão disponíveis).
Observe que por padrão é usada somente uma comparação binária entre os arquivos de saída e referência, perceptualdiff (ou qualquer outra ferramenta de comparação que retorna zero em sucesso e 1 em caso de falha) pode ser usada para auxiliar a comparação de imagens (veja as opções disponíveis de runtests.py). Observe que perceptualdiff (1.0.2) teve alguns problemas com a transparência, isto pode ser resolvido agora, e se não, existe um patch no seu controlador patches.
Para selecionar um subconjunto dos testes para executar, especifique um ou mais padrões (com curingas de estilo Unix) na linha de comando. Cada padrão é interpretado como se fosse especificar um prefixo. Por exemplo, 'runtest.py bugs' corresponderá a quaisquer testes cujo caminho relativo ao diretório com casos de teste começa com 'bugs' (por exemplo: 'bugsy.svg' ou 'bugs/bugXYZ.svg').
Os resultados mais comuns de testes são:
- Passe (o arquivo de saída foi comparado a uma referência que passou)
- Falha (o arquivo de saída foi comparado a uma referência de falha)
- Novo (o arquivo de saída não correspondia a qualquer referência)
- Não há referências (não havia nenhuma referência)
runTests.py coloca os arquivos de saída em um subdiretório 'saída' (no mesmo nível dos diretórios 'testcases' e 'referências').
Criar testes de representção
Só colocar um arquivo SVG no diretório 'testcases' (subpastas podem ser usadas para organizar os testes).
Para adicionar uma referência de passou/falhou, só colocá-los no local correspondente sob referências/passou ou referências/falhou. As referências são comparadas por prefixo, então qualquer referência que tem o nome original (sem a extensão) como um prefixo é vista como uma referência para esse arquivo.
Referências falhas são usadas para distinguir entre um resultado que é errado e um resultado que é só (talvez apenas um pouco) diferente do processamento correto. Se você é incapaz de criar uma referência de passagem, que você pode até mesmo dar apenas uma referência de falha.
Também é possível criar um arquivo SVG que deve produzir a exata mesma saída como um caso de teste, mas usa métodos mais simples (ou diferentes).Esta prática é sugerida no plano de teste de conformidade de SVG. Por exemplo,se o arquivo de caso de teste é chamado de 'testcases/basic/foo.svg' você podecriar um arquivo "patch" chamado 'testcases/basic/foo-patch.svg'. runtests.py iria usar o Inkscape para criar um arquivo de referência de passagem de que(como 'references/pass/basic/foo-patch.svg') e usá-lo como uma das referências.(Note que essa referência em geral não deve ser comprometida com SVN).
Programadores
Relatório de compilação
Há um 'inkscape gerar relatório; que é enviado regularmente à lista inkscape-tester (e, periodicamente, à lista de desenvolvedor, quando novos problemas são vistos) que dá uma contagem de avisos encontrados no código.
- Teste de fumaça
- Defeitos no sistema de compilação
Executar testes de unidades
Existem agora alguns testes de unidade que devem ser realizados antes de enviar o seu código ao repositório. Estes podem levar algum tempo para concluir, e para que isto não possa ser feito uma exigência para cada compilação (Test Driven Development), não obstante todos são em sua honra para não 'quebrar a compilação' enviando o código que não passe estes testes. Você pode executá-los por:
- Linux: Basta executar ' make check ', irá construir e executá-las. Ele também deve funcionar no Mac OS X.
- Windows: Use 'buildtool check' (onde buildtool é construído usando ' g++ -O3 -o buildtool buildtool.cpp) para criar e executar a unidade de testes. Alternativamente, você pode usar dist-all-check seleção para construir tudo e executar os testes de unidade.
Cxxtests irá gerar dois arquivos de resultados (mais ou menos equivalentes), um arquivo XML e um arquivo de texto com a extensão 'log'. No Linux, esses arquivos estão localizados em (buildpath) / src.
Criar Executando testes de unidade
Inkscape usa o framework CxxTest framework. Para melhorar, modificar ou estender os testes de unidade existentes, basta edite o arquivo de teste existente (...-test.h).
A maneira mais fácil de criar um novo teste em um diretório que já tem alguns testes de unidade é simplesmente copiar um dos arquivos de teste existente, tira-lo (remova algo específico e renomeie a classe, construtores, etc) e adicionar alguns métodos de teste. Aproveite o momento para olhar para os diferentes instruções ASSERT que CxxTest é compatível com, as variantes TSM_ podem ser especialmente úteis por exemplo quando você quer testar um monte de casos diferentes. Importante: para fazer tudo compilar corretamente você tem que fazer o seguinte:
- Adicionar o arquivo ao grupo correto (já existente) no destino cxxtest no build.xml
- Acrescente o arquivo a variável CXXTEST_TESTSUITES em dir/Makefile_insert.Cuidado com as barras invertidas no final das linhas. Note que você tem para o prefixo "$(srcdir)/dir/" ao seu nome de arquivo, desde que não é uma variável normal tratada pelo Automake, e você tem que usar +=, ao invés de =, porque você está anexando a essa variável em vez de defini-la.
# Faça assim: CXXTEST_TESTSUITES += \ $(srcdir)/dir/first-test.h \ $(srcdir)/dir/second-test.h
Para a criação de uma unidade de teste em um diretório que não tem ainda qualquer testes de unidade:
- Atualize o sistema de compilação do Windows:
- Adicione o grupo cxxtestpart ao destino de cxxtest no build.xml (apenas copie e modifique um já existente).
- Adicione o arquivo .o correspondente à lista de exclusão de destino lib no build.xml e à lista de inclusão de destino linkcxxtests.
- Para Unix, nenhuma mudança além de alterações ao arquivo CXXTEST_TESTSUITES em Makefile_insert são necessárias.
Correr testes autónomos
Para testes de unidade isto não é problema, basta configurar algo que execute cxxtests e você pode usar um dos arquivos de log que ele cria para ver como foi.
Para ser capaz de executar os testes de renderização autônomo no Windows, você tem que compilar o Inkscape como uma linha de comando executável para impedir quaisquer caixas de diálogo de erro de tempo de execução de CRT (ou algo semelhante) aparecendo. Em Linux e em outros Unixes, este problema não existe.
O arquivo teststatus.json que é gerado pela runtests.py contém todos os resultados de teste (no formato JSON). Note que se você executar apenas um subconjunto dos testes este arquivo mantém todas as informações sobre testes que não caem nesse subconjunto. Também retém os resultados antigos de teste. Os códigos de resultado neste arquivo podem ser interpretados como em runtests.py (por exemplo, 0, 1 e 2 defende passou, falhou e novo, respectivamente).
Analizar cobertura do teste
Para ver quão bem os testes (unitários) cobrem certas partes do código, ou para comparar a cobertura dos testes de renderização vs testes unitários, gcov podeser usado. Consulte Profiling para obter mais informações sobre como usar o gcov e coverage.py (uma ferramenta para obter algum controle sobre as quantidades maciças de dados gcov pode gerar).