AuRUS: explaining the validation of UML/OCL conceptual schemas

Guillem Rull, Carles Farré, Anna Queralt, Ernest Teniente, Toni Urpí
2013 Journal of Software and Systems Modeling  
The validation and the verification of conceptual schemas have attracted a lot of interest during the last years, and several tools have been developed to automate this process as much as possible. This is achieved, in general, by assessing whether the schema satisfies different kinds of desirable properties which ensure that the schema is correct. In this paper we describe AuRUS, a tool we have developed to analyze UML/OCL conceptual schemas and to explain their (in)correctness. When a
more » ... is satisfied, AuRUS provides a sample instantiation of the schema showing a particular situation where the property holds. When it is not, AuRUS provides an explanation for such unsatisfiability, i.e., a set of integrity constraints which is in contradiction with the property. Integrity constraints 1. context Person inv PersonKey: Person.allInstances()->isUnique(name) 2. context HikingEvent inv HikingEventKey: HikingEvent.allInstances()->isUnique(name) 3. context TrailSection inv TrailSectionKey: TrailSection.allInstances()->forAll(s1,s2 | s1<>s2 implies s1.name<>s2.name or s1.event<>s2.event) 4. context HikingEvent inv NoSectionEasierThanMinLevel: self.section->select(s | s.difficultyisEmpty() 5. context HikingEvent inv SomeSectionSuitableToAllParts: self.section->select(s|s.difficulty=self.minLevelRequired)->notEmpty() 6. context Registration inv HikedSectionsBelongToEvent: self.hikedSection.hikedTrailSection.event ->includes(e|e<>self.registersAt) 7. context Registration inv ParticipantLevelMustReachMinimumRequired: self.participant.expertiseLevel >= self.registersAt.minLevelRequired 8. context HikedSection inv DifficultSectionsAreDangerous: self.hikedTrailSection.difficulty>7 implies self.oclIsTypeOf(DangerousSection) 9. context HikedSection inv SectionDifficultyNotHigherThanHikerLevel: self.hiker.participant.expertiseLevel>=self.hikedTrailSection.difficulty 10. context DangerousSection inv DangerousSectionMinDifficulty: self.hikedTrailSection.difficulty > 7 11. context DangerousSection inv CompanionMustHikeSameTrailSect: self.companion.hikedSection.hikedTrailSection->includes(self.hikedTrailSection) 12. context DangerousSection inv CompanionIsNotSelf: self.hiker <> self.companion 13. context DangerousSection inv OneCannotAccompanyMoreThanOneInSameTrailSection: DangerousSection.allInstances()->forAll(ds1,ds2 | ds1<>ds2 implies ds1.hikedTrailSection<>ds2.hikedTrailSection and ds1.companion<>ds2.companion))
doi:10.1007/s10270-013-0350-8 fatcat:iw2ywbjdh5amld6qgqrpngfmae