6.170 / Spring 2001 / Objectives and Outcomes
Handout A6
Objectives
The course covers a wide range of software development skills, from
analyzing a problem to implementing a solution. On completion of the
course, students should be able to
- Analyze a software development problem and express its essence
succinctly and precisely;
- Design a module structure to solve a problem, and evaluate alternatives;
- Implement a module so that it executes efficiently and correctly;
- Work in a small team, cooperating on these aspects of software
development, and exchanging ideas in a constructive and organized
fashion;
- Appreciate engineering issues in the development of software, such as
the importance of addressing the user's concerns, working with limited
resources, maintainability, dependability, and division of labor.
Prerequisites
The course assumes that the student is able to
- Write a small (ie, 100 line) program to meet a specification;
- Understand basic notions of imperative programming (such as loops,
procedures, exceptions, and aliasing) and of object-oriented programming
(such as objects, references, self, interfaces, and subclassing);
- Use, and understand programs that use, basic data structures such as
arrays, hash tables, trees and lists.
Outcomes
On completion of the course, students should be able to
- Identify key entities and relationships in the problem domain; write
succinct textual descriptions of problems in the style of a user manual;
- Design programs:
- Construct a design consisting of a collection of modules, using
module dependency diagrams to express and evaluate couplings between
modules, and object models to relate concrete to abstract state;
- Exploit well-known design patterns (such as Iterator, Observer,
Factory and Visitor);
- Devise appropriate module specifications and express them informally
in terms of pre- and post-conditions;
- Understand the appropriate roles of subtyping and inheritance,
and use them effectively.
- Implement programs:
- Write object-oriented code to satisfy the specification of a module;
- Express rep invariants, understand their impact on efficiency and ease of
implementation, and implement them as runtime assertions;
- Understand the fundamental notions of data abstraction, and read and
write informal abstraction functions for simple datatypes;
- Evaluate the correctness of a module by careful manual review using
the specification, rep invariant and abstraction function; and
- Develop unit and system-level test suites, and evaluate their
effectiveness using simple notions of specification and code coverage.
- Perform a small development in a team, including problem analysis,
design, implementation, and testing.
Each outcome supports the objective with the corresponding number. Objective
(5) is supported by outcome (4).
Back to Administrative Info.
Back to the 6.170 home page.
For problems or questions regarding this page, contact: 6.170-webmaster@mit.edu.