Otto-von-Guericke-Universität Magdeburg School of Computer Science Department of Technical and Business Information Systems Diplomarbeit Aspect-Oriented Refactoring of Berkeley DB Author: Christian Kästner February 7,2007 Advisors: Prof. Dr. rer. nat. habil. Gunter Saake UniversityofMagdeburg SchoolofComputer Science Department ofTechnical andBusiness Information Systems P.O.Box4120,D–39016 Magdeburg, Germany Prof. Don Batory TheUniversity ofTexasatAustin Department ofComputerSciences 2.124 TaylorHall,Austin,Texas78712, USA Kästner,Christian: Aspect-OrientedRefactoringofBerkeleyDB Diplomarbeit,Otto-von-Guericke-UniversitätMagdeburg,2007. CONTENTS I Contents Contents i ListofFigures v ListofTables vii ListofAbbreviations ix 1 Introduction 1 1.1 CaseStudy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.1 Scope andDelimitation . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.2 BerkeleyDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 StructureofthisThesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 Background 7 2.1 ArchitectureofBerkeleyDB . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Refactoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 Feature-OrientedProgramming . . . . . . . . . . . . . . . . . . . . . . . . 14 2.4 Aspect-OrientedProgramming . . . . . . . . . . . . . . . . . . . . . . . . 16 2.5 AspectJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.6 AHEAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3 Refactoring Berkeley DBwithAspectJ 25 3.1 Infrastructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.2 IdentificationofFeatures . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3 TheRefactoring Process . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.3.1 Staticintroductions . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3.2 Methodrefinements . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3.3 Homogeneousextensions . . . . . . . . . . . . . . . . . . . . . . . 38 3.3.4 Accessinglocalvariables . . . . . . . . . . . . . . . . . . . . . . . 39 3.3.5 VerifyingCorrectness . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.4 Refactored Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.4.1 Feature size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 II CONTENTS 3.4.2 Verylarge features . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.5 FeatureModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4 Expressiveness ofAspectJLanguage Constructs 53 4.1 AspectJLanguageConstructs . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.1.1 StaticIntroductions . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.1.2 Methodextensions . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.1.3 Callextensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.1.4 Conditionalextensions . . . . . . . . . . . . . . . . . . . . . . . . 54 4.1.5 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4.1.6 Homogeneousextensions . . . . . . . . . . . . . . . . . . . . . . . 56 4.1.7 Otherlanguageconstructs . . . . . . . . . . . . . . . . . . . . . . 59 4.2 LanguageLimitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.2.1 StatementExtensionProblem . . . . . . . . . . . . . . . . . . . . 60 4.2.2 Parameter IntroductionandPassingProblem . . . . . . . . . . . . 61 4.2.3 ExceptionIntroductionProblem . . . . . . . . . . . . . . . . . . . 68 4.2.4 LocalVariablesAccessProblem . . . . . . . . . . . . . . . . . . . 69 4.2.5 AdviseObjectsProblem . . . . . . . . . . . . . . . . . . . . . . . 72 4.2.6 Scope Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5 The Feature OptionalityProblem 79 5.1 DerivativeFeature Approach . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.1.1 Semanticvs. ImplementationDependencies . . . . . . . . . . . . . 82 5.1.2 ImplementingDerivatives . . . . . . . . . . . . . . . . . . . . . . 83 5.1.3 Scale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.2 OptionalWeavingApproach . . . . . . . . . . . . . . . . . . . . . . . . . 87 5.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 6 Feature Order 91 6.1 ObservationsonShared JoinPoints . . . . . . . . . . . . . . . . . . . . . . 92 6.2 ObservationsonAccidentalWeaving . . . . . . . . . . . . . . . . . . . . . 95 6.3 ObservationsonAspectExtensions . . . . . . . . . . . . . . . . . . . . . . 96 6.4 OtherProblemsofAspectJ’sWeaver . . . . . . . . . . . . . . . . . . . . . 97 6.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 7 Understandably andMaintainabilityofRefactored Features 99 7.1 AspectJSyntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 7.1.1 General Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.1.2 AdvancedPointcutsare HardtoUnderstand . . . . . . . . . . . . . 102 7.1.3 ComplexityandScale . . . . . . . . . . . . . . . . . . . . . . . . 104 7.2 CouplingofBase CodeandAspects . . . . . . . . . . . . . . . . . . . . . 106 7.3 FragilePointcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.3.1 ProblemDefinition . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.3.2 Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 7.3.3 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 7.4 ReadabilityoftheBase Code . . . . . . . . . . . . . . . . . . . . . . . . . 111 7.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 8 Related Work 113 9 Conclusion 117 9.1 FurtherWork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 9.2 ColoredIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 A The DimensionModel 125 Bibliography 129 IV LIST OF FIGURES V List of Figures 2.1 ArchitectureOverviewofBerkeleyDB. . . . . . . . . . . . . . . . . . . . 8 2.2 ExtractMethodRefactoringExample. . . . . . . . . . . . . . . . . . . . . 13 2.3 ExtractMethodRefactoring: EclipseDialog. . . . . . . . . . . . . . . . . 13 2.4 FeatureDiagramNotations. . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5 FeatureDiagramExample. . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6 guidslGrammarExample. . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.7 AspectJAspectExample. . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.8 AHEADFeature Modules. . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.9 Composed AHEADFeature Module. . . . . . . . . . . . . . . . . . . . . . 23 3.1 StaticintroductionsusingAspectJ’s ITMDs. . . . . . . . . . . . . . . . . . 32 3.2 DifferentVersionsofRefactored Introductions. . . . . . . . . . . . . . . . 34 3.3 ExtractSimpleMethodRefinement Refactoring. . . . . . . . . . . . . . . . 35 3.4 ExtractCallRefinementRefactoring. . . . . . . . . . . . . . . . . . . . . . 36 3.5 ExtractInnerMethodRefinementRefactoring. . . . . . . . . . . . . . . . . 37 3.6 RequiredAccesstoaLocalVariable. . . . . . . . . . . . . . . . . . . . . . 39 3.7 HookMethodtoAccessandChangeLocalVariables. . . . . . . . . . . . . 40 3.8 FeatureDiagramofBerkeleyDB. . . . . . . . . . . . . . . . . . . . . . . 47 3.9 guidslGrammarofBerkeleyDB. . . . . . . . . . . . . . . . . . . . . . . . 48 3.10 LoggingSubsystemFeatureDiagram. . . . . . . . . . . . . . . . . . . . . 49 3.11 I/OSubsystemFeature Diagram. . . . . . . . . . . . . . . . . . . . . . . . 49 4.1 ComparisonofConditionalandUnconditionalCrosscuts. . . . . . . . . . . 55 4.2 HomogeneousCrosscutsfortheTriggerLatchExtension. . . . . . . . . . . 57 4.3 ExampleoftheParameterIntroductionandPassingProblem. . . . . . . . . 62 4.4 Passinga ParameterwithacflowPointcut. . . . . . . . . . . . . . . . . . . 63 4.5 PassingParameterswithaParameterObject. . . . . . . . . . . . . . . . . . 65 4.6 PassingParameterswithapotentialAspectJExtension. . . . . . . . . . . . 68 4.7 ExceptionIntroductionProblematcallPointcuts. . . . . . . . . . . . . . . 70 4.8 PreventingAccesstoMemberVariable. . . . . . . . . . . . . . . . . . . . 71 4.9 CaptureLocalVariablefromCaller’sParameter. . . . . . . . . . . . . . . . 71 4.10 AccesstoLocalVariableswitha context Keyword. . . . . . . . . . . . . . 72 4.11 DifferentApproachestoAdviseanObject. . . . . . . . . . . . . . . . . . . 74 5.1 FeatureOptionalityExample. . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.2 ResolvingFeatureInteractions . . . . . . . . . . . . . . . . . . . . . . . . 80 5.3 DerivativefortheExample. . . . . . . . . . . . . . . . . . . . . . . . . . . 81 5.4 ResolvedStatisticsSubsystemFeature Diagram. . . . . . . . . . . . . . . . 82 5.5 ScaleofDerivativeFeatures. . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.6 AutomaticDerivativeSelectionusingaguidslGrammar. . . . . . . . . . . 87 5.7 OptionalAdviceExample. . . . . . . . . . . . . . . . . . . . . . . . . . . 88 6.1 FeatureOrderExamplewith SJP. . . . . . . . . . . . . . . . . . . . . . . . 93 6.2 DaemonThreadsCreationandShutdownOrder. . . . . . . . . . . . . . . . 94 6.3 AspectRecursion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 6.4 ErrorPropagation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 7.1 SyntaxComparison. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.2 PointcutComplexityDiagram. . . . . . . . . . . . . . . . . . . . . . . . . 105 7.3 FeatureSize vs. PointcutComplexity. . . . . . . . . . . . . . . . . . . . . 106 7.4 Aspect-awareExtractMethodRefactoring. . . . . . . . . . . . . . . . . . . 110 9.1 ColoredSource Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 9.2 ColoredIDEScreenshot. . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 A.1 QuantifiedInteractionbetweenDimensions. . . . . . . . . . . . . . . . . . 126 A.2 VariablesoftheDerivativeModel. . . . . . . . . . . . . . . . . . . . . . . 127 List of Tables 2.1 AspectJPointcutDesignatorsinAspectJ1.5. . . . . . . . . . . . . . . . . 20 3.1 UsedMetrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.2 FeatureSize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.3 FeatureDependencies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.1 HomogeneousDynamicExtensions. . . . . . . . . . . . . . . . . . . . . . 58 4.2 ExtensionsusedinRefactoringBerkeleyDB. . . . . . . . . . . . . . . . . 76 VIII
Description: