Transcript
Page 1: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Extracting ObjectsExtracting ObjectsFrom From

Legacy Imperative CodeLegacy Imperative Code

Ricky E. “Ranger” SwardRicky E. “Ranger” SwardDept of Computer ScienceDept of Computer Science

USAF AcademyUSAF [email protected]@usafa.edu

Page 2: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

OverviewOverview

• Background• Taxonomy of Imperative Subprograms• Parameter-Based Object Identification (PBOI)• Examples• Questions

Page 3: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

BackgroundBackground

• Re-Engineering• Previous Work• Functional Equivalence

Page 4: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Re-EngineeringRe-Engineering

Req

Design

Implementation Implementation

Design

Req

Re-specify

Re-Design

Re-Code

Reverse

Engineerin

g Forward Engineering

Re-Engineering = Reverse + Forward

Page 5: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Previous WorkPrevious Work

• Liu and Wilde [1] methodologies– Global-Based Object Identification (GBOI)

• objects grouped based on global variables

– Type-Based Object Identification (TBOI)• objects grouped based on data types

• Lividas and Johnson [2] methodology– Receiver-Based Object Identification (RBOI)

• objects grouped based on output data types

Page 6: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Functional EquivalenceFunctional Equivalence

• Prove mathematically that the extracted Object-Oriented Design is functionally equivalent to the Structured Design

F( SD ) = OOD where

SD = Tpsmain

( SD ) and

M SD and CatM( M ) and

OOD = ( , M)

Page 7: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

TaxonomyTaxonomy

• Category 0 – produce no data and call no other subprograms.• Category 1 – produce no data items but call other subprograms.• Category 2 – produce a single data item and call no subprograms.• Category 3 – produce a single data item and call other subprograms.• Category 4 – produce multiple data items and call no subprograms.• Category 5 – produce multiple data items and call other subprograms.

| Ppro | = 0 | Ppro | = 1 | Ppro | > 1

| Csub | = 0 0 2 4

| Csub | > 0 1 3 5

Page 8: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Parameter-Based Object Parameter-Based Object Identification (PBOI)Identification (PBOI)

• Overall rationale for PBOI– Object attributes occur as parameters passed

between subprograms.

• Objects are extracted from parameters

• Behavior built around the objects

• Functionally equivalent transformations

Page 9: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 4 SubprogramsCategory 4 Subprograms

• Category 4 subprograms produce multiple data items• Use program slicing

– extracts independent code that produces single data items– Cat 4 subprograms sliced into Cat 2 subprograms– identify based on how data is used, not organized

Page 10: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Program SlicingProgram Slicing

Category 4A

BC

E

D

foo

Category 2A

B

D

foo-D

Category 2A

CE

foo-E

Page 11: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 5 SubprogramsCategory 5 Subprograms

• Category 5 subprograms produce multiple data items and call other subprograms

• Also use program slicing– Cat 5 subprograms sliced into Cat 2 or Cat 3 subprograms

Page 12: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Slicing Category 5 SubprogramsSlicing Category 5 Subprograms

Category 5D

EF

C

B

bar

Category 2E

F

B

bar-B

Category 3D

E C

bar-C

Page 13: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 2 SubprogramsCategory 2 Subprograms

• Category 2 subprograms produce one data item and call no subprograms

• Implement derived attributes of objects, ala Rumbaugh [3]

• Transform each formal parameter into an attribute of a class

• Transform subprogram into method of the class

Page 14: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 2 ExampleCategory 2 Example

CAPTURE

BEAMRA

ANGFAC

REAL

Class-2

AttributesBEAMRAANGFAC

MethodsCAPTURE( C-2 : Class-2 ) : REAL

Page 15: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 0 SubprogramsCategory 0 Subprograms

• Category 0 subprograms produce no data and call no other subprograms

• They are treated as special cases of Category 2 subprograms

Page 16: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 SubprogramsCategory 3 Subprograms

• Category 3 subprograms produce a single data item and call other subprograms

• Transform called subprograms first

• Build class for subprogram with all parameters as attributes

• Filter attributes to refine object design

Page 17: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 1 – Attribute of both C1 and C2

BOUNCEANGFAC

PROJRAREAL

CAPTUREBEAMRA

