Fabien LE LEZ writes:Quant à memprof (détecteur de fuites mémoires si j'ai bien
compris), je serais presque tenté de dire que si on ressent
le besoin d'un tel outil, c'est que le code est mauvais.
Comme tous les outils de débogage. Quand on n'a pas de bug, on
n'en a pas besoin, en effet.
Fabien LE LEZ <gramster@gramster.com> writes:
Quant à memprof (détecteur de fuites mémoires si j'ai bien
compris), je serais presque tenté de dire que si on ressent
le besoin d'un tel outil, c'est que le code est mauvais.
Comme tous les outils de débogage. Quand on n'a pas de bug, on
n'en a pas besoin, en effet.
Fabien LE LEZ writes:Quant à memprof (détecteur de fuites mémoires si j'ai bien
compris), je serais presque tenté de dire que si on ressent
le besoin d'un tel outil, c'est que le code est mauvais.
Comme tous les outils de débogage. Quand on n'a pas de bug, on
n'en a pas besoin, en effet.
Olivier Azeau wrote:Fabien LE LEZ wrote:A quoi sert-il exactement dans ce cas précis ? Il me
semble que gprof est un profiler, i.e. un programme qui
permet de savoir où optimiser le code (ce qui peut vouloir
dire sacrifier la lisibilité pour accélérer l'exécution).
Tu veux dire que la vitesse d'exécution ne peut pas etre un
bon critere de qualité ?
Elle le peut. En général, même, il faut que le programme soit
assez rapide. Il n'y a que la définition de « assez » qui varie.
Mais gprof ne sert pas là -- gprof ne va pas me dire si
l'utilisateur se frustre à cause des temps de réponse, par
exemple, ni si mon serveur est capable de traiter 140 requêtes
par séconde, comme c'est écrit dans le cahier de charge.
Olivier Azeau wrote:
Fabien LE LEZ wrote:
A quoi sert-il exactement dans ce cas précis ? Il me
semble que gprof est un profiler, i.e. un programme qui
permet de savoir où optimiser le code (ce qui peut vouloir
dire sacrifier la lisibilité pour accélérer l'exécution).
Tu veux dire que la vitesse d'exécution ne peut pas etre un
bon critere de qualité ?
Elle le peut. En général, même, il faut que le programme soit
assez rapide. Il n'y a que la définition de « assez » qui varie.
Mais gprof ne sert pas là -- gprof ne va pas me dire si
l'utilisateur se frustre à cause des temps de réponse, par
exemple, ni si mon serveur est capable de traiter 140 requêtes
par séconde, comme c'est écrit dans le cahier de charge.
Olivier Azeau wrote:Fabien LE LEZ wrote:A quoi sert-il exactement dans ce cas précis ? Il me
semble que gprof est un profiler, i.e. un programme qui
permet de savoir où optimiser le code (ce qui peut vouloir
dire sacrifier la lisibilité pour accélérer l'exécution).
Tu veux dire que la vitesse d'exécution ne peut pas etre un
bon critere de qualité ?
Elle le peut. En général, même, il faut que le programme soit
assez rapide. Il n'y a que la définition de « assez » qui varie.
Mais gprof ne sert pas là -- gprof ne va pas me dire si
l'utilisateur se frustre à cause des temps de réponse, par
exemple, ni si mon serveur est capable de traiter 140 requêtes
par séconde, comme c'est écrit dans le cahier de charge.
wrote:Olivier Azeau wrote:Fabien LE LEZ wrote:A quoi sert-il exactement dans ce cas précis ? Il me
semble que gprof est un profiler, i.e. un programme qui
permet de savoir où optimiser le code (ce qui peut
vouloir dire sacrifier la lisibilité pour accélérer
l'exécution).
Tu veux dire que la vitesse d'exécution ne peut pas etre
un bon critere de qualité ?
Elle le peut. En général, même, il faut que le programme
soit assez rapide. Il n'y a que la définition de « assez »
qui varie. Mais gprof ne sert pas là -- gprof ne va pas me
dire si l'utilisateur se frustre à cause des temps de
réponse, par exemple, ni si mon serveur est capable de
traiter 140 requêtes par séconde, comme c'est écrit dans le
cahier de charge.
Là, je crois que l'on mélange un peu tout car le terme
"qualité" peut effectivement vouloir dire beaucoup de choses.
S'il s'agit de la qualité perçue par l'utilisateur, il y a
effectivement de nombreux cas où l'on se retrouve à écrire un
outil ad hoc ou à utiliser des outils d'automatisation
(d'envoi de requêtes à un serveur, d'envoi d'évènements à une
IHM, ...) qui n'ont rien à voir avec du profiling.
Mais la "qualité" du code ça peut aussi être :
- ne pas utiliser à outrance l'allocation dynamique
- ne pas faire des copies inutiles de données
- bien utiliser des composants tiers gourmands en CPU
- ...
J'ai déjà rencontré ces 3 cas et, à chaque fois, la détection
du problème a été faite avec un outil de profiling.
kanze@gabi-soft.fr wrote:
Olivier Azeau wrote:
Fabien LE LEZ wrote:
A quoi sert-il exactement dans ce cas précis ? Il me
semble que gprof est un profiler, i.e. un programme qui
permet de savoir où optimiser le code (ce qui peut
vouloir dire sacrifier la lisibilité pour accélérer
l'exécution).
Tu veux dire que la vitesse d'exécution ne peut pas etre
un bon critere de qualité ?
Elle le peut. En général, même, il faut que le programme
soit assez rapide. Il n'y a que la définition de « assez »
qui varie. Mais gprof ne sert pas là -- gprof ne va pas me
dire si l'utilisateur se frustre à cause des temps de
réponse, par exemple, ni si mon serveur est capable de
traiter 140 requêtes par séconde, comme c'est écrit dans le
cahier de charge.
Là, je crois que l'on mélange un peu tout car le terme
"qualité" peut effectivement vouloir dire beaucoup de choses.
S'il s'agit de la qualité perçue par l'utilisateur, il y a
effectivement de nombreux cas où l'on se retrouve à écrire un
outil ad hoc ou à utiliser des outils d'automatisation
(d'envoi de requêtes à un serveur, d'envoi d'évènements à une
IHM, ...) qui n'ont rien à voir avec du profiling.
Mais la "qualité" du code ça peut aussi être :
- ne pas utiliser à outrance l'allocation dynamique
- ne pas faire des copies inutiles de données
- bien utiliser des composants tiers gourmands en CPU
- ...
J'ai déjà rencontré ces 3 cas et, à chaque fois, la détection
du problème a été faite avec un outil de profiling.
wrote:Olivier Azeau wrote:Fabien LE LEZ wrote:A quoi sert-il exactement dans ce cas précis ? Il me
semble que gprof est un profiler, i.e. un programme qui
permet de savoir où optimiser le code (ce qui peut
vouloir dire sacrifier la lisibilité pour accélérer
l'exécution).
Tu veux dire que la vitesse d'exécution ne peut pas etre
un bon critere de qualité ?
Elle le peut. En général, même, il faut que le programme
soit assez rapide. Il n'y a que la définition de « assez »
qui varie. Mais gprof ne sert pas là -- gprof ne va pas me
dire si l'utilisateur se frustre à cause des temps de
réponse, par exemple, ni si mon serveur est capable de
traiter 140 requêtes par séconde, comme c'est écrit dans le
cahier de charge.
Là, je crois que l'on mélange un peu tout car le terme
"qualité" peut effectivement vouloir dire beaucoup de choses.
S'il s'agit de la qualité perçue par l'utilisateur, il y a
effectivement de nombreux cas où l'on se retrouve à écrire un
outil ad hoc ou à utiliser des outils d'automatisation
(d'envoi de requêtes à un serveur, d'envoi d'évènements à une
IHM, ...) qui n'ont rien à voir avec du profiling.
Mais la "qualité" du code ça peut aussi être :
- ne pas utiliser à outrance l'allocation dynamique
- ne pas faire des copies inutiles de données
- bien utiliser des composants tiers gourmands en CPU
- ...
J'ai déjà rencontré ces 3 cas et, à chaque fois, la détection
du problème a été faite avec un outil de profiling.
On 26 Jan 2005 03:11:31 -0800, :Dans du vrai code, au boulot, ce genre de mesure a permi
d'identifier une classe définie en plusieurs milliers de
lignes, avec plusieurs fonctions de plus de 2000 lignes
(certaines de 10000 je crois), une complexité
cyclotomatique de l'ordre de 100 dans pas mal de fonctions.
Il te faut un outil pour trouver ça ? La revue du code n'a
rien dit ?
A priori, l'idée est de passer l'outil de mesure dès qu'on
reçoit le code, afin d'avoir en quelques minutes une idée de
l'étendue des dégâts. La revue de code ne vient qu'après.
On 26 Jan 2005 03:11:31 -0800, kanze@gabi-soft.fr:
Dans du vrai code, au boulot, ce genre de mesure a permi
d'identifier une classe définie en plusieurs milliers de
lignes, avec plusieurs fonctions de plus de 2000 lignes
(certaines de 10000 je crois), une complexité
cyclotomatique de l'ordre de 100 dans pas mal de fonctions.
Il te faut un outil pour trouver ça ? La revue du code n'a
rien dit ?
A priori, l'idée est de passer l'outil de mesure dès qu'on
reçoit le code, afin d'avoir en quelques minutes une idée de
l'étendue des dégâts. La revue de code ne vient qu'après.
On 26 Jan 2005 03:11:31 -0800, :Dans du vrai code, au boulot, ce genre de mesure a permi
d'identifier une classe définie en plusieurs milliers de
lignes, avec plusieurs fonctions de plus de 2000 lignes
(certaines de 10000 je crois), une complexité
cyclotomatique de l'ordre de 100 dans pas mal de fonctions.
Il te faut un outil pour trouver ça ? La revue du code n'a
rien dit ?
A priori, l'idée est de passer l'outil de mesure dès qu'on
reçoit le code, afin d'avoir en quelques minutes une idée de
l'étendue des dégâts. La revue de code ne vient qu'après.
quand on a
des fonctions à plus de 2000 lignes
quand on a
des fonctions à plus de 2000 lignes
quand on a
des fonctions à plus de 2000 lignes
On 27 Jan 2005 00:28:08 -0800, :quand on a
des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La seule
fois où ça m'est arrivé, c'est quand j'ai pondu un décompresseur
Huffman "en dur". Il y avait un sacré paquet de lignes, mais c'était
du code généré automatiquement...
On 27 Jan 2005 00:28:08 -0800, kanze@gabi-soft.fr:
quand on a
des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La seule
fois où ça m'est arrivé, c'est quand j'ai pondu un décompresseur
Huffman "en dur". Il y avait un sacré paquet de lignes, mais c'était
du code généré automatiquement...
On 27 Jan 2005 00:28:08 -0800, :quand on a
des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La seule
fois où ça m'est arrivé, c'est quand j'ai pondu un décompresseur
Huffman "en dur". Il y avait un sacré paquet de lignes, mais c'était
du code généré automatiquement...
On 27 Jan 2005 00:28:08 -0800, :quand on a
des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La seule fois
où ça m'est arrivé, c'est quand j'ai pondu un décompresseur
Huffman
"en dur". Il y avait un sacré paquet de lignes, mais c'était du
code
généré automatiquement...
On 27 Jan 2005 00:28:08 -0800, kanze@gabi-soft.fr:
quand on a
des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La seule fois
où ça m'est arrivé, c'est quand j'ai pondu un décompresseur
Huffman
"en dur". Il y avait un sacré paquet de lignes, mais c'était du
code
généré automatiquement...
On 27 Jan 2005 00:28:08 -0800, :quand on a
des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La seule fois
où ça m'est arrivé, c'est quand j'ai pondu un décompresseur
Huffman
"en dur". Il y avait un sacré paquet de lignes, mais c'était du
code
généré automatiquement...
Fabien LE LEZ wrote:On 26 Jan 2005 03:11:31 -0800, :Dans du vrai code, au boulot, ce genre de mesure a permi
d'identifier une classe définie en plusieurs milliers de
lignes, avec plusieurs fonctions de plus de 2000 lignes
(certaines de 10000 je crois), une complexité
cyclotomatique de l'ordre de 100 dans pas mal de fonctions.Il te faut un outil pour trouver ça ? La revue du code n'a
rien dit ?A priori, l'idée est de passer l'outil de mesure dès qu'on
reçoit le code, afin d'avoir en quelques minutes une idée de
l'étendue des dégâts. La revue de code ne vient qu'après.
Je sais, et j'aurais dû mettre un émoticon. Je ne nie pas
l'utilité des tels outils avant (et même après) la révue du
code, ne serait-ce pour signaler les composants où il faudrait
faire particulièrement attention. Mais quand même -- quand on a
des fonctions à plus de 2000 lignes, le problème saute aux yeux.
Fabien LE LEZ wrote:
On 26 Jan 2005 03:11:31 -0800, kanze@gabi-soft.fr:
Dans du vrai code, au boulot, ce genre de mesure a permi
d'identifier une classe définie en plusieurs milliers de
lignes, avec plusieurs fonctions de plus de 2000 lignes
(certaines de 10000 je crois), une complexité
cyclotomatique de l'ordre de 100 dans pas mal de fonctions.
Il te faut un outil pour trouver ça ? La revue du code n'a
rien dit ?
A priori, l'idée est de passer l'outil de mesure dès qu'on
reçoit le code, afin d'avoir en quelques minutes une idée de
l'étendue des dégâts. La revue de code ne vient qu'après.
Je sais, et j'aurais dû mettre un émoticon. Je ne nie pas
l'utilité des tels outils avant (et même après) la révue du
code, ne serait-ce pour signaler les composants où il faudrait
faire particulièrement attention. Mais quand même -- quand on a
des fonctions à plus de 2000 lignes, le problème saute aux yeux.
Fabien LE LEZ wrote:On 26 Jan 2005 03:11:31 -0800, :Dans du vrai code, au boulot, ce genre de mesure a permi
d'identifier une classe définie en plusieurs milliers de
lignes, avec plusieurs fonctions de plus de 2000 lignes
(certaines de 10000 je crois), une complexité
cyclotomatique de l'ordre de 100 dans pas mal de fonctions.Il te faut un outil pour trouver ça ? La revue du code n'a
rien dit ?A priori, l'idée est de passer l'outil de mesure dès qu'on
reçoit le code, afin d'avoir en quelques minutes une idée de
l'étendue des dégâts. La revue de code ne vient qu'après.
Je sais, et j'aurais dû mettre un émoticon. Je ne nie pas
l'utilité des tels outils avant (et même après) la révue du
code, ne serait-ce pour signaler les composants où il faudrait
faire particulièrement attention. Mais quand même -- quand on a
des fonctions à plus de 2000 lignes, le problème saute aux yeux.
On 27 Jan 2005 00:28:08 -0800, :quand on a des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La
seule fois où ça m'est arrivé, c'est quand j'ai pondu un
décompresseur Huffman "en dur". Il y avait un sacré paquet de
lignes, mais c'était du code généré automatiquement...
On 27 Jan 2005 00:28:08 -0800, kanze@gabi-soft.fr:
quand on a des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La
seule fois où ça m'est arrivé, c'est quand j'ai pondu un
décompresseur Huffman "en dur". Il y avait un sacré paquet de
lignes, mais c'était du code généré automatiquement...
On 27 Jan 2005 00:28:08 -0800, :quand on a des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La
seule fois où ça m'est arrivé, c'est quand j'ai pondu un
décompresseur Huffman "en dur". Il y avait un sacré paquet de
lignes, mais c'était du code généré automatiquement...
Fabien LE LEZ wrote:On 27 Jan 2005 00:28:08 -0800, :quand on a
des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La
seule fois où ça m'est arrivé, c'est quand j'ai pondu un
décompresseur Huffman "en dur". Il y avait un sacré paquet
de lignes, mais c'était du code généré automatiquement...
En C++, je ne sais pas.
En C, j'ai vu une fois une appli avec plusieurs dizaines de
fichiers ou chacun d'entre eux ne contenait qu'une seule
fonction et les fonctions de 1000 lignes étaient monnaie
courante. En fait, on s'y retrouvait pas trop mal car la
structure était toujours la meme : quelques bon gros mega
'switch' sur des variables static ou passées en parametre qui
définissaient un état.
La plupart des 'case' ne dépassaient pas les 50 lignes donc ca
allait... enfin pas trop longtemps quand meme...
Fabien LE LEZ wrote:
On 27 Jan 2005 00:28:08 -0800, kanze@gabi-soft.fr:
quand on a
des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La
seule fois où ça m'est arrivé, c'est quand j'ai pondu un
décompresseur Huffman "en dur". Il y avait un sacré paquet
de lignes, mais c'était du code généré automatiquement...
En C++, je ne sais pas.
En C, j'ai vu une fois une appli avec plusieurs dizaines de
fichiers ou chacun d'entre eux ne contenait qu'une seule
fonction et les fonctions de 1000 lignes étaient monnaie
courante. En fait, on s'y retrouvait pas trop mal car la
structure était toujours la meme : quelques bon gros mega
'switch' sur des variables static ou passées en parametre qui
définissaient un état.
La plupart des 'case' ne dépassaient pas les 50 lignes donc ca
allait... enfin pas trop longtemps quand meme...
Fabien LE LEZ wrote:On 27 Jan 2005 00:28:08 -0800, :quand on a
des fonctions à plus de 2000 lignes
Au fait, comment fait-on des fonctions de 2000 lignes ? La
seule fois où ça m'est arrivé, c'est quand j'ai pondu un
décompresseur Huffman "en dur". Il y avait un sacré paquet
de lignes, mais c'était du code généré automatiquement...
En C++, je ne sais pas.
En C, j'ai vu une fois une appli avec plusieurs dizaines de
fichiers ou chacun d'entre eux ne contenait qu'une seule
fonction et les fonctions de 1000 lignes étaient monnaie
courante. En fait, on s'y retrouvait pas trop mal car la
structure était toujours la meme : quelques bon gros mega
'switch' sur des variables static ou passées en parametre qui
définissaient un état.
La plupart des 'case' ne dépassaient pas les 50 lignes donc ca
allait... enfin pas trop longtemps quand meme...