Mercury Post

advertisement
Mercury Post-mortem
CS 490D
April 24, 2001
Overview
•
•
•
•
Goals of post-mortem procedures
Summary of problems
Possible solutions & lessons learned
Design review w.r.t. implemented
functionality
Why do a Post-mortem?
• Learn from mistakes & document for future
reference
• Examine current state of project
• Cannibalize project for useful parts
• Extract existing value from project
Problems Encountered
• 3 scopes of problems:
• Team Scope
• Project Scope
• Component Scope
Team Scope Problems
• Busy schedules
• Difficult to meet & coordinate
• Large group
• Miscommunication & confusion
• Strong-willed personalities
• Too many chefs
• Interruptions, too much debate…
• Lack of Accountability
• Why should members be responsible?
• Personal Issues
• Interference from the outside world
• Timelining problems
Possible Solutions
• Set weekly time block for entire group to
•
•
•
•
meet
Meet as sub-groups as necessary
More strict & organized environment for
meetings & development
Peer evaluations of performance
Rewards system for progress
Project Scope Problems
• Lack of existing infrastructure
• No testing procedures
• No code repository
• No coding standards
• Not enough low-level detail in design
• Classes not well-defined
• Cross-tier interfaces not in design
• GUI & Transport never broken-down
• UML & Java learning curves
Possible Solutions
• Define & implement infrastructure early
using existing & familiar tools
• Build testing into design early
• Design all the way down to method names
& parameters
• Design entire project in-depth to near
psuedocode level
Component Issues
• Collaboration Diagram GUI Issues
• Engine
• Support classes & ContactMgr AccountMgr
• ServiceMgr
• Transport
ContactList
-contacts
-categories
-sort-order
+SendMessage(in Msg : Message, in Con : Contact)
+ReceiveMessage(in Msg : Message, in Acc : Account, in Svc : Service)
+AddContact(in Con : Contact)
+RemoveContact(in Con : Contact)
AccountMgr
+AddAccount(in Acc : Account)
+RemoveAccount(in Acc : Account)
+ConnectAccount(in Acc : Account)
+DisconnectAccount(in Acc : Account)
1
1
Interfaces
1
Manages
0..
*
1
Contains
GUI
Account
-mercuryid : unsigned long(idl)
-userid
-svc : Service
-passwd : String
1
1
Interfaces
1
Interfaces
+GenerateConnectEvent()
+GenerateDisconnectEvent()
+GenerateSendMessageEvent()
+GenerateReceiveMessageEvent()
+GenerateAddContactEvent()
+GenerateRemoveContactEvent()
+GenerateAddAccountEvent()
+GenerateRemoveAccountEvent()
Contact
-name
-status
1
1
Receives
From/
To
1
0..
*
1
1
Has
Sends
ServiceMgr
+CreateServiceConnection(in Svc : Service)
+DeleteServiceConnection(in Svc : Service)
+SendMessage(in Msg : Message, in Svc : Service, in Cacc : ContactAccount)
+ReceiveMessage(in Msg : Message, in Svc : Service, in Cacc : ContactAccount)
+LookupAccount(in LA : Account)
+NotifyContactRemoval(in Con : Contact)
+LookupContact(in Con : ContactAccount)
0..
*
0..
*
1..
*
Message
1
Manages
0..
*
0..
*
-userid
-svc : Service
From/
To
Service
-protocol
-service
+ConnectService()
+DisconnectService()
+SendMessage(in M : Message, in Cacc : ContactAccount)
+ReceiveSegments()
+LookupAccount(in LA : Account)
+NotifyContactRemoval()
+LookupContact(in Con : ContactAccount)
ContactAccount
-Msg : String
-datestamp : long
-sender : Contact
Transmits
1
0..
*
1
*
Key Reason I Couldn’t get GUI
to Work
• Design
• Didn’t spec out the actual functions and
member variables
• Didn’t fully understand the communication
between layers {i.e. interfaces}
• Didn’t have any specs for the GUI. {Not sure
what to put in the menu and what to make
buttons for}
Key Reason …. Continued
• Coding
• Didn’t start earlier
• Learning curve took longer than expected
• Borders between layers were fuzzy due to the
lack of defined functions in system design.
• Java doesn’t work on every OS the same
{ menu bar}
Key Reason …. Continued
• Research
• Swing
• Was difficult to find GOOD examples
• Wasn’t like a regular CS class where you can just
ask a TA your questions!
• Forte
• Little too late
Key Reason …. Continued
• Other reasons
• Took on too much for one semester
• Underestimated the time
• Docs
• Coding
• Personal problems interfering with work
What would I do differently
• Have class functions and member variables
clearly defined in design doc.
• Have GUI layout before I start coding {i.e
what buttons/menu options where}
• Read a book on interfaces
• Less lenient on others when deadlines are
missed
What does work?
• GUI is 80% done
• Key Classes
•
•
•
•
Main GUI
Add Buddy GUI
Add Service GUI
Message GUI
What doesn’t work
• No connection to middle end via interface
• Never fully grasped the communication
between layers
• AccountMgr wasn’t completed early enough
• ServiceMgr wasn’t complete enough to
send/receive messages
• Interfaces weren’t completely understood
Key features not working
• Tree Listener
• Scope issues with AddBuddy & AddService
Mercury wouldn’t be useable
without these features!
Support Classes (complete)
•
•
•
•
•
•
Exceptions
Contact
Account
Message
Status
Interfaces
ContactMgr
•
•
•
•
Can store contacts
Retrieves contacts
Creates new contacts
Send & Receive messages implemented w/o
backing from other components
• No support for the ignore list feature yet
AccountMgr - Difficulties
•
•
•
•
Design
Personal
Testing
Final Status
AccountMgr - Design
• Unclear Design
• Availability of group members
• Data Members and Methods not included
• No connection to ServiceMgr explicitly
included in design
AccountMgr – Design and
Interactions
AccountMgr
+AddAccount(in Acc : Account)
+RemoveAccount(in Acc : Account)
Interfaces
+ConnectAccount(in Acc : Account)
1
+DisconnectAccount(in Acc : Account) 1
GUI
1
Manages
0..*
Account
-userid
-svc : Service
-passwd : String 1
Message
-Msg : String
From/To
-datestamp : long
0..* -sender : Contact
AccountMgr - Understanding
• Lack familiarity with Middle End design
• Change in responsibilities
• More knowledgeable of Front End design
throughout most of project
Timeline
1/10 –
3/23 –
Assigned
Web
Master
position
Start
of
Sem.
Assigned to
testing
End of
Sem.
2/21 –
Part of the
GUI team
4/10 –
Assigned to
develop
AccountMgr
AccountMgr - Personal
• Time Management
•
•
•
•
Heavy Courseload
Helping with Java Swing Code
Updating Web Page
Attempting to learn testing procedures
AccountMgr - Testing
• Stubs not written to test interaction with
other layers
• Circular Dependency
• GUI waiting for AccountMgr to be developed
• AccountMgr waiting for GUI to be developed
AccountMgr - Final Status
• AccountMgr code complete according to
design document
• Not tested
• Much of the unspecified but necessary
interaction not implemented
Difficulties with ServiceMgr
• Unfamiliar with Java Threading Model
• Difficulty integrating with Services
• Figuring out how to communicate
• Dealing with ICQ’s unpredictability
• Vague Design
• Passing of Account Information
• Return Values
• How ServiceMgr is used by other classes
ICQ Overview
•
•
•
•
•
Encoding was Important
UDP vs. TCP
Packet Acknowledgement
Time to Implement
Working Features
Encoding
• Many bit-wise operations
• Running packet through a hex table and checksum
key
• Scrambling key
• Without encoding packet, it wouldn’t be
recognized
• It’s encoding or scrambling but not encrypting
UDP vs. TCP
• Messages to server use UDP
•
•
•
•
Login
Logout
Acknowledgements
Client Lists
• Messages between clients use TCP
• Messages
• Chat
• File
Packet Acknowledgement
• Use UDP, but need acknowledgement
• Session fails without acknowledgement packets
• Identification numbers need to be correct or
session will fail
• Would sometimes send wrong identification
numbers
Implementation Time
• Challenging work but not impossible
• Not a speedy process
• Took weeks to get base operations down
• Debugging and necessary error-checking were
continual
• Didn’t get to TCP process. Would take at least
20-40 man-hours to get working
Working Features
• UDP
•
•
•
•
•
Connect
Disconnect
Receiving packets from ICQ server
Sending Acknowledgements
Encoding
Recap
• Importance of detailed design
• Invisible & sunk costs should be estimated
• Realistic goal setting & time lining is vital
Download