ANGFAC

Class-4

Attributes: ANGFAC, PROJRA

Methods: BOUNCE( C-4 : Class-4 ) : REAL

Class-2

Attributes: BEAMRA, ANGFAC

Methods: CAPTURE( C-2 : Class-2 ) : REAL

REAL

Class-4

Attributes: PROJRA

Methods: BOUNCE( C-4 : Class-4,

C-5 : Class-2 ) : REAL

Page 18: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 2 – Attribute of C1, not C2

BOUNCEANGFAC

PROJRAREAL

CAPTUREBEAMRA

ANGFAC

Class-4

Attributes: ANGFAC, PROJRA

Methods: BOUNCE( C-4 : Class-4 ) : REAL

Class-2

Attributes: BEAMRA

Methods: CAPTURE( C-2 : Class-2,

ANGFAC ) : REAL

REAL

Class-4

Attributes: PROJRA

Methods: BOUNCE( C-4 : Class-4,

C-5 : Class-2,ANGFAC ) : REAL

Page 19: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 3 – Attribute of C2, not C1

BOUNCEANGFAC

PROJRAREAL

CAPTUREBEAMRA

ANGFAC

Class-2

Attributes: BEAMRA, ANGFAC

Methods: CAPTURE( C-2 : Class-2 ) : REAL

REAL

Class-4

Attributes: PROJRA

Methods: BOUNCE( C-4 : Class-4,

C-5 : Class-2 ) : REAL

Class-2

Attributes: ANGFAC

Methods: CAPTURE( C-2 : Class-2,

BEAMRA ) : REAL

Page 20: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 4 – Not attribute of C1 nor C2

BOUNCEANGFAC

PROJRAREAL

CAPTUREBEAMRA

ANGFAC

REAL

Class-4

Attributes: PROJRA

Methods: BOUNCE( C-4 : Class-4,

C-5 : Class-2 ) : REAL

Class-2

Attributes: ANGFAC

Methods: CAPTURE( C-2 : Class-2,

BEAMRA ) : REAL

Page 21: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 1 SubprogramsCategory 1 Subprograms

• Category 1 subprograms produce no data and call other subprograms

• All but Main program are transformed using Category 3 transformations

• Main program is treated differently

Page 22: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Main ProgramMain Program

• Main program is unique

• Provides opportunity to remove duplicates and merge overlapping classes

• In main program, objects that share attributes are parts of the same object

• Any/all global variables have already been transformed into parameters

Page 23: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Removing Duplicate Object Removing Duplicate Object InstancesInstances

Instance of Class 2

C-5

Instance of Class 2

C-6Instance of Class 2

C-7

Page 24: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Overlapping ClassesOverlapping ClassesClass-2

Attributes: BEAMRA, ANGFAC

Methods: CAPTURE( C-2 : Class-2 ) : REAL

Class-10

Attributes: BEAMRA, RHOSTD, ANGFAC

MethodsCAPTURE( C-2 : Class-10 ) : REALRHO( C-4 : Class-10 ) : REAL

Class-3

Attributes: RHOSTD, ANGFAC

Methods: RHO( C-3 : Class-3 ) : REAL

Page 25: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Student Scheduler ExampleStudent Scheduler Example

• Look at PBOI in terms of the S5 Student Scheduler...

Page 26: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 2 ExampleCategory 2 Example

Deschedule_Student

Period in

Scheduled in out

Class_1

type Class_1 is tagged recordPeriod : Integer;Name : String_Ten;Scheduled : Integer_Array;Length : Integer;

end record;

procedure Deschedule_Student ( C_1 : in out Class_1 ) isbegin

...End := C_1.Period + C_1.Length;...

end Deschedule_Student;

Length in

Name in

Page 27: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 1 – Attribute of both Class_1 and Class_2

Deschedule_Student

Period in

Scheduled in out

Length in

Name in

Deschedule_Student

Check_Minimum_Enrollment

Name in

Min_Enroll in

Scheduled in out

Length in

Enroll in

Page 28: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 1 – Attribute of both Class_1 and Class_2

Class_2

Attributes: Name, Scheduled,Length, Min_Enroll, Enroll

Check_Minimum_Enrollment ( C_2 : in out Class_2 );

Class_1

Attributes: Period, Name, Scheduled,Length

procedure Deschedule_Student ( C_1 : in out Class_1 );

Class_2

Attributes: Min_Enroll, Enroll

Check_Minimum_Enrollment ( C_2 : in out Class_2; C_3 : in out Class_1’Class );

Page 29: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 2 – Attribute of Class_2, not Class_1

Deschedule_Student

Period in

Scheduled in out

Length in

Name in

Deschedule_Student

Check_Minimum_Enrollment

Name in

Min_Enroll in

Scheduled in out

Length in

Enroll in

Page 30: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 2 – Attribute of Class_2, but not Class_1

Class_2

Attributes: Name, Scheduled,Length, Min_Enroll, Enroll

Check_Minimum_Enrollment ( C_2 : in out Class_2 );

Class_1

Attributes: Period, Name, Scheduled,

procedure Deschedule_Student ( C_1 : in out Class_1; Length : in Integer );

Class_2

Attributes: Min_Enroll, Enroll

Check_Minimum_Enrollment ( C_2 : in out Class_2; C_3 : in out Class_1’Class; Length : in Integer );

Page 31: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 3 – Attribute of Class_1, but not Class_2

Deschedule_Student

Period in

Scheduled in out

Length in

Name in

Deschedule_Student

Check_Minimum_Enrollment

Name in

Min_Enroll in

Scheduled in out

Length in

Enroll in

Page 32: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 3 – Attribute of Class_1, but not Class_2

Class_1

Attributes: Period, Name, Scheduled,Length

procedure Deschedule_Student ( C_1 : in out Class_1 );

Class_2

Attributes: Min_Enroll, Enroll

Check_Minimum_Enrollment ( C_2 : in out Class_2; C_3 : in out Class_1’Class );

Class_1

Attributes: Name, Scheduled,Length

procedure Deschedule_Student ( C_1 : in out Class_1; Period : in Integer );

Page 33: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 4 – Not Attribute of Class_1 or Class_2

Deschedule_Student

Period in

Scheduled in out

Length in

Name in

Deschedule_Student

Check_Minimum_Enrollment

Name in

Min_Enroll in

Scheduled in out

Length in

Enroll in

Page 34: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Category 3 FilteringCategory 3 Filtering• PBOI Case 4 – Not Attribute of Class_1 or Class_2

Class_2

Attributes: Min_Enroll, Enroll

Check_Minimum_Enrollment ( C_2 : in out Class_2; C_3 : in out Class_1’Class );

Class_1

Attributes: Name, Scheduled,Length

procedure Deschedule_Student ( C_1 : in out Class_1; Period : in Integer );

Page 35: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Removing Duplicate Object Removing Duplicate Object InstancesInstances

Instance of Class_2

C_5

Instance of Class_2

C_6Instance of Class_2

C_7

Page 36: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

Overlapping ClassesOverlapping ClassesClass_1

Attributes: Name, Scheduled,Length

procedure Deschedule_Student ( C_1 : in out Class_1; Period : in Integer );

Class_5

Attributes: Name, SSAN

procedure Assign_Student ( C_8 : in out Class_5 );

Class_12

Attributes: Name, Scheduled,Length, SSAN

procedure Deschedule_Student ( C_1 : in out Class_1; Period : in Integer );

procedure Assign_Student ( C_8 : in out Class_5 );

Page 37: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

ConclusionsConclusions

• PBOI is an improvement over GBOI, TBOI, and RBOI

• Maintains functional equivalence

• Prototype implemented

• Objects not mean to correlate to semantic objects from domain

• Computationally intensive

Page 38: Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science USAF Academy ricky.sward@usafa.edu

ReferencesReferences

• [1] S.S. Liu and N. Wilde, Identifying objects in a conventional procedural language: An example of data design recovery. In Proceedings of the Conference on Software Maintenance, pages 266-271, IEEE, Nov 1990.

• [2] P.E. Lividas and T. Johnson, A new approach to finding objects in programs. Technical Report SERC-TC-63-F, University of Florida, Jun 1993.

• [3] J. Rumbaugh and M. Blaha, Object-Oriented Modeling and Design, Prentice-Hall, New Jersey, c1991.