On désigne par atelier de génie logiciel (AGL) un ensemble de programmes informatiques permettant eux-mêmes de produire des programmes de manière industrielle. On parle aussi d'outils CASE pour Computer Aided Software Engineering
Alors qu'un compilateur (Un compilateur est un programme informatique qui traduit un langage, le langage source, en un...), par exemple, ne peut que traduire un langage informatique (On appelle langage informatique un langage formel utilisé lors de la conception, la mise en...) vers un autre, la réalisation de programmes, notamment au sein d'équipes nombreuses, requiert bien d'autres activités qui sont généralement couvertes par un AGL :
Un AGL est basé sur un dictionnaire de données, (qui fait implicitement référence à un méta modèle de données). Il est généralement interfacé avec une interface (Une interface est une zone, réelle ou virtuelle qui sépare deux éléments. L’interface...) graphique permettant la modélisation, suivant un ou plusieurs formalismes tels que MERISE. Parfois, l'outil (Un outil est un objet finalisé utilisé par un être vivant dans le but d'augmenter son...) a l'intelligence pour mettre en forme, et rendre lisible dans un schéma, l'inévitable complexité (La complexité est une notion utilisée en philosophie, épistémologie (par...) du " plat de nouilles " issu du dictionnaire de données.
L'AGL permet de " zoomer " et d'enrichir un référentiel (BDD) d'entreprise suivant plusieurs axes : cycle de vie (La vie est le nom donné :), domaines projet, cycle d'abstraction ( En philosophie, l'abstraction désigne à la fois une opération qui consiste a isoler par la...), portage technologique sur d'autres environnements de développement…
Un apport essentiel de l'AGL est de permettre de documenter automatiquement un programme, et de maintenir en permanence à jour (Le jour ou la journée est l'intervalle qui sépare le lever du coucher du Soleil ; c'est la...) cette documentation, et, ce tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou...) au long de sa conception.
L'objectif est souvent d'essayer de trouver le bon niveau de granularité dans la conception de chaque composant applicatif, de manière à essayer d'en améliorer la réutilisabilité.
Certains AGL peuvent aller jusqu'à la génération de code ou à l'inverse (En mathématiques, l'inverse d'un élément x d'un ensemble muni d'une loi de...) peuvent inclure des fonctionnalités de rétro-ingénierie (La rétro-ingénierie (traduction littérale de l'anglais reverse engineering),...) et donc analyser pour modélisation les données contenues dans un programme. Enfin certains peuvent faciliter la génération de jeux de test.
Un AGL facilite la collaboration des différents programmeurs (urbanisme informatique) ainsi que la maintenance ultérieure des programmes en les incitant à partager les mêmes méthodes.