APP下载

案例实施与工具应用相结合的软件工程动手能力培养

2019-12-04孙昌爱

计算机教育 2019年8期
关键词:软件测试计算机专业语句

孙昌爱

(北京科技大学 计算机与通信工程学院,北京100083)

0 引 言

软件工程学科发展迅速,具有理论与实践相结合特点,要求计算机专业本科生应具备较强的软件工程动手能力。“老师讲、学生听”传统的理论教学模式,不利于高质量计算机专业人才的培养[1]。近年来,笔者讲授了多门软件工程类课程,基于课程考核与教学反馈意见发现,尽管绝大多数学生能够理解软件开发的原理与方法,但运用起来仍然有困难。近年来企业招聘的反馈结果表明,计算机类专业的毕业生(特别是本科生)动手能力比较欠缺,一个直接的例证是90%以上的刚就业的本科生需要近半年的培训才能上岗。另一方面,笔者连续多年参与了计算机专业研究生入学复试工作,基于编程工作量方面的作答情况,感到考生在本科阶段的编程训练不足(编码量少于5千行代码)。由于软件工程动手能力方面较为欠缺,计算机专业毕业生无法满足工业界需求,也影响了他们在研究生阶段的科研水平。

1 案例实施与工具应用相结合

软件开发是一种构造性活动,需要很强的创造性思维[2]。软件工程的基本原理来自于“最佳实践”,不同于数学学科中“公理”、也不同于物理学科中的各种“定则”。软件工程学科的新特点对计算机专业本科生培养提出了新的挑战。特别值得指出的是,软件工程动手能力培养是计算机专业本科生培养中的一个难题。

以单元测试中常用的语句覆盖测试技术为例,语句覆盖技术的基本原理如下:对于给定的某个待测程序P(通常是程序模块),如果某个测试用例集中TS的测试用例能保证P中所有可执行的语句至少执行一次,则称TS符合语句覆盖准则。显然,理解语句覆盖测试技术的基本原理并不困难,但在实际中有效运用该技术并不简单。具体说来:①由于程序中可能存在不可达路径,如何有效识别这些路径并排除相关的不可达语句,是正确实施语句覆盖测试的前提;②对于一个较大的程序(1 000行以上)进行语句覆盖测试时,通常离不开测试工具的支持;采用人工的方式追踪与记录每个测试用例覆盖的语句集,不仅效率低而且容易出错;③工业界软件测试实践表明,采用随机测试方法对大规模软件进行语句覆盖测试时,语句覆盖率并不高(通常低于20%)。笔者在讲授单元测试时布置一个作业,要求学生对一个50行左右的程序进行语句覆盖测试。遗憾的是,只有极少数学生能正确、高效地完成该作业。未能完成该作业的部分原因是无法运用合适的单元测试工具。

软件工程动手能力的培养应从两个方面着手:①软件开发实例的重复实践,可以使学生有效地理解与掌握“最佳实践”;②通过软件工程工具的运用,促进学生理解与把握工具背后的软件工程方法学思想与原理。事实上,由于软件的复杂性,软件开发活动通常离不开软件工程工具的支撑,要想有效运用软件工程工具离不开对其背后的方法学的把握。围绕如何在软件开发中有意识地运用软件工程原理,如何系统地分析、设计、测试构造出合格的软件系统,如何将软件工程工具引入到软件开发活动等重要问题,可以从人才培养定位、教学内容、授课手段、课程考核方式等方面出发,解决计算机专业本科生的软件工程动手能力培养难题。

(1)教学模式改革的准备。以各种方式调研国内、外多所高校在软件工程课程教学方面的一些做法;参加全国软件与应用学术会议软件工程教学研讨会,与国内同行交流软件工程方面先进教学经验;分析与借鉴荷兰格罗宁根大学软件分析与设计本科生课程教学模式[3];全程观摩美国普渡大学软件工程本科生课程与软件测试研究生课程教学[4]。通过不同层次高校调研、同行教学经验交流、国际著名大学软件工程课程教学观摩,为软件工程动手能力培养的课程教学改革提供理论依据与经验参考。

(2)专业培养计划修订。加强软件工程动手能力培养的顶层设计,对计算机科学与技术专业本科生培养计划进行修订。特别地,在2017版计算机科学与技术专业培养计划中将软件工程由选修课课程改为必修课程,与国际通用的计算机专业培养方案无缝接轨;增加软件工程课程设计部分,增强软件工程原理与方法的运用。

