Upload
mksong
View
178
Download
1
Tags:
Embed Size (px)
Citation preview
Facilitating Maintenance and Evolution ofNon-Functional Concerns (NFCs) in
Modern Enterprise Applications
Facilitating Maintenance and Evolution ofNon-Functional Concerns (NFCs) in
Modern Enterprise Applications
Myoungkyu Song
SW Innovations Lab, Dept. of Computer Science, Virginia Tech
Dr. Eli Tilevich, Chair Virginia TechDr. Stephen H. Edwards Virginia TechDr. Dennis G. Kafura Virginia TechDr. Barbara G. Ryder Virginia TechDr. Kwangkeun Yi Seoul National Univ.,
South KoreaApril, 28 2011, 2225@KWII
Committee Members
Preliminary Dissertation Proposal Exam
SW I-Lab
Computer Science @Virginia Tech 2April. 28 2011
BackgroundMetadata
Annotations
@Table
C# Attributes[Author ( …
XML<column=… <field=…/>
Confi-gure
Non-Functional Concerns
Security Testing
Persistence FaultTolerance
Functional Concerns
SourceCode
IntermediateRepresentation
(Bytecode)
Compiler
EnterpriseApplication
Computer Science @Virginia Tech 3April. 28 2011
Business Logic
NFC Example: Persistence
public class ManagerBean extends javax.ejb.EntityBean { private Long orderId; private String status;
public ManagerBean(){...}...}
<entity><class name=“ManagerBean” table=“Manager”><field name=“orderId” primary-key=“true”> <column name=“ORDERID”/> </field> <field name=“status”> <column name=“STATUS”/> </field> ...</entity>
+Metadata (XML)
Computer Science @Virginia Tech 4April. 28 2011
Problem: Address maintenance and evolution challenges
of implementing non-functional concerns (NFCs) declaratively
Thesis statement: Domain-specific languages can facilitate the
maintenance and evolution of NFC implementations in modern enterprise applications
Dissertation Objective
Computer Science @Virginia Tech 5April. 28 2011
Background: Goal 1Metadata
Annotation
@Table
C# Attributes[Author ( …
XML<column=… <field=…/>
Confi-gure
Non-Functional Concerns
Security Testing
Persistence FaultTolerance
Functional Concerns
SourceCode
IntermediateRepresentation
(Bytecode)
Compiler
EnterpriseApplication
Goal 1: Reusable Enterprise Metadata with PBSE
Computer Science @Virginia Tech 6April. 28 2011
Background: Goal 2Metadata
Annotation
@Table
C# Attributes[Author ( …
XML<column=… <field=…/>
Confi-gure
Non-Functional Concerns
Security Testing
Persistence FaultTolerance
Functional Concerns
SourceCode
IntermediateRepresentation
(Bytecode)
Compiler
EnterpriseApplication
Goal 2: Managing Transparent Program Transformations
Computer Science @Virginia Tech 7April. 28 2011
Background: Goal 3Metadata
Annotation
@Table
C# Attributes[Author ( …
XML<column=… <field=…/>
Confi-gure
Non-Functional Concerns
Security Testing
Persistence FaultTolerance
Functional Concerns
SourceCode
IntermediateRepresentation
(Bytecode)
Compiler
EnterpriseApplication
Goal 3: Reusing NFCs Across Languages
Computer Science @Virginia Tech 8April. 28 2011
Pattern-Based Structural Expressions (PBSE) A novel metadata language based on queries against the
main program; easier to program, understand, maintain, and reuse.
The Structural Enhancement Rule (SER) language A DSL for documenting bytecode enhancements;
enables source-level prog. understanding and debugging tools
Reusing NFCs Across Languages An approach to reusing NFCs across languages through
automated metadata translation
Contributions
Computer Science @Virginia Tech 9April. 28 2011
Background Completed Work
Reusable Enterprise Metadata with Pattern-Based Structural Expressions (PBSE) (Main research track paper at AOSD’10)
Enhancing Source-Level Programming Tools with An Awareness of Transparent Program Transformations (Main research track paper & SW demo at OOPSLA’09)
Research Plan Reusing NFCs Across Languages
Work Plan
Roadmap
Computer Science @Virginia Tech 10April. 28 2011
Business Logic
Limitation of Enterprise Metadata
public class ManagerEJB {
public String getOrderId(){return orderId;
}
public String getStatus(){return status;
}
@Entity@Table(name="Manager")
@Id @Column(name="orderId", primaryKey=true)
@Column(name="status", primaryKey=false)
+ Metadata (Java 5 Annotation)
Computer Science @Virginia Tech 11April. 28 2011
A PBSE Script Example01 Metadata MyJPA<Package p>02 Class c in p03 Where (public *EJB)04 c += @Table05 @Table.name = (c.name =~ s/EJB$//) 06 Column<c> 0708 Metadata Column<Class c>09 Field f in c10 Where (private * *)11 Method m in c 12 Where((“get” + (f.name =~ s/^[a-z]/[A-Z]/)) == m.name)13 m += @Column14 @Column.name = f.name15 Where(public * get*Id ())16 @Column.primKey = true17 m += @Id 18 MyJPA <"package1">
Computer Science @Virginia Tech 12April. 28 2011
Metadata module_name <[Package|Class|Method|Field|Parameter] val>
[Class|Method|Field|Parameter] iterator in parm Where (pattern) @Metadata @Metadata.property @Metadata.property = val val += @Metadata ~s / [^] old_val [$] / new_val
PBSE Constructs
Computer Science @Virginia Tech 13April. 28 2011
Programmable Use OO and declarative query programming
Understandable Encode relationship between program constructs and
their metadata Maintainable
Express explicit structural information Reusable
Leverage naming conventions of framework depen-dent code
Pattern-Based Structural Expressions
Computer Science @Virginia Tech 14April. 28 2011
Background Completed Work
Reusable Enterprise Metadata with Pattern-Based Structural Expressions (Main research track paper at AOSD’10)
Enhancing Source-Level Programming Tools with An Awareness of Transparent Program Transformations(Main research track paper & SW demo at OOPSLA’09)
Research Plan Reusing NFCs Across Languages
Work Plan
Roadmap
April. 28 2011 Computer Science @Virginia Tech 15
public void displayMaxMortgageEligibility
(mortgage.Bank$Display, double);
Code:
...
invokestatic // jdoGetsalaryLevel;
aload_0
invokestatic // jdoGetcreditLevel;
...
invokevirtual // calcMaxMortgage
...
invokevirtual // getMortgageField
Example: Mortgage Authorization Application
Example: Mortgage Authorization Application
Difficult to find errors. Hinder source-level Prog. tools.
public void displayMaxMortgageEligibility
(Display display, double projectedIn-crease) {
...
double maxMortgage =
calcMaxMortgage(salaryLevel, creditLevel);
...
FrameField mortgageField =
display.getMortgageField();
mortgageField.setVal(maxMortgage);
...
}
April. 28 2011 Computer Science @Virginia Tech – OOPSLA 2009 16
Program JDO Using SUPER_JDO_SER
Begin
EnhClass = OrgClass
EnhClass.AddInterface (“javax.jdo.spi.PersistenceCapable”)
Var Pattern fieldP
Begin
modifiers = (“private” or “protected”) and not “static”
End
Var Iterator fieldIter = OrgClass.Fields(fieldP)
EnhClass.AddMethod(FieldSetReplacer(“jdoSet”, fieldIter))
EnhClass.AddMethod(FieldGetReplacer(“jdoGet”, fieldIter))
End
A SER Script Example
A SER Script Example
01
02
03
04
05
06
07
08
09
10
11
12
13
April. 28 2011 Computer Science @Virginia Tech 17
What is a structural enhancement? Large scale program transformations
Add, change, remove classes, methods, and fields Limited and well-defined method body changes
Replace field accesses with getter/setter Replace method calls with wrappers
Managing Bytecode Enhancements
Managing Bytecode Enhancements
April. 28 2011 Computer Science @Virginia Tech 18
Structural enhancements at the bytecode level Poorly understood, not properly documented Lack easy-to-understand expression medium
Our solution Structural Enhancements Rules (SER) Language
Domain Specific Language (DSL) for bytecode enhance-ments
Helps express ,understand, and maintain enhancements
Managing Bytecode Enhancements
Managing Bytecode Enhancements
April. 28 2011 Computer Science @Virginia Tech 19
AddClass [Add|Remove]SuperClass [Add|Remove]SuperInterface [Add|Remove]Method [Add|Remove]Field ReplicateMethod Field[Get|Set]Replacer Iterators Patterns
SER Constructs
SER Constructs
April. 28 2011 Computer Science @Virginia Tech 20
Leveraging SER for Maintenance
Leveraging SER for Maintenance
SER Interpreter
OriginalSource code
SERScript
EnhancementInformation
OriginalSource Code
EnhancedBytecode
SERParser
Src. code
Processor
Bytecode
Processor
Bytecode to
Src. MapSymbol
Table
Source Code Enhancement Program Constructs
April. 28 2011 Computer Science @Virginia Tech 21
Symbolic Debugger for Enhanced Bytecode
Symbolic Debugger for Enhanced Bytecode
A standard debugger : JDB
The changed method
The newly added methodsThe skip instruction
The reverse instruction
Our symbolic debugger
Computer Science @Virginia Tech 22April. 28 2011
Background Completed Work
Reusable Enterprise Metadata with Pattern-Based Structural Expressions
Enhancing Source-Level Programming Tools with An Awareness of Transparent Program Transformations
Research Plan Reusing NFCs Across Languages
Work Plan
Roadmap
Computer Science @Virginia Tech 23April. 28 2011
Metadata
Annotation
@Table
C# Attributes[Author ( …
XML<column=… <field=…/>
Confi-gure
Non-Functional Concerns
Security Testing
Persistence FaultTolerance
Functional Concerns
SourceCode
IntermediateRepresentation
(Bytecode)
Compiler
EnterpriseApplication
Emerging languages(ELs) cross-compiled to mainstream languages(MLs) NFCs, such as security, testing, and persistence
implemented in target MLs NFCs specified through metadata EL unable to access ML’s NFC implementations
EL programmers waste development effort reimplementing NFCs
A novel approach reusing NFC implementations across languages by
automatically translating metadata
Research Plan
Computer Science @Virginia Tech 24April. 28 2011
Step 1: PBSE Metadata Translation Framework
Step 2: PBSE Meta-metadata Step 3: Generative Visitor
Goals & Steps
PBSESource
Language
Programin SourceLanguage
1st
2nd
nth
PBSETarget
Language1...n
1st
2nd
nth
MetadataTarget
Language1...n
Programin TargetLanguage
Cross Compiler
Executable
NFCsFunctionalConcerns
1...n
PBSETranslator
MetadataTranslator
Computer Science @Virginia Tech 25April. 28 2011
Step 1:Metadata Translation Framework
Programin SourceLanguage
Programin TargetLanguage
1...n
Metadatain SourceLanguage
Metadatain TargetLanguage
1...n
ProgramCross-
Compile
MetadataCross-
Compile
<<tag>>
<<tag>>
Computer Science @Virginia Tech 26April. 28 2011
1. MetaMetadata PBSEJavaToXML<PBSE pbse>2. Where (Class c in pbse)3. @Table -> "<class/>"4. @Table.name -> "<class name=" + c.name + "/>"5. @Table.class -> "<class table=" + c.table + "/>"6. Where (Field f in pbse)7. @Field -> "<field/>"8. @Field.name -> "<field name=" + f.name + "/>"9. @Column -> "<column/>"10. @Column.name -> "<column name=" + f.column + "/>"
Step 2: PBSE meta-metadata
Mapping
Mapping
Computer Science @Virginia Tech 27April. 28 2011
Step 3: Generative Visitor<<interface>>
PBSEVistitor
+ visit(PBSEElementPackage elem)
+ visit(PBSEElementClass elem)
+ visit(PBSEElementField elem)
+ visit(PBSEElementMethod elem)
...
PBSEVisitorX10toJava
PBSEVisitorJavatoXML
PBSEVisitorJavatoAnnotation
PBSEVisitorX10toCpp
...
<<interface>>
PBSEElement
+ accept(PBSEVisitor visitor)
PBSEElementPackage
PBSEElementClass
...
Computer Science @Virginia Tech 28April. 28 2011
Step 3: Generative Visitor cont’d1. <jdo><package name=“packageName">2. <class table="ClassName"3. name="ClassNameModel" 4. ...>5. <field name=...>6. <column name=.../>7. </field>...
1. class PBSEVisitorJavaToXML extends PBSEVisitorAdaptor{2. void visit(...){3. ...4. if( elem.tagWith ("@Table")){ 5. out.write( JavaToXML.translate6. ("@Table","<class/>"));7. } else 8. if( elem.tagWith ("@Table.name")){ 9. out.write( JavaToXML.translate10. ("@Table.name","<class table=${value}/>"));11. } else 12. ...
Computer Science @Virginia Tech 29April. 28 2011
Reuse NFCs across languages Collaborate with IBM Research on X10
IBM Innovation Award 2010 Cross-compilation
X10 cross-compiles to Java & C++ Scala, Jython, and JRuby
Reuse NFCs of Testing: JUnit (Java Unit Testing Framework) & CppUnit
(C++ Unit Testing Framework) Transparent Persistence: JDO (Java Data Objects) &
ODB (ORM system for C++)
Evaluation Plan
Computer Science @Virginia Tech 30April. 28 2011
Reusing UnitTest Framework
1. public class Integrate {
2. static def computeArea(left:double, right:double) {3. return recEval(left, (left*left + 1.0) * left, 4. right, (right*right + 1.0) * right, 0);5. } 6. static def recEval(l:double,.. r:double,..) {7. // ..8. finish { 9. async {expr1 = recEval(c, fc, r, fr, ar); }; 10. expr2 = recEval(l, fl, c, fc, al);11. } 12. return expr1 + expr2;13. }}
The class to be tested
The method to be tested
1. public class IntegrateTest {2. var parm : double;3. var expt : double;4. var integrate : Integrate;
5. def this(parm : double, expt : double) {6. this.parm = parm;7. this.expt = expt;8. }9. public def testComputeArea() {10. val result = integrate.computeArea(0, this.parm);11. TUnit.assertEquals(this.expt, result);12. }13. public static def data() {14. val parm = new Array[double](0..1*0..2);15. parm(0, 0) = 2;16. parm(0, 1) = 6.000000262757339;...}}
Parameterizing
Computer Science @Virginia Tech 31April. 28 2011
Reusing UnitTest Framework: PBSE Spec.
1. Metadata UnitTest<Package p>2. Class c in p3. Where(public class *Test)4. c += @RunWith5. @RunWith.value = "Parameterized"6. TestMethod<c>7. Metadata TestMethod<Class c>8. Method m in c9. Where (public def init ())10. m += @Before11. Where (public def finish ())12. m += @After13. Where (public def test* ())14. m += @Test15. Where (public static def data ())16. m += @Parameters17. UnitTest<“package1">
cont’d
Parameterization
Computer Science @Virginia Tech 32April. 28 2011
Reusing Transparent Persistence1. public class Fmm3d{2. def getDirectEnergy() : Double{3. val model = new FmmModel();4. val directEnergy = finish (SumReducer()){5. ateach (p1 in locallyEssentialTrees) {6. var thisPlaceEnergy : Double = 0.0;7. for ([x1,y1,z1] in lowestLevelBoxes.dist(here)){8. val box1 = lowestLevelBoxes(x1,y1,z1) as FmmLeafBox;9. for ([atomIndex1] in 0..(box1.atoms.size()-1)){10. for (p in uList){11. for ([otherBoxAtomIndex] in 0..(boxAtoms.size-1)){12. thisPlaceEnergy += 13. atom1.charge * atom2Packed.charge / 14. atom1.centre.distance(atom2Packed.centre);15. }}}16. model.setModelId(id(box1.x,box1.y,box1.z));17. model.setEnergy(thisPlaceEnergy);18. //...19. TP.setFmmModelObj(model);
Long Comput-ation Part
TransparentlyPersistent
Computer Science @Virginia Tech 33April. 28 2011
NFCsCross-compile
Enable reuse of main stream language NFC implementations in emerging languages.
Research Plan: Summary
EmergingLanguage
ApplicationCross-
compiler
X LanguageBackgroundApplication
Y LanguageBackgroundApplication
Y LanguageNFCs
X LanguageNFCs
Metadat
a
Metadat
a
Metadat
a
Metadat
a
Metadat
a
Computer Science @Virginia Tech 34April. 28 2011
Problems: Metadata programming takes increasingly large
amounts of time and efforts Source code alone not sufficient to understand the
enhanced NFC implementations at intermediate level in modern applications
Cross-compiled source language inaccessible to the NFCs implemented by mainstream target ones
Significance cont’d
Computer Science @Virginia Tech 35April. 28 2011
The specific innovations: Pattern-Based Structural Expressions (PBSE)
A novel metadata format that is easier to author, understand, reuse, and maintain than existing metadata formats
Structural Enhancement Rule (SER) A DSL documenting intermediate code enhancements that
facilitates the understanding and debugging of NFC implementations
Automated metadata cross-translation Enable cross-compiled source language programs to reuse
target language NFC implementations
Significance
Computer Science @Virginia Tech 36April. 28 2011
Goal 1 & 2: published on 2 conferences Goal 3: will submit ICSE, ECOOP, OOPSLA ,
AOSD, or TOSEM
Work PlanThank you