Porte de qualité IA: Utilisant ChatGPT et IA pour améliorer la qualité du code
Écrit le by jt
Une solution logicielle devra toujours être en évolution. C'est pour cette raison que nous abordons le sujet du contrôle de qualité et l'IA dans cet article. La question de la maintenance et du développement ultérieur constitue ensemble avec l'exploitation la priorité absolue. Grâce à diverses approches (organisation de l’équipe, état d’esprit de l’entreprise), on essaye souvent de maintenir le cycle de livraison aussi court que possible. Une telle dynamique ne peut fonctionner de manière fiable que si un degré élevé d’automatisme et de transparence est disponible. Une partie importante de ceci est le Quality Gate
Que siginife la porte de qualité?
Avec un Quality Gate (porte de qualité), la sortie des prochaines étapes du projet est déterminée à l'avance sur la base de critères de qualité. Comment évaluer la qualité du code dans ce contexte? Généralement, de nombreuses techniques relevant du "Clean Code" s’articulent autour de la question suivante: comment écrire du code dans une équipe de programmeurs afin que les nouveaux membres puissent commencer à travailler immédiatement sans longue période de formation? En plus de l'analyse statique du code (complexité, heuristiques de bugs, etc. - mot-clé Sonarqube, la revue de code est une solution possible.
Qui est responsable pour la revue du code?
La revue du code permet le transfer du savoir-faire des collègues experiencés vers des nouveaux membres d'équipe.
Cette activité a tendance de prendre beaucoup de temps, donc par conséquent, les architectes de logiciel devront principalement s'occuper de cette tâche.
Parlons de la pipeline de déploiement, qui ressemble à ceci:
- Écrire & commettre du code
- Déclencher le build du code (tests d'acceptation, tests unitaires, tests d'intégration, etc.)
- Porte de qualité (standards Clean Code, sécurité, licences)
La revue du code est créée après ces pas.
Le rôle de l'IA
Essayons une interface de complétion de code d'OpenAI, qui peut aider aux contrôles de qualité du code. Notre exemple de projet comporte deux différentes méthodes, une en Typescript et une autre en Java. La fonction Typescripte effectue une simple addition:
function add(x, y) { return x + y;}
La classe Java elle-même est assez incompréhensible, avec des conventions de dénomination dénuées de sens:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SomeClass {
static boolean sA(final String s) {
String bKram = s;
String sFe = fo(bKram);
return bKram.equals(sFe);
}
static String fo(String bKram) {
List<String> faef = Stream.of(bKram).map(c-> c).collect(Collectors.toList());
StringBuilder dram = new StringBuilder(bKram).reverse();
if(Objects.nonNull(faef)) {
return dram.toString();
}
return null;
}
Tentons notre chance:
const question = "Can you write Unit Test for this Code : ";
Nous utilisons l'API createCompletion
d'OpenAI
const completion = await openai.createCompletion({
model: "text-davinci-003",
prompt: question + fileContents,
temperature: 0,
max_tokens: 3600,
});
Nous voici:
@Test
public void testSA() {
String s = "test";
assertTrue(SomeClass.sA(s));
}
@Test
public void testFo() {
String s = "test";
assertEquals("tset", SomeClass.fo(s));
}
Bien que l'on ne sache pas encore clairement ce que fait la classe, la fonctionnalité a été découverte en quelques secondes.
On peut faire de même pour la fonction Typescript:
describe('add function', () => {
it('should add two numbers', () => {
expect(add(1, 2)).toEqual(3);
});
});
En confiant la fonction Java à ChatGPT, l'IA a rapidement découvert que la fonction inintelligible vérifie en fait si le paramètre est un palindrome ou non. D'IA peut a donc bien compris le but de la fonction:
Porte de qualité IA
Retournons au sujet et analysons les avantages de l'IA pour la porte de qualité. Est-ce que l'IA peut être utilisée pour générer des tests pour nouveau code?
Si la methode est concise et sans trop d'effets secondaires, elle est probablement interpretable et testable par l'IA.
À l’inverse, cela signifie que l’IA peut agir comme un filtre pour mettre en évidence les endroits pertinents pour la révision du code.
Grâce à l’utilisation de l’intelligence artificielle, notre pipeline est différent:
- Écrire & commettre du code
- Déclencher le build du code (tests d'acceptation, tests unitaires, tests d'intégration, etc.)
- Revue du code avec l'IA
- Porte de qualité (standards Clean Code, sécurité, licences)
L'IA peut être intégrée de cette manière dans la pipeline de deploymenent et être appliquée dans les aspects de sécurité concernant notre code. En conséquence, la stabilité, maintenabilité et la qualité du logiciel sera bien augmenté, mais le plus important résultat obtenu grâce à l'utilisation de l'IA est k0augmentation de la productivité d'un cycle de développement.