SlideShare a Scribd company logo
ASPECT-ORIENTED SOFTWARE
DEVELOPMENT
CONTENTS
21.1 The separation of concerns
21.2 Aspects, join points, and pointcuts
21.3 Software engineering with aspects
Prepared by Razık Can PAHALI, 15002697
OBJECTIVES
 Understand why the separation of concerns is a
good guiding principle for software development;
 Have been introduced to the fundamental ideas
underlying aspects and aspect-oriented software
development;
THE SEPARATION OF CONCERNS
 Organize your software so that each
element in the program does one thing
and one thing only.
 Class, method, procedure, etc.)
 AOSD uses a concept of
horizontal slices through
vertically-decomposed
software components.
Aspect Oriented Programming - AOP/AOSD
THERE ARE SEVERAL DIFFERENT TYPES OF
STAKEHOLDER CONCERN:
 Functional concerns,
 Quality of service concerns,
 Policy concerns
 System concerns,
 Organizational concerns.
1.The Separation of Concerns
• The separation of concerns is a key principle of software design and
implementation.
• It means that you should organize your software so that each
element in the program
(class, method, procedure, etc.) does one thing and one thing only.
• With all this taken into account, maintenance and updating will be
easier.
• When changes are required, they are localized to a small number of
elements
• Although it is generally agreed that separating concerns is good software
engineering practice, it is harder to pin down what is actually meant by a
concern.
• Sometimes it is defined as a functional notion (i.e., a concern is some element
of functionality in a system).
• Alternatively it may be defined as any piece of interest or focus in a program.
• According to Jacobson and Ng (2004), concerns are really reflections of the
system requirements and priorities of stakeholders in the system.
• System requirements may be a concern ranging from users wanting a faster
response time from the system to stakeholders feeling inclusion of a
particular functionality is needed.
• According to Jacobson and Ng (2004), concerns are really
reflections of the system requirements and priorities of
stakeholders in the system.
• System requirements may be a concern ranging from users
wanting a faster response time from the system to stakeholders
feeling inclusion of a particular functionality is needed.
• A concern can therefore be defined as something that is of interest
or significance to a stakeholder or a group of stakeholders.
• The core concerns of a system are those functional concerns that relate to its
primarypurpose.
• Therefore, for a hospital patient information system, the core
functionalconcerns are the creation, editing, retrieval, and management of
patient records.
• In addition to core concerns, large systems also have secondary functional
concerns.
• These may involve functionality that shares information with the core
concerns, or which is required so that the system can satisfy its non-
functional requirements.
New Customer
Requirements
Account
Requirements
Customer
Management
Requirements
Security Requirements
Recovery Requirements
Core Concerns
Cross-cutting
Concerns
• The cross cutting example in Figure 1 is based on an internet banking system.
• This system has requirements relating to new users, management of existing
users and management of customers.
• All of these core concerns are associated with the systems primary functions-
the internet baking service
• However the system also has security requirements and recovery
requirements.
• These are cross-cutting concerns as they may influence the implementation
of all of the other system requirements.
 Programming language abstractions, such as procedures and
