Domein-engineering - Domain engineering
Domain engineering is het hele proces van het hergebruiken van domeinkennis bij de productie van nieuwe softwaresystemen . Het is een sleutelbegrip in systematisch softwarehergebruik en productlijnengineering . Een sleutelidee bij systematisch hergebruik van software is het domein . De meeste organisaties werken in slechts enkele domeinen. Ze bouwen herhaaldelijk vergelijkbare systemen binnen een bepaald domein met variaties om aan verschillende klantbehoeften te voldoen. In plaats van elke nieuwe systeemvariant helemaal opnieuw te bouwen, kunnen aanzienlijke besparingen worden bereikt door delen van eerdere systemen in het domein opnieuw te gebruiken om nieuwe te bouwen.
Het proces van het identificeren van domeinen, het begrenzen ervan en het ontdekken van overeenkomsten en variabiliteiten tussen de systemen in het domein wordt domeinanalyse genoemd . Deze informatie wordt vastgelegd in modellen die worden gebruikt in de domeinimplementatiefase om artefacten te creëren, zoals herbruikbare componenten, een domeinspecifieke taal of applicatiegeneratoren die kunnen worden gebruikt om nieuwe systemen in het domein te bouwen.
In productlijnengineering zoals gedefinieerd door ISO26550:2015, wordt de Domain Engineering aangevuld met Application Engineering die zorgt voor de levenscyclus van de individuele producten die zijn afgeleid van de productlijn.
Doel
Domain engineering is ontworpen om de kwaliteit van ontwikkelde softwareproducten te verbeteren door hergebruik van softwareartefacten. Domain engineering laat zien dat de meeste ontwikkelde softwaresystemen geen nieuwe systemen zijn, maar varianten van andere systemen binnen hetzelfde vakgebied. Als gevolg hiervan kunnen bedrijven door het gebruik van domeinengineering hun winst maximaliseren en de time-to-market verkorten door de concepten en implementaties van eerdere softwaresystemen te gebruiken en deze toe te passen op het doelsysteem. De verlaging van de kosten is al zichtbaar tijdens de implementatiefase. Eén onderzoek toonde aan dat het gebruik van domeinspecifieke talen het mogelijk maakte de codegrootte, zowel in het aantal methoden als in het aantal symbolen , met meer dan 50% te verminderen en het totale aantal regels code met bijna 75% te verminderen.
Domain engineering richt zich op het vastleggen van kennis die is verzameld tijdens het software-engineeringproces . Door herbruikbare artefacten te ontwikkelen, kunnen componenten tegen lage kosten en hoge kwaliteit worden hergebruikt in nieuwe softwaresystemen. Omdat dit geldt voor alle fasen van de softwareontwikkelingscyclus , richt domeinengineering zich ook op de drie primaire fasen: analyse, ontwerp en implementatie, parallel aan applicatie-engineering. Dit levert niet alleen een set software-implementatiecomponenten op die relevant zijn voor het domein, maar ook herbruikbare en configureerbare vereisten en ontwerpen.
Gezien de groei van gegevens op het web en de groei van het internet der dingen , wordt een benadering van domeinengineering ook relevant voor andere disciplines. De opkomst van diepe ketens van webservices laat zien dat het serviceconcept relatief is. Webservices die door de ene organisatie zijn ontwikkeld en beheerd, kunnen door een andere organisatie als onderdeel van een platform worden gebruikt. Aangezien services in verschillende contexten kunnen worden gebruikt en daarom verschillende configuraties vereisen, kan het ontwerp van servicesfamilies profiteren van een benadering van domeinengineering.
Fasen
Domain engineering bestaat, net als applicatie-engineering, uit drie hoofdfasen: analyse, ontwerp en implementatie. Waar software-engineering zich echter richt op een enkel systeem, richt domein-engineering zich op een familie van systemen. Een goed domeinmodel dient als referentie om later in het proces onduidelijkheden op te lossen, als opslagplaats van kennis over de domeinkenmerken en -definitie en als specificatie voor ontwikkelaars van producten die deel uitmaken van het domein.
Domeinanalyse
Domeinanalyse wordt gebruikt om het domein te definiëren, informatie over het domein te verzamelen en een domeinmodel te produceren . Door het gebruik van feature-modellen (oorspronkelijk opgevat als onderdeel van de feature-georiënteerde domeinanalysemethode ), wil domeinanalyse de gemeenschappelijke punten in een domein en de verschillende punten in het domein identificeren. Door het gebruik van domeinanalyse is de ontwikkeling van configureerbare vereisten en architecturen mogelijk, in plaats van statische configuraties die zouden worden geproduceerd door een traditionele applicatie-engineeringbenadering.
Domeinanalyse verschilt aanzienlijk van requirements-engineering , en als zodanig zijn traditionele benaderingen voor het afleiden van requirements niet effectief voor de ontwikkeling van configureerbare vereisten zoals aanwezig zou zijn in een domeinmodel. Om domeinengineering effectief toe te passen, moet hergebruik worden overwogen in de eerdere fasen van de levenscyclus van softwareontwikkeling . Door het gebruik van selectie van functies uit ontwikkelde functiemodellen, wordt hergebruik van technologie zeer vroeg overwogen en adequaat toegepast gedurende het hele ontwikkelingsproces.
Domeinanalyse is voornamelijk afgeleid van artefacten die voortkomen uit ervaringen uit het verleden in het domein. Bestaande systemen, hun artefacten (zoals ontwerpdocumenten, documenten met vereisten en gebruikershandleidingen ), normen en klanten zijn allemaal potentiële bronnen van input voor domeinanalyse. In tegenstelling tot requirements-engineering bestaat domeinanalyse echter niet alleen uit het verzamelen en formaliseren van informatie; er is ook een creatieve component. Tijdens het domeinanalyseproces streven ingenieurs ernaar om de kennis van het domein uit te breiden tot voorbij wat al bekend is en om het domein te categoriseren in overeenkomsten en verschillen om de herconfigureerbaarheid te verbeteren.
Domeinanalyse levert in de eerste plaats een domeinmodel op , dat de gemeenschappelijke en variërende eigenschappen van systemen binnen het domein weergeeft. Het domeinmodel helpt bij het creëren van architecturen en componenten op een configureerbare manier door te fungeren als een basis waarop deze componenten kunnen worden ontworpen. Een effectief domeinmodel omvat niet alleen de variërende en consistente kenmerken in een domein, maar definieert ook de woordenschat die in het domein wordt gebruikt en definieert concepten, ideeën en fenomenen binnen het systeem. Functiemodellen splitsen concepten op in hun vereiste en optionele functies om een volledig geformaliseerde set van configureerbare vereisten te produceren.
Domein ontwerp
Domeinontwerp neemt het domeinmodel dat is geproduceerd tijdens de domeinanalysefase en heeft tot doel een generieke architectuur te produceren waaraan alle systemen binnen het domein kunnen voldoen. Op dezelfde manier waarop applicatie-engineering de functionele en niet-functionele vereisten gebruikt om een ontwerp te maken, neemt de domeinontwerpfase van domeinengineering de configureerbare vereisten die zijn ontwikkeld tijdens de domeinanalysefase en produceert een configureerbare, gestandaardiseerde oplossing voor de familie van systemen. Domeinontwerp is gericht op het produceren van architecturale patronen die een probleem oplossen dat veel voorkomt in de systemen binnen het domein, ondanks verschillende vereistenconfiguraties. Naast de ontwikkeling van patronen tijdens domeinontwerp, moeten ingenieurs er ook voor zorgen dat de reikwijdte van het patroon en het niveau waarop de context relevant is voor het patroon, te identificeren. Beperking van context is cruciaal: te veel context zorgt ervoor dat het patroon niet toepasbaar is op veel systemen, en te weinig context zorgt ervoor dat het patroon onvoldoende krachtig is om bruikbaar te zijn. Een bruikbaar patroon moet zowel frequent voorkomend als van hoge kwaliteit zijn.
Het doel van domeinontwerp is om aan zoveel mogelijk domeinvereisten te voldoen met behoud van de flexibiliteit die wordt geboden door het ontwikkelde functiemodel. De architectuur moet voldoende flexibel zijn om alle systemen binnen het domein te bevredigen en tegelijkertijd stijf genoeg om een solide raamwerk te bieden waarop de oplossing kan worden gebaseerd.
Domein implementatie
Domeinimplementatie is het creëren van een proces en tools voor het efficiënt genereren van een aangepast programma in het domein.
Kritiek
De laatste tijd is domeinengineering bekritiseerd omdat het te veel focust op "engineering-voor-hergebruik" of "engineering-met-hergebruik" van generieke softwarefuncties in plaats van zich te concentreren op "engineering-for-use", zodat het wereldbeeld van een individu, taal of context is geïntegreerd in het ontwerp van software.
Zie ook
Referenties
bronnen
- Batory, Don; Johnson, Clay; MacDonald, Bob; von Heeder, Dale (2002). "Het bereiken van uitbreidbaarheid door middel van productlijnen en domeinspecifieke talen: een case study". ACM-transacties over software-engineering en -methodologie . ACM . 11 (2): 191-214. CiteSeerX 10.1.1.100.7224 . doi : 10.1145/505145.505147 . S2CID 7864469 .
- Buschmann, Frank; Henney, Kevlin ; Schmidt, Douglas C. (2007). Patroongeoriënteerde software-architectuur: patronen en patroontalen . 5 . John Wiley & zonen . ISBN 978-0-471-48648-0.
- Czarnecki, Krzysztof; Eisenecker, Ulrich W. (2000). Generatief programmeren: methoden, tools en toepassingen . Boston: Addison-Wesley . ISBN 0-201-30977-7.
- Falbo, Ricardo de Almedia; Guizzardi, Giancarlo; Duarte, Katia Cristina (2002). "Een ontologische benadering van Domain Engineering". Proceedings van de 14e Internationale Conferentie over Software Engineering en Knowledge Engineering . ACM : 351-358. CiteSeerX 10.1.1.19.2577 . doi : 10.1145/568760.568822 . ISBN 1581135564. S2CID 16743035 .
- Kang, Kyo C.; Lee, Jaejoon; Kim, Kijoo; Kim, Gerard Jounghyun; Shin, Euiseob; Huh, Moonhang (oktober 2004). "FORM: een functiegerichte methode voor hergebruik met domeinspecifieke referentiearchitecturen". Annalen van Software Engineering . Springer Nederland. 5 : 143-168. CiteSeerX 10.1.1.95.7568 . doi : 10.1023/A:1018980625587 . S2CID 1830464 .
- Frakes, William B.; Kang, Kyoto (juli 2007). "Onderzoek naar hergebruik van software: status en toekomst". IEEE-transacties op software-engineering . 31 (7): 529-536. CiteSeerX 10.1.1.75.635 . doi : 10.1109/tse.2005.85 . S2CID 14561810 .
- Harsu, Maarit (december 2002). Een enquête over Domain Engineering (PDF) (rapport). Institute of Software Systems, Tampere University of Technology . P. 26. ISBN 9789521509322.
- Mettler, Tobias (2017). "Contextualiseren van een professioneel sociaal netwerk voor de gezondheidszorg: ervaringen uit een Action Design Research Study" (PDF) . Tijdschrift voor informatiesystemen . 28 (4): 684-707. doi : 10.1111/isj.12154 . S2CID 49411423 .
- Reinhartz-Berger, Iris; Sturm, Arnon; Clark, Tony; Cohen, Sholom; Bettin, Jorn (2013). Domain Engineering: productlijnen, talen en conceptuele modellen . Springer Wetenschap + Zakelijke Media . ISBN 978-3-642-36654-3.