Précédent   Forum des professionnels en informatique > Le club des professionnels en informatique > Actualités
Actualités L'actualité des sociétés du secteur informatique
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 03/11/2009, 17h21   #1
Chroniqueur Actualités
 
Inscription : juillet 2009
Messages : 2 716
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 2 716
Points : 43 686
Points : 43 686
Par défaut Le pire bout de code que vous ayez vu

Le pire bout de code que vous ayez jamais vu
Qui l'a fait ? Pourquoi ? Pourquoi était-il si horrible ?


Il vous a fait rire. Ou hurler. Ou les deux.
Vous n'en avez pas cru vos yeux et pourtant il était là. Et bien là. Un humain avait écrit ça.
Il est resté dans votre mémoire comme le pire bout de code que vous ayez jamais vu.

Quelque fois ce "pire code" n'est pas trop méchant. Il relève juste du non sens :

Code java :
1
2
3
4
5
6
 
int length= 0;
for(int idx = 0; idx < a.length; i++){
    length++;
}
System.out.println("La taille du tableau est : " + length);

Ou comment calculer simplement la longueur du tableau à partir de la longueur ("a.length") qu'on a dès le départ...

D'autres sont juste parfaitement inutiles :

Code java :
1
2
3
4
 
public Object toObject(String value){
       return (Object) value;
}

En Java tout est Object. Aucun besoin d'effectuer un cast donc.

Mais ce code peut aussi aller jusqu'à vous hanter tant il est horrible. A se demander ce qui a bien pu passer par la tête du "créateur" de ce "monstre", voire si celui-ci sait dans quel langage il code :

Code java :
1
2
3
4
 
public void close(InputStream stream){
    stream = null;
}

InputStream est un flux vers une ressource. Pour le fermer, par exemple, il faut invoquer sa méthode close(), mais dans ce cas, le "créateur" s'est contenté de le mettre à null. Les développeurs Java seront d'accord pour admettre l'inutilité crasse de ce bout de code : les variables sont passées par copie de la valeur, donc ce ne sera "null" que dans la méthode.

Allez une dernière pour la route (pardon pour les yeux) :

Code java :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public int convert(String value){
      if(value == "0"){
            return 0;
      } else if (value == "1"){
            return 1;
      } else if (value == "2"){
            return 2; 
      } // jusqu'à 25 !
      else {
            return -1;
      }
}

Tout cela est faisable en une seule et simple ligne de Java (avec Integer.parseInt(String value) ).
Mais le pire c'est que, en plus, la méthode de cet autre "créateur fou" ne fonctionne pas du tout. En Java, on ne peut pas faire value == "1" pour comparer sa valeur (il faut faire "1".equals(value) ).



Invention de syntaxe, non-sens, aberration dans les raisonnements, vous avez déjà dû croiser ces codes cauchemardesques.

Que vous soyez développeur JavaScript, PHP, Ruby, C, C++, C#, Assembleur, Pascal, Visual Basic, Perl, Python ou autres (désolé de ne pouvoir tous les citer), faîtes nous part de votre expérience de codeur : quel est le pire du pire que vous avez dû lire ?

Une petite explication succincte pour que les non-spécialistes puissent également partager votre émois (qui je n'en doute pas est encore palpable aujourd'hui) est également la bienvenue.

Quant à tous ces honteux bouts de Java reproduits ici, ils m'ont été communiqués par Baptiste Witch (responsable rubrique Java) qui se fera un plaisir de nous en livrer d'autres. Un grand merci à lui.

Mais... je suis sûr que vous avez encore bien pire à raconter.

Pas vrai ?


Lire aussi :

Les rubriques Java, Développement Web et Langages (actus, forums, tutos) de Développez.com

Et pour se détendre après une journée bien chargée, la rubrique Humour Informatique
Gordon Fowler est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2009, 17h32   #2
Nouveau Membre du Club
 
Inscription : septembre 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 44
Points : 26
Points : 26
J'en ai vu un pas mal en php, fait par le responsable développement de ma boîte :

Code :
1
2
3
4
if (true) {
} else {
...
}
Ce jour-là je me suis dis que finalement je n'étais pas le plus mauvais ...
crazyday est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2009, 17h37   #3
Membre émérite
 
Avatar de Gastiflex
 
Inscription : octobre 2004
Messages : 831
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 831
Points : 886
Points : 886
Tout frais : en C++, sous un #ifdef _DEBUG, un if quelconque juste pour choper un point d'arrêt. Le gars s'étonne que le programme ne s'arrête pas... en Release-Debug.
Gastiflex est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2009, 17h50   #4
Membre Expert
 
Avatar de BainE
 
Inscription : mai 2004
Messages : 1 306
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 306
Points : 1 185
Points : 1 185
Deux petits bouts de codes qui nous ont fait bien marré devant la machine a café, en C++

Code C++ :
1
2
3
4
5
6
7
8
9
10
 
bool marvin = true;
 
switch( marvin )
{
    case true : /* ... */; break;
    case false : /* ... */; break;
    default :
       /* ... */
}
deja faire un switch sur un booleen ca nous a surpris, mais quand on a vu le default

et le second, un parcours de liste de la STL
Code :
1
2
3
4
5
6
7
8
9
10
11
list<class> lst;

while( i < lst.size() )
{
    class tmp = lst.pop_front();
    /* ... traitement ... */
    lst.push_back();

    i++;
}
voila voila

p.s. : heu faites pas trop gaffe a la syntaxe, ca fait un moment que j ai plus fait de C++ et je me suis pas amusé a compiler ces perles
__________________
"vaste programme"
BainE est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2009, 17h54   #5
Acropole
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Dans le SDK de physX :

Ca sert à rien, c'est pas trés pro, et ça vient de types à la pointe de la technologie, donc ça surprend.
Ou alors c'est tellement génial que ca me dépasse.
  Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2009, 18h00   #6
Candidat au titre de Membre du Club
 
Étudiant
Inscription : mai 2006
Messages : 24
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2006
Messages : 24
Points : 12
Points : 12
Un code javascript bien crade sur un template d'une page produit d'une boutique sous magento (php).

Code javascript :
1
2
3
4
5
6
7
8
9
 
switch($('productCategory').innerHTML){
    case "Store" :
        $('storeimg').innerHTML="<img src='<?php echo $this->getUrl(); ?>media/store/<?php echo $productId; ?>.jpg' >";
    break;
    ...
    default:
        $('storeimg').innerHTML="<img src='<?php echo $this->getUrl(); ?>media/noproduct.jpg' >";
}

Il rend en partie statique la boutique (on doit manuellement ajouter un case à chaque création de nouvelles catégories).
Il dépend du nom de la catégorie : lors d'une traduction ou d'un changement par le client, tout foire.
Il y a surement d'autres choses à critiquer sur ce code mais je vais en rester là ^^.
clemphenix est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2009, 18h07   #7
Membre habitué
 
Avatar de DrHelmut
 
Homme
Développeur Java/J2EE - Intégrateur Filenet - expert ecm/bpm
Inscription : octobre 2005
Messages : 88
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur Java/J2EE - Intégrateur Filenet - expert ecm/bpm

Informations forums :
Inscription : octobre 2005
Messages : 88
Points : 126
Points : 126
en java, fait par un 'expert' sur une appli que j'ai débogué il y a deux ans.

Tellement énorme que je m'en rappelle encore, ça donnait à peu près ça :

Code java :
1
2
3
4
5
6
7
8
9
10
11
 
public String removeForbiddenChar(String input) {
 
 String ouput="";
 String[] s = input.split(";");
 for(int i=0; i<s.length;i++) {
  s[i].replace(";","");
  output+=s[i];
 }
 return ouput;
}
DrHelmut est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2009, 18h18   #8
Membre actif
 
