ComprehensiveSystem for Systematic Case-Driven
Software Reuse
SOFSEM 2010
25.01.2010
M. Śmiałek, A. Kalnins, E. Kalnina,A. Ambroziewicz, T. Straszak, K. Wolter
Warsaw University of Technology, PolandIMCS University of Latvia, LatviaUniversity of Hamburg, Germany
Outline – reuse schema
Software Case 1Software Case 1Software Case 1Software Case 1Software Case 1
Requirements 1 Design 1 Code 1
Software Case 12
Requirements 2 Design 2 Code 2
δR2
Requirements driven Transformation driven
Retrieval technologies
Software case repositories
Software Case 1Software Case 1Software Case 1Software Case 1Software Case 1
Requirements 1 Design 1 Code 1
Software Case 12
Requirements 2 Design 2 Code 2
δR2
Reuse schema – step 1
Evolution schema – step 2
Software Case 1Software Case 1Software Case 1Software Case 1Software Case 1
Requirements 1 Design 1 Code 1
Software Case 12
Requirements 2 Design 2 Code 2
δR2
DesignAL_Interfaceal_operation
DL_Interfacedl_operation
R to D transformation rules
Requirements
Scenario stepScenario step
Application Behavior
Domain Behavior
Domain Notion
DS Logic
Domain StatementUse Case
Scenario step
D = t(R) - structure
CourseManagement
IShowOwnedCourses
IChangeCourseData
IShowExtendedCourseList IAddNewCourse
UserInterface::UIComponent
UI
BusinessLogic::CoursesServ ices
ICourseICourseList
«interface»CourseManagement::IAddNewCourse
+ entersCourse()+ wantsToAddCourse()
«interface»CourseManagement::
IShowExtendedCourseList
+ wantsToSeeCourseList()
«interface»CoursesServices::
ICourse
+ registers(CourseDTO)+ verifies(CourseDTO)
«interface»CoursesServices::
ICourseList
+ builds(CourseListDTO)
«interface»UserInterface::UI
+ showsCourseEntryForm()+ showsCourseErrorMessage()+ showsCourseList()
Evolution schema – step 3
Software Case 1Software Case 1Software Case 1Software Case 1Software Case 1
Requirements 1 Design 1 Code 1
Software Case 12
Requirements 2 Design 2 Code 2
δR2
class CShowExtendedCourseList implements IShowExtendedUserList {// (...) wantsToSeeCourseList(){ // // }}
Application logic code
class CShowExtendedCourseList implements IShowExtendedUserList {// (...) wantsToSeeCourseList(){ ICourseList.builds(cl); UI.showsCourseList(cl); }}
CourseManagement
IShowExtendedCourseList
CourseManagement
IShowOwnedCourses
IChangeCourseData
IShowExtendedCourseList IAddNewCourse
UserInterface::UIComponent
UI
BusinessLogic::CoursesServ ices
ICourseICourseList
CourseManagement::IAddNewCourse
+ entersCourse()+ wantsToAddCourse()
CourseManagement::IShowExtendedCourseList
+ wantsToSeeCourseList()
CoursesServices::ICourse
+ registers(CourseDTO)+ verifies(CourseDTO)
CoursesServices::ICourseList
+ builds(CourseListDTO)
UserInterface::UI
+ showsCourseEntryForm()+ showsCourseErrorMessage()+ showsCourseList()
class CCourseList implements ICourseList {// (...) void builds(CourseListDTO cld){ // // // // // }}
Domain logic code
class CCourseList implements ICourseList {// (...) void builds(CourseListDTO cld){ UserListDTO resList; for (i=1; i==user_list_length; i++) { resList.add(userList[i]); } cld=resList; }}
CoursesServices
ICourseList
R1
CourseManagement
IShowOwnedCourses
IChangeCourseData
IShowExtendedCourseList IAddNewCourse
UserInterface::UIComponent
UI
BusinessLogic::CoursesServ ices
ICourseICourseList
CourseManagement::IAddNewCourse
+ entersCourse()+ wantsToAddCourse()
CourseManagement::IShowExtendedCourseList
+ wantsToSeeCourseList()
CoursesServices::ICourse
+ registers(CourseDTO)+ verifies(CourseDTO)
CoursesServices::ICourseList
+ builds(CourseListDTO)
UserInterface::UI
+ showsCourseEntryForm()+ showsCourseErrorMessage()+ showsCourseList()
R to D to C and reuse
Design
Requirements
Non-functional Requirements
R to D Transformation
Technological Framework
D to C Transformation
System Structure
Application Behaviour
Domain Behaviour
Functional Requirements
Domain Definition
Code
Reuse schema – step 4
Software Case 1Software Case 1Software Case 1Software Case 1Software Case 1
Requirements 1 Design 1 Code 1
Software Case 12
Requirements 2 Design 2 Code 2
δR2
Reuse schema – step 5
Software Case 1Software Case 1Software Case 1Software Case 1Software Case 1
Requirements 1 Design 1 Code 1
Software Case 12
Requirements 2 Design 2 Code 2
δR2
CourseManagement
IShowOwnedCourses
IChangeCourseData
IShowExtendedCourseList IAddNewCourse
BusinessLogic::CoursesServ ices
ICourseICourseFilter «interface»CoursesServices::
ICourse
+ registers(CourseDTO)+ verifies(CourseDTO)
«interface»CoursesServices::ICourseFilter
+ buildsCourseListWith(CourseFilterDTO, CourseListDTO)
UserInterface::UIComponent
UI
«interface»UserInterface::UI
+ showsCourseEntryForm()+ showsCourseErrorMessage()+ showsCourseFilterForm()+ showsCourseList()
«interface»CourseManagement::
IShowExtendedCourseList
+ entersCourseFilter()+ wantsToSeeCourseList()
«interface»CourseManagement::IAddNewCourse
+ entersCourse()+ wantsToAddCourse()
R to D to C again
CourseManagement
IShowOwnedCourses
IChangeCourseData
IShowExtendedCourseList IAddNewCourse
UserInterface::UIComponent
UI
BusinessLogic::CoursesServ ices
ICourseICourseList
CourseManagement::IAddNewCourse
+ entersCourse()+ wantsToAddCourse()
CourseManagement::IShowExtendedCourseList
+ wantsToSeeCourseList()
CoursesServices::ICourse
+ registers(CourseDTO)+ verifies(CourseDTO)
«interface»CoursesServices::
ICourseList
+ builds(CourseListDTO)
UserInterface::UI
+ showsCourseEntryForm()+ showsCourseErrorMessage()+ showsCourseList()
New application logic code
class CShowExtendedCourseList implements IShowExtendedUserList {// (...) wantsToSeeCourseList(){ UI.showsCourseFilterForm(f); }}
CourseManagement
IShowExtendedCourseList
CourseManagement
IShowOwnedCourses
IChangeCourseData
IShowExtendedCourseList IAddNewCourse
UserInterface::UIComponent
UI
BusinessLogic::CoursesServ ices
ICourseICourseList
CourseManagement::IAddNewCourse
+ entersCourse()+ wantsToAddCourse()
CourseManagement::IShowExtendedCourseList
+ wantsToSeeCourseList()
CoursesServices::ICourse
+ registers(CourseDTO)+ verifies(CourseDTO)
CoursesServices::ICourseList
+ builds(CourseListDTO)
UserInterface::UI
+ showsCourseEntryForm()+ showsCourseErrorMessage()+ showsCourseList()
New domain logic code
class CCourseList implements ICourseList {// (...) void builds(CourseFilterDTO fil, CourseListDTO cld){ UserListDTO resList; for (i=1; i==user_list_length; i++) { if compare(udto,userList[i]) resList.add(userList[i]); } cld=resList; }}
CoursesServices
ICourseFilter
R2
CourseManagement
IShowOwnedCourses
IChangeCourseData
IShowExtendedCourseList IAddNewCourse
UserInterface::UIComponent
UI
BusinessLogic::CoursesServ ices
ICourseICourseList
CourseManagement::IAddNewCourse
+ entersCourse()+ wantsToAddCourse()
CourseManagement::IShowExtendedCourseList
+ wantsToSeeCourseList()
CoursesServices::ICourse
+ registers(CourseDTO)+ verifies(CourseDTO)
CoursesServices::ICourseList
+ builds(CourseListDTO)
UserInterface::UI
+ showsCourseEntryForm()+ showsCourseErrorMessage()+ showsCourseList()
C1
Determine elements for reuse
Software Case 1Software Case 1Software Case 1Software Case 1Software Case 1
Requirements 1 Design 1 Code 1
Software Case 12
Requirements 2 Design 2 Code 2
δR2
Similarity measures
Similarity measures based on:• common terminology• description logic • structural approach
(defResource c1::Client--NounPhrase (rdf:type owl:Class)(owl:intersectionOf TRRSL:NounPhrase
(owl:Restriction (owl:onProperty TRRSL:nounLink)(owl:allValuesFrom TY::order2))(owl:Restriction
(owl:onProperty TRRSL:isPartOfDomainStatement_d1e3741)(owl:allValuesFrom c2::order--DomainStatement))))
Summary – evolution or revolution?
Software Case 1Software Case 1Software Case 1Software Case 1Software Case 1
Requirements 1 Design 1 Code 1
Software Case 12
Software Case 15
Requirements 4
δR4
Design 4 Code 4
Requirements 2 Design 2 Code 2
δR2
QR4
“instant diff”
“instant refactor”
support for reuse
Consortium members, duration and budget
27
Infovide S.A.Warsaw University of Technology
HITeC e.V.University of Koblenz-LandauPRO DV Software AGFraunhofer - Gesellschaft (Institute for Experimental Software Engineering)
Vienna University of Technology
Algoritmu sistemos, UAB
C/S IT Ltd. - Cybersoft
Heriot-Watt University
Latvia Institute of Mathematics and Computer Science - University of Latvia
Budget: 3.804.000,- € Community Contribution: 2.990.710,- €Duration: September 2006 – October 2009