classes, are the mechanism that you normally use to organize
and structure the core concerns of a system. However, the
implementation of the core concerns in conventional
programming languages usually includes additional code to
implement the cross-cutting, functional, quality of service, and
policy concerns. This leads to two undesirable phenomena:
tangling and scattering.
• Tangling occurs when a module in a system includes code that
implements different system requirements.
• The related phenomenon of scattering occurs when the
implementation of a single concern (a logical requirement or set of
requirements) is scattered across several components in a
program.
• This is likely to occur when requirements related to secondary
functional concerns or policy concerns are implemented.
• Problems with scattering and tangling occur when the initial system requirements change.
For example, say new statistical data had to be collected in the patient record system.
• The changes to the system are not all located in one place and so you have to spend time
looking for the components in the system that have to be changed. You then have to change
each of these components to incorporate the required changes.
• This may be expensive because of the time required to analyze the components and then
make and test the changes.
• There is always the possibility that you will miss some code that should be changed and so
the statistics will be incorrect.
• Furthermore, as several changes have to be made, this increases the chances that you will
make a mistake and introduce errors into the software.
2.Aspects, join points,
and pointcuts
TERMINOLOGY USED IN ASPECT-ORIENTED SOFTWARE
ENGINEERING
Term Definition
advice The code implementing a concern.
aspect A program abstraction that defines a cross-cutting concern. It includes the
definition of a pointcut and the advice associated with that concern.
join point An event in an executing program where the advice associated with an aspect
may be executed.
join point model The set of events that may be referenced in a pointcut.
pointcut A statement, included in an aspect, that defines the join points where the
associated aspect advice should be executed.
weaving The incorporation of advice code at the specified join points by an aspect
weaver.
AN AUTHENTICATION ASPECT
aspect authentication
{
before: call (public void update*(..)) // this is a pointcut
{
// this is the advice that should be executed when woven into
// the executing system
int tries = 0 ;
string userPassword = Password.Get ( tries );
while (tries <3 && userPassword != thisUser.password ( ) )
{
// allow 3 tries to get the password right
tries = tries + 1 ;
userPassword = Password.Get ( tries ) ;
}
if (userPassword != thisUser.password ( )) then
//if password wrong, assume user has forgotten to logout
System.Logout (thisUser.uid) ;
}
} // authentication
ASPECTJ - JOIN POINT MODEL
 Call events
 Calls to a method or constructor
 Execution events
 Execution of a method or constructor
 Initialisation events
 Class or object initialisation
 Data events
 Accessing or updating a field
 Exception events
 The handling of an exception
POINTCUTS
 Identifies the specific events with which advice should be
associated.
 Examples of contexts where advice can be woven into a program
 Before the execution of a specific method
 After the normal or exceptional return from a method
 When a field in an object is modified
ASPECT WEAVING
 Aspect weavers process source code and weave the aspects into
the program at the specified pointcuts.
 Three approaches to aspect weaving
 Source code pre-processing
 Link-time weaving
 Dynamic, execution-time weaving
ASPECT WEAVING CONT.
3.Software engineering
with aspects
TYPES OF EXTENSION
o Secondary functional extensions
o Policy extensions
o Quality of service extensions
o Infrastructure extensions
CONCERN-ORIENTED REQUIREMENTS ENGINEERING
 It’s important to separate concerns while determining the
requirements engineering.
 Requirements for the core system as well as requirements
for the system extensions should be identified.
Aspect Oriented Programming - AOP/AOSD
 Apart from secondary functional requirements, there are cross-
cutting concerns which reflect policy and quality of service
non-functional requirements that apply to the system as a whole.
 Having too many concerns or extensions to the system is not
recommended as it might lead to a system design that does not
conform to its quality of service requirements.
ASPECT-ORIENTED DESIGN/PROGRAMMING
 Aspect-oriented design
 The process of designing a system that makes use of aspects to
implement the cross-cutting concerns and extensions that are
identified during the requirements engineering process.
 Aspect-oriented programming
 The implementation of an aspect-oriented design using an
aspect-oriented programming language such as AspectJ.
USE CASES FROM THE INVENTORY MANAGEMENT SYSTEM
A GENERIC ASPECT-ORIENTED DESIGN PROCESS
DESIGN ACTIVITIES
 Core system design where you design the system architecture to support the
core functionality of the system.
 Aspect identification and design Starting with the extensions identified in the
system requirements, you should analyze these to see if they are aspects in
themselves or if they should be broken down into several aspects.
 Composition design At this stage, you analyze the core system and aspect
designs to discover where the aspects should be composed with the core
system. Essentially, you are identifying the join points in a program at which
aspects will be woven.
AN ASPECT-ORIENTED DESIGN MODEL
PART OF A MODEL OF AN ASPECT
PROGRAM INSPECTION PROBLEMS
 To inspect a program (in a conventional language) effectively, you
should be able to read it from right to left and top to bottom.
 Aspects make this impossible as the program is a web rather than
a sequential document. You can’t tell from the source code where
an aspect will be woven and executed.
 Flattening an aspect-oriented program for reading is practically
impossible.
TESTING PROBLEMS WITH ASPECTS
 How should aspects be specified so that tests can be derived?
 How can aspects be tested independently of the base