Avatar de Shaidak
 
Ingénieur développement logiciels
Inscription : août 2008
Messages : 137
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2008
Messages : 137
Points : 179
Points : 179
En Java avec Struts, un getter void ... tellement idiot qu'on a perdu 15min pour savoir d'où venait le problème
Shaidak est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2009, 18h22   #9
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
Si vous voulez vous marrez avec ce genre de chose :

http://thedailywtf.com/Series/CodeSOD.aspx

C'est parfois a mourrir.

Code C# :
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
/// <summary>
    /// Convertit YES ou NO en booléen
    /// </summary>
    public static string boolToYESorNO(bool mon_booleen)
    {
        if (mon_booleen) return "YES";
        return "NO";
    }
 
    /// <summary>
    /// Convertit un booléen en 1 ou 0.
    /// Retourne 1 si le booléen est TRUE
    /// Retourne 0 si le booléen est FALSE
    /// </summary>
    public static int boolTo1or0(bool mon_booleen)
    {
        if (mon_booleen) return 1;
        return 0;
    }
 
    /// <summary>
    /// Convertit un booléen en YES ou NO
    /// </summary>
    public static bool YESorNOToBool(string YesOrNo)
    {
        if (string.IsNullOrEmpty(YesOrNo)) return true;
        if (YesOrNo.ToUpper() == "YES") return true;
        return false;
    }

Donc a crée ces fonctions car a une epoque ou les dev ne connaissai pas le booleen de .net(migration depuis asp), ils utilisaient 1 ou 0 et parfois "YES" ou "NO" .... Donc il reste du code avec ce genre de chose ^^
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2009, 18h24   #10
Membre régulier
 
Inscription : juillet 2007
Messages : 95
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 95
Points : 93
Points : 93
pour ma part, durant mon stage j'ai dû débugger une petite appli qui avait coûtée plus de 50 000 € à la société. Vu la "qualité" du code, je croit que c'est bien plus en réalité...mais chut le boss n'aime pas admettre ses conneries.

Code :
1
2
3
4
5
6
7
if(condition)
{
    //blabla
} else {
   //le même blabla que dans le if
}
sans oublier les Exceptions avalées, les erreurs dans le formules mathematiques etc...
Edit: Je précise juste que l'application en question est une webapp Java et que la quasi totalité du code métier était écrit dans les servlets ainsi que le code HTML. Cette précision fait suite à une remarque que j'ai reçu par MP:

Citation:
J'ai travaillé dans une boite ou il fallait mettre un if pour que le temps machine soit identique lors de l'exécution à une autre boucle, et le code machine généré devait être aussi long. Ça ne veut absolument pas dire qu'il est mauvais. Par contre, votre message montre surtout clairement que vous n'avez aucune expérience en développement, ou pas assez pour éviter de critiquer ce genre de chose. A la limite, critiquer le fait qu'il n'y ait aucun commentaire expliquant cette technique ok.
Si quelqu'un peut m'expliquer le lien avec mon exemple de code je suis preneur...car dans mon exemple je parle d'un code qui exécuté dans le if, ou dans le else revient au même code sans un if...si besoin est de mettre un if inutile, il aurait été plus élégant de mettre :
Code :
1
2
3
if(condition); 
//blabla qu'on écrit qu'une fois, et par conséquent qu'on débugge qu'une fois.
threshold est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2009, 18h29   #11
Invité de passage
 
dido dido
Inscription : octobre 2009
Messages : 5
Détails du profil
Informations personnelles :
Nom : dido dido

Informations forums :
Inscription : octobre 2009
Messages : 5
Points : 4
Points : 4
Par défaut On me dit que ce morceau de code fait quelque chose

Je dis que le code suivant (qui peut etre tester dans plusieurs langages) ne fait rien, on me dit que la reponse est superficielle

