Commit ad1aeff5 authored by Juela Palushi's avatar Juela Palushi
Browse files

Create explanation of HypoMoMap tool

parent 6639660f
Pipeline #122757 failed with stages
in 5 minutes and 2 seconds
......@@ -5,17 +5,19 @@ import { FeatureModelDetailComponent } from './feature-model-detail/feature-mode
import { FeatureModelViewComponent } from './feature-model-view/feature-model-view.component';
import { BusinessModelViewComponent } from './business-model-view/business-model-view.component';
import { ToolExplanationComponent } from './tool-explanation/tool-explanation.component';
import {HypomomapExplanationComponent} from "./hypomomap-explanation/hypomomap-explanation.component";
// Routing for the Feature Modeler
const routes: Routes = [
{ path: '', redirectTo: '/featuremodels', pathMatch: 'full' },
{ path: 'explanation', component: ToolExplanationComponent},
{ path: 'hypomomap-explanation', component: HypomomapExplanationComponent},
{ path: 'featuremodel/:id', component: FeatureModelDetailComponent },
{ path: 'featuremodelview/:id', component: FeatureModelViewComponent },
{ path: 'businessmodelview/:id/:bmid', component: BusinessModelViewComponent },
{ path: 'featuremodels', component: FeatureModelComponent}
];
@NgModule({
......
......@@ -11,8 +11,11 @@
<li class="nav-item">
<a class="nav-link" routerLink ="explanation">Tool Explanation</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink ="hypomomap-explanation">HypoMoMap Explanation</a>
</li>
</ul>
</div>
</nav>
<router-outlet></router-outlet>
\ No newline at end of file
<router-outlet></router-outlet>
......@@ -16,6 +16,7 @@ import { BusinessModelViewComponent } from './business-model-view/business-model
import { CanvasBuildingBlockComponent } from './canvas-building-block/canvas-building-block.component';
import { ToolExplanationComponent } from './tool-explanation/tool-explanation.component';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { HypomomapExplanationComponent } from './hypomomap-explanation/hypomomap-explanation.component';
@NgModule({
declarations: [
......@@ -28,6 +29,7 @@ import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
BusinessModelViewComponent,
CanvasBuildingBlockComponent,
ToolExplanationComponent,
HypomomapExplanationComponent,
],
imports: [
BrowserModule,
......
<main role="main" class="container">
<!-- Show Explanation -->
<div class="my-3 p-3 bg-white rounded shadow-sm">
<h6 class="border-bottom border-gray pb-2 mb-0">Explanation of the HypoMoMap Modeler</h6>
<p class="mt-2">The HypoMoMap tool helps the business developer in the refinement of the business model,
which is created with the other BMDL tool. It is known that the business model of a product or service
has to continuously be adapted to the customer needs. On the other side, adapting to the customer
needs might not always be profitable for the business. That is why the customer needs have to
initially be considered as hypotheses, which can work or not for the business as a whole. These
hypotheses have to be approved or rejected by the conduction of experiments, which help decide whether
this customer need will be included in the business model or not. In the case that it is approved,
then we use the BDML tool for adapting the business according to the customer need.</p>
<p>The structure of the tool consists of chosen hypotheses and experiments that will approve or reject
them. Each hypothesis node has a confidence score and a priority. Each experiment node contains a
confidence score that can be achieved during conduction and a cost score if conducted as an
experiment.</p>
</div>
<div class="my-3 p-3 bg-white rounded shadow-sm">
<h6 class="border-bottom border-gray pb-2 mb-0">Execution Steps</h6>
<p class="mt-2">
The engineering process consists of a single phase for (1) Initialization and repetitive phases for
(2) Adaptation:
</p>
<p class="mt-2">
<i>(1) Initialization:</i>
</p>
<ol>
<li><strong>Define hypotheses and experiments:</strong> the hypotheses of the business model and
the product features can be derived from the business strategy and its product goals or developed
user stories and the experiments can be chosen from existing libraries or own experiences. </li>
<li><strong>Create the Hypotheses Lake and Experimentation Island:</strong> the hypotheses and
experiments are structured in interrelated hierarchies. Moreover, each hypothesis has to be
decomposed in separately validatable units, which are connected with AND/OR-Relationships.
Moreover, the validation of these small assumptions can support the validation/disapproval of
different hypotheses. The developer has to estimate the maximum score of evidence and generated
costs of the experiments. Moreover, the developer has to prioritize the hypothesis to consider
the most important hypotheses at the beginning. </li>
<li><strong>Create the mapping of hypotheses to experiments:</strong> the hypotheses are mapped to
experiments that can be used for testing the hypotheses. It is important to choose multiple
experiments for the hypotheses to test these different hypotheses with the same experiment. </li>
</ol>
<p class="mt-2">
<i>(2) Adaptation:</i>
</p>
<ol>
<li><strong>Choose and conduct an experiment:</strong> the developer is the one to do this important
choice. We provide different techniques, which can be used for different situations because of their
outcomes, like Highest Priority, Best Estimated Ratio, Best Discounted Ratio. </li>
<li><strong>Update Hypotheses Lake and Experimentation Island:</strong> each tested hypothesis is typed
as Validated or Disapproved with the evidence score of the experiment (it can be a lower confidence
score if the experiment turned out as less effective as expected). Additionally, the evidence scores
are propagated to the higher levels of the hierarchy (in OR-Relationship the higher hypothesis is
set to the highest evidence score of the lower hypothesis and in AND-Relationship the contrary).
Moreover, new hypotheses that are derived by the experiment can be added to the model. </li>
<li><strong>Update the mapping of hypotheses to experiments:</strong> the developer removes all
mappings between hypotheses and experiments which do not provide further evidence gain adds new
mappings which are derived from the experiment. At every adaptation of the model, save the existing
model together with the results of the experiments to provide traceability. The adaptation phase is
repeated until no experiment that can improve the evidence in the hypotheses. </li>
</ol>
<img src="assets/hypomomap-notation.png" class="d-block w-100" alt="Check Conformance">
</div>
</main>
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { HypomomapExplanationComponent } from './hypomomap-explanation.component';
describe('HypomomapExplanationComponent', () => {
let component: HypomomapExplanationComponent;
let fixture: ComponentFixture<HypomomapExplanationComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ HypomomapExplanationComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(HypomomapExplanationComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-hypomomap-explanation',
templateUrl: './hypomomap-explanation.component.html',
styleUrls: ['./hypomomap-explanation.component.css']
})
export class HypomomapExplanationComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
......@@ -8,14 +8,14 @@ import PouchDBFind from 'pouchdb-find';
/**
* The PouchdbService handles the complete interaction of the web application with the PouchDB or CouchDB.
* The specific database can be set in the constructor of the class
*
*
* @author Sebastian Gottschalk
*/
export class PouchdbService {
db: PouchDB.Database;
// Use "http://localhost:4200/database" for connecting to a CouchDB specified in the proxy.conf.json
databaseName = "bmdl-feature-modeler"
databaseName = "http://localhost:4200/database"
/**
* Create a new instance of the PouchdbService.
......@@ -25,7 +25,7 @@ export class PouchdbService {
// Create a PouchDB connection
PouchDB.plugin(PouchDBFind)
// Change to this.db = new PouchDB('http://server:port/yourdatabase'); to connect to a couchdb database
this.db = new PouchDB(this.databaseName);
this.db = new PouchDB(this.databaseName);
// Check database connection
this.db.info().then(function (info) {
......@@ -45,7 +45,7 @@ export class PouchdbService {
selector: {},
fields: ['_id', 'name', 'description']
});
//return this.db.query(function (doc: any, emit) {
// emit(doc._id, { name: doc.name, description: doc.description })
//}, {});
......@@ -233,7 +233,7 @@ export class PouchdbService {
result['businessModelMap'][result['businessModelIdCounter']] = adaptationName;
result['businessModelIdCounter'] = result['businessModelIdCounter'] + 1;
// Traverse features
var featureStack: any[] = []
......@@ -247,7 +247,7 @@ export class PouchdbService {
var f = featureStack.pop();
if(f['businessModelIds'].includes(parseInt(businessModelId)) && !f['businessModelIds'].includes(parseInt(newBusinessModelId))) {
f['businessModelIds'].push(newBusinessModelId)
}
}
// Add new features to the stack
if (f.features) {
......@@ -637,7 +637,7 @@ export class PouchdbService {
* Helper function to update the feature model.
* @param featureModel feature model
* @param featureId id of the feature
* @param modificationFunction function to modify feature
* @param modificationFunction function to modify feature
*/
private updateFeatureHandler(featureModel: any, featureId: number, modificationFunction: (feature: number) => any): any {
var result = featureModel;
......@@ -694,7 +694,7 @@ export class PouchdbService {
* Create a new feature from parameters.
* @param id id of the feature
* @param name name of the feature
* @param isMandatory is the feature mandatory
* @param isMandatory is the feature mandatory
* @param hasOrSubfeatures has the feature or subfeatures
* @param hasXOrSubfature has the feature xor subfeature
* @param isDeletetable is the feature deletable
......@@ -4677,6 +4677,6 @@ export class PouchdbService {
}, error => {
return error;
});
});
}
}
......@@ -9,7 +9,7 @@
<div class="my-3 p-3 bg-white rounded shadow-sm">
<h6 class="border-bottom border-gray pb-2 mb-0">Explanation of the BMDL Modeler</h6>
<p class="mt-2">The BMDL Feature Modeler is a tool to describe Business Models through a combination of the Business Model Canvas (BMC) and a Software Product Line (SPL). We call this concept Business Model Decision Line (BMDL), where each feature describes a single business model decision. Features can be ordered in hierarchies and marked as mandatory or optional for the business models. Moreover, there can be Or (at least one sub-feature is selected) and Alternate (exactly one sub-feature is selected) relationships between a parent and a child feature. To refine the business models, cross-tree constraints for requiring and excluding dependencies can be made.</p>
<p>The current state of the tool allows the creation of feature models and the deriving of business models. New business model decisions of single business models are synchronized with the corresponding feature model to ensure consistency. Moreover, the conformance of business models can be checked with the feature model and occurring conformance errors are explained.</p>
<p>The current state of the tool allows the creation of feature models and the deriving of business models. New business model decisions of single business models are synchronized with the corresponding feature model to ensure consistency. Moreover, the conformance of business models can be checked with the feature model and occurring conformance errors are explained.</p>
</div>
<div class="my-3 p-3 bg-white rounded shadow-sm">
......@@ -43,8 +43,8 @@
<p>In the third step, the business developer can check the conformance between feature model and business model.</p>
</div>
</ng-template>
</ngb-carousel>
</ngb-carousel>
<p class="mt-2">
Information about the execution steps:
</p>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment