Bercy publie le code source du calculateur de la taxe d'habitation
La DGFiP a choisi C comme langage, mais la qualité du code est remise en question

Le , par Michael Guilloux, Chroniqueur Actualités
En collaboration avec la mission Etalab qui coordonne la politique d’ouverture et de partage des données publiques (open data), Bercy vient de publier le code source de la taxe d'habitation 2017. Rappelons que les initiatives d'ouverture de code source, de plus en plus fréquentes en France, s’inscrivent dans la mise en œuvre de la Loi pour une République numérique. Promulguée en octobre 2016, cette loi impose à l’État et aux collectivités territoriales de communiquer le code source des logiciels qui sont produits dans le cadre des services publics, sur demande. Les codes sources sont en effet désormais considérés comme des documents administratifs, ce qui les rend accessibles à tout citoyen qui en fait la demande à la Commission d'accès aux documents administratifs (Cada).


C'est ainsi qu'après avoir été interpellée sur la question, le 28 juin dernier, la Cada a invité le ministère de l'Economie et des Finances à publier le code source du calculateur de la taxe d'habitation. Celui-ci permettra de connaître précisément comment est calculée la taxe et donnera la possibilité aux internautes de tester différentes variables.

Le code de la taxe d'habitation, qui est produit par la Direction Générale des Finances publiques (DGFiP) a été publié il y a trois jours sur GitHub. On y trouve :
  • un dossier contenant les scripts C tels qu'utilisés par la DGFiP pour calculer la taxe d'habitation 2017 ;
  • un dossier documentation contenant 3 fichiers (données en entrée, données en sortie et liste des anomalies) ;
  • un dossier test permettant de tester le code sur quelques exemples et qui contient un exécutable, des fichiers d'exemples et une documentation expliquant comment faire fonctionner la calculette sur les jeux d'exemple.

