Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/11/2008, à 22:15

luron

Quelle arborescence pour développer un logiciel?

Salut tout le monde,

J'ai une question un peu générale sur le développement de logiciels. Je code beaucoup de petits scripts et j'aimerais utiliser un de ces petits projets pour me familiariser avec une bonne méthodologie de développement et de maintenance applicable pour de plus gros logiciels. Si vous avez des pistes de réflexion, une expérience à partager, des tutoriels à conseiller... n'hésitez pas! smile Donc voici un peu les questions que je me pose:

Prenons par exemple le cas où j'ai un petit script shell de quelques fichiers .sh, une icône, un fichier de configuration, etc. J'aimerais avoir une arborescence qui me permette de développer mon script, le tester, publier différentes versions, corriger des bogues, etc., en sachant qu'au final le logiciel va s'installer dans /usr/bin/, le fichier de configuration dans ~/.monscript/, l'icône dans /usr/share/pixmaps/, etc.

Dans mon script, si je veux lire une variable dans le fichier de config, je peux mettre le chemin ~/.monscript/config, mais si je fais le développement dans ~/informatique/monscript/, je place le fichier de config à quel endroit? Et je dois créer quelle arborescence de répertoires? Est-ce que je peux tester mon script sans avoir à l'installer dans /usr/bin/?

J'ai un peu de difficulté à voir comment m'y prendre. Si vous avez des idées... Merci!

Hors ligne

#2 Le 12/11/2008, à 22:47

thierry2351

Re : Quelle arborescence pour développer un logiciel?

Salut,
plutôt que de coder tes chemins et noms de fichiers 'en dur' dans tes scripts, mieux vaut les définir dans des variables au début du script ou dans un fichier à part. C'est plus facile pour les tests, les modifications, la portabilité éventuelle...
Tu peux jeter un oeil aux nombreux scripts bien écrits existant sur ta machine, ça donne pas mal d'idées !

Hors ligne

#3 Le 12/11/2008, à 23:08

Yannick_LM

Re : Quelle arborescence pour développer un logiciel?

Est-ce que je peux tester mon script sans avoir à l'installer dans /usr/bin/?

Oui, il suffit de le mettre dans un répertoire du $PATH
(il me semble que ~/bin y est déjà)
S'il n'y est pas, un petit:

export PATH=$PATH:$HOME/bin

dans .bashrc (ou .zshrc) suffit.

EDIT:

plutôt que de coder tes chemins et noms de fichiers 'en dur' dans tes scripts, mieux vaut les définir dans des variables au début du script ou dans un fichier à part. C'est plus facile pour les tests, les modifications, la portabilité éventuelle...

Et un gros +1 pour ça

Dernière modification par Yannick_LM (Le 12/11/2008, à 23:09)


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#4 Le 13/11/2008, à 20:47

luron

Re : Quelle arborescence pour développer un logiciel?

Merci pour vos réponses. Pour faire avancer le sujet et tester, j'ai créé un programme bidon.

Voici le programme ~/monprog/monprog.sh:

#!/bin/bash
readonly CHEMIN_CONFIG='.'
. $CHEMIN_CONFIG/monprog.conf
zenity --info --text="$message"

Voici le fichier de config ~/monprog/monprog.conf:

message='Bonjour.'

Comme arborescence et fichiers de développement, j'ai ceci:

~/monprog/monprog.sh
~/monprog/monprog.conf
~/monprog/monprog.png

Après installation, je voudrais avoir ceci:

/usr/bin/monprog.sh
/usr/share/pixmaps/monprog.png
~/.monprog/monprog.conf

Questions:

