Licence CC 0

Tarpaulin ou kcov?

Outils de couverture de code pour les projets Rust

Pour un projet (que je présenterais plus tard sur le forum), j’ai eu besoin d’avoir du retour sur mes tests. Une des métriques m’intéresse est le pourcentage de couverture, car il me permet de connaître les branches que je n’ai pas encore testé et d’ajouter des scénarios.

En cherchant un peu sur Internet, je suis tombé sur 2 outils :

  1. kcov
  2. tarpaulin

En voici un petit comparatif.

Comparatif

Facilité d’installation

kcov

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz &&
  tar xzf master.tar.gz &&
  cd kcov-master &&
  mkdir build &&
  cd build &&
  cmake .. &&
  make &&
  make install DESTDIR=../../kcov-build &&
  cd ../.. &&
  rm -rf kcov-master

Tarpaulin

1
2
# install libssl-dev pkg-config cmake zlib1g-dev
cargo install cargo-tarpaulin

Tarpaulin 1 ; kcov 0

Utilisation simple et explicite

kcov

1
kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/<PROJECT-NAME>-<hash>

Tarpaulin

1
cargo tarpaulin

Tarpaulin 2 ; kcov 1

Les 2 restent simples d’utilisation. Tarpaulin ayant moins d’options pour le moment.

Fonctionne

kcov

Pour mon projet… les rapports donnaient des %NAN…

Tarpaulin

Fonctionne directement, les rapports sont corrects.

Tarpaulin 3 ; kcov 1

Support rapide

kcov

Une issue posté, réponse rapide, mais pas de solution trouvée

Tarpaulin

Une issue posté, la personne est rapide a répondre et a cherché en profondeur (l’issue venait de rustc et est fixée en nightly)

Tarpaulin 4 ; kcov 1

Compatibilité avec coveralls.io

Les deux sont compatibles et peuvent envoyer des rapports facilement à coveralls.io

Tarpaulin 5 ; kcov 2

Produit des rapports HTML (pour avant de soumettre mon code)

kcov le permet, tarpaulin dans une version future

Tarpaulin 5 ; kcov 3

Permet d’exclure des fichiers du rapport

Tarpaulin 5 ; kcov 4

Au final même si kcov possède plus de fonctionnalités, tarpaulin l’emporte (et le fait que seul lui fonctionne dans mon cas est ce qui m’intéresse le plus je l’avoue).


Au final, si tarpaulin est intéressant pour votre projet, voici le .travis.yml du projet :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
language: rust
rust:
  - stable
  - nightly
sudo: true
git:
    submodules: false
before_install:
  - sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules
  - git submodule update --init --recursive
install:
  - sudo apt-get install -y libdbus-1-dev openssl
  - |
    # tarpaulin deps
    if [[ "$TRAVIS_RUST_VERSION" == nightly ]]; then
      sudo apt-get update -y && sudo apt-get -y install libssl-dev pkg-config cmake zlib1g-dev;
      cargo install cargo-tarpaulin;
    fi
  - rustc -V
before_script:
  - "export DISPLAY=:99.0"
  - "sh -e /etc/init.d/xvfb start"
  - sleep 3 # give xvfb some time to start
script:
  - cargo build
  - RUST_TEST_THREADS=1 cargo test -- --nocapture
  - |
    # tarpaulin deps
    if [[ "$TRAVIS_RUST_VERSION" == nightly ]]; then
      cargo tarpaulin --ciserver travis-ci --coveralls $TRAVIS_JOB_ID;
    fi

6 commentaires

À mon sens le système de tribune prend tout son sens avec ce genre de billet, pour faire un petit retour d’expérimentations faites qui peuvent intéresser les autres. C’est un type de billet qu’on ne voit pas souvent mais qui peut intéresser du monde je pense, en faisant à terme, dans l’idéal, une petite base de connaissances.

Merci pour ce billet, même si je n’ai jamais touché à du Rust. :)

À mon sens le système de tribune prend tout son sens avec ce genre de billet, pour faire un petit retour d’expérimentations faites qui peuvent intéresser les autres. C’est un type de billet qu’on ne voit pas souvent mais qui peut intéresser du monde je pense, en faisant à terme, dans l’idéal, une petite base de connaissances.

Merci pour ce billet, même si je n’ai jamais touché à du Rust. :)

tleb

Je me suis toujours demandé si le format billet serait adapté à du blogpost d’expérience de développeur, façon feu altdevblogaday. Je veux bien plus d’avis là dessus ! :)

Merci pour l’article !

Je me suis toujours demandé si le format billet serait adapté à du blogpost d’expérience de développeur, façon feu altdevblogaday. Je veux bien plus d’avis là dessus !

Pourquoi pas ? Sachant que le format billet pourrait tout simplement être un post provenant de ton propre blog, j’imagine que tu en fais ce que tu veux (dans la limite du raisonnable).

J’ai passé toute ma journée dessus à tester les deux. Je suis à la fois content de trouver cette article mais un peu triste de pas l’avoir trouvé avant ^^

Je rejoins les conclusions.

J’ai juste un problème avec tarpaulin, il est affreusement lent à me faire le coverage, j’ai l’impression qu’il rebuild tout à chaque fois et je comprends pas pour quoi.

Si quelqu’un à une piste je suis preneur :)

+0 -0

ça serait génial que le rust soit aussi bien outillé que le php pour le coverage. La lenteur de tarpaulin rend côté local l’utilisation du coverage vraiment fastidieuse. Et c’est bien dommage le coverage c’est quand même bien pratique ^^

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte