Presentation is loading. Please wait.

Presentation is loading. Please wait.

Using Aspects to Support the Software Process: XP over Eclipse Oren Mishali and Shmuel Katz Technion, Israel Institute of Technology.

Similar presentations


Presentation on theme: "Using Aspects to Support the Software Process: XP over Eclipse Oren Mishali and Shmuel Katz Technion, Israel Institute of Technology."— Presentation transcript:

1 Using Aspects to Support the Software Process: XP over Eclipse Oren Mishali and Shmuel Katz Technion, Israel Institute of Technology

2 The idea …

3 Aspects for Software Process support 1/14 Software product SP-aspects support the Software Process (SP) Are woven into the development environment

4 Process management support The problem: (defined process) – (actual process) > 0 The solution: Software Process Management SP-aspects add management support The use of AOP for that purpose is novel Flexible support, no scattering and tangling 2/14

5 Process modeling support A need for a formal abstract representation of the process Facilitates automation, helps to define the process Promotes process understanding, training … SP-aspects can be a process model A novel non-functional role of aspects Special design considerations 3/14

6 Our Vision …

7 SP-aspects repository Supports different development methodologies SP-aspects use the ontology of the methodology key-events, entities, activities, predicates Platform-independent, general and abstract A variety of concrete forms Users can generate concrete SP-aspects 4/14

8 Generating concrete SP-aspects 1. Specify Methodology & Platform 2. Choose refinements to the abstract parts e.g. activity part  management strategy Measurement Enforcement Automation 5/14

9 So far… SP-aspects Repository –Generator Using Aspects to Support the Software Process: XP over Eclipse

10 A case-study: XP over Eclipse Extreme Programming (XP) Values Communication, feedback, simplicity and courage Basic-principles e.g. ‘ rapid feedback ’, ‘ honest measurement ’ Practices e.g. ‘ pair programming ’, ‘ test first ’, ‘ collective ownership ’ 6/14

11 A case-study: XP over Eclipse Extreme Programming (XP) Values Communication, feedback, simplicity and courage Basic-principles e.g. ‘ rapid feedback ’, ‘ honest measurement ’ Practices e.g. ‘ pair programming ’, ‘ test first ’, ‘ collective ownership ’ XP-aspects are defined using AspectJ Prototype implementation over Eclipse 6/14

12 An Example …

13 Test-first Tests should be written before the code Is not an easy practice TestFirst aspect: Upon creation of a coding-element there should already be a corresponding unit-test 7/14

14 public abstract aspect TestFirst { protected abstract pointcut creationOfUnitTests(UnitTest test); protected abstract pointcut creationOfCodingElements(CodingElement element); after(UnitTest test): creationOfUnitTests(test){ existingUnitTests.add(test); } before(CodingElement element): creationOfCodingElements(element){ if(!hasUnitTest(element, existingUnitTests)) disapproval(element); } protected abstract boolean hasUnitTest(...); protected abstract void disapproval(...); … } Ontology: Key-events Predicates Activities Entities 8/14

15 public abstract aspect TestFirst { protected abstract pointcut creationOfUnitTests(UnitTest test); protected abstract pointcut creationOfCodingElements(CodingElement element); after(UnitTest test): creationOfUnitTests(test){ existingUnitTests.add(test); } before(CodingElement element): creationOfCodingElements(element){ if(!hasUnitTest(element, existingUnitTests)) disapproval(element); } protected abstract boolean hasUnitTest(...); protected abstract void disapproval(...); … } Ontology: Key-events Predicates Activities Entities 8/14

16 public abstract aspect TestFirst { protected abstract pointcut creationOfUnitTests(UnitTest test); protected abstract pointcut creationOfCodingElements(CodingElement element); after(UnitTest test): creationOfUnitTests(test){ existingUnitTests.add(test); } before(CodingElement element): creationOfCodingElements(element){ if(!hasUnitTest(element, existingUnitTests)) disapproval(element); } protected abstract boolean hasUnitTest(...); protected abstract void disapproval(...); … } Ontology: Key-events Predicates Activities Entities 8/14

17 public abstract aspect TestFirst { protected abstract pointcut creationOfUnitTests(UnitTest test); protected abstract pointcut creationOfCodingElements(CodingElement element); after(UnitTest test): creationOfUnitTests(test){ existingUnitTests.add(test); } before(CodingElement element): creationOfCodingElements(element){ if(!hasUnitTest(element, existingUnitTests)) disapproval(element); } protected abstract boolean hasUnitTest(...); protected abstract void disapproval(...); … } Ontology: Key-events Predicates Activities Entities 8/14

18 public abstract aspect TestFirst { protected abstract pointcut creationOfUnitTests(UnitTest test); protected abstract pointcut creationOfCodingElements(CodingElement element); after(UnitTest test): creationOfUnitTests(test){ existingUnitTests.add(test); } before(CodingElement element): creationOfCodingElements(element){ if(!hasUnitTest(element, existingUnitTests)) disapproval(element); } protected abstract boolean hasUnitTest(...); protected abstract void disapproval(...); … } Ontology: Key-events Predicates Activities Entities 8/14

19 XP-Elements: public interface XPElement { public boolean isArtifact(); public String getName();... } public interface Artifact extends XPElement { public static final int PLANNING = 1; public static final int DESIGN = 2; public static final int CODING = 3; public static final int TESTING = 4;... public int getPhase();... } public interface CodingElement extends Artifact { public static final int CLASS = 1; public static final int METHOD = 2;... public int getKind();... } public interface PairProgrammers extends XPElement { public String getPilotName(); public String getNavigatorName();... } 9/14

20 A reminder… “SP-aspects have abstract and general definition and can be realized in a variety of concrete forms”

21 public abstract aspect TestFirst { protected abstract pointcut creationOfUnitTests(UnitTest test); protected abstract pointcut creationOfCodingElements(CodingElement element); after(UnitTest test): creationOfUnitTests(test){ existingUnitTests.add(test); } before(CodingElement element): creationOfCodingElements(element){ if(!hasUnitTest(element, existingUnitTests)) disapproval(element); } … } What kind of coding-elements are affected? What kind of management strategy is taken? 10/14

22 EclipseTestFirst extends TestFirst Upon creation of a coding-element there should already be a corresponding unit-test 11/14

23 EclipseTestFirst extends TestFirst Upon creation of a Java class there should already be a corresponding JUnit test-case named Test{ClassName} disapproval( … ) enforces the practice XP-Elements are connected using inter-type declarations The weaving is done using AJEER Load-time weaving 11/14

24 Implementation notes Finding the join-points is difficult Join-points are not extension-points XP-aspects can be changed The way that abstract policies are realized Modifications of the underlying environment 12/14

25 Related work Process Centered Engineering Environments (PCEs) Consider a process model as an input No seamless integration Eclipse-based solutions AOP and the software process 13/14

26 Aspects for software process support Aspects for XP over Eclipse are only one case-study RUP-aspects … A construction of a fuller set for XP has begun Refactoring, Continuous integration Preliminary experiments with users Enforcement can be irritating Automation is most popular Except setup, XP-aspects do not affect service 14/14

27 Thanks… Questions?


Download ppt "Using Aspects to Support the Software Process: XP over Eclipse Oren Mishali and Shmuel Katz Technion, Israel Institute of Technology."

Similar presentations


Ads by Google