Extracting Objects From Legacy Imperative Code Ricky E. “Ranger” Sward Dept of Computer Science...

Preview:

Citation preview

Extracting ObjectsExtracting ObjectsFrom From

Legacy Imperative CodeLegacy Imperative Code

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

USAF AcademyUSAF Academyricky.sward@usafa.eduricky.sward@usafa.edu

OverviewOverview

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

BackgroundBackground

• Re-Engineering• Previous Work• Functional Equivalence

Re-EngineeringRe-Engineering

Req

Design

Implementation Implementation

Design

Req

Re-specify

Re-Design

Re-Code

Reverse

Engineerin

g Forward Engineering

Re-Engineering = Reverse + Forward

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

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)

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

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

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

Program SlicingProgram Slicing

Category 4A

BC

E

D

foo

Category 2A

B

D

foo-D

Category 2A

CE

foo-E

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

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

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

Category 2 ExampleCategory 2 Example

CAPTURE

BEAMRA

ANGFAC

REAL

Class-2

AttributesBEAMRAANGFAC

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

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

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

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

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

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

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

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

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

Removing Duplicate Object Removing Duplicate Object InstancesInstances

Instance of Class 2

C-5

Instance of Class 2

C-6Instance of Class 2

C-7

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

Student Scheduler ExampleStudent Scheduler Example

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

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

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

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 );

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

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 );

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

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 );

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

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 );

Removing Duplicate Object Removing Duplicate Object InstancesInstances

Instance of Class_2

C_5

Instance of Class_2

C_6Instance of Class_2

C_7

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 );

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

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.