Natural Language Processing and Artificial Intelligence Methods in Software Engineering
Authors: Tóth László 
Published: July 2023

A szoftverfejlesztés olyan összetett tevékenység, amely a szakmai ismeretek és a technikai készségek mellett a körülöttünk lévő világ jelenségeinek analitikus szemléletét is megköveteli. Ahhoz, hogy egy adott szoftver megfelelő szinten lássa el feladatát, szükség van az általa modellezett jelenség alapos megértésére és elemzésére, a probléma szakértői és az érintettek által megfogalmazott, és az üzleti elemzésben részletezett funkcionális és nem funkcionális követelmények alapján. A követelmények túlnyomórészt természetes nyelven állnak rendelkezésre, és a fejlesztés alatt álló szoftverre vonatkozó követelmények az érintett üzleti terület sajátos nyelvén fogalmazódnak meg. Mindezek mellett a követelmények jelentős része nemcsak ellenőrzött üzleti dokumentumokban és szabályzatokban, hanem az interjúk során szóban megfogalmazott ötletek és koncepciók formájában jelenik meg. Az utóbbiak sokszor pontatlanok, ellentmondásosak vagy hiányosak lehetnek. Ezenkívül az üzleti terminológia használata olyan hallgatólagos tudást is feltételez, amely magától értetődő az érintettek számára, de jellemzően nem ismert a fejlesztőcsapat tagjai számára. A természetes nyelvfeldolgozó módszerek és a mesterséges intelligencia eszközök alkalmazása segítheti a fejlesztőcsapatot a természetes nyelven megfogalmazott követelmények feldolgozásának automatizálásában. Jelen kutatásban a követelmények osztályozására, valamint az érintettek és a fejlesztők különböző nyelvhasználatából adódó szemantikai eltérések egyeztetésére és kezelésére szolgáló eszközök kidolgozására összpontosítottunk. A disszertációban bemutatott kutatási eredmények alapján megállapítható, hogy a természetes nyelvfeldolgozó módszerek, valamint a mesterséges intelligencia eszközök, a gépi tanulás és a szemantikai hálózatok alkalmasak a kitűzött célok elérésére, a követelmény-feldolgozási folyamatok támogatására, illetőleg kiterjeszthetők a fejlesztői és üzleti interakciók egyéb eseteire is, például a felhasználói támogatási folyamatokra. A szoftverfejlesztés az elmúlt évtizedekben jelentős átalakuláson ment keresztül. Ma már nem várható el senkitől, hogy egyetemleges ismeretekkel rendelkezzen a keretrendszerek, programozási nyelvek és eszközök hatalmas tárházáról. A fejlesztés ugyanakkor egyre inkább olyan újrafelhasználható elemekre támaszkodik, amelyeket korábban már elkészítettek és a fejlesztő közösségek rendelkezésére bocsátottak. A magas szintű specializáció alapján kijelenthető, hogy egyre fontosabbá válik, hogy a fejlesztők hatékonyan osszák meg tudásukat, és tudjanak segítséget kérni a különböző szakterületen dolgozó szakemberektől a napi munkájuk során felmerülő problémák megoldásához. A specializációból adódó problémák kezelése érdekében számos kérdezz-felelek portált hoztak létre az interneten, amelyek célja a fejlesztői tapasztalatok megosztása, valamint a fejlesztők támogatása a napi munka során felmerülő problémák megoldásában. Ezek közül a legismertebb a Stack Overflow, amelynek dedikált célja, hogy támogassa a fejlesztői munkát azáltal, hogy böngészhető tudástárat hoz létre a már előzetesen megoldott problémák gyűjteményéből. Egy kérdezz-felelek oldal minőségének megőrzése a forgalom növekedésével jelentős kihívássá válik a moderátorok számára, ugyanakkor a közösségi elvárásoknak megfelelő kérdések megfogalmazása nem mindig egyszerű. Jelen kutatás a Stack Overflow-ra feltett kérdések minőségének meghatározására, illetőleg azok későbbi lezárásának becslésére összpontosított a természetes nyelvfeldolgozó eszközök, illetve a mélytanulás alkalmazásával. A kutatás része volt az esetleges kérdéslezárások okainak vizsgálata is. A kutatási eredményekből olyan gyakorlatban is használható modellek születtek, amelyek segítségével a felhasználók ellenőrizhetik kérdéseik követelményeknek való megfelelését, csökkentve ezzel mind a moderátorok leterheltségét, mind az utólagos lezárások lehetőségét, közvetve megőrizve a portálok szakmai színvonalát is.