system?
 How can aspect interference be tested?
 How can tests be designed so that all join points are executed
and appropriate aspect tests applied?

More Related Content

What's hot (20)

PPT
Different Approaches To Sys Bldg
USeP
 
PPT
Defect Testing in Software Engineering SE20
koolkampus
 
PPTX
Ch15-Software Engineering 9
Ian Sommerville
 
DOCX
Introduction to system analysis and design
Twene Peter
 
PPT
Chapter17 system implementation
Dhani Ahmad
 
PPT
Design Issue(Reuse) in Software Engineering SE14
koolkampus
 
PPT
Legacy Systems in Software Engineering SE26
koolkampus
 
PPTX
Ch4-Software Engineering 9
Ian Sommerville
 
PPT
Lecture 12 requirements modeling - (system analysis)
IIUI
 
PPSX
System implemantation
Jaipal Dhobale
 
PDF
Aspect Oriented Software Engineering
Abhay Pai
 
PPTX
Chap3 RE elicitation
Ian Sommerville
 
PPTX
analysis and design of information system
Renu Sharma
 
PPT
System analysis and design
Razan Al Ryalat
 
PPT
4.2 architecture introduction
ingo
 
PPTX
System Analysis and Design (SAD)
Sachith Perera
 
PPTX
INCOSE Systems Engineering Handbook and Changes to the CSEP/ASEP exam
systemsengineeringprep
 
PPTX
Software evolution and maintenance basic concepts and preliminaries
Moutasm Tamimi
 
PPTX
System analysis ITM3(1).pptx
Aram Mohammed
 
Different Approaches To Sys Bldg
USeP
 
Defect Testing in Software Engineering SE20
koolkampus
 
Ch15-Software Engineering 9
Ian Sommerville
 
Introduction to system analysis and design
Twene Peter
 
Chapter17 system implementation
Dhani Ahmad
 
Design Issue(Reuse) in Software Engineering SE14
koolkampus
 
Legacy Systems in Software Engineering SE26
koolkampus
 
Ch4-Software Engineering 9
Ian Sommerville
 
Lecture 12 requirements modeling - (system analysis)
IIUI
 
System implemantation
Jaipal Dhobale
 
Aspect Oriented Software Engineering
Abhay Pai
 
Chap3 RE elicitation
Ian Sommerville
 
analysis and design of information system
Renu Sharma
 
System analysis and design
Razan Al Ryalat
 
4.2 architecture introduction
ingo
 
System Analysis and Design (SAD)
Sachith Perera
 
INCOSE Systems Engineering Handbook and Changes to the CSEP/ASEP exam
systemsengineeringprep
 
Software evolution and maintenance basic concepts and preliminaries
Moutasm Tamimi
 
System analysis ITM3(1).pptx
Aram Mohammed
 

Similar to Aspect Oriented Programming - AOP/AOSD (20)

PPTX
Ch21.pptx
MohammedNouh7
 
PPTX
Ch21-Software Engineering 9
Ian Sommerville
 
PPTX
Aspect Oriented Programming
Rodger Oates
 
PPTX
Aspect oriented software engineering-draft
Abdelfattah Al Zaqqa
 
PPT
ASPECT ORIENTED PROGRAMING(aop)
kvsrteja
 
PDF
IRJET- A Design Approach for Basic Telecom Operation
IRJET Journal
 
PDF
Aspect Oriented Development
tyrantbrian
 
PPTX
Aspect Oriented Programming
Shreya Chatterjee
 
KEY
Enforcing Behavioral Constraints in Evolving Aspect-Oriented Programs
Raffi Khatchadourian
 
PPT
Aspect Oriented Software Development
Jignesh Patel
 
PDF
Developing secure software using Aspect oriented programming
IOSR Journals
 
PPTX
Aspect-oriented programming
MohamadHayeri1
 
PPTX
Software design for scientific applications
Priyanka Lal
 
PDF
Software Engineering with Objects (M363) Final Revision By Kuwait10
Kuwait10
 
PPTX
EContent_11_2024_04_24_08_30_24_Unit3_PPTpptx__2024_04_05_09_12_25.pptx
DevSavaliya1
 
