【原】『软件工程』教学思路

软件工程是一门很难教的课程,究其原因,无非几点:

1. 软件工程是在工作中打磨几年,才可能有切身体会的。在学校学并没有强大驱动力,因为好像用不着,又不像一门语言课,它是“硬”本事。另外,软件工程的理论知识并不像高数或者算法那么深奥,学起来感觉没学到什么高深的知识。简而言之,就是学生很难get到一种驱动力。

2. 软件工程要实操,就得有比较好的基础,比如熟悉一门语言,编过一些程序,在里面折腾过。可是,前面的基础学得好不好呢?有时候只能哭笑不得,面向对象都不知道是什么。这就大大影响了本门课的教学,搞得上软件工程课的老师什么都得教什么都得会,即便老师会,学生在短短一个学期里面也不可能补上前面几年的基础。

3. 说是说软件工程专业,可大部分学生是对这个方向上的就业兴趣不大的,一个班能有四分之一有这个想法就很不错了。于是,当老师告诉学生软件工程有多么重要时,得到的反馈就是:好,重要,但与我何关,我只想过个关。

教了几年软件工程,有点心灰意冷,特别是学生的学习欲望简直让人失望。老师都愿意教,可得有人愿意学啊。于是,愿不愿意学习自然也成为了老师要解决的问题。让大家做实践项目吧,大部分人就是拷贝粘贴,反正就是一个平时成绩,最终还是试卷成绩作为主导。不做项目吧,这门课确实索然无味,很多时候就是另一种形式的心灵鸡汤,听一听可以,但没用。

如何在短短一个学期内,在学生基础都很差的情况下,在大家还愿意配合不闹到教务处的状况下,教出有点效果的软件工程课呢?

首先,得要跟院领导争取平时成绩占比至少达到60%,这是前提。考试也考,不违背学校教学基本范式。

再次,必须要降低要求和工作量。

软件工程必须得依靠个人项目,结对项目,团队项目三个项目的轰炸才会有效果,这就是『构建之法』邹老师的核心理念:做中学。做了东西,对于激发学习兴趣很重要,对于体会软件工程核心思想更重要。传统教学可能看重的是DFD中的对象是圆形还是方形,但做中学的思路根本不是注重这个。一个圆形一个方形与软件工程到底有什么关系?没关系。如何画一个有价值的DFD才是软件工程思想的体现。可这些东西不在实践中,不在项目中,怎么才能教的好?

对于大三的学生,三个项目必须到位,对于大二的学生(学习软件工程概论)必须做一个团队项目。

如何规划教学就很重要了,下面是我的一些想法:

1. 平时学业,每次总分十分,打分为三挡,10分,有自己经过实践的,有价值的观点;5分,有自己的阐述,未经过实践,应付居多;0分,未交或迟交或引用不说明来源或全盘拷贝。平时作业占比平时分的50%。平时作业每周至少一次,也可以自行多做,但以后给一个平均分作为作业成绩,计算公式:score=50%*10*(s1+s2+s3+...+sn)/n,n>=8。当自己平时有一次没有交作业,就多做点有价值的作业,拉高平均分。不再考量附加分,全部归纳到作业分中。

2. 平时作业从实际项目中提取题目,结合实践做,比如黑盒测试有几种方法,你在你的项目中是怎么采用边界值法来测试的,举例说明,并有测试结果。这样,就将项目中的某些工作移至作业中了,工作量降低了,也很好的全面学习了理论。

3. 个人项目在立项时要能融入结对项目,结对项目在立项时要能融入团队项目。这样,做的代码和文档就不会浪费,大大降低了工作量,但还能保证学习效果,毕竟软件工程是一种理念,通过实践才能更好的去理解,它不是编程课,不能把这门课上成了JAVA实训课。比如团队项目是一个游戏,那结对项目就可以做游戏中场景与角色程序设计,那个人项目就可以做角色自身动画程序实现。结对双方最好在团队中选取。

4. 个人项目主要是带入,让学生走入这这门课,结对项目主要是偏重知识点实践,比如UML怎么做,代码复查怎么做,白盒测试怎么做等等,团队项目是主打传递或更深入理解软件工程的核心理念,比如迭代升级,团队沟通等。

5. 因为平时作业做了项目中很多事情了,所以个人项目占比平时成绩10%,结对项目占比20%,团队项目占比20%,结对项目中分数分配由两人协商,不可相同,团队项目中分数分配由团队协商,不可相同。三个项目都是百分制。团队项目必须有一个队长,队长全盘负责。

6. 不太建议个人项目和结对项目采用命题作文,一般一个老师会同时教三个班,大概100多人,这么多人采用命题作文,基本上会出现拷贝的情况,老师也没有办法一一排查谁抄的谁,即便你要求多具体和详细,拷贝是忽略这个的。目前,都是采用开放式的。个人项目评分为三等,100分,完全自己做的,可以运行,有项目说明;50分,自己修改了一部分,也看懂了,可以运行,有项目说明;0分,没交,迟交,拷贝的,丁点修改。结对项目对文档要求低点,团队项目必须要有所需的全部文档。

