ICS 125: Practical Design Techniques
Overview
- Quick review of design concerns and approaches
- Techniques you will use in this course
- Example: University registration system
- Quick Requirements
- Classes and State machines
- Scenarios
- Architecture
- Security
- User interface
- Persistence
- Tips on the design process
Quick review of design concerns and approaches
- Design = synthesis + analysis. You must evaluate your designs.
- Design is the crossroads from requirements to implementation and integration testing
- Most system qualities are determined by design (and implementation)
- There are many types of design that address different aspects of the system
- Object-oriented design
- Architecture
- Security
- User interface
- Persistence
- Source code organization
Techniques you will use in this course
- Object-oriented design using UML
- Architecture: component deployments
- Security: security realms, roles, encryption
- User interface: tasks, interaction contexts, widget choice
- Persistence: logical and physical database schema
- Source code organization and build process
Example: Quick Requirements
- Imagine a university registration system like TELE
- User story: Adam is a junior who wants to enroll in a course.
He chooses one, but finds that he lacks a prerequisite and has a
scheduling conflict.
- User story: Beth tries to enroll in a course, but it is full, so
she gets on the waiting list. Later she sees that the enrollment
capacity has been expanded and she is in the course, but it meets in
a different room.
- User story: Administrator Cathy see that there is strong demand
for a course and moves it to a similar, but larger, room that is
available at the same days and time.
Example: Classes and State machines
- Classes:
- Student
- Instructor
- Person
- CourseCatalog
- Course
- CourseOffering
- Room
- RoomReservation
- Student States:
- (Freshmen, Sophmore, Junior, Senior) X (GoodStanding, OnLeave, OnProbation, Graduated)
Example: Scenarios
- Adam logs into the system
- Adam requests to view the course
- UI request handler validates its input
- UI request handler finds course object in Catalog
- UI calls course.display()
- Adam views the course information
- Adam requests adding the course
- UI request handler validates its input
- UI request handler finds course object in Catalog (again)
- UI calls course.add(student)
- Course asks Student about each prerequisite
- Course adds error to response object
- Course asks Student about schedule conflicts
- Student asks currently enrolled course about schedule conflicts
- Current course reports schedule conflict
- Student reports schedule conflict
- Course reports schedule conflict
- Course adds error to response object
- UI checks response for errors
- UI displays error messages
Example: Architecture
- Front-end web server: user interface
- Is a load balancer needed?
- Telephone voice menu server: user interface
- Web application server: business objects and business rules
- Legacy application: UI, objects, and rules
- Database server: reliable data storage and some rules
- Is a high-powered server needed?
Example: Security
- Physical security: all servers in locked rooms. Server rack
itself is locked.
- Host security: no operating system login by users on server
machines, files owned by specific unix users with limited access bits.
- Network security: firewalls in place
- Application security:
- Authentication: usernames and passwords
- Password quality enforced
- Authorization: each user has a role, each action requires a certain role
- Adminsitrators can review user permissions
- Encryption: SSL on login only
- Audit log of all accesses and changes
Example: User interface
- 1. Describe the user's task
- What choices do they have at each step?
- What information do they need for each decision?
- 2. Define interaction contexts that provide needed information and
affordances
- 3. Design specific displays and choose widgets that fit the task
Example: Persistence
- Logical database design
- Physical database design
- Session persistence
- Distributed storage
Tips on the design process
- Check the feasibility of your design early
- Use design templates and checklists to avoid missing major areas
- Be able to describe the design of major aspects of the system
independently, even though they are intermingled in the implementation
- In iterative development, designs are always incomplete. They
need to evolve along with everything else.
- Designs will change as new features are added. They need to be
easy to maintain, easy for everyone to access and understand
- Don't specify everything in extreme detail, specify the
critical, interesting, unexpected, or error-prone aspects in the
most detail. Specify development proceedures associated with
extending the system.
- Designs should have clear traceability back to requirements and
forward to implementation and integration testing.
sample use cases templateexample software testing plan templateProject plan template