Title: Porting and Gardening VisualWorks Applications to 5i
1Georg HeegObjektorientierte Systeme Baroper Str.
33744227 DortmundGermany Tel
49-231-97599-0 Fax 49-231-97599-20
Georg HeegObjektorientierte Systeme Mühlenstr.
1906366 KöthenGermany Tel 49-3496-214
328 Fax 49-3496-214 712
Georg Heeg AGObjektorientierte
Systeme Riedtlistr. 88006 ZurichSwitzerland Tel
41-1-356 3311 Fax 41-1-356 3312
Email georg_at_heeg.de http//www.heeg.de
2Georg Heeg Porting and Gardening VisualWorks
Applications to 5i Smalltalk Solutions
Chicago, 10 April 2001
3Contents
- Georg Heeg - the company
- Porting goals
- Whats new in 5i?
- Consequences for the development process
- Migration process
- Tools for the port
- Coming from Envy
- A new development process
4About 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!
5VM-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)
6Georg 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
7Contents
- Georg Heeg - the company
- Porting goals
- Whats new in 5i?
- Consequences for the development process
- Migration process
- Tools for the port
- Coming from Envy
- A new development process
822 Months Experience Porting to 5i
9Goal
- A manageable application
- Embedded in VisualWorks 5i concepts
- Embedded in StORE
- Ready for the next years
10The Main Steps Are
- Investigate the structure of the existing
application - Propose a set of name spaces
- Investigate system changes
- Reorganize application
- Test the port
11Other Activities
- Gardening
- Cut off dry branches
- Pull weeds
- Specific activities to move from Envy to StORE
12Contents
- Georg Heeg - the company
- Porting goals
- Whats new in 5i?
- Consequences for the development process
- Migration process
- Tools for the port
- Coming from Envy
- A new development process
13New Concepts in VisualWorks 5i
- Name Spaces
- Shared Variables
- Reference Bindings
- StORE
- XML
- Runtime Packager
- Microsoft SQL-Server/PostgresSQL
- Parcel-Format
- Byte-Codes
14Example for a Name Space
- Smalltalk defineNameSpace ENVY
- private false
- imports '
- private Smalltalk.
- '
- category 'For ENVY'
15Template to Define Name Spaces
- Smalltalk.Heeg defineNameSpace NameOfPool
- private false
- imports '
- OtherNameSpace.
- private Smalltalk.
- '
- category 'As yet unclassified'
16Old and New Class Definitions
Magnitude subclass Date instanceVariableNames
'day year ' classVariableNames
'DaysInMonth FirstDayOfMonth MonthNames S
econdsInDay WeekDayNames ' poolDictionaries
'' category 'Magnitude-General' Date
class instanceVariableNames ''
Smalltalk.Core defineClass Date superclass
Core.Magnitude indexedType none private
false instanceVariableNames 'day year
' classInstanceVariableNames '' imports
'' category 'Magnitude-General' Core.Date defi
neStatic DaysInMonth private false constant
false category 'As yet unclassified' initialize
r nil
17Template to Define Classes
- Smalltalk.Heeg defineClass NameOfClass
- superclass NameOfSuperclass
- indexedType objects
- private false
- instanceVariableNames 'instVarName1
instVarName2' - classInstanceVariableNames ''
- imports ''
- category 'As yet unclassified'
18Template to Define Shared Variables
- Heeg.ExampleClass defineSharedVariable
NameOfBinding - private false
- constant false
- category 'OOP'
- initializer 'Array new 5'
19Name-Spaces
- Object
- Collection
- KeyedCollection
- GeneralNameSpace
- NameSpace
- NameSpaceOfClass
20References
- Object ()
- GeneralBindingReference
- BindingReference
- NameSpaceImport
- GeneralNameSpaceImport
- SpecificNameSpaceImport
- QualifiedName
- LiteralBindingReference
21Creating a Reference
- Core.Integer
- (LiteralBindingReference pathString
'Core.Integer') method thisContext method - (LiteralBindingReference simpleName Integer)
method thisContext method - BindingReference simpleName Integer in Core
- BindingReference pathString 'Core.Integer'
22Bindings
- Object ()
- Magnitude ()
- LookupKey ('key')
- VariableBinding ('value' 'usage' 'category')
- InitializedVariableBinding ('method')
-
23Using 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'
24StORE
- 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
25(No Transcript)
26Pundles (Bundles und Packages)
- Object
- Store.DBObject
- Store.DBRecord
- Store.Record
- Store.Pundle
- Store.Bundle
- Store.Package
27Store.Pundle
- blessingLevel
- commentID
- propertiesID
- properties
- commentStr
28Store.Bundle
29(No Transcript)
30Store.Package
- namespaces
- classes
- metaclasses
- methods
- binFile
- data
31(No Transcript)
32Versions of a Bundle
33Contents
- Georg Heeg - the company
- Porting goals
- Whats new in 5i?
- Consequences for the development process
- Migration process
- Tools for the port
- Coming from Envy
- A new development process
34Consequences 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
35Contents
- Georg Heeg - the company
- Porting goals
- Whats new in 5i?
- Consequences for the development process
- Migration process
- Tools for the port
- Coming from Envy
- A new development process
36Migration process
- Check old application
- Build customer specific 5i base
- Test
- Port applications
- Test
37Check old application
- Formal check of old application
- Partitioning of old application
38Formal check of old application
- Consistency checks (Undeclared)
- Standard metrics (SmallLint)
39Partitioning of Old Application
- Changed system methods
- Additional methods in system classes
- Shrink wrap components
- Modules
- Determine a sequence of modules
40Build 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
41Preparation 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 companys 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
42Pubishing 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
43Name Space Registration
- Company name space under Root.Smalltalk
- Registration in http//www.cincomsmalltalk.com808
0/CincomSmalltalkWiki/VWNameSpaceReservations
44Name-Spaces for Example Project
45Imports
46Test Name Spaces and Imports
47Critical 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 - Decisions
- Not needed
- Can be taken
- All callers need to be changed
- Has to be adapted
- Use GH Change List
48Build 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
49Porting Applications to 5i StORE
PackageApp 1
App1
App2
App3
PackageApp 2
App4
Package 3
PackageApp 4
as Parcel
Database
50Observe 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
51Tests
- Test
- Test
- Test
- Use
- SUnit
- WinRunner
-
- Try the system
52Contents
- Georg Heeg - the company
- Porting goals
- Whats new in 5i?
- Consequences for the development process
- Migration process
- Tools for the port
- Coming from Envy
- A new development process
53GH-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
54GH Change List
55Substitutor
56(No Transcript)
57Suspicious Expressions
- Smalltalk at MyGlobal ifAbsent nil
- should be replaced by
- Heeg.MyGlobal valueOrDo nil
- Smalltalk at MyGlobal put nil
- should be replaced by
- Smalltalk.Heeg defineStatic MyGlobal private
false constant false category Heeg
Globals initializer nil
58Contents
- Georg Heeg - the company
- Porting goals
- Whats new in 5i?
- Consequences for the development process
- Migration process
- Tools for the port
- Coming from Envy
- A new development process
59Specific 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
- Cant 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
60Additional 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
61Contents
- Georg Heeg - the company
- Porting goals
- Whats new in 5i?
- Consequences for the development process
- Migration process
- Tools for the port
- Coming from Envy
- A new development process
62Developers Blessing Levels
63Project Management Blessing Levels
64Customers Blessing Levels
65Diagram
Blessing Level Process
66Discussion
67You can reach us
Georg Heeg georg_at_heeg.de Sales info_at_heeg.de
68Georg HeegObjektorientierte Systeme Baroper Str.
33744227 DortmundGermany Tel
49-231-97599-0 Fax 49-231-97599-20
Georg HeegObjektorientierte Systeme Mühlenstr.
1906366 KöthenGermany Tel 49-3496-214
328 Fax 49-3496-214 712
Georg Heeg AGObjektorientierte
Systeme Riedtlistr. 88006 ZurichSwitzerland Tel
41-1-356 3311 Fax 41-1-356 3312
Email georg_at_heeg.de http//www.heeg.de