Aspect-oriented programming yields new types of programming faults due to the introduction of new constructs for dealing with crosscutting concerns. To reveal aspect faults, this paper presents a framework for testing whether or not aspect-oriented programs conform to their state models. It supports two families of strategies (i.e. structure-oriented and property-oriented) for automated generation of aspect tests from aspect-oriented state models. A structure-oriented testing strategy derives tests and test code from an aspect-oriented state model to meet a given structural coverage criterion, such as state coverage, transition coverage, or round trip. A property-oriented testing strategy generates test code from the counterexamples of model checking. Two such strategies are checking an aspect-oriented state model against trap properties and checking mutants of aspect models against system properties. Mutation analysis of aspect-oriented programs is used to evaluate the effectiveness of these testing strategies. The experiments demonstrate that testing aspect-oriented programs against their state models can detect many aspect faults. The comparative evaluations also reveal that the structure-oriented and property-oriented testing strategies complement each other-some aspect faults were detected by the structure-oriented strategies, but not by the propertyoriented strategies and vice versa.Finite state machines have long been used for modeling and testing object-oriented programs. For example, a number of publications [6][7][8][9][10][11] have demonstrated that finite state models of individual classes and clusters of classes are effective formalisms for class testing and even integration testing of object-oriented programs. As AOP languages are typically built upon object-oriented languages (e.g. AspectJ is based on Java), finite state machines are also expected to be useful for testing aspect-oriented programs. As such, the objective of the research in this paper is to investigate how finite state models can be used to test aspect-oriented programs.This paper presents a framework, MACT (Model-based Aspect/class Checking and Testing), for testing whether or not aspect-oriented programs conform to their aspect-oriented state models. MACT provides explicit aspect-oriented notations (e.g. pointcut, advice, inter-model declarations, aspect and aspect precedence) for describing aspects at the abstraction level of UML protocol state machines [12]. MACT also provides two groups of strategies (i.e. structure-oriented and propertyoriented) for generating aspect tests from aspect-oriented state models. A structure-oriented strategy derives tests to meet a given structural coverage criterion, such as state coverage, transition coverage, and round trip. A property-oriented strategy generates tests from the counterexamples of model checking. Two such strategies are checking an aspect-oriented state model against trap properties (i.e. negated system properties) [13] and checking mutants (i.e. incorrect variations) [14] of aspe...