Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

python et genie logiciel

3 réponses
Avatar
Jack
bonjour,

j'essaie de regrouper des informations sur la pertinence d'employer
Python pour concevoir des logiciels en suivant les principes du génie
logiciel

par exemple sur les avantages que ce langage procure dans cet usage, et
sur l'éventail des outils qui existent pour ce langage à cet usage,
genre qualité, documentation, tests, etc...

par exemple est ce que le coté interprété du langage, le typage non
strict, les mécanismes automatisés de gestion de la mémoire, sont un
avantage pour faire du génie logiciel ?

bref voila, tout ce qui vous semble être un atout (ou au contraire une
faiblesse) du langage Python pour faire face à ces contraintes.

(désolé je ne cross poste pas mais je fais un panel de ce qui existe en
génie logiciel pour tous les langages interprétés en fait, donc je poste
aussi pour Perl, Ruby, et PHP)

merci d'avance pour vos réponses :)

jack

3 réponses

Avatar
Amaury Forgeot d'Arc
bonjour,

j'essaie de regrouper des informations sur la pertinence d'employer
Python pour concevoir des logiciels en suivant les principes du génie
logiciel

par exemple sur les avantages que ce langage procure dans cet usage, et
sur l'éventail des outils qui existent pour ce langage à cet usage,
genre qualité, documentation, tests, etc...

par exemple est ce que le coté interprété du langage, le typage non
strict, les mécanismes automatisés de gestion de la mémoire, sont un
avantage pour faire du génie logiciel ?

bref voila, tout ce qui vous semble être un atout (ou au contraire une
faiblesse) du langage Python pour faire face à ces contraintes.


Je ne suis pas sûr de ce que tu entends par "génie logiciel" (j'ai dû
sécher les cours...), mais c'est sûr que parmi les multiples aspects du
développement d'un logiciel complexe, il y en a où l'utilisation de
Python peut aider.

