Popis: |
Ohjelmistoarkkitehtuurien suunnittelu on kriittinen vaihe ohjelmistokehitystä, sillä arkkitehtuuri määrittelee ohjelmiston rungon: miten ohjelma jaetaan eri komponentteihin, ja miten komponentit ovat yhteydessä toisiinsa. Ohjelmisto voidaan yleensä toteuttaa toimivasti monella eri tavalla, mutta toimiva toteutus ei aina takaa, että ohjelmisto on myös toteutettu laadukkaasti. Laadun takeena onkin huolella ja taidolla suunniteltu arkkitehtuuri. Ohjelmistoarkkitehtuurin suunnittelu on haastavaa. Suunnitelmaa tehdessä tulee ottaa huomioon monen eri sidosryhmän (esim. käyttäjä, toteuttaja, markkinoija) vaatimukset ja miettiä, miten mahdollisimman suuri osa vaatimuksista voidaan toteuttaa arkkitehtuurissa. Arkkitehtuurisuunnittelu vaatiikin kokeneen ohjelmistoarkkitehdin, joka on hankkinut tietotaitonsa vuosien ajalta eri ohjelmistoprojekteista. Kokemukseen perustuvan tiedon lisäksi ohjelmistoarkkitehtuurisuunnittelun käytäntöjä on koottu eräänlaisiksi katalogeiksi, joissa esitellään hyväksi havaittuja ratkaisuja, ns. suunnittelutyylejä ja -malleja, yleisiin arkkitehtuurisuunnitteluongelmiin. Voidaankin ajatella, että arkkitehtuuri tuotetaan etsimällä (kokemukseen nojaten) paras mahdollinen kombinaatio suunnittelumalleja ja -tyylejä. Arkkitehtuurin suunnittelu onkin siis eräänlainen optimointiongelma. Ohjelmistoista tulee jatkuvasti yhä monimutkaisempia. Sovelluksien monimutkaistuessa myös arkkitehtuurisuunnittelu muuttuu entistä vaikeammaksi ja vie yhä enemmän aikaa. Suunnittelun perustuminen hiljaiseen tietoon ja arkkitehtien kokemukseen tekee prosessista yhä hitaamman ja läpinäkymättömämmän. Arkkitehtuurisuunnittelun automatisointi toisikin suuria säästöjä. Henkilöstövaihdosten yhteydessä ei myöskään tarvitsisi pelätä tietotaidon katoamista, kun arkkitehtuurisuunnittelu olisi helposti toistettavissa aina alusta lähtien. Tässä väitöskirjassa on tutkittu, miten parhaan mahdollisen ratkaisun etsintäprosessin (eli suunnittelumallien ja -tyylien soveltamisen) voisi automatisoida. Monimutkaisissa optimointiongelmissa käytetään etsintäalgoritmeja, jotka haravoivat hakuavaruutta jollain satunnaistetulla menetelmällä. Yksi suosituimmista etsintäalgoritmeista on geneettinen algoritmi. Geneettiset algoritmit tarkastelevat aina pientä ratkaisujoukkoa kerrallaan ja etsivät parasta ratkaisua yhdistelemällä osia löydetyistä ratkaisuista sekä muuntelemalla ratkaisuja. Jokaiselle ratkaisulle lasketaan laatuarvo, ja luonnonvalintaa jäljitellen jatketaan parhaiden vaihtoehtojen tarkastelua sekä kehittelyä ja hylätään huonoimmat ratkaisut. Etsintäalgoritmien käyttämistä ohjelmistokehityksen ongelmiin, esim. ohjelmistosuunnitteluun, testaukseen ja projektinhallintaan, kutsutaan etsintäperustaiseksi ohjelmistokehitykseksi. Väitöskirja kuuluu etsintäperustaisen ohjelmistosuunnittelun alaan, ja siinä tutkitaan ns. ohjelmistoarkkitehtuurisynteesiä geneettisten algoritmien avulla. Ohjelmistoarkkitehtuurisynteesi lähtee ns. nolla-arkkitehtuurista , joka toteuttaa järjestelmän toiminnalliset vaatimukset, mutta ei ota kantaa laatuvaatimuksiin. Laatua pyritään parantamaan lisäämällä lähtöarkkitehtuuriin suunnittelutyylejä ja -malleja. Väitöskirjassa laatuarviointiin on käytetty muunneltavuutta, tehokkuutta ja ymmärrettävyyttä. Lopputuloksena saadaan ehdotus arkkitehtuurista, joka toteuttaa toiminnalliset vaatimukset ja on myös laadukas. Geneettisiä algoritmeja ei ole aiemmin sovellettu vastaavantasoisiin suunnitteluongelmiin, joten toteutuksessa on kehitetty uusi tapa mallintaa arkkitehtuuri geneettiselle algoritmille sekä laskukaava arkkitehtuurin laadulle. Perustoteutuksen lisäksi myös geneettisen algoritmin eri ominaisuuksia, ns. risteytysoperaatiota ja laatufunktiota on tutkittu tarkemmin, ja niille on kehitetty vaihtoehtoisia toteutuksia. Tapaustarkasteluista saadut tulokset osoittavat, että tällä hetkellä geneettisiin algoritmeihin perustuvaa arkkitehtuurisynteesi tuottaa suunnilleen samantasoisia ratkaisuja kuin kolmannen vuosikurssin ohjelmistotekniikan opiskelija. This thesis presents an approach for synthesizing software architectures with genetic algorithms. Previously in the literature, genetic algorithms have been mostly used to improve existing architectures. The method presented here, however, focuses on upstream design. The chosen genetic construction of software architectures is based on a model which contains information on functional requirements only. Architecture styles and design patterns are used to transform the initial high-level model to a more detailed design. Quality attributes, here modifiability, efficiency and complexity, are encoded in the algorithm s fitness function for evaluating the produced solutions. The final solution is given as a UML class diagram. While the main contribution is introducing the method for architecture synthesis, basic tool support for the implementation is also presented. Two case studies are used for evaluation. One case study uses the sketch for an electronic home control system, which is a typical embedded system. The other case study is based on a robot war game simulator, which is a typical framework system. Evaluation is mostly based on fitness graphs and (subjective) evaluation of produced class diagrams. In addition to the basic approach, variations and extensions regarding crossover and fitness function have been made. While the standard algorithm uses a random crossover, asexual reproduction and complementary crossover are also studied. Asexual crossover corresponds to real-life design situations, where two architectures are rarely combined. Complementary crossover, in turn, attempts to purposefully combine good parts of two architectures. The fitness function is extended with the option to include modifiability scenarios, which enables more targeted design decisions as critical parts of the architecture can be evaluated individually. In order to achieve a wider range of solutions that answer to competing quality demands, a multi-objective approach using Pareto optimality is given as an alternative for the single weighted fitness function. The multi-objective approach evaluates modifiability and efficiency, and gives as output the class diagrams of the whole Pareto front of the last generation. Thus, extremes for both quality attributes as well as solutions in the middle ground can be compared. An experimental study is also conducted where independent experts evaluate produced solutions for the electronic home control. Results show that genetic software architecture synthesis is indeed feasible, and the quality of solutions at this stage is roughly at the level of third year software engineering students. |