2009-11-16 5 views
1

Comment tester si une application a rendu quelque chose correctement?Comment tester quelque chose rendu correctement?

Par exemple (exemple 2D):

Microsoft Word 2007 http://img32.imageshack.us/img32/6197/37841144.png

Comment peut-on savoir que l'ombre est correctement placé ou la bonne couleur/contour a été rendu? Ou si l'effet 3D rend correctement quand on tournerait dans une direction? D'autres choses pourraient être si le mot art a été redimensionné, comment peut-on mesurer son «exactitude»?

+0

Visuellement mais de manière systématique? –

+0

Oui, visuellement mais de manière systématique – yxk

Répondre

3

Il y a quelques façons:

  1. Si elle est en fait très précisément spécifié ce qui doit être rendu et exactement de quelle manière, vous pouvez simplement comparer les pixels à un rendu de référence.
  2. Dans le cas de choses comme SVG, ce n'est pas clairement spécifié. L'approche habituelle ici est d'utiliser des rendus de référence et de les comparer à la main. Vous pouvez facilement superposer les deux, soustraire l'un à l'autre et repérer les différences flagrantes de cette façon. Ce n'est pas un processus automatique, cependant.
  3. Vous pouvez regarder directement les données représentant l'image dessinée au lieu de l'image sur l'écran. Ce qui est dessiné est (dans votre exemple) un graphique vectoriel. Cela signifie qu'il existe plusieurs formes qui doivent avoir des propriétés, des formes et des couleurs bien définies et vous pouvez simplement comparer vos données de forme à une référence. Ce genre de choses peut être fait automatiquement. Je pense que Google utilise une approche similaire pour comparer le rendu de Chrome avec des rendus de référence de pages Web; ils ne comparent pas les données de pixel, ils comparent les données de niveau supérieur, ce que et comment le navigateur rendrait.
+0

Dans la 3ème méthode de test, la comparez-vous à ce qui serait perçu comme un rendu correct? Cela n'ajoute-t-il pas un élément de subjectivité?Aussi, s'il n'y a pas de rendu auquel vous pouvez vous référer, le seul choix sera-t-il la méthode 3? – yxk

+0

La 3ème regarde réellement les structures de données qui seront utilisées pour rendre tout ce qui sera vu. Donc, vous prenez simplement la comparaison avec une autre couche d'abstraction. Vous pouvez comparer que la forme de l'ombre est réellement située à la bonne position, etc. Vous devez certainement * savoir * ce qui serait "correct". Mais sinon, vous auriez du mal à classer une image comme sortie correcte ou incorrecte, de toute façon. Et oui, les rendus de référence sont en fait parfois dessinés à la main. Ils doivent être précis à la spécification que vous testez. – Joey

2

Il y a deux façons: L'image et le rendu basé.

La manière de l'image: Vous devez trouver un moyen de rendre l'image dans un tampon de pixels interne (vous pouvez donc exécuter vos tests sans tête, c'est-à-dire sans apparaître d'interface utilisateur).

Ensuite, sélectionnez quelques pixels et assurez-vous que leurs couleurs sont correctes. Dans votre exemple, sélectionnez un couple de pixels blancs autour du texte pour vous assurer que le rendu ne fuit pas. Des méthodes auxiliaires telles que assertThatRectangleIs(area, color) aideront à couvrir certains terrains. L'idée est de sélectionner des zones spécifiques (comme la barre verticale gauche du H) et de ne pas être trop pointilleux.

La méthode de rendu fonctionne avec l'hypothèse que votre bibliothèque gfx fonctionne. Alors ce que vous faites est vous moquez le code de rendu réel avec quelque chose comme ceci:

public class MockGC extends GC { 
    List<Op> ops = new ArrayList<Op>(); 
    void drawLine (int x1, int y1, int x2, int y2) { 
     ops.add(new Line(x1, y1, x2, y2, copyGC (gc))); 
    } 
} 

vous sauver juste la commande et toutes les options pertinentes dans une structure de données qui est facile à comparer. Ou encore:

public class MockGC extends GC { 
    StringBuilder buffer = new StringBuilder(); 

    void drawLine (int x1, int y1, int x2, int y2) { 
     buffer.append("line "+x1+","+y1+" - "+x2+","+y2+", color="+foreground()+"\n"); 
    } 
} 

Plus tard, vous pouvez simplement vérifier que les commandes correctes de rendu ont été émises et que le GC (couleurs, police, rendu des notes) a été utilisé.

Cette dernière méthode est beaucoup plus rapide et précise à 100%, mais beaucoup plus de travail à coder.

+0

Pouvez-vous développer votre 2ème méthode? – yxk

+0

Ce que vous voulez savoir? C'est assez simple: il suffit de sauvegarder la commande et toutes les options pertinentes dans une structure facile à vérifier. –

Questions connexes