Quelques exemples, en vrac:
(que l'on peut résumer par: "python, c'est bien" ;-)

1 - Lors de la conception des objets et des librairies, on construit
souvent des "cas d'utilisation". La syntaxe de Python est suffisamment
proche du pseudo-code (facile à lire, peu de "bruit" autour des mots
important) pour qu'on l'utilise dans les exemples et les documentations,
et serve à affiner les spécifications.

3 - En plus, il est souvent possible de faire marcher ces exemples pour
de vrai, en créant les librairies adéquates.
"Python, c'est du pseudo-code qui marche."
Et c'est une des façons de développer en python: on commence par les
tests des cas d'utilisation!

4 - Python sait s'interfacer avec toute librairie écrite en C, C++,
Fortran, Java, C#. C'est très important pour réaliser le point précédent.
On peut étendre Python avec des modules externes (= c'est le programme
python qui importe des librairies tierces) ou bien encapsuler python
dans une application (c'est l'application qui charge python dans son
process, et lui dit d'exécuter des scripts)

5 - Python a un pouvoir de représentation élevé, c'est-à-dire qu'on peut
exprimer en Python des concepts divers et des méthodes de programmation
différentes (programmation procédurale, fonctionnelle, orientée objet,
orientée aspect).

6 - Python est très adapté aux méthodes "agiles" de développement, aux
cycles très courts. La réorganisation du code est souvent plus facile
que dans d'autres langages.

7 - Python a un pouvoir d'introspection élevé, ce qui permet des
techniques originales de programmation: un objet peut changer de classe,
on peut modifier une classe en ajoutant des méthodes...
Evidemment, ces méthodes sont à utiliser avec modération, et sans doute
pas par n'importe qui. La philosophie, c'est que nous sommes des
"adultes consentants"...

8 - Python est pratique pour "scripter" une application, c'est-à-dire la
contrôler de l'extérieur, pour la tester par exemple.

9 - Python est pratique pour développer des objets "mock-up", qui
simulent une interface (ex: une connection vers un marché financier).
Là, c'est la rapidité de développement qui est appréciée (et c'est là
qu'on utilise les méthodes affreuses du point 8).

10 - Tests unitaires: la nature interprétée du Python fait qu'un fichier
qui contient des tests unitaires peut donner des résultats partiels (en
cours de réorganisation du code par exemple), ce qui est mieux qu'un
fichier Java qui refuse de compiler.

11 - Documentation: On peut documenter le code Python avec des
"docstrings" qui ressemblent à du Javadoc. Une extension à Python
propose aussi un formalisme pour écrire des documentations techniques
(ReST), qui donne de jolis résultats sans la complexité du TeX.

12 - Il a été montré que le code Python contient en général 10 fois
moins de lignes que le C, 5 fois moins que C++ ou Java.

13 - Cependant, l'absence d'un compilateur strict oblige à avoir une
couverture de tests quasi totale.

14 - Python est utile pour le processus de développement: j'ai participé
à un outil de gestion de l'intégration continue des développements, en
reliant la gestion des versions, les outils de planification, la
génération de documentation, le contrôle de la compilation... dans un
même ensemble.

15 - Outils de contrôle qualité en Python: j'ai développé un embryon
"d'interpréteur C" qui analyse le code C et effectue certaines
vérifications précises (malloc/free, format de printf...)


Voilà, désolé pour l'aspect décousu.
Bon, ça manque d'exemples, je suis prêt à en donner pour prouver mes dires.

--
Amaury

Avatar
Méta-MCI \(MVP\)
Bonjour !

Je ne suis pas sûr de ce que tu entends par "génie logiciel"


+1

Le "génie logiciel", ça recouvre tout ce qui sert à faire et à utiliser
du logiciel. Donc, ça recouvre les langages, algo, formations,
librairies, méthodes, newsgroups, documentations, etc.
C'est un concept particulièrement flou.

Bonne journée.

Avatar
Bruno Desthuilliers
bonjour,

j'essaie de regrouper des informations sur la pertinence d'employer
Python pour concevoir des logiciels en suivant les principes du génie
logiciel


Lesquels ?

par exemple sur les avantages que ce langage procure dans cet usage,


Heu ? Dans l'usage consistant à développer des logiciels ???

et
sur l'éventail des outils qui existent pour ce langage à cet usage,
genre qualité, documentation, tests, etc...


Documentation: docstrings dans le code (en début de module, classe ou
fonction), accessibles comme attributs des objets correspondants, et
pouvant être formatté pour une lecture "en ligne" (dans le shell python)
ou extraits vers un format texte balisé.

Tests:
- possibilité d'explorer rapidement des solutions ou de tester du code
(nouveau ou existant) de façon interactive dans le shell python
- plusieurs bibliothèques de tests unitaires, dont une inclue dans la
bibliothèque standard
- profileur intégré dans la bibliothèque standard
- très grandes facilités d'"instrumenta(lisa)tion" du code (liée au
dynamisme et aux puissantes fonctionnalités d'introspection du langage)

par exemple est ce que le coté interprété du langage,


Outre le fait qu'être "interprété" (pour la définition classique de ce
terme) n'est pas une fonctionnalité d'un langage mais d'une
implémentation d'un langage, il se trouve que CPython est compilé en
byte-code, lequel est exécuté par une machine virtuelle (même principe
que Java, modulo le compilateur JIT qui tend à devenir standard sur les
JVM).

le typage non
strict,


Python est bien plus strictement typé que le C. Ne confond pas "non
strict" et "dynamique", ce sont deux choses différentes.

les mécanismes automatisés de gestion de la mémoire, sont un
avantage pour faire du génie logiciel ?


Vu la façon dont tu emploie le terme, je n'ai pas l'impression que tu en
ait une claire compréhension. Le génie logiciel concerne l'activité
d'analyse, de conception et de réalisation (implémentation/tests) de
logiciels, ainsi que la part de gestion de projet qui s'y rattache. On
n'utilise pas un langage de programmation pour "faire du génie
logiciel", mais pour implémenter tout ou partie d'un programme.

Python est globalement un très bon langage tant pour le développement
d'applications que pour l'outillage (scripts d'admin, automatisation de
tâches récurrentes etc), en raison de :
- sa portabilité
- sa bonne intégration aux plateformes hôtes
- sa facilité d'interfaçage avec d'autres langages (C/C++, Java avec
Jython...), qui permet aussi bien de "faire la glue" entre des
composants de bas-niveau que de recoder dans un langage de bas-niveau
les parties critiques sans modification du reste de l'application,
- la richesse des bibliothèques disponibles (standards ou non)
- sa lisibilité (*très* important)
- son expressivité et son dynamisme
- etc, la liste est longue...


bref voila, tout ce qui vous semble être un atout (ou au contraire une
faiblesse) du langage Python pour faire face à ces contraintes.

(désolé je ne cross poste pas mais je fais un panel de ce qui existe en
génie logiciel pour tous les langages interprétés


cf ci-dessus. CPython n'est (techniquement) pas beaucoup plus interprété
que Java (cf la remarque sur les compilos JIT).

en fait, donc je poste
aussi pour Perl, Ruby, et PHP)


La définition est "langage dynamique de haut niveau", pas "langage
interprété".