Page 1
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
Page 2
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
Page 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 1
Page 5
RSL = scenarios + vocabulary
Course manage r
Add new course
Show extended course list
Page 7
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
Page 8
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
Page 9
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()
Page 10
D = t(R) - dynamics
Page 11
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
Page 12
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()
Page 13
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()
Page 14
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
Page 15
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
Page 16
Extending requirements
Page 17
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
Page 18
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()
Page 19
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()
Page 20
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
Page 21
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
Page 22
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))))
Page 23
Showing similarity
Page 24
Showing elements for reuse
Page 25
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
Page 26
Thank you for your attention.
www.redseeds.eu
Page 27
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