(3)软件工程类课程教学大纲调整。从教学内容方面加强软件工程动手能力的培养规划,对多门软件工程课程的教学大纲进行调整。特别地,在软件工程、软件测试等多门软件工程课程中增加案例实施的教学内容,在软件测试课程增加软件工程工具应用的教学内容。从2014年秋学期开始,在软件测试本科生课程教学中首次尝试案例实施与用具应用相结合的教学模式,部分学时用于软件测试工具应用的实践教学。此后,在其他多门软件工程类课程教学中推广案例实施与工具应用相结合的教学模式。

(4)软件工程实验室建设与完善。完善软件工程实验室建设,为提升计算机专业本科生软件工程动手能力提供环境支撑。我们购置了多种软件开发与测试工具,包括IBM公司研制的项目管理工具、建模工具、测试工具、版本配置工具,邀请IBM技术人员对软件工程课程本科生进行了测试工具和版本配置工具培训。软件工程实验室有力支撑了各门软件工程课程的实践教学,同时还鼓励本科生在实验室开展科技创新活动或完成本科毕设。

案例实施与工具应用相结合的软件工程动手能力培养的教学模式契合了近年来国内外计算机专业人才培养改革的趋势。一方面,我国计算机教育界开始关注与推广案例教学,中国计算机学会软件工程专委会主办的“2018年全国软件与应用学术年会”上首次举办了“CCF-SE软件工程案例征集及比赛”活动;另一方面,美国普渡大学非常注重计算机专业学生的软件工程动手能力培养,该校从2015开始在计算机本科生培养计划中增设软件工具课程,要求学生了解与掌握常见的软件工具。

2 案例实施与工具应用相结合的教学模式实践

在软件测试、软件工程与课程设计等本科生课程教学中进行案例实施与工具应用相结合的教学,不仅可以增加案例实施与软件工具应用教学内容,而且能够促进软件工程原理与方法的掌握与高效运用。

软件测试课程教学中,在系统讲授软件测试的概念、原理、技术与过程的基础上,增加案例实施与测试工具应用的教学内容。以“字符串正反向搜索程序”等案例探讨等价类划分、边界值分析等黑盒测试技术的运用;以“西门子程序集”为案例探讨语句覆盖和判定覆盖、基本路径测试、控制结构测试、数据流测试、变异测试等白盒测试技术的运用。特别地,课程教学中介绍开源测试工具JUnit,并要求学生运用JUnit进行语句覆盖和判定覆盖测试。

软件工程与课程设计课程教学分为软件工程理论教学与课程设计两个阶段。软件工程理论教学阶段,以通用ATM系统的开发为案例初步理解与运用软件工程原理,要求遵循软件工程的规范与过程(结构化方法或面向对象方法)完成该系统的开发,提交一份规范的技术报告,包括需求分析、总体设计、关键模块的详细设计、测试与项目管理;建议采用UML表示法,并使用常见的建模工具(如Rational Rose);设计测试方案,并说明如何实施测试;初步估算软件规模与工作量,并描述估算依据;提供可行的进度安排(以周为单位)。

软件工程课程设计阶段,结合软件工具使用、高效完成某个案例系统的开发。可供选择的案例系统包括:①基于B/S结构的会议室教室预约管理系统:以某个学院会议室/教室预约为对象,分析、设计并实现一个预约管理的网络电子化系统,方便教师、学生进行会议室、教室的借用。该系统应具有一定的实用性,考虑基本的权限管理,考虑数据存储如何满足可扩展性需求;②人脸签到(“刷脸”)系统:以本班同学的人脸库为基础,设计一个签到系统,包括手机APP设计与实现、数据库设计、考勤管理、是否需要服务器等。应考虑用户管理、用户交互、数据安全等基本需求;③图书收集与查询管理系统:以豆瓣、当当、亚马逊的中文图书为对象,把相应的图书元信息(题目、作者、出版社、图书简介、目录等)及相关社会信息(标签、打分、评论等)爬取下来,进行整理与入库,然后设计并实现相应的图书信息查询与管理系统。软件工程课程设计阶段的课程考核放弃传统的考试方式,采用技术报告与口头答辩的方式考核案例实施完成情况。

3 软件工程动手能力培养的教学改革初步成效与建议