- Là, mes trois fichiers sont dans ~/monprog/ Est-ce que je laisse mes fichiers tous à la racine (oubliez pas que c'est un mini-exemple pour apprendre à gérer des plus gros logiciels) ou je devrais créer un répertoire pour les images, un pour les fichiers de config, etc.? est-ce que je dois essayer de reproduire l'arborescence une fois le fichier installé (/usr/bin/, /usr/share/pixmaps/, ~/.monprog/)?

- Si je veux pouvoir faire évoluer mon programme, je dois créer quelle arborescence? Par exemple, je veux avoir une version de développement, publier des versions stables, etc. et utiliser bazaar (bzr) pour gérer les versions...

Voilà. Merci!

Hors ligne

#5 Le 14/11/2008, à 22:31

luron

Re : Quelle arborescence pour développer un logiciel?

Je remonte le sujet. smile

Hors ligne

#6 Le 15/11/2008, à 03:57

Link31

Re : Quelle arborescence pour développer un logiciel?

Difficile à dire pour un si petit nombre de fichiers... Tu pourrais faire comme ça :

~/monprog/monprog.sh
~/monprog/config/monprog.conf
~/monprog/media/monprog.png ou ~/monprog/share/monprog.png

... mais un dossier par fichier ça ne rime pas à grand chose wink

Pour un plus gros projet, je ferais quelque chose comme ça :

~/monprojet/README
~/monprojet/INSTALL
~/monprojet/COPYING
~/monprojet/configure (si besoin)
~/monprojet/Makefile
~/monprojet/src/script_principal.sh
~/monprojet/src/script_2.sh
~/monprojet/src/script_3.sh
~/monprojet/lib/script_utilisé_ou_sourcé_par_le_script_principal.sh
~/monprojet/lib/autre_script.sh
~/monprojet/lib/autre_script2.sh (si les scripts dans lib ne sont pas destinés à être réutilisés par d'autres programmes, je mettrais le dossier lib dans src)
~/monprojet/config/monprog.conf.example
~/monprojet/media/monprog.png ou ~/monprog/share/monprog.png
~/monprojet/tests/test_suite_1.sh
~/monprojet/tests/test_suite_2.sh
~/monprojet/backup/script_principal.sh-2008-09-22 (un dossier backup est toujours utile, sauf si tu utilises un système de contrôle de versions)

Un système de contrôle de versions s'occupe lui-même des sauvegardes et des branches, donc tout reste toujours dans l'arborescence principale.

Et pour les chemins de fichiers, mets les dossiers de base dans le fichier de conf, qui sera mis à jour automatiquement lors de l'installation pour refléter les changements. Il faudra juste hardcoder ./config et /etc.

Dernière modification par Link31 (Le 15/11/2008, à 04:01)

Hors ligne

#7 Le 15/11/2008, à 05:10

luron

Re : Quelle arborescence pour développer un logiciel?

Merci pour tes commentaires. Ça avance. smile

Link31 a écrit :

Difficile à dire pour un si petit nombre de fichiers...

Oui, ben j'essaie de choisir un exemple simple pour que ça soit plus facile à visualiser et à expliquer. big_smile

Link31 a écrit :

Pour un plus gros projet, je ferais quelque chose comme ça :

Donc si je comprends bien, il ne faut pas essayer de reproduire l'arborescence une fois le logiciel installé, c'est ça? Par exemple, je ne crée pas dans mon espace de développement un chemin ~/monprojet/usr/bin/script_principal.sh ou ~/monprojet/usr/share/pixmaps/monprog.png, mais plutôt ~/monprojet/src/script_principal.sh et ~/monprojet/media/monprog.png

C'est le fichier Makefile qui va copier lors de l'installation les fichiers aux bons endroits comme /usr/bin et /usr/share/pixmaps?

Link31 a écrit :

Et pour les chemins de fichiers, mets les dossiers de base dans le fichier de conf, qui sera mis à jour automatiquement lors de l'installation pour refléter les changements.

Donc toute utilisation de fichier dans mon programme doit passer par une variable pour récupérer le chemin vers le fichier? Le Makefile va changer les chemins lors de l'installation?

Link31 a écrit :

Il faudra juste hardcoder ./config et /etc.

Est-ce que tu pourrais donner un exemple concret?

Merci, je comprends de mieux en mieux. smile

Hors ligne

#8 Le 15/11/2008, à 05:47

Link31

Re : Quelle arborescence pour développer un logiciel?

luron a écrit :

C'est le fichier Makefile qui va copier lors de l'installation les fichiers aux bons endroits comme /usr/bin et /usr/share/pixmaps?

Oui.

luron a écrit :

Donc toute utilisation de fichier dans mon programme doit passer par une variable pour récupérer le chemin vers le fichier? Le Makefile va changer les chemins lors de l'installation?

Oui, il faut utiliser des variables, évidemment. Le mieux est de les lire depuis le fichier de configuration. Pour pouvoir lancer le programme pendant son développement, avant qu'il ne soit réellement installé, il faut que les chemins dans le fichier de conf soient différents (puisque le dossier de base et l'arborescence sont différents). C'est pourquoi le Makefile s'occupe de les modifier lors de l'étape d'installation.

luron a écrit :

Est-ce que tu pourrais donner un exemple concret?

Ben, le programme commence par rechercher son fichier de conf dans ./config, puis il le cherche dans /etc. S'il ne l'a toujours pas trouvé, il demande à l'utilisateur de le lui indiquer avec une option de la ligne de commande ou une variable d'environnement. Ça se fait facilement en langage shell.

Hors ligne

#9 Le 15/11/2008, à 15:12

luron

Re : Quelle arborescence pour développer un logiciel?

Link31 a écrit :

Ben, le programme commence par rechercher son fichier de conf dans ./config, puis il le cherche dans /etc. S'il ne l'a toujours pas trouvé, il demande à l'utilisateur de le lui indiquer avec une option de la ligne de commande ou une variable d'environnement. Ça se fait facilement en langage shell.

Mais quand tu dis qu'il faut le coder en dur dans notre programme, ça veut dire écrire directement le chemin dans le code. Mais le chemin n'est pas le même dans notre espace de développement et dans l'après-installation. Comment faire?

Merci encore.

Hors ligne

#10 Le 15/11/2008, à 20:39

Link31

Re : Quelle arborescence pour développer un logiciel?

./config est un chemin relatif (donc relatif au dossier courant), et /etc est un chemin absolu tout ce qu'il y a de plus standard. Donc pendant le développement, le programme lira sa configuration dans le sous-dossier config du dossier courant (qui peut être n'importe où). Et une fois installé il n'y aura plus de dossier config dans le même dossier que le programme, donc il cherchera le fichier dans /etc.

Hors ligne

#11 Le 15/11/2008, à 22:05

luron

Re : Quelle arborescence pour développer un logiciel?

Link31 a écrit :

./config est un chemin relatif (donc relatif au dossier courant), et /etc est un chemin absolu tout ce qu'il y a de plus standard. Donc pendant le développement, le programme lira sa configuration dans le sous-dossier config du dossier courant (qui peut être n'importe où). Et une fois installé il n'y aura plus de dossier config dans le même dossier que le programme, donc il cherchera le fichier dans /etc.

Merci! Je vais essayer de concrétiser tout ça. smile

Hors ligne