Download presentation
Presentation is loading. Please wait.
Published byJoanna Hawkins Modified over 9 years ago
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?
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.