Code :
1
2
3
4
5
6
7
8
9
10
 
do break;
while(true);
do;
while(false);
if(true);
if(false);
else;
for(;true; )break;
while(true)break;
Quelle serait la vrai reponse(peut-etre celle, profonde)
dista est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2009, 18h32   #12
Membre expérimenté
 
Homme Rémi BOURGAREL
Développeur .NET
Inscription : juin 2006
Messages : 426
Détails du profil
Informations personnelles :
Nom : Homme Rémi BOURGAREL
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : juin 2006
Messages : 426
Points : 584
Points : 584
Citation:
Envoyé par threshold Voir le message
sans oublier les Exceptions avalées, les erreurs dans le formules mathematiques etc...
En meme temp ce que tu mets dans le " Exceptions avalées, les erreurs dans le formules mathematiques,etc" tu en fera tout les jours , aucun développeur ne fait pas d'erreur. Si tu pense qu'un développeur est une merde des qu'il fait une erreur, même grossière ben bonne chance dans ton bureau

Ce qui est amusant ce sont les erreurs plus que grossière, les truc limite qui sont des correctifs de bug par dessus des correctif de bug par dessus d'autre patch, du style if(5<8). Et ça peut etre pondu par n'importe que dev, tout dépend de sa fatigue / degré d'alcoolémie / cafeine / vacance etc ...

"It's not a bug , it's a feature"
Bourgui est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2009, 18h32   #13
Membre éclairé
 
Inscription : décembre 2006
Messages : 271
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : décembre 2006
Messages : 271
Points : 324
Points : 324
En php :

Code :
1
2
3
foreach($_POST as $cle => $val)
     eval("\$".$cle."=\"".$val."\";");
J'ai sauté au plafond et je fais pas partie de l'équipe de dev web ...
tamiel est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2009, 18h33   #14
Membre régulier
 
Homme Benjamin Dubois
Chef de projet NTIC
Inscription : février 2008
Messages : 65
Détails du profil
Informations personnelles :
Nom : Homme Benjamin Dubois
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : février 2008
Messages : 65
Points : 99
Points : 99
J'ai bossé avec un presta tellement nul que je sais pas trop quel bout de code choisir.

J'ai eu droit à celui-ci, plutôt pas mal :

Dans une page de traitement d'un formulaire :

Code :
1
2
3
4
5
<?php 

$nom = post('nom');
$prenom = post('prenom');
[...]
Et dans un fichier inclus, ladite fonction :

Code :
1
2
3
4
<?php
function post($var) {
return $_POST['$var'];
}
La fonction ne servait strictement à rien, mais elle était consciencieusement appliquée à tous les champs de tous les formulaires (plus de 500 champs)...

J'en ai plein d'autres comme ça :

- Le CMS utilisait adodb pour accéder à la BDD. Par dessus, une classe d'abstraction stockée dans un Zend_Registry, et par dessus un ensemble de fonctions style dbQuery(), dbResult() pour faire abstraction de la classe d'abstraction.


L'agence est une très grosse webAgency parisienne.
monsieurben est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2009, 18h35   #15
Membre régulier
 
Nicolas FRANCOIS
Développeur Java
Inscription : novembre 2008
Messages : 63
Détails du profil
Informations personnelles :
Nom : Nicolas FRANCOIS
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : novembre 2008
Messages : 63
Points : 93
Points : 93
Comment faire une pause d'une seconde en java ?
Code :
1
2
3
4
5
6
7
8
 Calendar timer = Calendar.getInstance();
    timer.add(14,1000);
    int i=0;
    while (Calendar.getInstance().before(timer)) {
        i++;
        i--;
    }
J'y trouve un coté artistique.
Je m'étais demandé l'interet du i++ suivi de i--; peut être avait il peur d'un dépassement capacité du int
nfrancois est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2009, 19h00   #16
Membre régulier
 
Avatar de wizad
 
