Design by Contract implementáció fejlesztése Python programozási nyelvhez

OData támogatás
Konzulens:
Dr. Asztalos Márk
Automatizálási és Alkalmazott Informatikai Tanszék

A Design by Contract szoftvertervezési módszert az 1980-as évektől kezdődően fejlesztette ki Bertrand Meyer az Eiffel programozási nyelv tervezésekor. Ezen módszertan szerint a szoftverek komponenseinek interfészeit formális, részletes és ellenőrizhető specifikációkkal együtt kell megtervezni. Ilyen módon egy osztály interfésze kiegészül a metódusokhoz tartozó előfeltételekkel, utófeltételekkel és az osztály invariánsával. Ezen specifikációkat nevezi „szerződéseknek” (contract), az üzleti szerződésekben szereplő feltételek analógiájára. A szerződést kötő két fél ez esetben az osztály és az azt használó kliensek. Az osztály a klienseivel való kapcsolatok során vállalja, hogy tartja magát az interfészében definiált utófeltételekhez (és az invariánshoz), amennyiben a kliensek tartják magukat az előfeltételekhez. Ebből adódóan világosan elválnak a résztvevők jogai és kötelességei.

A Python egy általános célú, magas szintű programozási nyelv, melynek tervezési céljai között szerepelt a jól olvasható szintaxis. Elsősorban az objektum orientált fejlesztést támogatja, de bizonyos mértékben támogatást nyújt a funkcionális programozáshoz is. Típusrendszere dinamikus és erős. A nyelv legtöbb eleme (függvények, osztályok, stb.) ugyanolyan objektum mint a programozó által létrehozottak, és futásidőben is módosítható. Ezen dinamizmus, illetve a metaosztályok használhatósága lehetővé teszi a metaprogramozást. Támogatja a többszörös öröklést és az operátorok felüldefiniálását is.

A célom egy Design by Contract szerinti fejlesztést támogató keretrendszer létrehozása volt a Python programozási nyelvhez. Egy ilyen implementáció lehetővé teszi a Design by Contract elemeinek használatát: elő- és utófeltételek illetve invariánsok definiálását Python nyelven írt osztályokhoz. Emellett elvégzi a megadott feltételek ellenőrzését.

Követelmény volt, hogy az implementáció a Python interpreter módosítása nélkül legyen használható. Így használatához elegendő egy általános Python interpreter, és egy Python nyelvű modul. A cél a Python nyelv 3.x verzióinak használata volt, mivel ezen verziók jobb támogatást nyújtanak a metaprogramozáshoz, illetve olyan szintaktikai lehetőségeket biztosítanak, melyek egyszerűbbé teszik a feltételek definiálását (annotációk, osztálydekorátorok).

A fent említett lehetőségek kihasználásával sikerült egy olyan modult létrehozni, mely lehetővé teszi a Design by Contract Python nyelven is releváns elemeinek használatát. Támogatottak az elő- és utófeltételek, az invariánsok, valamint ezek használata akár többágú öröklési fa esetén is. Emellett lehetővé teszi egy duck typing jellegű, futásidejű típusellenőrzés használatát. A modul teljes egészében Python nyelven íródott, és használatához elégséges egy tetszőleges, legalább 3.1 verziójú Python interpreter. A feltételek ellenőrzése futásidőben történik, illetve igény esetén kikapcsolható. A modul használatával így alkalmazható a Design by Contract tervezési módszertan Python nyelven fejlesztett szoftverek esetén is.

Letölthető fájlok

A témához tartozó fájlokat csak bejelentkezett felhasználók tölthetik le.