Georg Heeg Objektorientierte Systeme Baroper Str. 337 44227 Dortmund Germany Tel: +49-231-97599-0

Post on 26-Jan-2016

34 views 1 download

description

Georg Heeg Objektorientierte Systeme Baroper Str. 337 44227 Dortmund Germany Tel: +49-231-97599-0 Fax: +49-231-97599-20. Georg Heeg Objektorientierte Systeme Mühlenstr. 19 06366 Köthen Germany Tel: +49-3496-214 328 Fax: +49-3496-214 712. Georg Heeg AG Objektorientierte Systeme - PowerPoint PPT Presentation

Transcript of Georg Heeg Objektorientierte Systeme Baroper Str. 337 44227 Dortmund Germany Tel: +49-231-97599-0

Georg HeegObjektorientierte SystemeBaroper Str. 33744227 DortmundGermanyTel: +49-231-97599-0Fax: +49-231-97599-20

Email: georg@heeg.dehttp://www.heeg.de

Georg Heeg AGObjektorientierte Systeme

Riedtlistr. 88006 ZurichSwitzerland

Tel: +41-1-356 3311Fax: +41-1-356 3312

Georg HeegObjektorientierte Systeme

Mühlenstr. 1906366 Köthen

GermanyTel: +49-3496-214 328Fax: +49-3496-214 712

Georg Heeg

Porting and Gardening VisualWorks Applications to 5i

ESUG

Essen, 31 August 2001

Contents

• Georg Heeg - the company• Porting goals• What’s new in 5i?• Consequences for the development

process• Migration process• Tools for the port• Coming from Envy• A new development process

About Us...

• Founded 1987, headquarter in Dortmund,since 1996 in Zurich, since 1999 in Koethen/Anhalt

• Consulting- and training company in Smalltalk• Hotline support, maintenance, bug-fixes for VisualWorks

and visual Smalltalk• VM-laboratory for VisualWorks• Porting service of old VisualWorks applications to 5i• Technology-partner of

Corporate Mission: Make Sophisticated Projectsa Success for the Customer!

VM-Laboratory for VisualWorks

• Since 1987 VM source code licensee of Xerox PARC, ParcPlace Systems, ParcPlace-Digitalk, ObjectShare, Cincom– PCS-Cadmus (MUNIX)– Atari Mega ST– OS/2– Sinix Z – SNI RM 200 - 600 Reliant Unix– MIPS-ABI– SGI Irix– RS/6000 AIX Power2 and Power PC– Compaq Tru64 Unix– Power-Mac – Mac OS X (in preparation)

Georg Heeg in Koethen

• Since 1999 in the Johann Sebastian Bach city• Qualified computer scientists in Saxony-

Anhalt• Hot specialty:

– Porting of VisualWorks applications to 5i– Enhancement of code quality of ported applications

• Customers in– Frankfurt/Main– Zurich– Munich– ...– I.e. no local customers

Contents

• Georg Heeg - the company• Porting goals• What’s new in 5i?• Consequences for the development

process• Migration process• Tools for the port• Coming from Envy• A new development process

22 Months Experience Porting to 5i

Goal

• A manageable application– Embedded in VisualWorks 5i concepts– Embedded in StORE– Ready for the next years

The Main Steps Are

• Investigate the structure of the existing application

• Propose a set of name spaces • Investigate system changes • Reorganize application• Test the port

Other Activities

• Gardening– Cut off dry branches – Pull weeds

• Specific activities to move from Envy to StORE

Contents

• Georg Heeg - the company• Porting goals• What’s new in 5i?• Consequences for the development

process• Migration process• Tools for the port• Coming from Envy• A new development process

New Concepts in VisualWorks 5i

• Name Spaces • Shared Variables• Reference Bindings• StORE• XML• Runtime Packager• Microsoft SQL-Server/PostgresSQL• Parcel-Format• Byte-Codes

Example for a Name Space

Smalltalk defineNameSpace: #ENVYprivate: falseimports: '

private Smalltalk.*'

category: 'For ENVY'

Template to Define Name Spaces

Smalltalk.Heeg defineNameSpace: #NameOfPoolprivate: falseimports: '

OtherNameSpace.*private Smalltalk.*'

category: #'As yet unclassified'

Old and New Class Definitions

Magnitude subclass: #DateinstanceVariableNames:

'day year 'classVariableNames:

'DaysInMonthFirstDayOfMonthMonthNamesSecondsInDayWeekDayNames '

poolDictionaries: ''category:

'Magnitude-General'

Date classinstanceVariableNames: ''

Smalltalk.CoredefineClass: #Datesuperclass: #{Core.Magnitude}indexedType: #noneprivate: falseinstanceVariableNames:

'day year 'classInstanceVariableNames: ''imports: ''category: 'Magnitude-General'

Core.DatedefineSharedVariable:

#DaysInMonthprivate: falseconstant: falsecategory: 'As yet unclassified'initializer: nil

Template to Define Classes