PPT
Unit IV Software Engineering
Nandhini S
 
PPT
Aop2007
Tuhin_Das
 
PPT
Intro To AOP
elliando dias
 
PDF
MexADL
jccastrejon
 
Ch21.pptx
MohammedNouh7
 
Ch21-Software Engineering 9
Ian Sommerville
 
Aspect Oriented Programming
Rodger Oates
 
Aspect oriented software engineering-draft
Abdelfattah Al Zaqqa
 
ASPECT ORIENTED PROGRAMING(aop)
kvsrteja
 
IRJET- A Design Approach for Basic Telecom Operation
IRJET Journal
 
Aspect Oriented Development
tyrantbrian
 
Aspect Oriented Programming
Shreya Chatterjee
 
Enforcing Behavioral Constraints in Evolving Aspect-Oriented Programs
Raffi Khatchadourian
 
Aspect Oriented Software Development
Jignesh Patel
 
Developing secure software using Aspect oriented programming
IOSR Journals
 
Aspect-oriented programming
MohamadHayeri1
 
Software design for scientific applications
Priyanka Lal
 
Software Engineering with Objects (M363) Final Revision By Kuwait10
Kuwait10
 
EContent_11_2024_04_24_08_30_24_Unit3_PPTpptx__2024_04_05_09_12_25.pptx
DevSavaliya1
 
Unit IV Software Engineering
Nandhini S
 
Aop2007
Tuhin_Das
 
Intro To AOP
elliando dias
 
MexADL
jccastrejon
 
Ad

Recently uploaded (20)

PDF
System Center 2025 vs. 2022; What’s new, what’s next_PDF.pdf
Q-Advise
 
PDF
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
PDF
New Download FL Studio Crack Full Version [Latest 2025]
imang66g
 
PDF
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
PDF
Infrastructure planning and resilience - Keith Hastings.pptx.pdf
Safe Software
 
PPTX
Employee salary prediction using Machine learning Project template.ppt
bhanuk27082004
 
PPTX
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
PDF
Enhancing Healthcare RPM Platforms with Contextual AI Integration
Cadabra Studio
 
PPTX
Presentation about Database and Database Administrator
abhishekchauhan86963
 
PDF
AWS_Agentic_AI_in_Indian_BFSI_A_Strategic_Blueprint_for_Customer.pdf
siddharthnetsavvies
 
PDF
Troubleshooting Virtual Threads in Java!
Tier1 app
 
PDF
What companies do with Pharo (ESUG 2025)
ESUG
 
PPTX
Farrell__10e_ch04_PowerPoint.pptx Programming Logic and Design slides
bashnahara11
 
PDF
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
PPTX
TRAVEL APIs | WHITE LABEL TRAVEL API | TOP TRAVEL APIs
philipnathen82
 
PDF
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
PPTX
GALILEO CRS SYSTEM | GALILEO TRAVEL SOFTWARE
philipnathen82
 
PPT
Brief History of Python by Learning Python in three hours
adanechb21
 
PDF
Applitools Platform Pulse: What's New and What's Coming - July 2025
Applitools
 
PDF
10 posting ideas for community engagement with AI prompts
Pankaj Taneja
 
System Center 2025 vs. 2022; What’s new, what’s next_PDF.pdf
Q-Advise
 
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
New Download FL Studio Crack Full Version [Latest 2025]
imang66g
 
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
Infrastructure planning and resilience - Keith Hastings.pptx.pdf
Safe Software
 
Employee salary prediction using Machine learning Project template.ppt
bhanuk27082004
 
classification of computer and basic part of digital computer
ravisinghrajpurohit3
 
Enhancing Healthcare RPM Platforms with Contextual AI Integration
Cadabra Studio
 
Presentation about Database and Database Administrator
abhishekchauhan86963
 
AWS_Agentic_AI_in_Indian_BFSI_A_Strategic_Blueprint_for_Customer.pdf
siddharthnetsavvies
 
Troubleshooting Virtual Threads in Java!
Tier1 app
 
What companies do with Pharo (ESUG 2025)
ESUG
 
