Processus de développement
Lorsque tout le processus s’effectue sur le même ordinateur, on parle de développement natif (Native Development). Par contre, lorsque l’édition de texte, l’assemblage et l’édition de liens s’effectuent sur une machine différente, la machine hôte (host) de celle qui exécute le programme, la machine cible (target), on parle de développement croisé (Cross Development).
Le processus de développement en langage assembleur suit un processus classique et se réalise en 4 étapes :
L’édition des fichiers source se réalise avec un éditeur de texte permettant de produire des fichiers de texte simple. Ces fichiers ne contiennent qu’une suite de caractères, généralement des caractères selon le standard ASCII (American Standard Code for Information Interchange).
L’assemblage consiste à transformer le code source afin d’obtenir le code machine sous forme binaire, nommé code objet (Object Code). Le code objet contient les instructions exécutables par le processeur sous forme binaire ainsi qu’une série de symboles permettant de le lier à l’application finale et de le déboguer. Une phase de correction due à des erreurs d’écriture du code source, souvent des erreurs de syntaxe, est naturellement comprise dans cette partie du processus. Une fois assemblé, il est naturellement possible d’obtenir à nouveau le code source à partir du code objet. Cette opération inverse est nommée désassemblage.
L’édition de liens sert à lier les différents codes objet afin d’obtenir le code exécutable. Ce code est intimement lié à l’architecture de processeur ainsi qu’à sa réalisation et implémentation sur le système cible. Cette étape se divise en deux phases. La première doit résoudre les dépendances, les liens, entre les différents symboles (appel de fonction, adresses de variables globales, etc.). Si des symboles restent indéfinis, une phase de correction devra être entreprise. La deuxième phase sert à placer le code dans l’espace mémoire du processeur selon l’organisation de la cible. Avec l’utilisation de systèmes d’exploitation, cette phase peut également intervenir lors du chargement du code sur la cible.
La vérification est une étape essentielle dans la réalisation d’une application. Elle permet de garantir son bon fonctionnement, sa robustesse, sa fiabilité et finalement le respect du cahier des charges. Pour effectuer cette vérification, le code exécutable est chargé en mémoire sur le système cible, un système de test ou un simulateur. Des batteries de tests permettront ensuite de le vérifier de manière la plus exhaustive possible. Des corrections liées au mauvais fonctionnement du programme (bugs) peuvent intervenir à cette étape. Diverses techniques et outils existent pour localiser les erreurs. Le débogueur est un de ces outils.
Attention
La correction d’erreurs dues à une mauvaise conception ou design de l’application apparaissant lors de phases ultérieures peut être très complexe à identifier et coûter beaucoup d’énergie et d’argent! Il est donc primordial d’effectuer un maximum de vérification lors du développement des applications. Une approche telle que CI/CD (Continuous Integration / Continuous Deployment) permet d’augmenter la fréquence de validation et de distribution des applications grâce à l’automatisation au niveau des étapes de développement des applications.