Si l'initiative d'ouverture est à saluer, pour beaucoup de développeurs, c'est la qualité et l'utilité du code qui ont attiré leur attention :
  • noms de variables et commentaires en français (parce qu'ils devraient être en anglais ?) ;
  • convention de nommage incohérente dans toute la base de code. Exemples pour les noms composés de plusieurs mots : Determination_Plaf_Total (chaque mot commence par une majuscule), est_autre_allegement (chaque mot commence par une minuscule), cherche_Erreur (certains mots commencent par une majuscule et d'autres par une minuscule) ;
  • combinaison ou utilisation de plusieurs styles d'indentation dans la base de code ;
  • aucune instruction pour faire un build ;
  • etc.


Sources : Code source de la taxe d'habitation, Réseaux sociaux

Et vous ?

Que pensez-vous de l'ouverture du code source du calculateur de la taxe d'habitation ?
Avez-vous parcouru le code source ? Qu'en dites-vous ?
Comment pourrait-on expliquer la qualité du code ?

Voir aussi :

Bercy ouvre les codes sources des modèles économétriques Mésange, Opale et Saphir, sous la pression d'une association
Ouverture des codes source : la DINSIC lance un appel à commentaires sur la politique de contribution aux logiciels libres de l'État français
France : le code source des logiciels des administrations est communicable, sauf si cela pourrait porter atteinte à la sécurité de leurs SI
La CMP estime que les codes source des logiciels utilisés en administrations publiques sont communicables par principe, d'après l'avis de la CADA
Les députés adoptent un amendement imposant la communication des codes source de logiciels utilisés ou développés par l'administration


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de redcurve redcurve - Membre averti https://www.developpez.com
le 17/09/2018 à 15:58
ce code
Avatar de Guntha Guntha - Membre éprouvé https://www.developpez.com
le 17/09/2018 à 16:02
Citation Envoyé par Michael Guilloux Voir le message
Que pensez-vous de l'ouverture du code source du calculateur de la taxe d'habitation ?
Plus de transparence, quel que soit le domaine, c'est toujours mieux.

Citation Envoyé par Michael Guilloux Voir le message
Avez-vous parcouru le code source ? Qu'en dites-vous ?
Rapidement: beaucoup de nombres magiques non expliqués et de noms de variable absconses, au final ça se rapproche presque d'un portage en C du code en TROLL auquel on a eu droit quelques jours plus tôt. Au moins, le choix du C plutôt que TROLL(j'ai cru que c'était une blague en lisant la news, mais c'est vraiment le nom de la techno) montre que dans la chaîne, il n'y a pas eu un fonctionnaire qui s'est bêtement fait avoir par un commercial pour acheter une technologie inutile.
Déjà, quand j'ai vu l'expression "scripts C" dans le readme sur github j'ai tiqué
Des noms de fichier qui font tous 8 lettres, comme si le programme avait été développé sous DOS???
C'est un peu dommage que toutes les data soient dans le code, on se retrouve avec tous ces nombres magiques sans explication. Si au moins des fichiers contenant ces chiffres avaient été générés depuis des fichiers Excel/csv (qui contiendraient toutes les explications nécessaires), ou carrément extraire ces chiffres à l'exécution, mais là les chiffres ont été semés dans le code sans explication.
Par contre, je ne comprends pas les gens qui s'offusquent du français; ce code n'est pas destiné à être distribué à l'internationale. Il y a peu de chances qu'un autre pays adopte le même calcul d'impôts que nous :p

Citation Envoyé par Michael Guilloux Voir le message
Comment expliquez-vous la qualité du code ?
Euh "expliquer" la qualité de ce code, je vois mal comment faire ça sans connaître le manager et l'équipe qui l'a fait, leurs contraintes, leur budget... On ne peut que constater le résultat. Ou spéculer et dire que ce sont des comptables de métier qui ont appris à programmer sur le tas?
Avatar de ShigruM ShigruM - Nouveau Candidat au Club https://www.developpez.com
le 17/09/2018 à 16:08
pour la langue des commentaire je reste sceptique.
je considere l'anglais comme une norme en informatique, et perso tous les codes que je développe sans en anglais( commentaires + noms de variables)

d'un autre coté, il s'agit d'un code francais développer pour la france... le faire en français pure permet "d’être précis et pas ambiguë" dans ce que le code devrait faire, on peut le faire en anglais mais avec un bon niveau d'anglais, les dev n'ont peut etre pas voulue prendre le risque et ont voulue que leurs code soit compréhensible par d'éventuel "manager" (haut fonctionnaire de l'état)

quoiqu'il en soit, on ne connais pas les conditions de développement ni le cahier des charges, donc pour moi cette critique n'est pas valable... meme si j'aimerais bien une explication/justification officiel de ce choix

concernant les noms de variable avec ou sans majuscule en effet c'est quelque chose dont il faut faire attention mais ce n'est pas très grave si il n'ya que sa.
Avatar de Stérilux Stérilux - Nouveau Candidat au Club https://www.developpez.com
le 17/09/2018 à 16:12
Que pensez-vous de l'ouverture du code source du calculateur de la taxe d'habitation ?
C'est une bonne chose

Avez-vous parcouru le code source ? Qu'en dites-vous ?
Qu'il est plutôt clair.

Comment expliquez-vous la qualité du code ?
Qu'il est codé de façon à emmerder les psycho-rigides uniquement. Les amateurs auront beaucoup de facilité à le comprendre par rapport à ceux ayant tendance à péter une durite si une ligne a le malheur de compter 81 caractères

Evitez de trainer sur des sources de logiciels chinois, ils vont vous tuer
Avatar de marsupial marsupial - Membre émérite https://www.developpez.com
le 17/09/2018 à 16:20
Code : Sélectionner tout
1
2
3
4
5
/*============================================================================
   Contrôle de la signature
   la presence d'un commentaire dans la fonction permet de récupérer la valeur
   de la signature dans la compilation sous GCOS
  ============================================================================*/
J'ai tilté sur GCOS...

wiki GCOS
extrait :
Les programmes sur ce système d'exploitation sont généralement écrits en COBOL, Fortran (voire ALGOL), et maintenant Java.
Et ils veulent migrer toute l'administration dans le cloud

Bon courage !
Avatar de Marco46 Marco46 - Modérateur https://www.developpez.com
le 17/09/2018 à 16:57
Citation Envoyé par Stérilux Voir le message
Qu'il est codé de façon à emmerder les psycho-rigides uniquement. Les amateurs auront beaucoup de facilité à le comprendre par rapport à ceux ayant tendance à péter une durite si une ligne a le malheur de compter 81 caractères
Il est codé comme il y a 20 ans. C'est pas une histoire d'être psycho-rigide mais d'être propre et pro. Il y a une foultitude d'outils dans tous les langages pour gérer ça de manière automatique.

Des fichiers sources de 2000 lignes on se fout de qui sérieux ?

Ce qui me choque beaucoup c'est les 12 commits et le zéro tags, comme pour Parcoursup. Donc soit ils utilisent un SCM exotique ou obsolète en interne soit pire ils n'en utilisent pas et ils ont passé une version x de leur code sous git à cause de l'obligation légale de publier mais ce n'est pas leur base de travail.

Donc ça n'a aucune utilité.

Ce dont on a besoin c'est de savoir quel est le tag précis qui est utilisé pour calculer la taxe d'habitation de tel exercice et de pouvoir contribuer au code. L'état aurait tout à gagner à réellement opensourcer leurs logiciels, mais comme ils savent déjà pas utiliser git on peut se dire que le chemin pour gérer un projet en opensource est vraiment très long.

La constante inquiétante c'est que de projet en projet toujours fait complètement à l'arrache avec des pratiques du siècle dernier.
Avatar de Guntha Guntha - Membre éprouvé https://www.developpez.com
le 17/09/2018 à 17:04
Citation Envoyé par Marco46 Voir le message
Ce qui me choque beaucoup c'est les 12 commits et le zéro tags, comme pour Parcoursup. Donc soit ils utilisent un SCM exotique ou obsolète en interne soit pire ils n'en utilisent pas et ils ont passé une version x de leur code sous git à cause de l'obligation légale de publier mais ce n'est pas leur base de travail.
C'est la version 2017 uniquement, il n'était pas ouvert PENDANT son développement, il a été sorti sur github après coup (il faut éviter les pull-requests des gens qui veulent mettre tout à 0 pour leur ville :p )
EDIT: j'avais mal lu la suite du message
Avatar de zenaf zenaf - Membre à l'essai https://www.developpez.com
le 17/09/2018 à 17:21
On est proche de ce qu'on retrouve dans le milieu bancaire. Je suis un peu interloque par le manque de cohérence/consistance du code: un peu de camel case, un peu de lower case, la fonction cherche_Erreur qui contient toutes les constantes qui, n’étant déclarés nul part ailleurs, sont utilises en 'dur', pas de logique (en tout cas documentée) sur la numérotation des erreurs, ... On retrouve cette inconsistance dans les commits: tantôt en anglais, tantôt en français...
Bref pas glorieux, pour moi ce code transpire le manque de revue et par conséquence je n'ai pas foncièrement confiance en cet outil.
Avatar de Edrixal Edrixal - Membre habitué https://www.developpez.com
le 17/09/2018 à 17:33
Citation Envoyé par Michael Guilloux Voir le message
Que pensez-vous de l'ouverture du code source du calculateur de la taxe d'habitation ?
C'est une très bonne chose.

Citation Envoyé par Michael Guilloux Voir le message
Avez-vous parcouru le code source ? Qu'en dites-vous ?
Les noms des variables semble étrange au premier abords, mais pas dénuée de logique quant on à quelques connaissance sur le sujet. Y'a beaucoup de commentaire et la manière de les mettre en place ne sont pas forcément les choix que j'aurais fait, mais honnêtement pour avoir repris des logiciels sans commentaire, ou juste le strict minimum, ici c'est le paradis !
Dans l'ensemble d'un avis personnel, je trouve le code clair et lisible. En voyant les commentaires et ce qui été dit ici, je m'attendais à un truc imbitable. Alors que non.

Les règles de nommage ne sont certes pas suivis, plusieurs personnes on visiblement travailler sur le projet sans s'accorder à 100% sur les manières de faire. Mais dans l'ensemble le code est lisible et propre, alors pourquoi faire polémique parce que les règles de nommage ne sont pas suivis ? La lecture n'en est pas rendu plus compliqué.
J'ai plus l'impression de voir des grammarnazi qui s'amuse à relever de manière plus ou moins agressive la moindre faute qu'ils vont trouvés pour faire valoir qu'ils sont supérieur. Mais façon codeur.

Citation Envoyé par Michael Guilloux Voir le message
Comment pourrait-on expliquer la qualité du code ?
Plusieurs personnes qui on travailler sur le projet. Potentiellement des stagiaires par ailleurs. Reste qu'après il faut aussi connaitre le management de l'équipe, le cahiers des charges, le temps alloué, savoir si les commentaires on été mis sur le coup ou après les dev, la précision du cahier des charges aussi, ect... Difficile de donner une réelle réponses au final.
Avatar de Kannagi Kannagi - Expert éminent https://www.developpez.com
le 17/09/2018 à 18:04
Pour la qualité du code voila mon avis :

Pour les points positif :
-l'indentation du code est très propre (j'apprécie beaucoup le Style Allman)
-ils respectent une certaine 'modularité' , il y'a beaucoup de petite fonction
-il y a une gestion des erreurs (mais sûrement pas assez exhaustive )
-le code est relativement lisible
-Il y a des commentaires

Alors les points négatives :
-les noms de variables , des fonctions et mêmes des fichiers .c et .h (tout en majuscule) ...
-je déteste les parenthèses pour les return
-des nombres magiques pour les return
-des variables global qui ne sont pas indispensable 'apparemment' (sauf s'il font un extern )
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int limit_plaf = 15;

int Determination_Plaf_Total(long revff)
{
    if (revff < limit_plaf)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
Autant mettre directement un #define
Une autre variable global dans le code est particulièrement inquiétante aussi ,mais bref !

-Un doute sur le choix de leur struct :
Code : Sélectionner tout
1
2
3
4
if (p_s8->cndl  == 'O' &&
               p_e8->codef == ' ' &&
               p_e8->codeg == ' ' &&
               p_e8->cnam3 == 'O')
Et y'en a pas mal comme ça , je pense qu'un string + strcmp aurait était mieux

Pour continuer voila une de leur structure :
Code : Sélectionner tout
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
32
33
34
35
36
37
typedef struct {
     short   antax;              /*annee campagne taxation (millesime) */
     char    dep[03];            /*code departement                    */
     char    cne[04];            /*code commune de l'aft               */
     s_cole          cole_c;          /*structure entree commune                                         */
     s_cole          cole_q;          /*structure entree intercommunalite                                */
     s_cole          cole_d;          /*structure entree departement                                     */
     s_cole          cole_o;          /*structure entree commune fictive 2003                            */
     s_cole          cole_i;          /*structure entree intercommunalite fictive 2003                   */
     s_cole          cole_p;          /*structure entree departement fictive 2003                        */
     s_cole          cole_f;          /*structure entree commune avant ajustement                        */
     s_cole          cole_j;          /*structure entree commune avant ajustement fictive 2003           */
     s_cole          cole_r;          /*structure entree intercommunalite avant ajustement               */
     s_cole          cole_m;          /*structure entree intercommunalite avant ajustement fictive 2003  */
     char    cocnq;              /*code 1260 mt commune appartenant cu */
     long    abmos;              /*quotite minimale alsace-moselle c   */
     char    codef;              /*code 1260 al-mos rap norm           */
     char    codeg;              /*code 1260 al-mos rang rap           */
     long    vmd89;              /*valeur locative moyenne dom 1989 c  */
     char    cneg3;              /*indic. commune identique en 2003    */
     char    cnqg3;              /*ind. commune appart. meme cu en 2003*/
     char    cnam3;              /*indic. commune regime a-m en 2003   */
     double  timpc;              /*taux imp commune/ifp ...            */
     double  tisyn;              /*taux imp syndicat en c              */
     double  titsn;              /*somme taux imp tse en c             */
     double  tiagn;              /*taux imp agn en c                   */
     double  tig00;              /*taux imposition global 2000         */
     double  timpq;              /*taux imp groupement en c            */
     double  timpd;              /*taux imp dep annee n                */
     double  titgp;              /*taux d'imposition TSE Autre         */
     double  timpe;				 /*taux d'imposition commune/ifp GEMAPI*/
     char    indthlv;            /*code origine de la thlv             */
     char    indgem;             /*Indicateur délibération GEMAPI      */
     char    indmths;            /*Indicateur majoration THS           */
     double  timths;			 /*taux d'imposition majoration THS    */
                 }
s_e3 ;
Pourquoi un short ? pourquoi un long ?
J'allais dire pourquoi un double ,mais j'imagine que quand il est question de taxe , la moindre centime est importante
Pourquoi des char ? (je comprend que ça arrive de les utiliser) mais autant c'est complètement "inutile" ici ,et le pire c'est que s'ils veulent économiser de la mémoire c'est râpé , a cause de l'alignement mémoire le char prendra un peu plus surtout s'il se trouve dans une structure mélangé comme celle ci.

-L'algo est relativement simple mais assez arbitraire , vu que c'est un ensemble de 'millier' de if leur code donc je me pose si la résolution de leur probleme a était correct.
Contacter le responsable de la rubrique Accueil