Post on 30-Dec-2015
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!