目标
这个课程包括了一系列软件开发的技术,从一个问题的分析到解决实现。为了完成这个课程,学生应该能够:
- 分析一个软件开发问题,简单准确的表达它的本质;
- 设计一个结构模型来解决问题,评价解决问题的方法;
- 实现一个模型以便于它可以正确有效的执行;
- 以小组为单位,在软件开发的各个方面合作,有组织有建设性的相互交流意见;
- 意识到工程性在软件开发中的重要性,例如选择用户所关心的问题,使用有限的资源,软件的可维护,可靠性和人员的分工。
条件
这个课程假设学生能够
- 写一个符合规范的小程序(100行);
- 理解面向过程(例如循环、过程、异常、混淆)和面向对象(例如对象、引用、接口、子类)的基本概念;
- 使用和理解那些用基本数据结构的程序,如用数组、hash表、树、链表。
成绩
完成这个课程后,学生应该能够
- 在问题域上确定关键实体和联系;以用户手册的形式简单的写问题的描述;
- 设计程序:构造一系列模块,使用模块依赖图表达和评估模块间的耦合度,不让模型涉及到具体和抽象的状态;使用众所周知的设计模式(如迭代器、观测者、工厂和访问者);设计恰当的模型规格,采用非正式的前置后置条件表达出来;正确理解子类和继承的作用,有效的使用他们。
- 实现程序:设计满足特定规格模型的面向对象的代码;表达表示不变式,理解它们在提高应用程序效率方面的作用,用运行时间来判断程序;理解抽象数据的基本概念,可以用简单的数据类型读写非正式的抽象函数;通过用规格说明、常量和抽象函数来手工检测评估一个模型的正确性;开发单元和系统级的测试块,用简单说明的概念和代码覆盖来评估其效率。
- 在组里进行一个小的开发,包括问题分析、设计、实现和测试。
每个结果支持相应数量的对象。如4个结果支持5个对象。