2019北航软工暑期培训班总结
一、 引言
虽然已经2年没有教授软件工程课程,但是当年在教学过程中遇到的问题与困难还是历历在目:
1)教学内容以瀑布模型为主,内容陈旧,互联网和移动App开发常用的敏捷方法内容非常少;
2)教学方法以讲授为主,实验课也是写文档,代码量很少,教师和学生都不喜欢;
3)教学考核笔试形式,学生主要靠背,有些像思政类的课程。
作为教师,我也在寻找软件工程课程的有效教学方法,也进行了一些尝试。
2019年7月25日-28日,有幸在北京参加北京航空航天大学罗杰老师团队举办的“2019年暑期软件工程基础课程教学培训班”。在4天的软件工程课程培训中,我完全将自己的身份转换为上课的学生,接受北航软件工程课程的学习,希望从中最大程度的学习到北航软工教学成功经验。
经过培训,有所得,特写总结,以备以后查阅,也算标志本次培训工作的结束。
在此,特感谢罗杰老师,邹欣老师和周筠老师。
二、 培训过程
2.1 赠书
2019年07月初,接到周筠老师赠送的《构建之法(第三版)》一书,在此表示感谢,也感谢组委会对本次暑期培训的精心准备与付出。
2.2 预培训项目
在正式培训之前,罗杰老师安排预培训作业。其实,这点着实然我感到意外,这说明本次培训其实在7月中间就已经开始了,1体现了组委会认真负责的态度和无私的付出。
预培训作业有两个:
1)快速阅读《构建之法》并提问。
作业链接如下:
https://edu.cnblogs.com/campus/buaa/2019BUAASummerSETraining/homework/3398
我的作业提交:
https://www.cnblogs.com/Teacher-Li/p/11184693.html
2)程序开发。
项目是一个解决地铁线路的程序开发问题,链接如下:
https://edu.cnblogs.com/campus/buaa/2019BUAASummerSETraining/homework/3407
我的作业提交:
https://www.cnblogs.com/Teacher-Li/p/11193949.html
https://www.cnblogs.com/Teacher-Li/p/11197583.html
https://www.cnblogs.com/Teacher-Li/p/11217338.html
我的代码Github
https://github.com/TeacherWLee/BUAA-Subway-Project
2.3 培训期间日程安排
2019年07月25日-28日期间,日程安排如下表。
第1天:罗杰老师分享北航软件工程课程经验,并开始结对编程,最后邹欣老师分享教学经验。
罗老师将北航软件工程课程实施具体流程和课程经验就行分享。
结对编程对象是廖雪花老师,我们一起完成结对编程任务。
结对编程作业要求:
https://edu.cnblogs.com/campus/buaa/2019BUAASummerSETraining/homework/3415
结对编程作业提交:
https://www.cnblogs.com/Teacher-Li/p/11246575.html
结对编程代码:
https://github.com/TeacherWLee/BUAA-Subway-Project
第2-3天:开始团队项目的第一轮和第二轮迭代,邹欣老师分享AI课程教学经验与资料。
团队共4位成员,包括:四川师范大学李巍、四川师范大学廖雪花、西南民族大学周绪川、桂林航天工业学院刘建华。
团队项目是七彩社团管理,墨刀原型演示如下:
https://org.modao.cc/app/icenmfeovgjywqdijksdm71of0el
第4天:上午完成第二轮迭代,并进行总结。
三、心得与收获
3.1 北航方法
此次培训最大收获是北航大学计算机学院课程总体规划方式和软件工程课程教学方法。
1)北航计算机学院从大二开始,每个学期设置一门硬核课程,这门课程不仅仅是教学生相关知识那么简单,更重要的是,非常强调学生的实际能力锻炼。
例如,计算机组成原理课程的要求是学生设计并制作出一块CPU、编译原理课程的要求是学生开发一个编译器、软件工程课程要求是学生使用敏捷过程开发出一个可用的软件作品。
2)北航软件工程课程内容包括个人项目、结对项目和团队项目,任务难度逐步增加,是非常好的学习曲线。此外,在项目进行过程中,非常注重开发团队间的交流和过程管理,学生要写博客、要有Git的提交痕迹。
3.2 团队协作
我们团队需要在2天时间内,开发出一个大学生社团管理系统的原型系统,而且要进行两轮迭代,时间紧任务重。团队共4位成员,包括:四川师范大学李巍、四川师范大学廖雪花、西南民族大学周绪川、桂林航天工业学院刘建华。
在团队项目开发过程中,我对团队项目开发有了新的认识:
1)在团队项目进行过程中,我们使用了标准的Scrum流程,使用了白板、燃尽图、头脑风暴等工具。本来以为对Scrum已经非常了解,但是在实际项目进行过程中,还是出现了一些意外情况,例如某位成员电脑不能联网导致墨刀协作不能进行等。
因此,软件工程具有社会属性,实际开发过程与理论开发过程往往是不同的,这也让我对敏捷项目管理有了新的认识。
2)团队沟通管理的重要性和困难性。在团队项目进行过程中,我们团队4个成员在一起进行工作,这可能是团队协作最理想的方式,沟通成本最低的方式。在这种模式下,我们进行了头脑风暴和站立会议等方式进行有效沟通。很多解决方案都是在团队沟通过程中得出的,因此在软件开发过程中,一定不能自以为理所当然的做判断,一定要团队多进行有效沟通。
3)敏捷估算。项目时间和成本的估算,往往跟实际开发情况存在差异,而且往往比估算值要高很多。在每轮迭代过程中,我们进行了详细的计划安排,但是在实际过程中,由于一些不可预见问题(比如网络中断)和一些估算不足问题(比如为博客书写预留较短时间),实际进度与估算进度不相符,往往实际进度要更长一些。
3.3 遗憾
在培训过程中,存在一些遗憾的事情,如果培训能再来一次,我可以做的更好。
1)时间不足
在培训过程中,培训任务是很繁重的,很多老师也都有很累很忙的感觉。由于时间不足,我在这次培训过程中,有很多地方做的不好。例如,测试用例只写了3个、部分博客总结写的比较简短等。如果时间再长一些,或者培训过程再来一次,我会调整时间安排,做的更好。
2)有些工具与方法未实践
在培训过程中,软件作品使用墨刀快速原型的方法展现,团队4人没有编码工作,因此一些配置管理和团队管理工具和方法(例如Git等)没有实践。我们也没有使用Scrum管理工具,在任务分配等方面存在问题,没有在实践中发现,燃尽图、白板等数据也存在问题。
四、培训影像
结对编程
头脑风暴与技术讨论
每日站会
团队答辩
培训班老师、学生和助教合影
五、课程导图
我们使用思维导图工具对课程主要内容和我们主要工作进行了记录。
导图地址:
http://naotu.baidu.com/file/2132493785095534772dfa945755de5c?token=3fa8edbf18a00fac