我校计算机科学与技术、信息安全、物联网工程3个专业按照计算机专业大类招生,每年招收本科生240人左右。案例实施与工具应用相结合的教学模式改革的相关举措直接影响了计算机专业本科生,有助于进一步提升计算机类专业本科生的软件工程动手能力。近年来,我校多名计算机专业学生在中国大学生计算机设计大赛、全国大学生物联网创新创业大赛、全国大学生软件测试大赛、全国服务创新大赛、全国软件原型竞赛以及一系列国际竞赛中获奖。在教育部高等教育软件工程专业教学指导委员会主办的2016年全国大学生软件测试大赛中,我校一名计算机专业本科生进入了全国总决赛,其突出的表现得到软件工程领域专家的高度认可。我校计算机专业本科生积极参与创新创业活动,“秋菠网”“赏金猎人”“天兵天将”等一批软件创业项目获得天使基金资助。一名本科生开发了多个iOS游戏,被邀请参加苹果公司2016年全球开发者大会。通过参加软件工程类科技竞赛与创新创业活动,培养与锻炼了计算机专业学生的创新能力与实践能力。

基于5年来的案例实施与工具应用相结合教学模式改革的实践,为使该教学模式更加富有成效,做到如下4点非常关键。

(1)教材建设。在理解软件工程的基本原理的基础上,如何在不同类型的软件开发项目上合理地运用这些原理非常具有挑战性。特别地,在没有案例引导与参考的前提下,让尚不具备大量编程经验的本科生真正地掌握与运用软件工程原理则更加困难。以软件工程课程为例,不同出版社、不同作者出版了近百种版本的中文教材。绝大多数的教材侧重介绍软件工程的概念、过程、原理、方法,仅有部分教材能够结合一些案例讨论软件工程原理与方法的应用,部分教材仅仅简单介绍了一些软件工具的特色与功能。由此可见,教材建设将是影响该教学模式改革的关键问题之一。

(2)案例开发。部分教材介绍的案例通常较为简单与陈旧,与实际的软件项目差别较大、而且不够丰富。解决案例开发问题的一个有效途径是开发一个公共平台(类似于开源代码平台),收集与整理各个高校开发的软件工程案例。2018年CCF-SE软件工程案例征集及比赛,可谓是对该问题的一次有益尝试。

(3)工具教学。软件项目通常牵涉多种人员、多个步骤、多种技术、复杂的管理过程,相关的技术与管理都离不开软件工具的支持。针对相同的技术与管理需求,则存在不同类型与不同版本的软件工具。例如,支持单元测试的软件工具就多达数十种。那么,如何选择软件工具、选择何种软件工具是进行该教学模式改革的一个不可回避的问题。

(4)教学管理与环境。与传统教学模式相比,案例实施与工具应用相结合的教学模式对授课教师提出了更高的要求,也增加了授课教师的工作量。一方面,仅懂软件工程原理而缺乏软件开发经验的教师很难胜任此类教学模式;另一方面,授课教师不仅需要开发案例,还需要指导学生在案例实施过程中遇到各种问题。由于案例实施过程中存在频繁、深度的交互,上述教学模式比较适合小班教学(我国仅有部分高校具备这样的条件[3])。此外,多种软件工具的购置与维护则牵涉到实验环境建设与教师配备问题。

4 结 语

我校较早设置了计算机科学与技术、信息安全等计算机类本科专业,相关专业培养方案中开设了软件测试、软件工程、软件课程设计、软件应用实践等软件工程类课程。在中央级普通高校改善基本办学条件专项资金的支持下,2013年初步建成了软件工程专业实验室,购置了软件配置管理工具、软件测试工具、软件建模工具等。鉴于计算机类专业本科生在软件工程动手能力方面的不足,在北京科技大学本科教育教学改革与研究面上项目“案例实施与工具应用相结合的软件工程动手能力培养探索与实践”的资助下,笔者探索了如何培养计算机类专业本科生的软件工程动手能力,尝试了案例实施与工具应用相结合的计算机专业本科生软件工程动手能力培养的教学改革,在软件测试、软件工程与课程设计等多门课程教学中进行了实践。案例实施与工具应用相结合的课程教学模式通过在软件工程类课程教学中增加案例实施,增强学生对软件工程原理的理解与掌握;通过增加软件工具应用,促进学生对现代软件工程方法的把握与高效运用。案例实施与工具应用相结合课程教学模式实践与举措,对于提升我国计算机专业本科生软件工程动手能力有重要的借鉴意义。

猜你喜欢

软件测试计算机专业语句
新工科背景下计算机专业创新创业人才培养探究
高职计算机专业教学中融入课程思政的实践路径
软件测试方向人才培养“1+X”融合研究
中职计算机专业产教融合混合式教学研究与实践
基于OBE的软件测试课程教学改革探索
互联网+环境下的高校计算机专业课堂教改现状及建议
航天软件测试模型构建与应用
关于 Web 应用系统的软件测试的研究
我喜欢
冠词缺失与中介语句法损伤研究