|A Software Engineering Course at|
The Evergreen State College
Program DescriptionEven the best efforts of computer users and software engineers have not alleviated critical software development problems: most software is late and over-budget, does not meet user needs or expectations, or is socially irresponsible. The "software engineering" problem is not just a matter of technology, but a problem of creativity and invention, organization, psychology, artistic design, group dynamics and culture. In addition considerable knowledge and understanding of the application area is required to design, implement, market, sell, deploy, support or maintain a successful system. Evergreen's Student Originated Software program is designed to address these issues and to prepare students to face these problems. The full time, year-long program provides not only in-depth practical experience in software engineering but also a deeper understanding of the issues behind the inherent difficulty of writing responsible, effective software.
The program teaches skills and gives experience in software engineering and advanced computer science and examines the role of computer science in the larger world of technology and computing. The major components of the program are
Software EngineeringThe Student Originated Software program teaches software engineering through the students' application and integration of the following skills to a software project:
In the winter quarter, attention turns to the system design and implementation aspects of software engineering, and in the spring quarter to implementation, documentation, evaluation and testing. Guest speakers contribute to students' understanding of software development.
Year-long Software Development ProjectThe primary vehicle for learning how to write responsible software is a year-long group software project, in response to an identified real-world need. In the fall quarter, students organize themselves into teams according to their interests and skills and each team identifies a viable project and "customer". The groups then perform a preliminary systems analysis and feasibility study. Students demonstrate their work through informal presentations during the quarter and a final, more formal presentation of their project proposal, as well as a project notebook.
In winter and spring quarters, project work continues with system design, detailed design, system and component test planning, and implementation. Students are asked to prepare user's guides, maintenance and installation plans; and to evaluate the final system. Considerable effort is directed towards group team dynamics and towards making the projects viable software products. Students are asked to evaluate their team's group dynamics and to consider what marketing their product to an identified customer base would entail. As before, each project team meets on a weekly basis with their faculty. Students demonstrate their work through the aforementioned project notebook containing deliverables, meeting notes and other documentation, public presentations and a public software demonstration.
Program SeminarsEach quarter, program seminars complement technical work. Focus is on... Students write several short papers and exercises about the material.
Technical ComponentsEach quarter, the program offers technical components that provide essential (in the fall) and recommended (in winter and spring) computer science course work. Some students may organize independent study that is directly relevant to their project.
Object-Oriented Programming and System Design in Smalltalk (fall)In this part of the program, students are introduced to concepts of object-oriented programming, primarily through the study and practice of the Smalltalk language. A major goal is to give students an opportunity to answer the claims whether object-oriented programming (OOP) will change the nature of programming and system construction. To that end, we cover the fundamental concepts of OOP (e.g., objects, messages, methods, and classes), and explore data abstraction, encapsulation, typing, inheritance, and polymorphism. Students also are introduced to the idea of graphical user interface rapid prototyping with ParcPlace's VisualWorks, and use that tool to complete the programming project. Students do weekly small programming assignments: including the ParcPlace Smalltalk tutorial, and demonstrate their understanding of the language through a final exam.
Introduction to Database Systems (winter)Database management has evolved from a specialized computer application to a central component of a modern computing environment. Introduction to Database Systems is intended to give students an understanding of fundamental concepts of database management, including aspects of database design, languages and system implementation. Topics covered are: conceptual, logical and physical design (including entity relationship modeling); the relational data model; the relational algebra and calculus, and SQL; integrity constraints; normalization; storage, file, and search structures; indexing; query processing and query optimization. Some students may also study logging and recovery, transaction management; and concurrency control. Because familiarity with basic data structures, computer organization, operating systems, and programming languages was assumed, the material was presented at an advanced undergraduate level. Students demonstrate their understanding of the material by participation in class discussions, seven homework assignments (five of which are required), one take home examination, and a database project in Microsoft Access. During the last three weeks of the quarter, some students continue database project work, while others integrate their study of traditional topics through four research seminars that cover object-oriented and spatial databases and distributed systems.