“软件工程”网络课程的设计与开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
“软件工程”网络课程的设计与开发
摘要:本文论述了在设计与开发“软件工程”网络课程中采用的基于案例的教学内容设计,该教学设计以同一个案例贯穿所有章节,增进了学生对知识点的掌握和理解;开发环境使用Dorado MVC架构(Struts+Hibernate+Spring),获得了好的效果。与传统的开发模式比较,这种开发模式最大的优势在于可以节省开发人员在开发Web应用表现层时的工作量,同时又为用户提供非常友好的交互界面。
关键词:网络课程;案例;树型结构
1引言
在开放教育和远程教育中,网络教学正被越来越多地使用,开发适用于网络教学的高质量的网络课程已经成为发
展网络教育的一个非常重要的课题。
《现代远程教育技术标准体系和11项试用标准(简介)》中对网络课程进行了定义。网络课程是通过网络表现的某门学科的教学内容及实施的教学活动的总和,它包括两个组成部分:按一定的教学目标、教学策略组织起来的教学内容和网络教学支撑环境。
“软件工程”课程是本科计算机专业的一门重要课程。在当前的教学中,特别是开放教育和远程教育中还存在着很多欠缺,案例太少,或者各章中的案例相互割裂,使得学生学完该课程之后无法形成整体的软件工程概念和思想。因此设计和开发贯穿整个教学过程的案例成为“软件工程”网络课程的必然选择。
2 “软件工程”网络课程的教学内容设计
2.1以案例为中心
当前的计算机相关专业实践教学环境存在诸多薄弱环节,特别是在软件工程教学中,很难为学生提供一个全面的感性认识。而当前的教学是离散的过程,没有提供一个完整的商业软件的实例来讲解商业软件开发的全部过程。经过调查研究、综合对比和专家论证,我们选择了某
软件公司的商务软件“应急系统”作为整个软件工程网络课程的案例。选择该软件的原因是该系统在Windows平台上基于C++开发,而C++是大部分计算机科学与技术专业的学生都学习过的第四代开发平台,不足的地方是部分学生不了解应急系统。在教学内容设计中我们先对此公司“应急系统”的相关知识作了简单介绍,然后把软件工程的各个阶段与该软件的相关内容进行了一一映射和组合,公开
了大部分相关设计和源代码。
2.2兼顾面向过程和面向对象
当前软件设计与开发的手段一般采用面向过程和面向对象这两种方法。虽然”应急系统”是采用面向对象方法设计的,但是我们补充了面向过程的设计内容,这样学生通过比较,既能熟悉和了解面向过程和面向对象的设计方法,又增强了理解,从而获得了比较好的教学效果。
3网络课程支撑环境的设计
3.1总体结构
系统设计应由上而下进行。首先设计总体结构,然后再逐层深入,直至进行每一个模块的设计。总体设计主要是在系统分析的基础上,将整个系统划分为若干子系统,子系统则由若干模块组成。数据的存储以及整个系统实现等方面都进行了合理的安排。图1所示为“软件工程网络”课程开发与设计的总体结构图。
3.1系统开发平台——Dorado MVC架构
Dorado全称“Dorado Web应用开发套件”,包含:Dorado Web UI控件集及UI 引擎(Dorado Web UI Components and UI Engine),Dorado可视化集成开发工具(Dorado Studio),Dorado MVC开发框架和Dorado Web应
用框架。其中Dorado MVC开发框架的主要功能有:提供类似Struts的MVC 开发框架,以便更加方便地利用Dorado套件进行基于MVC架构的开发;提供性能监控控制台,可以方便地对系统运行过程中各功能点的运行效率进行统计和分析;支持国际化资源配置;支持模块化配置。Dorado MVC开发框架是一个可选件。Dorado套件完全支持各种第三方开发框架,如Struts、WebWork等。我们利用Dorado与目前较为流行的Struts+Hibernate+Spring进行协同开发。
3.2系统主要模块算法与设计
(1) 集合混淆算法
客观题测试用于学生自测。题目是随机排列的,顺序与数据库的存储顺序不同,它使用了Java.util.Collections中的shuffle(List list)方法来实现,下面是其在JDK 6.0中的算法和代码。
使用指定的随机源随机更改指定列表的序列。所有序列更改发生的可能性都是相等的,假定随机源是公平的。
此实现向后遍历列表,从最后一个元素向前一直到第二个元素,将随机选择的元素重复交换到“当前位置”。元素是从列表中随机选择的,从第一个元素运行到当前位置。
此方法以线性时间运行。如果指定列表没有实现RandomAccess接口并且是一个大型列表,则此实现在改组列表前将指定列表转储到该数组中,并将改组后的数组转储回列表中。这避免了二次型行为,该行为是因为在适当位置改组一个“有序访问”列表而引起的。
private static Random r;
public static void shuffle(List list) {
if (r == null) {
r = new Random();
}
shuffle(list, r);
}
public static void shuffle(List list, Random rnd) {
int size = list.size();
if (size 1; i--)
swap(list, i-1, rnd.nextInt(i));
} else {
Object arr[] = list.toArray();
// Shuffle array
for (int i=size; i>1; i--)
swap(arr, i-1, rnd.nextInt(i));
// Dump array back into list
ListIterator it = list.listIterator();