Post on 18-Jan-2016
transcript
My First Jasmineii Project
eBusiness Solutions in Internet Time
Session Code: JG065SN
Abstract
This session features an honest look at the successes and lessons learned during the development process of our first Jasmine ii application. This session covers scheduling, cost estimation, UI language choices, development tools, data model growth, ODQL issues, and other relevant topics.This session provides an opportunity for developers and managers to learn form our experience, while also providing an opportunity for exchange on some of the real-world issues that arose during application development on a new platform.
Biography
Bill CrossVW International, Inc.
Bill Cross is a Senior Functional Analyst and Health Facility Planner for VW International, Inc.
As part of a career in medical facility design, Bill has acquired skills in dBase, Clipper (8 years), dbFast, and CA-Visual Objects (5 years) and has been following Jasmine since its prerelease stage.
Topics of Discussion
Project DescriptionBeginning
Requirements Approach
Lessons GUI Modeling Jasmine ii Observations and Tips Schedule
Summary
Project Description
PrototypeManage information from master planning
for medical facilitiesData included CAD files, photos,
narrative, medical workloadSupport future decision support processingUser uncertain of real desires
How It Began
Scope ($) set more by available funding rather than requirements
Purpose stated as capturing and storing information for future use
Firm fixed price contract method with good client relationship
Personal experience in functional needs
Requirements
Adaptability to future analytical use was critical User was continually reengineering their
processes and the information being stored
Stable physical structure relationships, but also flexible (reengineered) organizational relationships
Give the client a scalable data repository to build on
Approach
Decision to model utilizing objects “Objects are the enabling technology for
adaptive business systems.” Taylor 1998 Control impact of changes (encapsulation) Closer fit to real world
Jasmine ii Pureness (minimize translation effort) Computational capability
LAN now but future move to intranet
Team Methodology
Functional analyst and modeler Development team for Java GUI and ODQL
(located remotely)Brainstorm kick-off session with:
Client principal users Master planning contractors (data
creators) Other subject matter experts
Periodic reviews
GUI Lessons
Design Approach
Jasmine ii Business logic Data storage
GUI User interface only Minimal business logic
User Interface - Java
Jasmine Object Database
App Shell
Printing
Charting
Data Storage
Client File Access
Object Creation Wizards
Java Proxy Objects
Business Logic
Explorer Navigation
Data Entry / Edit
Whip Drawings
Red arrows indicate write only, yellow indicates read & write, and thick black arrows indicate read only. Thin black lines indicate ability to call a sub-system with point indicating who was called.
Red shapes indicate data creation capability. Others are read access. Blue shapes indicate accessing local (client) systems.
GUI Decisions
Considered several issues: Compatibility with Jasmine ii Future intent to move to Internet Flexibility in development Availability of programmers
Considered: Jasmine (v1.2), CA-Visual Objects (v2.0) Java, C++
GUI Decision (Then and Now)
Java selected then Java proxy (TDI)
Today would choose CA-Visual Objects 2.5 as front-end tool Better framework for development Faster performance Strong(er?) Jasmine ii support COM support for plug-ins
Implications on Design
Maximum extent of business logic residing in Jasmine ii
GUI would have minimal business logic (and would reside on client machines)
Pick lists reside in Jasmine ii not in GUI Retrieval methods used a unique serial number
attribute GUI fetches collection of strings with serial
number at end Based on user choice, serial number is used to
fetch the object
Modeling Lessons
f loor
FloorNumber : StringOwningObject : buildingFloorToFloorHeight : DecimalZones : SetOf Object(spaceZone)Components : SetOf Object(roomAbstract)WorkSpaces : SetOf Object(spaceWrapper)Analy ses : SetOf Object(f loorAnaly sis)EngrFloorSy stems : SetOf Object(engrSy sFloor)
f loorSummary () : StringdepartmentFloorPlan(cDepartment : String) : areaCADPlanaddWorkSpace() : Booleanremov eWorkSpace() : BooleangetWorkSpace() : spaceWrapperf loorNumber() : Stringf loorToFloorHeight() : DecimaladdZone() : Booleanremov eZone() : BooleangetZone() : spaceZone
(from Floor Package)
PHYSICAL BUILDING PACKAGE
Want to hav e ability to input only top lev el numbers AND to input detail components and hav e things rolled up to top lev el.
Figure 13
SpaceAreaPackage
(f rom Phy sicalBuildingPackage)
HFPABaseObject
Alternativ es : SetOf Object(HFPABaseObject)Donor : HFPABaseObjectEntity Statuses : SetOf Object(entity Status)
currentEntity Status() : StringisExisting() : BooleancreateAlternativ e() : HFPABaseObjectcurrentEntity StatusObject() : entity Statusdonor() : HFPABaseObjectaddAlternativ e() : BooleangetAlternativ e() : HFPABaseObjectalternativ eList() : SetOf Stringremov eAlternativ e() : Boolean
(from BaseClasses Package)
spatialAssessment
Assessments : SetOf Object(analy sisAbstractClass)
addAssessment() : BooleangetAssessment() : analy sisAbstractClassassessmentList() : SetOf Stringremov eAssessment() : Boolean
(from Assessment Package)
spatialAnaly sis
Assessments : SetOf Object(spatialAssessment)
addAssessment()
(from Assessment Package)
phy sicalSpatialItem
WidthDimension : DecimalDepthDimension : DecimalHeightDimension : DecimalGSF : IntegerCADPlanSet : setOf CADProjects : SetOf Object(project)SolutionText : StringForceNSF : IntegerAnaly ses : SetOf Object(spatialAnaly sis)Assessments : SetOf Object(spatialAssessment)ConceptNarrativ e : String
calculateGSF() : Integergsf (iGSFValue : Integer) : IntegersolutionText() : StringaddProject() : Booleanremov eProject() : Booleanf indProjects() : SetOf Object(project)f indOngoingProjects() : SetOf Object(project)hasActiv eProjects() : BooleanprojectList() : SetOf StringdrawingList() : SetOf Stringgsf PerPerson() : Decimalnsf PerPerson() : DecimalcountOccupants() : Integerf orceNSF() : Integerdef aultCADPlan() : cadPlanDwforganizationList() : SetOf StringbuildingName() : StringdepartmentList() : SetOf StringaddAnaly sis() : BooleangetAnaly sis() : spatialAnaly sisremov eAnaly sis() : BooleanengineeringSummary () : StringarchitecturalSummary () : StringcalculateNSF() : Integernsf () : IntegerconceptNarrativ e() : Stringremov eAssessment() : BooleangetAssessment() : spatialAssessmentaddAssessment() : BooleanassessmentList() : SetOf Stringanaly sesList() : SetOf StringoccupantCapability () : IntegercountRooms() : IntegergetProject() : project
(from SpaceAreaPackage)
baseSerial
$ LastKey ID : StringKey ID : String
nextKey ID()key ID()newObject()getObject()getDisplay List()display Name()addAssignment()
(from BaseClasses Package)buildingSite
Installation : installationBuildings : SetOf Object(building)PlanSet : setOf CADSy stemEngrSite : engrSy sSiteOrgOwner : organizationalParty
buildingList() : SetOf Stringinstallation() : installationaddBuilding(newBuildings : building) : BooleangetBuilding(getBuildings : building) : buildingremov eBuilding(remov eBuildings : building) : BooleanplanSet() : setOf CADsy stemEngrSite(newSy stem : engrSy sSite) : engrSy sSiteorgOwner() : organizationalParty
(from SiteRelatedPackage)
category Code
Category Code : StringCategory Label : String
category Code() : Stringcategory Label() : String
buildingAnaly sis
Architectural : StringInf rastructure : StringSite : StringOv erall : StringOwningObject : buildingPicture : mediaCF::Bitmap
buildingProf ile
Summary : StringOwningObject : building
engrSy sBuilding
OwningObject : building
owningObject()
(from engineeringBuilding
building
YearBuilt : IntegerFunctionalUse : StringUsingOrganizations : SetOf Object(organizationalParty )PrincipalOrganization : organizationalPartyTotalOccupants : IntegerOrigCost : f y PriceQuoteComponents : SetOf Object(f loor)OwningObject : installationEngineeringSy stem : engrSy sBuildingAnaly ses : SetOf Object(buildingAnaly sis)BuildingProf ile : buildingProf ileBuildingSite : SetOf Object(buildingSite)Category Code : category CodeBOD : DateFOD : DateBuildingNumber : String
calcComponents(test1 : building, test2 : f loor) : BooleanbuildingAnaly sisReport() : StringreplacementCost() : IntegercalcNSFServ ice() : Integergsf Av gAge() : Integery earBuilt() : Integerf unctionalUse() : StringprincipalOrganization() : organizationalPartytotalOccupants() : IntegerorigCost() : f y PriceQuotebuildingProf ile() : buildingProf ilebuildingSite() : buildingSitecategory Code() : category CodeaddUsingOrganization() : Booleanremov eUsingOrganization() : BooleangetUsingOrganization() : organizationalPartygetAnaly sis() : buildingAnaly sisusingOrganizationList() : SetOf StringengineeringSy stems() : engrSy sBuildingconditionRating() : DecimalconditionStatus() : StringconditionIcon() : mediaCF::BitmapbuildingNumber() : String
Modeling Design Tools
Object International’s Playground (free) with Coad’s book (OOA)
Moved to Rational Rose 98iLooked at TogetherJ (www.oi.com) Used Visio for designing screensWord for documentation (Cut and paste)
Playground Model
Rose Model (Colored)
f loor
FloorNumber : StringOwningObject : buildingFloorToFloorHeight : DecimalZones : SetOf Object(spaceZone)Components : SetOf Object(roomAbstract)WorkSpaces : SetOf Object(spaceWrapper)Analy ses : SetOf Object(f loorAnaly sis)EngrFloorSy stems : SetOf Object(engrSy sFloor)
f loorSummary () : StringdepartmentFloorPlan(cDepartment : String) : areaCADPlanaddWorkSpace() : Booleanremov eWorkSpace() : BooleangetWorkSpace() : spaceWrapperf loorNumber() : Stringf loorToFloorHeight() : DecimaladdZone() : Booleanremov eZone() : BooleangetZone() : spaceZone
(from Floor Package)
PHYSICAL BUILDING PACKAGE
Want to hav e ability to input only top lev el numbers AND to input detail components and hav e things rolled up to top lev el.
Figure 13
SpaceAreaPackage
(f rom Phy sicalBuildingPackage)
HFPABaseObject
Alternativ es : SetOf Object(HFPABaseObject)Donor : HFPABaseObjectEntity Statuses : SetOf Object(entity Status)
currentEntity Status() : StringisExisting() : BooleancreateAlternativ e() : HFPABaseObjectcurrentEntity StatusObject() : entity Statusdonor() : HFPABaseObjectaddAlternativ e() : BooleangetAlternativ e() : HFPABaseObjectalternativ eList() : SetOf Stringremov eAlternativ e() : Boolean
(from BaseClasses Package)
spatialAssessment
Assessments : SetOf Object(analy sisAbstractClass)
addAssessment() : BooleangetAssessment() : analy sisAbstractClassassessmentList() : SetOf Stringremov eAssessment() : Boolean
(from Assessment Package)
spatialAnaly sis
Assessments : SetOf Object(spatialAssessment)
addAssessment()
(from Assessment Package)
phy sicalSpatialItem
WidthDimension : DecimalDepthDimension : DecimalHeightDimension : DecimalGSF : IntegerCADPlanSet : setOf CADProjects : SetOf Object(project)SolutionText : StringForceNSF : IntegerAnaly ses : SetOf Object(spatialAnaly sis)Assessments : SetOf Object(spatialAssessment)ConceptNarrativ e : String
calculateGSF() : Integergsf (iGSFValue : Integer) : IntegersolutionText() : StringaddProject() : Booleanremov eProject() : Booleanf indProjects() : SetOf Object(project)f indOngoingProjects() : SetOf Object(project)hasActiv eProjects() : BooleanprojectList() : SetOf StringdrawingList() : SetOf Stringgsf PerPerson() : Decimalnsf PerPerson() : DecimalcountOccupants() : Integerf orceNSF() : Integerdef aultCADPlan() : cadPlanDwforganizationList() : SetOf StringbuildingName() : StringdepartmentList() : SetOf StringaddAnaly sis() : BooleangetAnaly sis() : spatialAnaly sisremov eAnaly sis() : BooleanengineeringSummary () : StringarchitecturalSummary () : StringcalculateNSF() : Integernsf () : IntegerconceptNarrativ e() : Stringremov eAssessment() : BooleangetAssessment() : spatialAssessmentaddAssessment() : BooleanassessmentList() : SetOf Stringanaly sesList() : SetOf StringoccupantCapability () : IntegercountRooms() : IntegergetProject() : project
(from SpaceAreaPackage)
baseSerial
$ LastKey ID : StringKey ID : String
nextKey ID()key ID()newObject()getObject()getDisplay List()display Name()addAssignment()
(from BaseClasses Package)buildingSite
Installation : installationBuildings : SetOf Object(building)PlanSet : setOf CADSy stemEngrSite : engrSy sSiteOrgOwner : organizationalParty
buildingList() : SetOf Stringinstallation() : installationaddBuilding(newBuildings : building) : BooleangetBuilding(getBuildings : building) : buildingremov eBuilding(remov eBuildings : building) : BooleanplanSet() : setOf CADsy stemEngrSite(newSy stem : engrSy sSite) : engrSy sSiteorgOwner() : organizationalParty
(from SiteRelatedPackage)
category Code
Category Code : StringCategory Label : String
category Code() : Stringcategory Label() : String
buildingAnaly sis
Architectural : StringInf rastructure : StringSite : StringOv erall : StringOwningObject : buildingPicture : mediaCF::Bitmap
buildingProf ile
Summary : StringOwningObject : building
engrSy sBuilding
OwningObject : building
owningObject()
(from engineeringBuilding
building
YearBuilt : IntegerFunctionalUse : StringUsingOrganizations : SetOf Object(organizationalParty )PrincipalOrganization : organizationalPartyTotalOccupants : IntegerOrigCost : f y PriceQuoteComponents : SetOf Object(f loor)OwningObject : installationEngineeringSy stem : engrSy sBuildingAnaly ses : SetOf Object(buildingAnaly sis)BuildingProf ile : buildingProf ileBuildingSite : SetOf Object(buildingSite)Category Code : category CodeBOD : DateFOD : DateBuildingNumber : String
calcComponents(test1 : building, test2 : f loor) : BooleanbuildingAnaly sisReport() : StringreplacementCost() : IntegercalcNSFServ ice() : Integergsf Av gAge() : Integery earBuilt() : Integerf unctionalUse() : StringprincipalOrganization() : organizationalPartytotalOccupants() : IntegerorigCost() : f y PriceQuotebuildingProf ile() : buildingProf ilebuildingSite() : buildingSitecategory Code() : category CodeaddUsingOrganization() : Booleanremov eUsingOrganization() : BooleangetUsingOrganization() : organizationalPartygetAnaly sis() : buildingAnaly sisusingOrganizationList() : SetOf StringengineeringSy stems() : engrSy sBuildingconditionRating() : DecimalconditionStatus() : StringconditionIcon() : mediaCF::BitmapbuildingNumber() : String
Tool Lessons (Modeling)
Playground good for learning basic object concepts (quick to make small designs)
Rose worked well… VB script provides extensibility Web publisher supports communication Generating hardcopy can be frustrating
Version control between Rose models can be difficult Rose includes visual differencing tool
Tool Lessons (screens)
Visio worked well… Tip - Use the layer capability in Visio if creating
windows with tabs. Able to do all aspects of design (include
pasting sample pictures) Cut and paste into Word presented no
surprises!A better method may have been to use
same screen design tool used by the Java developers
Unload and Load
Use of Excel to rapidly create test data for Load & Unload into Jasmine ii
Formatting tips: OIDs are bracketed < > Characters are in quotes “” Date is: date “1999-12-31-AD” Reference is:
<ClassFamily::ClassName::OID>> Collection is: { <object ref>, <object ref>, … } Boolean: FALSE or TRUE NIL
Excel Layout
Table 1: Excel spreadsheet showing creation of data for pasting into unload file
oid KeyID MEPRSRefCode DMISID RefOID DMIS OID<1025> 1 <VWIrose::meprsRefCode::1025> <VWIrose::dmisid::1733> 1025 1733<1026> 2 <VWIrose::meprsRefCode::1028> <VWIrose::dmisid::1733> 1028 1733
Table 2: Same excel file as above but showing the formulas for building the data
oid KeyID MEPRSRefCode DMISID RefOID DMIS OID"<"&TEXT(B101+1024,0)&">"
1 "<VWIrose::meprsRefCode::"&G101&">"
"<VWIrose::dmisid::"&H101&">"
1025 1733
"<"&TEXT(B102+1024,0)&">"
2 "<VWIrose::meprsRefCode::"&G102&">"
"<VWIrose::dmisid::"&H102&">"
1028 1733
Unload File Tip
When pasting data into the file be sure to edit the number of records
Jasmine/unload_format_1.0.0"VWIrose","startFYTimePoint",4,1,0,0,0,0,120,"====== CLASS startFYTimePoint ==== fromTimeReference Package =====""VWIrose","timerClass""oid","DateTP","TimeTP"<1025>,date"1900-10-1-AD","00:00:00"<1026>,date"1901-10-1-AD","00:00:00"
Figure 1: Sample of unload output for textual data
Unload Sequence
Create sample object in Jasmine studioPerform unload of interested and referenced
classes with -s and -d flagsMimic the attribute layout in Excel using
extra columns to easily reference specific OIDs
Always start with OID <1025>Copy layout to another worksheet and
export that to a CSV (comma delimited) file.
Sequence continued...
Cut and paste from the CSV into the unload file, being sure to edit the number of records.
Delete the classes from within Jasmine studio
Perform load using the -d and -s flagsCheck
Schedule
Originally 261 calendar days Requirements Development - OOA Architecture - OOD Stage 1 thru 3
– Database entry screens– Output and Analysis– Data load
Product release
Revised Schedule
Revised to 349 calendar days Requirements Development Iterations #1 - 5 covering different subject
areas– Analysis and design fell behind– Iterations allowed design and coding to
overlap Number of iterations reduced to 3 Data load and Installation
Schedule Comparisons
Task Original LatestOOA 9 daysOOD 28 days 13 monthsScreen Design 17 days 2 monthsScreen Coding 8 days 520 hoursODQL 24 days 700 hoursData –Deployment
39 days ?
Scheduling Tools
Resource: Steve McConnell’s book and
www.Construx.com/survivalguide MS Project templates for
development
Schedule Lessons
Schedule too optimisticModeling is slow (took over 15 months).
Estimated to be about 85% completeBrainstorm session allowed for total of 4
days over 2 separate weeks. Recommend 5 days each.
Modeling team was remote from programmers. Not sufficient allowance for communication of concepts (either through documentation and/or meetings).
Management Lessons
Regardless of any subject matter knowledge, client/user involvement and commitment must be secured.
Cost estimate was too optimistic (even for a prototype). Requirements development should be executed separately based upon a time+ method.
Final estimate was $350,000 versus original of $125,000 ($70.00 hourly rates).
Session Summary
Object modeling presents numerous advantages
However, performing the analysis and design requires extended effort before coding begins
Capable tools are critical to successVisual Objects v2.5 has some definite
development advantages over Java
Tools
Playground. Object International, Inc. (Object modeling tool -free as a learning tool) www.OI.com
Rational Rose 98i, Rational Inc. , UML Modeler ~$2,000, www.rational.com
Rational Integration Kit, CA, On the Jasmine ii Beta CD, www.cai.com
ODQL Cleaner, Cleans the ODQL generated by the integration kit so it will compile in Jasmine (truncates the description text) (Visual Objects app. free), www.Hungry-Hippo.com
Jasmine Comparer, Compares two Jasmine models (loaded as separate class families) and prints exception report (Visual Objects app. free), www.Hungry-Hippo.com
Tools continued . . .
Jasmine Workbench, Infopike Inc., GUI utility for CODQLIE, library and class family management (free on partner CD of Jasmine) www.Infopike.com
Software Cost Estimator, (free) www.Construx.com Would Have Liked
Requisite Pro, Rational Inc., Requirements documentation manager, $$$, www.rational.com
Version control for ODQL (via internet)
Bibliography
Object Models Strategies, Patterns, & Applications, 1997 Coad, Peter ISBN 0-13-840117-9
Object Technology, A Manager’s Guide, 1998, Taylor, David ISBN 0-201-30994-7
Business Engineering with Object Technology, 1995, Taylor, David ISBN 0-471-04521-7
Software Project Survival Guide. 1998. McConnell, Steve ISBN 1-57231-621-7
The Rational Unified Process, An Introduction. 1999 Kruchten, Philippe ISBN 0-201-60459-0
Bibliography continued . . .
The Jasmine Object Database, 1999, Khoshafian, Setrag ISBN 1-55860-494-4
Visual Modeling with Rational Rose and UML. 1998. Quatrani, Terry ISBN 0-201-31016-3
UML Distilled, 1997, Fowler, Martin ISBN 0-201-32563-2 Analysis Patterns Reusable Object Models, 1997, Fowler,
Martin ISBN 0-201-89542-0 Dynamics of Software Development, 1995, McCarthy, Jim
ISBN 1-55615-823-8
Bibliography continued . . .
Object-Oriented Modeling and Design for Database Applications. 1998. Blaha, Michael ISBN 0-13-123829-9
The Data Model Resource Book, 1997, Silverston, Len ISBN 0-471-15364-8
Java Modeling in Color with UML, 1999, Coad, Peter ISBN 0-13-011510-X
The Data Modeling Handbook, 1994, Reingruber ISBN 0-471-05290-6
The Encyclopedia for Jasmine vol 1. 1998. Straley, Stephen ISBN1-890726-09-5
Questions & Answers
Session Evaluation Form
... please place it in the basket at the back of the room.
After completing your session evaluation form ...