Upload
nessa
View
35
Download
1
Embed Size (px)
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
Citation preview
Georg HeegObjektorientierte SystemeBaroper Str. 33744227 DortmundGermanyTel: +49-231-97599-0Fax: +49-231-97599-20
Email: [email protected]://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
Georg HeegObjektorientierte SystemeBaroper Str. 33744227 DortmundGermanyTel: +49-231-97599-0Fax: +49-231-97599-20
Email: [email protected]://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