Course Description:
The course will examine topics from programming, software engineering, and interaction design and how they impact the development of computer information systems in the domain of humanities computing. It will focus on developing large software systems that require well-defined development processes, team organization and management, and a user-centered approach. Students will work on new and existing systems to further develop their software skills in the context of large-system development
Required Background:
Prerequisite: Completion of the Computer Programming Competency Exam
Students will have software development skills such that they will be able to develop small- to medium-sized programs in an object-oriented language like Java or Ruby. These skills will include using existing class libraries (especially container classes) and defining new classes. Students will have some exposure to database systems.
Students will be knowledgeable about humanities computing, including topics covered in the first year of the Masters in Digital Humanities program. This will include exposure to existing software systems and projects in humanities computing.
Primary Text:
Readings from:
Topics:
Student Practical Assignments and Projects:
Many assignments may be built on top of case studies, where existing software systems are used to illustrate concepts. Such systems might include those created or under development at the University of Virginia, or possibly the Virtual Lightbox system developed at the University of Kentucky (http://www.rch.uky.edu/~mgk/lightbox/
Project 1: Requirements elicitation and documentation.
Given a description of proposed software system, students will gather and document requirements information for that system from real or "pretend" users. Students determine and document the system boundary (i.e exactly what the system's responsibilities will be), as well as functional requirements and information items to be processed. Students will carry out interviews, study existing similar systems, etc. to gather requirements, and will document the results using scenarios, class models, etc.
Project 2: Prototyping for Requirements Analysis.
Given some basic requirements for a new system or an enhancement to an existing system, students will create low-fidelity prototypes (i.e. storyboards, paper prototypes, etc.) of the user interactions. These will be evaluated with a user testing process with potential users (possibly other students in the class) according to goals for functionality and usability. Iterative design using the prototypes will be employed to produce a better design. High-fidelity prototyping of one part of the system using Visual Basic or another rapid-application development environment will be carried out and used in an evaluation session.
Project 3: Design
Students will be asked to study the code for an existing system and recover the high-level architectural design of that system. They will document this design using the UML modeling techniques learned in class. A proposed modification to the system will be given, and students will be asked to assess how this modification might affect the design. Also, students will be asked to document how a particular low-level interaction with the system (say, in response to one user action) is carried out by modeling this using low-level design representations (e.g. UML interaction diagrams).
Project 4: Implementation
Given a set of requirements for a proposed software system, students will develop software that will represent either a first-iteration of the system with basic functionality, or a proof-of-concept prototype. This project will emphasize development of software multiple software components or subsystems that would be developed by multiple-groups of students and integrated. An appropriate system for such a project might be a client-server system with database connectivity.
Project 5: Maintenance
Students will carry out a "mini" development cycle in which they will define requirements for modification to an existing system, then re-design the existing system, implement that change, and verify that they have correctly implemented this change. This project will involve a wide-range of topics learned in the course.
This page was created on 10 August 2002.