Delft University of Technology
Context Project - Programming Life
Requirements Analyse en Ontwerp Groep B
Auteurs: Maniek Santhokhi Bas Metman Ferdy Moon Soo Beekmans `l Bastiaan Grise Freek van Tienen
13 maart 2012
ABSTRACT Biotechnologie en met name de synthetische biologie krijgt een steeds belangrijkere positie binnen in de wetenschappelijke wereld. De potentie van het maken van synthetische eiwitten wordt alsmaar groter. Er mist, echter, een goed stuk gereedschap voor biotechnologen om deze synthetische eiwitten, BioBricks, samen te stellen en de potentie ervan vast te leggen. In komt de oplossing beschreven in dit verslag. Een tool voor het samenstellen van BioBricks op een intutieve en simpele manier voor elk soort biotechnoloog. Dit verslag beschrijft het te cre¨eren systeem doormiddel van requirements, randvoorwaarden, analysediagrammen en interactiemodellen.
1
Inhoudsopgave
2
Inleiding Het doel van biotechnologie is om micro-organismen zodanig aan te passen dat ze een bepaald gedrag gaan vertonen. Dit kan bijvoorbeeld zijn dat organismen gaan reageren of prikkels uit de omgeving (zoals licht) maar ook dat een organisme wordt aangepast zodat het bepaalde stoffen/eiwitten produceert. Omgekeerd kunnen micro-organismen ook worden gebruikt om bepaalde stoffen af te breken. De toepassingen van deze gemodificeerde micro-organismen zijn bijvoorbeeld biobrandstoffen en bioplastics. Het is echter lastig om de complexe processen die in een cel plaatsvinden zo te sturen dat een organisme een bepaald gedrag vertoont. Dit kan worden gedaan met stukjes genetische code die een bepaalde rol vervullen in de cel, bijvoorbeeld de productie van een bepaald eiwit. Deze stukjes genetische code worden ook wel BioBricks genoemd. Complexe wiskundige modellen kunnen de processen en afhankelijkheden die komen kijken bij het implementeren van een BioBrick tot een bepaalde nauwkeurigheid modelleren. Deze leidden er vaak toe dat een biotechnoloog lang bezig is met complexe wiskunde in plaats van het daadwerkelijk ontwerpen en evalueren van een gemodificeerd organisme. Het doel van dit project is dan ook om het ontwerpen van BioBricks naar een hoger abstractieniveau te tillen, zodat biotechnologen zich met het daadwerkelijke ontwerp van een BioBrick bezig kunnen houden zonder direct rekening te hoeven houden met de onderliggende wiskundige modellen. Er is op dit moment echter nog geen goed stuk gereedschap voor biotechnologen om BioBricks te ontwerpen en ook de effectiviteit ervan te simuleren. Om zowel het ontwerp als de simulatie van BioBricks te faciliteren, moet er een systeem ontwikkeld worden waarin elk soort biotechnoloog op een intu¨ıtieve manier BioBricks kan ontwerpen, maar ook de werking ervan simuleren. Om bepaalde functionaliteit aan een organisme toe te voegen, wordt gebruikt gemaakt van zogenaamde biologische circuits. Deze circuits faciliteren de expressie van een bepaalde eigenschap en worden ook wel BioBricks genoemd. Deze BioBricks zijn opgebouwd uit eenvoudige genetische schakelingen, die een soort biologische tegenhanger vormen voor de logische poorten die aan de basis liggen van de werking van computers. De insteek van dit project is dan ook om BioBricks vanuit het oogpunt van circuits opgebouwd uit logische poorten samen te stellen. Op deze manier kunnen biotechnologen bepaalde eigenschappen ontwerpen voor een organisme op een manier die analoog is aan het ontwerpen van elektronische circuits in computers. Deze abstractielaag zorgt ervoor dat biotechnologen intu¨ıtief en overzichtelijk het gedrag van een organisme als het ware kunnen programmeren.
3
1
Huidige situatie
Met synthetische biologie worden BioBricks ontworpen door gebruik te maken van biologische circuits. Om dit op een makkelijke manier te kunnen gebruiken kunnen deze circuits gemodelleerd en ontworpen worden op de computer. Een logisch circuit komt overeen met een groep moleculen - eiwitten, genen en RNA - die met elkaar reacties aangaan. Omdat deze reacties met elkaar aangaan volgens een bepaalde logische grondslag, kan een logisch circuit worden gesimuleerd waarmee met behulp van een gegeven invoersignaal een uitvoersignaal berekend kan worden. Ook is het mogelijk om de parameters van de verschillende reacties te optimaliseren om een gewenste uitvoer zo goed mogelijk te benaderen. Biologische circuits kunnen individueel redelijk goed beschreven worden, maar de werking van een complete BioBrick hangt af van de interacties tussen de componenten waaruit de het onderliggende circuit is opgebouwd en de omgeving. Deze interacties zijn met wiskundige modellen te benaderen. Het doorrekenen van deze modellen wordt nu nog semi-automatisch gedaan waardoor biotechnologen veel bezig zijn met de wiskunde achter de BioBrick in plaats van het daadwerkelijke ontwerpen ervan. Het doel van het systeem is om biotechnologen BioBricks op een gebruiksvriendelijke manier te kunnen laten ontwerpen, simuleren en valideren.
4
2
Voorgesteld systeem
2.1
Overzicht
Het systeem zal een biotechnoloog de mogelijkheid geven om een visuele programmeeromgeving te gebruiken om BioBricks te ontwerpen en te simuleren. Er zijn een aantal requirements waaraan dit systeem moet voldoen om een goede werking van dit systeem te verzekeren. . Deze requirements kunnen geclassificeerd worden in functionele requirements en niet-functionele requirements. Aan de hand van deze verschillende requirements kunnen verschillende diagrammen opgesteld worden die het systeem specificeren. De beschrijving van de volgende requirements volgt de richtlijnen van het MOSCOW model.
2.2
Functionele Requirements
Must Have • Er moeten circuits samengesteld kunnen worden op basis van elementair gegeven synthetische logische poorten overeenkomend met een NOR- en OR-gate. • Een gebruiker moet circuits kunnen ontwerpen door porten en circuits te verbinden en moet circuits kunnen importeren vanuit BSML bestanden. • Het moet mogelijk zijn om via een GUI een schakeling van deze poorten te tekenen. Voor elk van de poort moet het mogelijk zijn de gebruikte eiwitten te kiezen uit een gegeven lijst eiwitten; een bibliotheek. De interacties tussen deze eiwitten moeten in deze bibliotheek beschreven zijn. • Elk eiwit mag maar ´e´en keer gebruikt worden in een circuit. • Een gebruiker moet de binaire invoer/uitvoer relatie van een circuit kunnen bekijken. • De gebruiker moet een circuit kunnen simuleren en daarbij de invoer concentraties van eiwitten op kunnen geven. Bij een simulatie moeten de concentraties van de gebruikte eiwitten uitgezet worden tegen de tijd. • In de GUI moet gebruik gemaakt kunnen worden van drag-and-drop en meerdere vensters tegelijk kunnen bekijken in 1 scherm. • Er moeten een user-manual en een help functie zijn. Should Have • Poorten en circuits zouden in een bibliotheek opgslagen en opgezocht moeten kunnen worden. • De poorten bibliotheek zou beheerd en doorzocht moeten kunnen worden. • Er zou een eiwitbibliotheek geladen en samengesteld moeten kunnen worden. In deze bibliotheek staat informatie over alle relevante (activatoren, repressors en transcribeerbare) eiwitten en hun relaties. • Op basis van poorten en gekozen eiwitten stelt het programma zelf het stelsel van vergelijkingen op. • Als de gebruiker een al in de bibliotheek aanwezige poort heeft gemaakt als deel van een nieuw ontwerp, zou dit herkend en gemeld moeten worden.
5
• De concentraties in een simulatie zouden als ruwe data ge¨exporteerd moeten kunnen worden. Bijvoorbeeld voor gebruik in Matlab. Could Have • Het programma kan een algoritme gebruiken om automatisch de benodigde eiwitten te kiezen voor elke poort, waarbij een gegeven uitvoersignaal zo goed mogelijk benaderd kan worden. • Gegeven een poort en de in- en uit-voer eiwitten, en een eiwit bibliotheek bepaald het programma mogelijke combinaties voor de eiwitten tussen de poorten en circuits in een circuit. • DNA string exporteren die codeert voor het gegeven circuit samen met de eiwitten die nodig zijn om de reactie te starten • De gebruiker kan zelf GUI functionaliteit toevoegen on aanpassen middels een JavaScript API. • De gebruiker kan keyboardshortcuts gebruiken voor componenten. • De gebruiker kan zelf een poort defini¨eren als een functie. Would like to Have • Het programma kan circuits door middel van Karnaugh maps optimaliseren. • Het programma kan aan de hand van concentraties van eiwitten as in- en uitvoer zelf een circuit invullen. • Een programmeertaal die naar poorten toe vertaalt/compileert.
2.3
Niet-functionele Requirements
• De backend van het systeem zal gemaakt worden in de taal Scala. • De front-end zal gemaakt worden in html en javascript. • Voor testen zal gebruik gemaakt worden van de Scala testsuite in combinatie met Maven. • Het systeem moet open en transparant zijn. • Er moet een gebruiksvriendelijke GUI zijn. • Er moet een duidelijke user-manual aanwezig zijn. • De helpfunctie moet contextgevoelig zijn.
2.4
Randvoorwaarden
• Het ontworpen circuit moet overeenkomen met een model van interacties tussen moleculen op basis van differentiaalvergelijkingen. • Op 9 maart moet de requirement analyse af zijn. • Op 16 maart moet het architectural design af zijn. • Op 23 maart moet het testplan af zijn. 6
• Vanaf 23 maart moet er elke twee weken een scrum iteratie zijn. • Op 22 juni moet het final report af zijn. • Op 29 juni moet de implementatie af en volledig getest zijn.
2.5 2.5.1
Analysediagrammen Use Case Diagram
Usecase diagram 1:
7
2.5.2
Use Case Beschrijvingen en Scenario’s
We hebben voor de verschillende usecases beschrijvingen en scenario’s gemaakt waarin duidelijk de activiteitenstrooom beschreven wordt. Use case naam Use case beschrijving Actor Randvoorwaarden Activiteitenstroom
Use case naam Use case beschrijving
Actor Randvoorwaarden Activiteitenstroom
Use case naam Use case beschrijving Actor Randvoorwaarden Activiteitenstroom
BioBrick plaatsen begin De gebruiker selecteert een BioBrick uit de BioBrick-bibliotheek en plaatst deze in een leeg werkvlak waarmee het circuit dus begint. De gebruiker. Er zijn BioBricks aanwezig om uit te kiezen; er is nog geen circuit aanwezig. 1. 2. 3. 4.
Gebruiker opent de BioBrick-bibliotheek. Gebruiker selecteert BioBrick. Gebruiker sleept BioBrick naar werkvlak en laat de BioBrick los. BioBrick wordt als begin van een circuit neergezet door het systeem.
BioBrick plaatsen in circuit De gebruiker selecteert een BioBrick uit de BioBrick-bibliotheek en plaatst deze in een circuit waarmee een circuit wordt uitgebreid met een BioBrick, zodat deze samen een nieuwe BioBrick worden. De gebruiker. Er zijn BioBricks aanwezig om uit te kiezen; er is al een circuit aanwezig. 1. Gebruiker opent de BioBrick-bibliotheek 2. Gebruiker selecteert BioBrick. 3. Gebruiker sleept BioBrick naar circuit en laat los op de plek waar de gebruiker deze wilt hebben. 4. BioBrick wordt automatisch toegevoegd aan het circuit door het systeem zelf. 5. Gebruiker verbindt manueel de BioBricks aan elkaar.
BioBrick verwijderen De gebruiker selecteert een BioBrick uit een circuit en verwijdert deze. De gebruiker. Er is een circuit aanwezig. 1. Gebruiker selecteert een BioBrick van het huidige circuit. 2. Gebruiker drukt op de verwijderknop. 3. Systeem vraagt een bevestiging van deze actie en als deze BioBrick nieuw is, of de gebruiker deze BioBrick op wilt slaan. 4. Gebruiker bevestigt deze actie en wil de BioBrick opslaan. 5. Systeem vraagt om een naam voor de nieuwe poort. 6. Gebruiker vult naam in en drukt op ’Ok’. 7. Systeem slaat BioBrick op in poortbibliotheek. 8. Systeem verwijdert huidige poort.
8
Use case naam Use case beschrijving Actor Randvoorwaarden Activiteitenstroom
Use case naam Use case beschrijving
Actor Randvoorwaarden Activiteitenstroom
Use case naam Use case beschrijving Actor Randvoorwaarden Activiteitenstroom
Circuit verwijderen De gebruiker verwijdert het huidige circuit oftewel de huidige gehele BioBrick. De gebruiker. Er is een circuit aanwezig. 1. Gebruiker drukt op de knop ’Huidig circuit verwijderen’. 2. Systeem vraagt een bevestiging en als het circuit veranderd is, of de gebruiker het huidige circuit wilt opslaan. 3. Gebruiker bevestigt de actie en wilt het circuit op laten slaan. 4. Systeem vraagt om een naam voor het circuit. 5. Gebruiker vult naam in en drukt op ’Ok’. 6. Systeem slaat circuit op in BioBrick-bibliotheek. 7. Systeem verwijdert het huidige circuit.
BioBrick importeren naar bibliotheek. De gebruiker importeert een BioBrick naar de BioBrick-bibliotheek van het programma door het circuit, opgeslagen als een BSML-bestand, te selecteren en te importeren. De gebruiker. Het betreffende circuit is opgeslagen als BSML-bestand. 1. 2. 3. 4.
Gebruiker drukt op knop ’BioBrick importeren’. Systeem laat een map zien met alle BSML-bestanden erin. Gebruiker selecteert een BSML-bestand. Systeem importeert het circuit in de bibliotheek.
Eiwitconcentraties veranderen in circuit. De gebruiker verandert de eiwitconcentraties van de invoer van het huidige circuit. De gebruiker. Er is een circuit aanwezig met een invoer van een bepaald eiwit gespecificeerd. 1. Gebruiker selecteert een invoer. 2. Gebruiker drukt op knop ’Eiwit concentratie van invoer veranderen’. 3. Systeem laat een scherm zien waarin een concentratie ingevuld kan worden. 4. Gebruiker vult nieuwe concentratie in. 5. Systeem past de invoer aan en verandert ook de uitvoer met betrekking tot de nieuwe invoer.
Use case naam Gebruikershandleiding openen. Use case beschrijving De gebruiker opent de gebruikershandleiding. Actor De gebruiker. Randvoorwaarden Activiteitenstroom 1. Gebruiker drukt op knop ’Gebruikershandleiding’.
9
Use case naam Use case beschrijving Actor Randvoorwaarden Activiteitenstroom
Eiwit selecteren uit eiwitbibliotheek. De gebruiker selecteert een eiwit uit de eiwitbibliotheek. De gebruiker. Er zijn eiwitten aanwezig in de eiwit-bibliotheek.
Use case naam Use case beschrijving
Informatie van eiwit opvragen. De gebruiker selecteert een eiwit uit de eiwitbibliotheek en wilt van de desbetreffende eiwit meer informatie weten. De gebruiker. Er zijn eiwitten aanwezig in de eiwit-bibliotheek.
Actor Randvoorwaarden Activiteitenstroom
1. 2. 3. 4. 5.
1. 2. 3. 4.
Gebruiker selecteert de verbinding. Gebruiker drukt op knop eiwit toevoegen. Systeem vraagt op welke BioBrickdit eiwit toegepast moet worden. Gebruiker selecteert poort. Systeem voegt eiwit toe.
Gebruiker selecteert de eiwitbibliotheek. Gebruiker selecteert een eiwit uit de eiwitbibliotheek. Gebruiker drukt op knop informatie opvragen. Systeem laat informatie zien in nieuw venster.
Use case naam Use case beschrijving Actor Randvoorwaarden Activiteitenstroom
BioBrick opslaan in bibliotheek. De gebruiker slaat het huidige circuit op in de BioBrick-bibliotheek. De gebruiker. Er is een circuit aanwezig op het werkvlak.
Use case naam Use case beschrijving
Bestaande BioBrick opslaan. De gebruiker slaat een BioBrick op, alleen is deze al gedefinieerd in de BioBrick-bibliotheek. Het systeem slaat hem dan niet op, want dubbele BioBricks zijn niet gewenst. De gebruiker. Er is een BioBrick-bibliotheek aanwezig.
Actor Randvoorwaarden Activiteitenstroom
1. 2. 3. 4.
Gebruiker drukt op knop ’Circuit opslaan’. Systeem vraagt om een naam voor de nieuwe BioBrick. Gebruiker vult een naam in. Systeem slaat het circuit op als BioBrick in de bibliotheek.
1. Gebruiker drukt op knop ’Circuit opslaan’. 2. Systeem herkent de BioBrick en geeft mededeling dat de BioBrick al aanwezig is. 3. Gebruiker drukt op ’Ok’-knop.
10
Use case naam Use case beschrijving Actor Randvoorwaarden
Eiwitconcentraties exporteren. De gebruiker wil de ruwe data van de verschillende eiwitconcentraties van de invoer exporteren, evenals de concentraties van de uitvoer. De gebruiker. Er is een circuit aanwezig met verschillende eiwitten en een geldige uitvoer van eiwitten.
Activiteitenstroom
Use case naam Use case beschrijving Actor Randvoorwaarden
1. Gebruiker drukt op knop ’Eiwitconcentraties exporteren’. 2. Systeem laat de map zien waar bestanden standaard opgeslagen worden. 3. Gebruiker selecteert een locatie. 4. Gebruiker vult naam in. 5. Systeem slaat bestand op met de data van de eiwitconcentraties op de aangegeven locatie.
Verbindingen verbinden. De gebruiker verbindt de invoer en uitvoer van verschillende BioBricks aan elkaar. De gebruiker. Er is een circuit aanwezig op het werkvlak; er is een BioBrick aanwezig die nog niet verbonden is met de rest van het circuit.
Activiteitenstroom
2.5.3
1. Gebruiker selecteer BioBrick de invoer van een niet-verbonden BioBrick. 2. Gebruiker sleept verbinding naar andere verbinding. 3. Systeem kijkt of verbinding mogelijk is. 4. Systeem maakt verbinding aan.
Interactie Model
Klassendiagram Wij hebben voorlopig een model-view-controller architechtuur aangehouden, dit is dan ook te zien in ons voorlopige klassendiagram. Over de architechtuur van de model is nog niets bekend omdat dit in deze fase van het proccess nog maar van beperkt belang is en wijnig invloed heeft op de rest van het ontwerp.
11
Model Klassediagram 1:
Het model is verdeeld in 2 onderdelen, het ene deel voor de eiwitten en het andere voor BioBricks. In het deel van de eiwitten zitten alle eiwitten als symbol, en de eiwittenbibliotheek. In de eiwittenbibliotheek is opgeslagen welke eiwitten samen welke poorten vormen. Verder dient de bibliotheek ook als flyweight, de parameters van een eiwit staan hier ook in opgeslagen. In het andere deel van het model, het BioBrick package, staan de klassen die nodig zijn voor de reprentatie van BioBricks. We hebben hier gekozen een scheiding te maken tussen welke poorten er in een BioBrick zitten, en welke eiwitten deze poorten dan moeten gaan vertegenwoordigen. Dit wordt gerepresenteerd door respertievelijk BioBrick en BioBrickSkeleton. Deze keuze geeft ons meer vrijheid bij het doorrekkenen, zo kan het systeem zelf bepalen welke eiwitten ingezet worden.
Controller
Klassediagram2:
In de controller draait het vooral om de Cel klasse. Deze vertegenwoordigt een cel, met daarin een circuit dat gesimuleert kan worden met input- en streefoutput concentratiefuncties tegen de 12
tijd. Bij een simulatie worden door een EquationSetManager een netwerk van ODE(Ordinary Differential Equations)s opgestelt om door te rekenen.
2.6 2.6.1
Dynamische Modellen Sequence Diagram
Sequence diagram 1:
Sequence diagram 2:
13
Sequence diagram 3:
Sequence diagram 4:
Sequence diagram 5:
14
Sequence diagram 6:
Sequence diagram 7:
15
Sequence diagram 8:
Sequence diagram 9:
16
Sequence diagram 10:
2.7
User Interface
De user-interface zal vooral gericht zijn op gebruiksgemak zodat biologen snel en intu¨ıtief met de software kunnen omgaan. De interface heeft geen overbodige toeters en bellen, en is gemaakt zodat de gebruiker optimaal gebruik kan maken van de beschikbare ruimte. De applicatie is dan ook gebouwd om ´e´en centrale werkplek waar de gebruiker circuits kan maken. Andere windows, zoals een toolbar en de verschillende bibliotheken, kunnen worden verborgen zodat er een maximale hoeveelheid ruimte overblijft om te werken.
17
Figuur 1: Globale opzet voor de GUI
18
3
Woordenlijst • Circuit - Een verzameling van BioBricks die samen een netwerk maken, bijvoorbeeld een GNR(Gen Regulatie Netwerk). • Poort/Gate - Een gedeelte van een logisch circuit met een invoer en een uitvoer waarin er een operatie wordt uitgevoerd op het binnenkomende signaal waarna het aangepaste signaal wordt doorgevoerd naar de uitvoer. • BioBrick - Een BioBrick is een stuk DNA wat ontstaat als er een bepaald logisch circuit implementeert. • Werkvlak - Het gedeelte van het programma waarin het biologische circuit ontworpen kan worden. • DNA - Afkorting van Desoxyribonucle¨ınezuur. DNA is de belangrijkste chemische drager van erfelijke informatie in alle organismen. • RNA - Afkorting van Ribonucle¨ınezuur. RNA bestaat uit ketens van nucleotiden die dient voor het kop¨ıeren van genetische informatie opgeslagen in informatie. • MOSCOW-model - Het MOSCOW-model is een model waarin prioriteiten gesteld kunnen worden aan requirements.
19