challenging bx as a software engineer: what is a problem? how much bx do we need? ekkart kindler

Post on 30-Dec-2015

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Challenging BX as a Software Engineer:What is a problem? How much BX do we need?

Ekkart Kindler

Ekkart KindlerMaslow’s hammer

If all we have is a hammer,everything looks like a nail!

2Challenging BX as a Software Engineer

w

Ekkart Kindler

3Challenging BX as a Software Engineer

Process / artifacts

PlaceTransition

1 source

1 target

Arc

*

PetriNet

Token

*

Node

PObject

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: %pluginNameBundle-SymbolicName: APetriNetEditorIn15Minutes.diagrBundle-Version: 1.0.0.qualifierBundle-ClassPath: .Bundle-Activator: PetriNets.diagram.part.PetriNetDiagrBundle-Vendor: %providerNameBundle-Localization: pluginExport-Package: PetriNets.diagram.edit.parts,PetriNets.diagram.part,PetriNets.diagram.providersRequire-Bundle: org.eclipse.core.runtime,org.eclipse.core.resources,org.eclipse.core.expressions,org.eclipse.jface,org.eclipse.ui.ide,org.eclipse.ui.views,org.eclipse.ui.navigator,org.eclipse.ui.navigator.resources,org.eclipse.emf.ecore,org.eclipse.emf.ecore.xmi,org.eclipse.emf.edit.ui,org.eclipse.gmf.runtime.emf.core,org.eclipse.gmf.runtime.emf.commands.core,org.eclipse.gmf.runtime.emf.ui.properties,org.eclipse.gmf.runtime.diagram.ui,org.eclipse.gmf.runtime.diagram.ui.properties,org.eclipse.gmf.runtime.diagram.ui.providers,org.eclipse.gmf.runtime.diagram.ui.providers.ide,org.eclipse.gmf.runtime.diagram.ui.render,org.eclipse.gmf.runtime.diagram.ui.resources.edorg.eclipse.gmf.runtime.diagram.ui.resources.eAPetriNetEditorIn15Minutes;visibility:=reexpor

package PetriNets.impl;

public class PetriNetImpl extends EObjectImpl implements PetriNet {protected EList<PetriNets.Object> object;

protected PetriNetImpl() {super();

}

protected EClass eStaticClass() {return PetriNetsPackage.Literals.PETRI_NET;

}

public EList<PetriNets.Object> getObject() {if (object == null) {

object = new EObjectContainmentEList<PetriNets.Object>(Petri}return object;

}

public NotificationChain eInverseRemove(InternalEObject otherEnd, intswitch (featureID) {

case PetriNetsPackage.PETRI_NET__OBJECT:return ((InternalEList<?>)getObject()).basicRemove(otherEn

}return super.eInverseRemove(otherEnd, featureID, msgs);

}

public Object eGet(int featureID, boolean resolve, boolean coreType) {switch (featureID) {

case PetriNetsPackage.PETRI_NET__OBJECT:return getObject();

}return super.eGet(featureID, resolve, coreType);

Manifest-Version: 1.0Bundle-ManifestVersion: 2Bundle-Name: %pluginNameBundle-SymbolicName: APetriNetEditorIn15Minutes.diagrBundle-Version: 1.0.0.qualifierBundle-ClassPath: .Bundle-Activator: PetriNets.diagram.part.PetriNetDiagrBundle-Vendor: %providerNameBundle-Localization: pluginExport-Package: PetriNets.diagram.edit.parts,PetriNets.diagram.part,PetriNets.diagram.providersRequire-Bundle: org.eclipse.core.runtime,org.eclipse.core.resources,org.eclipse.core.expressions,org.eclipse.jface,org.eclipse.ui.ide,org.eclipse.ui.views,org.eclipse.ui.navigator,org.eclipse.ui.navigator.resources,org.eclipse.emf.ecore,org.eclipse.emf.ecore.xmi,org.eclipse.emf.edit.ui,org.eclipse.gmf.runtime.emf.core,org.eclipse.gmf.runtime.emf.commands.core,org.eclipse.gmf.runtime.emf.ui.properties,org.eclipse.gmf.runtime.diagram.ui,org.eclipse.gmf.runtime.diagram.ui.properties,org.eclipse.gmf.runtime.diagram.ui.providers,org.eclipse.gmf.runtime.diagram.ui.providers.ide,org.eclipse.gmf.runtime.diagram.ui.render,org.eclipse.gmf.runtime.diagram.ui.resources.edorg.eclipse.gmf.runtime.diagram.ui.resources.eAPetriNetEditorIn15Minutes;visibility:=reexpor

package PetriNets.impl;

public class PetriNetImpl extends EObjectImpl implements PetriNet {protected EList<PetriNets.Object> object;

protected PetriNetImpl() {super();

}

protected EClass eStaticClass() {return PetriNetsPackage.Literals.PETRI_NET;

}

public EList<PetriNets.Object> getObject() {if (object == null) {

object = new EObjectContainmentEList<PetriNets.Object>(Petri}return object;

}

public NotificationChain eInverseRemove(InternalEObject otherEnd, intswitch (featureID) {

case PetriNetsPackage.PETRI_NET__OBJECT:return ((InternalEList<?>)getObject()).basicRemove(otherEn

}return super.eInverseRemove(otherEnd, featureID, msgs);

}

public Object eGet(int featureID, boolean resolve, boolean coreType) {switch (featureID) {

case PetriNetsPackage.PETRI_NET__OBJECT:return getObject();

}return super.eGet(featureID, resolve, coreType);

Ekkart KindlerPurpose of BX techniques

Which SE tasks, practices and development methods should our transformation techniquesbe applied for?

How much formality do they need? How much bi-directionality do they need?

What are the ”degrees” of bi-directionality?

Have lenses, TGGS, whatever the same ”degree” of bi-directionality?

4Challenging BX as a Software Engineer

Actually: how much can we

afford! cost / benefit

Ekkart KindlerExamples

”MDA model chain”: CIM, PIM, PSM, (Code)

Code generation / manual changes in code

Model (code) migration/evolution Model & instance co-migration/evolution

Traceability

Representation of ”added or forgotten” stuff(transformational vs. incremental MDA)

5Challenging BX as a Software Engineer

Ekkart KindlerMy Challenge

Clarify for your BX technique:Where in the development processdo you propose to use your technique?How much bi-directionality is needed?What is the (extra) cost?What is the (extra) benefit?

Do we have an adequate measure of bi-directionality?

6Challenging BX as a Software Engineer

(Ab)use of the term

case study!

top related