计算与 软件工程 课程群的教学实践

29
计计计计计计计 计计计计计计计计 计计[email protected] 计计[email protected] 计计计计计计计计 计计计计计计计计计计计计计计计 计计计计计计计计计计计计计2011 计计

Upload: kipling

Post on 05-Jan-2016

104 views

Category:

Documents


0 download

DESCRIPTION

计算与 软件工程 课程群的教学实践. 骆斌( [email protected] ) 邵栋( [email protected] ) 南京大学软件学院 计算机软件新技术国家重点实验室 计算机类国家级教学团队会议, 2011 ,杭州. 计算与软件工程课程教学改革的背景. 人才培养转型 从科学人才培养到工程师培养的转变 软件工程类课程 教学内容 与 教学方法 均需从面向计算机科学向面向软件产业转换. 科学研究人员与软件工程师. 科学研究 人员 扩展 人类对于科学的 认识 需要 系统的学习科学知识和科学 方法 软件工程 师 构建 可靠好用的规模产品 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 计算与 软件工程 课程群的教学实践

计算与软件工程课程群的教学实践骆斌( [email protected])邵栋( [email protected]

南京大学软件学院计算机软件新技术国家重点实验室

计算机类国家级教学团队会议, 2011,杭州

Page 2: 计算与 软件工程 课程群的教学实践

计算与软件工程课程教学改革的背景

• 人才培养转型–从科学人才培养到工程师培养的转变

• 软件工程类课程–教学内容与教学方法均需从面向计算机科学向面向软件产业转换

Page 3: 计算与 软件工程 课程群的教学实践

科学研究人员与软件工程师

• 科学研究人员–扩展人类对于科学的认识–需要系统的学习科学知识和科学方法

• 软件工程师–构建可靠好用的规模产品–需要学习更为全面的科学知识和包括科学方法在内的各种方法,深刻理解设计一个合格产品所涉及的多方面因素

Page 4: 计算与 软件工程 课程群的教学实践

计算机科学专业的课程设置方式

• 分技术主题的课程设置方式–计算机组成原理 (机器语言 )–汇编语言、 (Fortran-〉 C++)语言–操作系统、编译、数据库、网络–求同:数据结构、离散数学–软件工程、图形、人机交互、人工智能、程序设计语言理论、职业与道德

– CAD、电子商务、……• 分技术主题利于专业分工与研究深入

Page 5: 计算与 软件工程 课程群的教学实践

软件产业对人才培养需求的变化• 形式化和自动化是 CS的核心, CS的进展不断提高可自动化的程度,对于软件研发而言:– 越来越少的人会接触到系统软件构造, CE越来越走进 EE的怀抱

– 大规模软件、领域软件、嵌入式软件、可信软件、可用性等工程化需求越来越迫切,对大多数开发任务而言,算法 /性能的要求↓,工程性要求↑

• 工程性人才培养从 CS中分离出来的想法逐步成熟– D. Parnas, "Software engineering programs are not computer science programs" IEEE Software, vol. 16, 1999

– 与产业需求差距最大的十个知识域:沟通能力,人机交互 /用户界面,领导能力,实时系统设计,管理能力,软件成本,软件度量,软件可靠性与容错,职业与道德,需求获取与分析; IEEE Software, vol. 18, 2001

– CC2002:SWEBOK2004(2010), SE2004(2010)/SEEK

Page 6: 计算与 软件工程 课程群的教学实践

CCSE的课程设置 (计算机科学优先方案 )

• 较多沿用传统计算机科学与技术课程:– 程序设计基础、面向对象方法、软件工程概论

– 离散数学、数据结构、软件构造– 计算机组织结构、操作系统与网络– 软件需求、软件设计与体系结构、软件测试、软件过程与管理、人机交互的 SE方法:(两套)

– 职业基础、团队交流、工程经济学• 一个专业存在专业名称相同的课程意味着该专业尚在成熟的道路上

Page 7: 计算与 软件工程 课程群的教学实践

软件工程概论的传统教学方式• 软件工程概论的教学方式– 定位于计算机科学的一个知识领域– 覆盖可研、需求、设计、测试、演化和管理等– 就知识而知识,或穿插一个实验用例

• 软件工程概论在新专业教学面临的问题– 因循 CS 以程序设计为中心的课程设计思路(编码编码再编码 , 现在只不过是按照工程规范编码 )

– 分离了软件构造与重构的知识教学– 知识面面俱到,忽略了适用性描述 : 软件规模,产品特性,开发团队,成本,质量, ...

– 工程观树立的时间? 4→3→2→1( 那个年级 )

Page 8: 计算与 软件工程 课程群的教学实践

CCSE的软件工程优先方案

• 整合程序设计基础、面向对象方法、软件工程概论三门课程,构建软件工程与计算– 融软件工程技术和程序设计、计算系统认知教学于一体

–从一上开始分三个学期执行,小规模系统 /中规模系统 /中规模产品

– 树立 SE理念,通过软件工程与程序设计的融合树立对计算系统构建认知

• 独立开设软件职业基础,团队合作动力学

Page 9: 计算与 软件工程 课程群的教学实践

我们的对策:折中方案

• 参照其他工程专业的课程设置方案,面向软件产品构建,从简单到复杂,循序渐进展开教学– 什么是计算系统? (软 )计算系统?– 如何运用工程方法构造 (软 )计算系统?

小型,中型,大型,与特定领域结合– 如何训练构建软件产品的综合能力?融合软件管理、团队交流、职业素质

• 从计算看软件工程

Page 10: 计算与 软件工程 课程群的教学实践

如何运用工程方法构建计算系统?

• 普式小型软件系统的构建• 普式中型软件系统的构建• 普式中型软件产品的构建• 大型软件系统构建中用到的特定方法、技术与工具

• 不同计算环境下的软件产品开发• 软件工程方法与特定软件应用领域的结合

Page 11: 计算与 软件工程 课程群的教学实践

软件工程类课程的一种设计

专业基础课程

计算系统基础

计算的基本概念 ;系统级认知;计算系统的分层构建;结构化程序设计初步

离散数学

数据结构与算法

计算与软件工程 I

基于迭代式增量开发的 、个人级的、小规模软件系统构建

计算与软件工程 Ⅱ基于瀑布模型的 、小组级的、中小规模软件系统构建

计算与软件工程 Ⅲ基于螺旋模型的 、强化团队与制品的、中规模软件系统产品构建

计算与软件工程

面向计算系统构建,融软件工程 、程序设计、职业团队等知识的教学于一体

计算的数学基础

计算的数据结构与算法基础

专业核心课程

面向软件工程 - 专 业 核 心 课 程

分领域系统深入介绍软件工程方法与技术,探讨适应于中大型软件系统设计与开发的方法与技术。包括:软件构造、软件系统设计与体系结构、软件需求工程 、软件测试与质量、软件过程与管理(选)、软件工程统计方法 (选)

面向计算环境- 专 业 核 心 课 程

面向相关计算环境,系统讲授该计算环境的相关理论、程序设计接口和软件工程方法 。包括:操作系统原理与实践、网络及其计算、数据库系统设计、人机交互系统设计、计算机组织结构(选)、C++高级程序设计 (选)

面向应用领域的专业选修课程

Page 12: 计算与 软件工程 课程群的教学实践

计算与软件工程课程群的创新设计

• 计算与软件工程是 CCSE软件工程优先方案 (软件工程与计算 )在国内的首次实践–从计算系统基础破题,一下开始

• 进一步融合职业实践、团队交流动力学等课程,围绕计算系统构建示例和学生综合实践用例,通过三种软件开发过程模型,创新设计与组织教学内容

• 培养学生的软件设计与构造能力为主线。软件需求、体系结构、人机交互设计的课程的连贯设计(工程经济学的融入)

Page 13: 计算与 软件工程 课程群的教学实践
Page 14: 计算与 软件工程 课程群的教学实践
Page 15: 计算与 软件工程 课程群的教学实践

《人机交互的软件工程方法》课程教学改革思路

围绕一个具体的交互式软件系统构建实例,讨论交互式软件系统的需求获取:•产品特性;用户个性;观察技术;人物角色构造;场景描述;•应用人物角色和场景获取需求;任务分析;原型技术。

需求阶段

由传统的“以功能为中心”向“以用户为中心”的设计思想转化,突出人机交互与软件工程学科的融合,注重介绍在软件工程不同阶段进行交互设计的模型、方法与技术(不像 CS 那样过分关注 HCI技术; UI能力由计算与软件工程课程达成)

全面介绍与交互式软件系统设计相关的知识:•设计框架;可视化设计;设计工具;•以用户为中心的设计思想;•交互设计的模型与理论。

设计阶段

系统性开展有关交互式软件系统评估的教学:•评估过程;评估范型;评估方法的选择;可用性问题的分级;•观察用户;访谈;问卷调查;用户测试;•专家评审;走查;启发式评估。

评估阶段

从学科发展角度开展人机交互基础知识的教学:•人机交互的发展历史和相关领域;•人机交互与软件工程。

基础知识

Page 16: 计算与 软件工程 课程群的教学实践

计算与软件工程课程概述

• Computing and Software Engineering (CSE)• 课程关注点集中在软件工程理念指导下的软件产品构建,总体设计目标为:– 在专业教学早期向学生灌输软件工程的理

念,培养学生的“工程观”– 引导学生使用软件工程的观念来观察、体验和实践计算系统软件的设计与构建过程

– 培养学生构建系统规格与体系结构较为简明的中小规模通用软件系统所需的综合知识和技能,既包括技术主题,也包括素质、能力与实践

Page 17: 计算与 软件工程 课程群的教学实践

计算与软件工程课程设置思路• 知识融通及综合运用

– 融软件工程、程序设计、面向对象、软件工程管理、软件职业素质、团队合作交流等知识教学为一体

– 以工程观念培养为核心,以计算系统构建实践为主线,覆盖构建中小规模软件产品的综合知识和技能,强调培养学生在个人和小组两个级别上对软件系统构建知识的综合运用能力

• 按照软件工程优先的方式,围绕计算系统示例,以软件系统规模由小到大的顺序设置和组织课程– 计算与软件工程Ⅰ:面向个人级小规模软件系统,采用

迭代式增量开发模型;– 计算与软件工程Ⅱ:面向小组级中小规模软件系统,采用瀑布模型;

– 计算与软件工程Ⅲ:面向具有较复杂交互行为的小组级中规模软件系统产品,采用螺旋模型

Page 18: 计算与 软件工程 课程群的教学实践

《计算与软件工程》三学期教学分解计算与软件工程Ⅰ 计算与软件工程Ⅱ 计算与软件工程 III

实施学期 一下 二上 二下软件开发模型 迭代式增量开发 瀑布模型 螺旋模型计算系统规模 小规模 中小规模 中规模

计算系统示例 教学讲解用例学生实验用例

教学讲解用例学生实验用例 学生实践用例

开发级别 个人级别简单小组级别( 4人左右的小组结队,通过角色轮换体会小组分工)

小组级别( 6人左右小组结队,有较多团队交流行为,固定角

色)

软件工程管理 个人软件过程初步 小组级软件开发管理项目管理工具

小组级软件开发管理强化项目管理工具体验风险控制

软件工程制品 代码为主适当的文档 代码与文档并重 代码与文档并重

软件工程技术OOA、 OOD、调试与测试、基本演化等软件工程知识

适用于中规模软件系统开发的工程化方法、技术、实践与原则

复习

程序设计基础 核心基础知识 提高程序设计能力 复习面向对象技术 基本知识 较全面深入的认识 复习软件工程职业 少量必备职业知识 全面的职业知识 复习团队交流 文档、陈述 基础体验 全面应用

Page 19: 计算与 软件工程 课程群的教学实践

计算与软件工程Ⅰ• 《计算与软件工程Ⅰ》,又名《计算与软件工程——个人级软件开发》

• 在软件工程理念指导下,侧重于程序设计教学,以一个计算示例的迭代式增量开发实践为线索,全面培养学生在个人开发级别的小规模软件系统构建能力,让学生初步体验软件工程方法与技术在系统开发中的关键作用

Page 20: 计算与 软件工程 课程群的教学实践

《计算与软件工程Ⅰ》课程教学改革思路图书借阅系统、大学公共场所资源预订系统

Page 21: 计算与 软件工程 课程群的教学实践

计算与软件工程Ⅱ

• 《计算与软件工程Ⅱ》,又名《计算与软件工程——小组级软件开发》

• 以经典软件工程方法与技术为主线,软件设计与构造知识为教学重点,软件系统构建实例(计算系统示例与学生实践用例)为切入点,培养学生基于瀑布模型的、简单小组开发级别的、中小规模软件系统构建能力

Page 22: 计算与 软件工程 课程群的教学实践

《计算与软件工程Ⅱ》课程教学改革思路工作辅助系统、连锁超市销售系统

Page 23: 计算与 软件工程 课程群的教学实践

计算与软件工程Ⅲ

• 《计算与软件工程Ⅲ》 ,又名《计算与软件工程——团队软件开发实践》

• 关注综合性软件工程实践,运用《计算与软件工程Ⅰ /Ⅱ 》所学软件工程、程序设计和软件职业知识,采用螺旋开发模型,突出团队交流合作和软件项目管理,强化软件工程制品,组织学生进行构建中规模软件产品的实践

Page 24: 计算与 软件工程 课程群的教学实践

《计算与软件工程Ⅲ》课程教学改革思路师生分享系统

Page 25: 计算与 软件工程 课程群的教学实践

计算与软件工程的课程特色• 围绕中小规模计算系统 (软件 )构建这一主线,培养学生开发软件系统的全面实践能力。覆盖:– 从软件工程技术、程序设计技术、软件工程管理、软件职业基础、到团队组织交流

– 从个人级别、简单小组协作级别、到有较复杂团队交流的小组级别

– 从小规模软件系统、中小规模软件系统、到带有团队交换的中规模软件系统

– 从迭代增量开发过程、瀑布模型、到螺旋开发模型

• 课程具有以下特点:– 计算系统构建与软件工程方法相结合– 经典软件开发模型与教学实践相结合– 软件开发技术与开发规范相结合– 知识传授、能力培养、职业素质培养相结合

Page 26: 计算与 软件工程 课程群的教学实践

讨论: CSE与传统课程

• 《计算与软件工程》并不是SE2004中《程序设计基础》、《面向对象方法》、《软件工程导论》、《软件职业基础》和《团队交流动力学》的简单对应。

• 教学方式• 知识体系教学实施

Page 27: 计算与 软件工程 课程群的教学实践

教学方式的不同• 在教学方式上,《计算与软件工程》围绕构建中

小规模计算系统(软件)这一主线,体现了程序设计技术、结构化与面向对象方法、软件工程技术、软件工程管理、软件职业基础、团队交流技术的全方位教学融合

• 逐次构建小规模、中规模计算系统(软件)这一教学组织主线

• 个人级别、简单结队的小组级别、强化团队交流能力的小组级别等三种方式的软件开发组队的分别体验

• 增量式迭代开发、瀑布模型开发、螺旋模型开发等三个经典软件开发模型的分别体验

• 始终强调软件开发过程与制品,而不是在分离课程中分别强调计算系统代码和软件工程文档

Page 28: 计算与 软件工程 课程群的教学实践

知识体系教学实施上的不同• 依据“适与精”的原则,《计算与软件工程》并不对应《软件工程概论》的全部知识教学内容。– 《软件工程概论》的特点是“全而不深”– 《计算与软件工程》注重于中小规模计算系统软件构建中适用的软件工程方法,强调的是“适与精”;

– 只有那些“合适”的软件工程方法被选择,并进一步强调知识应用的深度;那些没有被涉及到的“系统全面”的软件工程知识与“适用于大规模系统”的软件工程方法,则按照领域组织在面向软件工程的专业核心课程群中,或者安排在面向计算环境的专业核心课程群中

• “ 适与精”的原则同样适用于《计算与软件工程》课程中程序设计知识的教学内容。– 该课程重点关注的是程序设计基础知识与基础能力– 更加“高级”的程序设计知识会被后继课程介绍,如:面向计算

环境的专业核心课程覆盖了这些领域的系统级应用程序设计接口使用;高级程序设计类选修课程则讲解高级程序设计机制的使用

Page 29: 计算与 软件工程 课程群的教学实践

Q&A本胶片以及相关资源获取地址:http://nju2.js.nclass.org/book-how/flex/book.html?courseNumber=12791891

感谢您的关注!骆斌,邵栋

南京大学软件学院