7. 这样的教学方法,考试出题是个大难题。这里提供一种方法,不出纯记忆力题目,出几个大题即可,大题就是平时作业,比如出一道白盒测试题,写一小段程序,请写出路径覆盖的测试用例。如果平时认真做了作业的,考试完全没有问题,意思也就是实际上没有考试环节了,只是形式上有。

终上所述,软件工程的核心还是在于“做”,但通过手段将复杂的教学流程简化,简化的目的是让教学取得更好的效果。这门课的核心目的我认为是通过“做”来理解软件工程的核心思想,这门课无法覆盖语言课、算法课、创新创业课、数据库原理课、JAVA课程实践等。

时间: 2024-11-01 10:39:42

【原】『软件工程』教学思路的相关文章

谈谈前端『新』技术

技术这个行当,永远会有新东西出来,不进则退.更关键的是,前端比起整个软件工程乃至计算机科学体系来说,是个相对新生草莽的领域,近年来前端生态的发展其实都是在向其他领域吸收和学习,不论是开发理念.工程实践还是平台本身(规范.浏览器).所谓的『根正苗红』的前端,不过是整个发展进程中探索的一个阶段而已,那个时代的最佳实践,很多到今天都已经不再适用.过往的经验固然有价值,但这些经验如果不结合对新事物本身的了解,就很难产生正确的判断.这里需要强调的是,学习新事物并不是为了不考虑实际需求的滥用,而是为了获取足

『数据库』随手写了一个 跨数据库 数据迁移工具

随手写了一个 跨数据库 的 数据迁移工具:>目前支持 SQLServer,MySql,SQLite: >迁移工具 可以自动建表,且 保留 主键,自增列: >迁移工具 基于 Laura.Source  ORM框架 开发: >迁移工具 支持 崩溃恢复(重启迁移工具,将会继续 未完成的 数据迁移): >每张表一个事务(即使  表中有 >100W 的数据,也是一个事务完成): >迁移后 的 自增列 和 原数据库 保持一致: 只是展示一下,直接上图片: 操作工具: 迁移工具

『转载』Debussy快速上手(Verdi相似)

『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是用来跑模拟或看波形,它最强大的功能是:能够在HDL source code.schematic diagram.waveform.state bubble diagram之间,即时做trace,协助工程师debug. 可能您会觉的:只要有simulator如ModelSim就可以做debug了,我何必再学这

『转』数学专辑

1.burnside定理,polya计数法 这个大家可以看brudildi的<组合数学>,那本书的这一章写的很详细也很容易理解.最好能完全看懂了,理解了再去做题,不要只记个公式. *简单题:(直接用套公式就可以了) pku2409 Let it Bead   http://acm.pku.edu.cn/JudgeOnline/problem?id=2409 pku2154 Color http://acm.pku.edu.cn/JudgeOnline/problem?id=2154 pku12

『cs231n』计算机视觉基础

线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.差劲的方案,随机搜索 bestloss = float('inf') # 无穷大 for num in range(1000): W = np.random.randn(10, 3073) * 0.0001 loss = L(X_train, Y_train, W) if loss < bestloss: bestloss = loss bestW = W scores = bsetW.dot(Xt

『转』★嗨聊

前端一直是一块充满惊喜的土地,不仅是那些富有创造性的页面,还有那些惊赞的效果及不断推出的新技术.像node.js这样的后端开拓者直接将前端人员的能力扩大到了后端.瞬间就有了一统天下的感觉,来往穿梭于前后端之间代码敲得飞起,从此由前端晋升为'前后端'. 图片来自G+ 本文将使用Node.js加web socket协议打造一个网页即时聊天程序,取名为HiChat,中文翻过来就是'嗨聊',听中文名有点像是专为寂寞单身男女打造的~ 其中将会使用到express和socket.io两个包模块,下面会有介绍

『TensorFlow』迁移学习_他山之石,可以攻玉

目的: 使用google已经训练好的模型,将最后的全连接层修改为我们自己的全连接层,将原有的1000分类分类器修改为我们自己的5分类分类器,利用原有模型的特征提取能力实现我们自己数据对应模型的快速训练.实际中对于一个陌生的数据集,原有模型经过不高的迭代次数即可获得很好的准确率. 实战: 实机文件夹如下,两个压缩文件可以忽略: 花朵图片数据下载: 1 curl -O http://download.tensorflow.org/example_images/flower_photos.tgz 已经

『TensorFlow』以GAN为例的神经网络类范式

1.导入包: import os import time import math from glob import glob from PIL import Image import tensorflow as tf import numpy as np import ops # 层函数封装包 import utils # 其他辅助函数 2.简单的临时辅助函数: def conv_out_size_same(size, stride): # 对浮点数向上取整(大于f的最小整数) return i

『Numpy』常用方法记录

numpy教程 广播机制 numpy计算函数返回默认是一维行向量: import numpy as np a = [[1,1,1], [2,2,2], [3,3,3]] b = (np.sum(a,axis=1)) c = (np.sum(a,axis=0)) print(b,'\n',c) # [3 6 9] # [6 6 6] 所以广播之实际是高维对一维行向量的广播: 除法广播: b = a/(np.sum(a,axis=1)) c = a/(np.sum(a,axis=0)) print(