Étudiant
Inscription : août 2004
Messages : 103
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2004
Messages : 103
Points : 78
Points : 78
Citation:
Envoyé par monsieurben Voir le message
J'ai bossé avec un presta tellement nul que je sais pas trop quel bout de code choisir.

J'ai eu droit à celui-ci, plutôt pas mal :

Dans une page de traitement d'un formulaire :

Code :
1
2
3
4
5
<?php 

$nom = post('nom');
$prenom = post('prenom');
[...]
Et dans un fichier inclus, ladite fonction :

Code :
1
2
3
4
<?php
function post($var) {
return $_POST['$var'];
}
La fonction ne servait strictement à rien, mais elle était consciencieusement appliquée à tous les champs de tous les formulaires (plus de 500 champs)...

J'en ai plein d'autres comme ça :

- Le CMS utilisait adodb pour accéder à la BDD. Par dessus, une classe d'abstraction stockée dans un Zend_Registry, et par dessus un ensemble de fonctions style dbQuery(), dbResult() pour faire abstraction de la classe d'abstraction.


L'agence est une très grosse webAgency parisienne.
En théorie ça ne doit même pas fonctionner : les variables entre guillemets simple ne sont pas interprété...
__________________
Dev C#, PHP, Java
wizad est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2009, 19h05   #17
Membre habitué
 
Avatar de ke2007
 
Homme Kevin
Développeur informatique
Inscription : août 2007
Messages : 75
Détails du profil
Informations personnelles :
Nom : Homme Kevin
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : août 2007
Messages : 75
Points : 121
Points : 121
Citation:
Envoyé par Acropole Voir le message
Dans le SDK de physX :

Ca sert à rien, c'est pas trés pro, et ça vient de types à la pointe de la technologie, donc ça surprend.
Ou alors c'est tellement génial que ca me dépasse.
La même dans le code de font2ftt
ke2007 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/11/2009, 19h30   #18
Membre éclairé
 
Homme Jérémy
Ingénieur développement logiciels
Inscription : mai 2005
Messages : 511
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2005
Messages : 511
Points : 377
Points : 377
Citation:
Envoyé par Acropole Voir le message
Dans le SDK de physX :
Je rigolais toujours en voyant ce genre de code jusqu'à y à quelques mois où j'ai repris une application que j'ai développé y à presque 1,5 ans maintenant et ou j'ai écrit presque la même chose, mais en pire...

Code :
1
2
3
4
5
6
7
if(1 == 1) {
    // PAS BIEN !!!
    [...]
}
else {
    [...]
}
Je me demande bien ce qui à pu me traverser l'esprit quand j'ai écrit ça! J'ai même honte de le poster ce soir...
__________________
Jérémy
Ingénieur Conception et Développement
LordBob est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2009, 19h43   #19
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 129
Points : 129
Une fois j'ai tout de même vu que mon voisin de bureau cherchait à faire passer le contenu d'une table contenant, au bas mot, 25 colonnes et environ 1 000 000 de lignes en paramètres GET d'une page PHP...

Le tout, pour pouvoir trier et afficher le contenu de la dite table sur une page...

Je l'ai arrêter avant qu'il ne teste.
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/11/2009, 19h44   #20
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 15
Points : 11
Points : 11
Difficile de trouver le pire tant j'en vois tous les jours ...

je me rappelle d'une action struts avec une méthode de plus de 5000+ lignes en un seul bloc, non commenté, mal indenté, avec des noms de variables incompréhensibles et les attributs des objets réutilisés pour faire plein de choses ... Imaginez qu'en plus celui qui a développez ça était un peu "artiste" et là ...

Et imaginez que dans ce code, vous savez qu'il y a un bug et c'est à vous qu'incombe le privilège de le corriger... ça doit certainement rappeler des souvenir à des gens ...
LeGritche est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Actualité déjà publiée
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h19.


 
 
 
 
Partenaires

Hébergement Web