Farrell__10e_ch04_PowerPoint.pptx Programming Logic and Design slides
bashnahara11
 
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
TRAVEL APIs | WHITE LABEL TRAVEL API | TOP TRAVEL APIs
philipnathen82
 
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
GALILEO CRS SYSTEM | GALILEO TRAVEL SOFTWARE
philipnathen82
 
Brief History of Python by Learning Python in three hours
adanechb21
 
Applitools Platform Pulse: What's New and What's Coming - July 2025
Applitools
 
10 posting ideas for community engagement with AI prompts
Pankaj Taneja
 
Ad

Aspect Oriented Programming - AOP/AOSD

  • 1. ASPECT-ORIENTED SOFTWARE DEVELOPMENT CONTENTS 21.1 The separation of concerns 21.2 Aspects, join points, and pointcuts 21.3 Software engineering with aspects Prepared by Razık Can PAHALI, 15002697
  • 2. OBJECTIVES  Understand why the separation of concerns is a good guiding principle for software development;  Have been introduced to the fundamental ideas underlying aspects and aspect-oriented software development;
  • 3. THE SEPARATION OF CONCERNS  Organize your software so that each element in the program does one thing and one thing only.  Class, method, procedure, etc.)
  • 4.  AOSD uses a concept of horizontal slices through vertically-decomposed software components.
  • 6. THERE ARE SEVERAL DIFFERENT TYPES OF STAKEHOLDER CONCERN:  Functional concerns,  Quality of service concerns,  Policy concerns  System concerns,  Organizational concerns.
  • 8. • The separation of concerns is a key principle of software design and implementation. • It means that you should organize your software so that each element in the program (class, method, procedure, etc.) does one thing and one thing only. • With all this taken into account, maintenance and updating will be easier. • When changes are required, they are localized to a small number of elements
  • 9. • Although it is generally agreed that separating concerns is good software engineering practice, it is harder to pin down what is actually meant by a concern. • Sometimes it is defined as a functional notion (i.e., a concern is some element of functionality in a system). • Alternatively it may be defined as any piece of interest or focus in a program. • According to Jacobson and Ng (2004), concerns are really reflections of the system requirements and priorities of stakeholders in the system. • System requirements may be a concern ranging from users wanting a faster response time from the system to stakeholders feeling inclusion of a particular functionality is needed.
  • 10. • According to Jacobson and Ng (2004), concerns are really reflections of the system requirements and priorities of stakeholders in the system. • System requirements may be a concern ranging from users wanting a faster response time from the system to stakeholders feeling inclusion of a particular functionality is needed. • A concern can therefore be defined as something that is of interest or significance to a stakeholder or a group of stakeholders.
  • 11. • The core concerns of a system are those functional concerns that relate to its primarypurpose. • Therefore, for a hospital patient information system, the core functionalconcerns are the creation, editing, retrieval, and management of patient records. • In addition to core concerns, large systems also have secondary functional concerns. • These may involve functionality that shares information with the core concerns, or which is required so that the system can satisfy its non- functional requirements.
  • 13. • The cross cutting example in Figure 1 is based on an internet banking system. • This system has requirements relating to new users, management of existing users and management of customers. • All of these core concerns are associated with the systems primary functions- the internet baking service • However the system also has security requirements and recovery requirements. • These are cross-cutting concerns as they may influence the implementation of all of the other system requirements.
  • 14.  Programming language abstractions, such as procedures and classes, are the mechanism that you normally use to organize and structure the core concerns of a system. However, the implementation of the core concerns in conventional programming languages usually includes additional code to implement the cross-cutting, functional, quality of service, and policy concerns. This leads to two undesirable phenomena: tangling and scattering.
  • 15. • Tangling occurs when a module in a system includes code that implements different system requirements. • The related phenomenon of scattering occurs when the implementation of a single concern (a logical requirement or set of requirements) is scattered across several components in a program. • This is likely to occur when requirements related to secondary functional concerns or policy concerns are implemented.
  • 16. • Problems with scattering and tangling occur when the initial system requirements change. For example, say new statistical data had to be collected in the patient record system. • The changes to the system are not all located in one place and so you have to spend time looking for the components in the system that have to be changed. You then have to change each of these components to incorporate the required changes. • This may be expensive because of the time required to analyze the components and then make and test the changes. • There is always the possibility that you will miss some code that should be changed and so the statistics will be incorrect. • Furthermore, as several changes have to be made, this increases the chances that you will make a mistake and introduce errors into the software.
  • 18. TERMINOLOGY USED IN ASPECT-ORIENTED SOFTWARE ENGINEERING Term Definition advice The code implementing a concern. aspect A program abstraction that defines a cross-cutting concern. It includes the definition of a pointcut and the advice associated with that concern. join point An event in an executing program where the advice associated with an aspect may be executed. join point model The set of events that may be referenced in a pointcut. pointcut A statement, included in an aspect, that defines the join points where the associated aspect advice should be executed. weaving The incorporation of advice code at the specified join points by an aspect weaver.
  • 19. AN AUTHENTICATION ASPECT aspect authentication { before: call (public void update*(..)) // this is a pointcut { // this is the advice that should be executed when woven into // the executing system int tries = 0 ; string userPassword = Password.Get ( tries ); while (tries <3 && userPassword != thisUser.password ( ) ) { // allow 3 tries to get the password right tries = tries + 1 ; userPassword = Password.Get ( tries ) ; } if (userPassword != thisUser.password ( )) then //if password wrong, assume user has forgotten to logout System.Logout (thisUser.uid) ; } } // authentication
  • 20. ASPECTJ - JOIN POINT MODEL  Call events  Calls to a method or constructor  Execution events  Execution of a method or constructor  Initialisation events  Class or object initialisation  Data events  Accessing or updating a field  Exception events  The handling of an exception
  • 21. POINTCUTS  Identifies the specific events with which advice should be associated.  Examples of contexts where advice can be woven into a program  Before the execution of a specific method  After the normal or exceptional return from a method  When a field in an object is modified
  • 22. ASPECT WEAVING  Aspect weavers process source code and weave the aspects into the program at the specified pointcuts.  Three approaches to aspect weaving  Source code pre-processing  Link-time weaving  Dynamic, execution-time weaving
  • 25. TYPES OF EXTENSION o Secondary functional extensions o Policy extensions o Quality of service extensions o Infrastructure extensions
  • 26. CONCERN-ORIENTED REQUIREMENTS ENGINEERING  It’s important to separate concerns while determining the requirements engineering.  Requirements for the core system as well as requirements for the system extensions should be identified.
  • 28.  Apart from secondary functional requirements, there are cross- cutting concerns which reflect policy and quality of service non-functional requirements that apply to the system as a whole.  Having too many concerns or extensions to the system is not recommended as it might lead to a system design that does not conform to its quality of service requirements.
  • 29. ASPECT-ORIENTED DESIGN/PROGRAMMING  Aspect-oriented design  The process of designing a system that makes use of aspects to implement the cross-cutting concerns and extensions that are identified during the requirements engineering process.  Aspect-oriented programming  The implementation of an aspect-oriented design using an aspect-oriented programming language such as AspectJ.
  • 30. USE CASES FROM THE INVENTORY MANAGEMENT SYSTEM
  • 31. A GENERIC ASPECT-ORIENTED DESIGN PROCESS
  • 32. DESIGN ACTIVITIES  Core system design where you design the system architecture to support the core functionality of the system.  Aspect identification and design Starting with the extensions identified in the system requirements, you should analyze these to see if they are aspects in themselves or if they should be broken down into several aspects.  Composition design At this stage, you analyze the core system and aspect designs to discover where the aspects should be composed with the core system. Essentially, you are identifying the join points in a program at which aspects will be woven.
  • 34. PART OF A MODEL OF AN ASPECT
  • 35. PROGRAM INSPECTION PROBLEMS  To inspect a program (in a conventional language) effectively, you should be able to read it from right to left and top to bottom.  Aspects make this impossible as the program is a web rather than a sequential document. You can’t tell from the source code where an aspect will be woven and executed.  Flattening an aspect-oriented program for reading is practically impossible.
  • 36. TESTING PROBLEMS WITH ASPECTS  How should aspects be specified so that tests can be derived?  How can aspects be tested independently of the base system?  How can aspect interference be tested?  How can tests be designed so that all join points are executed and appropriate aspect tests applied?