Smalltalk.Heeg defineClass: #NameOfClasssuperclass: #{NameOfSuperclass}indexedType: #objectsprivate: falseinstanceVariableNames: 'instVarName1 instVarName2'classInstanceVariableNames: ''imports: ''category: #'As yet unclassified'

Template to Define Shared Variables

Heeg.ExampleClass defineSharedVariable: #NameOfBindingprivate: falseconstant: falsecategory: 'OOP'initializer: 'Array new: 5'

Name-Spaces

Object Collection

KeyedCollectionGeneralNameSpace

NameSpaceNameSpaceOfClass

References

Object ()GeneralBindingReference

BindingReference NameSpaceImport

GeneralNameSpaceImport SpecificNameSpaceImport

QualifiedName LiteralBindingReference

Creating a Reference

#{Core.Integer} (LiteralBindingReference pathString:

'Core.Integer') method: thisContext method(LiteralBindingReference simpleName: #Integer)

method: thisContext method

BindingReference simpleName: #Integer in: CoreBindingReference pathString: 'Core.Integer'

Bindings

Object ()Magnitude ()

LookupKey ('key')

VariableBinding ('value' 'usage' 'category')

InitializedVariableBinding ('method')

Using a Reference

#{Core.Integer} binding#{Core.Integer} value#{Heeg.TestClass.MyStatic} binding value: 27#{Heeg.TestClass.MyStatic} isDefined#{Heeg.TestClass.MyStatic} bindingOrNil#{Heeg.TestClass.MyStatic} valueOrDo: [nil]#{Heeg.MyGlobal} ifDefinedDo: ['Hurra'] elseDo:

['Ooo']

StORE

• StORE organizes Smalltalk sources in– Bundles and– Packages

• StORE stores versions of bundles and packages in Oracle, SQL-Server, PostgresSQL

• StORE is an optimistic team tool

Pundles (Bundles und Packages)

ObjectStore.DBObject

Store.DBRecordStore.Record

Store.PundleStore.BundleStore.Package

Store.Pundle

• blessingLevel• commentID• propertiesID• properties• commentStr

Store.Bundle

• contents

Store.Package

• namespaces• classes• metaclasses• methods• binFile• data

Versions of a Bundle

Contents

• Georg Heeg - the company• Porting goals• What’s new in 5i?• Consequences for the development

process• Migration process• Tools for the port• Coming from Envy• A new development process

Consequences for theSoftware Development Process

• Name spaces allow a clear scope of names• Bundles and packages allow organization and

overview over the sources of a system and other applications

Contents

• Georg Heeg - the company• Porting goals• What’s new in 5i?• Consequences for the development

process• Migration process• Tools for the port• Coming from Envy• A new development process

Migration process

• Check old application• Build customer specific 5i base• Test• Port applications• Test

Check old application

• Formal check of old application• Partitioning of old application

Formal check of old application

• Consistency checks (Undeclared)• Standard metrics (SmallLint)

Partitioning of Old Application

• Changed system methods• Additional methods in system classes• Shrink wrap components • Modules • Determine a sequence of modules

Build Customer Specific 5i Base

• Preparation of VisualWorks 5i base image• Defining the name tree • Critical investigation of system changes • Integration of system changes into 5i

base image• Test the system

Preparation of VisualWorks 5i Base Image

• Start with VisualWorks 5i.3 distribution• Load parcel StORE for Oracle (or another database)• Prepare database according to description

– Require help from your company’s DBA

• Load parcels DLLCC and LensRuntime– These are weak prerequisites for BOSS which is a prerequisite

for StORE

• Move all definitions from As yet unclassified to a new package called Base NameSpaces and Statics– Move As yet unclassified out of bundle VisualWorks Base – Put Base NameSpaces and Statics into bundle VisualWorks

Base

Pubishing the base

• Log in the database as “special” user like BaseSystem• Publish everything (no need for binary) with blessing

level “Released”– Bundle Base VisualWorks– Bundle StoreBase– All other packages

• Load all other parcels you need for the base– UIPainter requires almost all of Advanced Tools

• Publish them, possibly binary, with blessing level “Released”

• Save the image and use it as your base for any further development

Name Space Registration

• Company name space under Root.Smalltalk– Registration in

http://www.cincomsmalltalk.com:8080/CincomSmalltalkWiki/VW+NameSpace+Reservations

Name-Spaces for Example Project

Smalltalk

•Company Registered Top Level domain

–Base Common classes for the company

–Tools Common tools for the company

–Project1 Top domain for Project1

•Base Common classes for the project

•Import Import specific classes

•Client –Base Common classes for all clients –Client1 Client 1 specific classes –Client2 Client 2 specific classes

•Server Server specific classes

Imports

Smalltalk

•Company Registered Top Level domain

–Base Common classes for the company

–Tools Common tools for the company

–Project1 Top domain for Project1

•Base Common classes for the project

•Import Import specific classes

•Client –Base Common classes for all clients –Client1 Client 1 specific classes –Client2 Client 2 specific classes

•Server Server specific classes

Test Name Spaces and Imports

Smalltalk

•Company

–Base Common classes for the company

•Tests Private name space for tests

–Tools Common tools for the company

•Tests Private name space for tests

–Project1

•XProgramming

•SUnit SUnit classes

Critical Investigation of System Changes

• Process– FileOut all classes of the old base image– Remove all methods with same code as new image– Compare the others class by class, method by

method to a new image

• Decisions1. Not needed2. Can be taken3. All callers need to be changed4. Has to be adapted

• Use GH Change List

Build an image with all changes needed

• Cover all system changes• Move changes needed for a specific

applications into that application– Was almost impossible with Envy

• Build a new base image• Test it

– Write unit tests– Use the image for standard work

• Organize what you have done in packages and bundles

• Publish everything (possibly binary)• Save the image as new corporate base

PackageApp 1

PackageApp 2

Package 3

PackageApp 4

Porting Applications to 5i StORE

App1App

2App3App

4

DatabaseFilesystem

as Parcel

Observe and Weed

• Observe the process of reading .st files with the change list– Weed out what is not needed– Cut dry branches

• Rename• Move to appropriate name spaces• Move into appropriate parcels and

packages

Tests

• Test• Test• Test• Use

– SUnit– WinRunner– …

• Try the system

Contents

• Georg Heeg - the company• Porting goals• What’s new in 5i?• Consequences for the development

process• Migration process• Tools for the port• Coming from Envy• A new development process

GH-Tools

• GH-ChangeList (enhanced Change List)– Load directly into Name Spaces– Load directly into Parcels und Packages– Create Name Spaces, Parcels and Packages– Substitute global names– Find suspicious methods

• GH-UndeclaredBrowser– Show methods referencing a VariableBinding in

name space Undeclared– Easy finding of defining name spaces– Easy adding of fully qualified names

GH Change List

Substitutor

Suspicious Expressions

Smalltalk at: #MyGlobal ifAbsent: [nil]should be replaced by:

#{Heeg.MyGlobal} valueOrDo: [nil]

Smalltalk at: #MyGlobal put: nilshould be replaced by :

Smalltalk.Heeg defineSharedVariable: #MyGlobal

private: falseconstant: falsecategory: ‘Heeg Globals‘initializer: nil

Contents

• Georg Heeg - the company• Porting goals• What’s new in 5i?• Consequences for the development

process• Migration process• Tools for the port• Coming from Envy• A new development process

Specific Activities to Move From Envy to Store

• StORE bridge or .st files?– Bridge advantages

• Automatic transfer of application structures• Best suited from ENVY 5i to StORE

– Can‘t use the Store Bridge• For system changes• Coming from VisualWorks 2.5.x

– Better not to use the bridge• If you feel you should observe the methods and

classes coming in

Additional Observations

• Moving classes to the right name spaces can be done after loading

• Often Envy based applications use Envy specific methods– Make sure you treat these methods like

system changes

Contents

• Georg Heeg - the company• Porting goals• What’s new in 5i?• Consequences for the development

process• Migration process• Tools for the port• Coming from Envy• A new development process

Blessing-Level Meaning Is set by

Broken This component contains errors which were Projecttesterdetected in a test.

Work in Progress Developer saves her/his work to the data b ase Developer but the component has known defects.

Development „Normal“ state for a component in development. Developer

Integration Ready Compoment is ready from the developers point of , Developer of the component, view. Highest level a developer can set. Unit tests have been run successfully.

Integrated MergeTool has integrated this component. MergeTool

Merged This component is the result of a merge process Merge-Tool

Tested All Tests by Project tester were successful. Project tester

Internal Release Test version for the user Project Manager

Released Version is in production. Project Management

Patch Solves a production problem. Step outside the Supportteam normal development process, is only applied to Released Software!

Blessing Levels

EntwicklungsabteilungEntwicklungsabteilung

Blessing Level Process

Integrated

Tested

Internal Release

Released

Test D

Beteiligte Entwickler

Error Report

(+)(+)

(-)(-)User DepartmentUser Department

(-)(-) (+)(+)

PLPL

Production

IntegratorIntegrator

Work in Progress

(-)(-) (+)(+)

ER.

Broken

Test C

Test A

Publish and/or set blessing level

Only change blassing level

IntegrationReady

Merged

Development

Discussion

You can reach us

Georg Heeg: georg@heeg.de

Sales: info@heeg.de

Georg HeegObjektorientierte SystemeBaroper Str. 33744227 DortmundGermanyTel: +49-231-97599-0Fax: +49-231-97599-20

Email: georg@heeg.dehttp://www.heeg.de

Georg Heeg AGObjektorientierte Systeme

Riedtlistr. 88006 ZurichSwitzerland

Tel: +41-1-356 3311Fax: +41-1-356 3312

Georg HeegObjektorientierte Systeme

Mühlenstr. 1906366 Köthen

GermanyTel: +49-3496-214 328Fax: +49-3496-214 712