基于PSP的程序设计语言类课程工程化教学改革

2017-04-12 02:02赵卫东冯超男郑永果
计算机教育 2017年3期
关键词:工程化程序设计编程

张 丽, 赵卫东,冯超男,郑永果

(山东科技大学 信息科学与工程学院,山东 青岛 266590)

基于PSP的程序设计语言类课程工程化教学改革

张 丽, 赵卫东,冯超男,郑永果

(山东科技大学 信息科学与工程学院,山东 青岛 266590)

针对目前高校程序设计语言类课程教学存在的问题,借助PSP的过程要求,提出程序设计语言类课程工程化教学的内涵与目标,以及基于PSP的工程化教学的改革方案。

PSP;程序设计语言;工程化教学;教学改革

1 背 景

程序设计语言类课程主要包括C、C++、Java等,是计算机相关专业的入门课程,这些课程不仅是学习后续专业课程的基础,更是培养和训练编程工程技能和素养的关键。为此,各高校都非常重视程序设计语言类课程的教学改革,并取得了良好的教学效果,学生的实际编程能力得到了一定的提高,但大部分高校在程序设计语言类课程教学过程中,并没有很好地贯彻执行CDIO教育理念,教学的各个环节忽视了对学生规范化工程技能和素养的培养和训练,使学生从一开始就养成了很多后期难以改正的错误观念和习惯,例如随心所欲的编程过程、不规范的编程风格等。学生编程的过程能力和工程素养与软件工程的实际要求相去甚远。

PSP(personal software process,个体软件过程)是帮助程序员改善个人编程能力的组织过程,是指导程序员培养工程素养和提高过程能力的系统化方法。笔者通过将PSP的相关理论和方法融合到程序设计语言类课程教学过程中,系统改革程序设计语言类课程的教学内容和教学方法,以全面贯彻落实CDIO的教学理念,强化学生编程过程能力和工程素养的培养和训练。

2 工程化教学改革思路

2.1 工程化教学的内涵和目标

CDIO工程化教育模式实现了知识、能力和素质的协调发展[1],代表的是构思、设计、实现和运作的教学理念,它倡导的是“做中学”,并且是“基于项目的教育和学习”[2]。进行工程化教学就是将CDIO的理念融入到程序语言类课程的教学设计上,从软件工程对编程的工程化和规范化要求出发,加强对学生编程过程能力和规范化工程素养的培养和训练,使其从一开始就养成正确和良好的编程工作方式和习惯。实施工程化教学的目标是让学生以主动的、课程间有机联系的、实践的方式进行工程化学习,培养成熟、完整、有思想的程序设计开发人员,使其发展成为有技术、有素养的个体。

2.2 基于PSP的工程化教学改革

对现有的教学方式进行分析,发现存在一些问题不能满足工程化教学的要求。其一,教师教学方式的问题,教学内容设计不够合理,在教学过程中教师只注重语言本身知识的传授,把大部分的时间用在讲授语法和程序设计上,忽略对学生编程过程的指导和培养;其二,学生学习方式的问题,学生只注重编写正确的程序,不重视编写的过程和工程经验的积累,表现在随心所欲、缺少计划和总结等。长此以往,学生虽能编写程序,却没有形成良好的编程工作习惯和规范的编码风格,其编程的效率和质量远远达不到软件工程的要求。

PSP是基于软件技术、工程思想和专业方法帮助软件工程师改善个人编程能力的组织过程[3]。它由一系列的表格、方法和脚本组成,主要目的就是帮助软件工程师提高编程能力,进而管理软件开发的质量。图1为PSP的过程框架[4],该框架描述了从需求开始,经过计划、设计、编码、编译、测试到总结的整个开发过程,过程中以计划脚本为指导,并随时产生时间记录日志、缺陷记录日志等,在项目结束时把记录的时间、缺陷等问题进行总结,最后将其写入计划总结报告中。因此,将PSP的思想和方法融合到程序设计语言类课程教学过程中,对教学内容和教学方法进行系统化改革,符合工程化的教学思想,有利于学生编程过程能力和工程素养的培养和提高。

图1 PSP的过程框架图

3 工程化教学内容设计

为了实施课程的工程化教学,教学内容的设计是至关重要的环节之一,按照PSP过程框架的要求,结合程序设计语言类课程工程化教学目标,通过融入CDIO的理念,对课程教学内容设计如下。

3.1 课堂教学内容

根据PSP过程框架的要求,课堂教学增加程序质量、编码规范、编程计划、设计、测试、总结等内容,引导并培养学生按照科学的过程和规范的工程化要求进行编程,改变随心所欲的编程方式。其中,程序质量主要讲授正确性、可靠性、可维护性、安全性、可扩展性等质量要素,使学生清楚什么才是高质量的程序;编码规范主要讲授一套通用的编程规范,如通过标识符规范、备注规范等来提高程序的可读性;编程计划和设计主要讲授如何进行程序设计以及如何制定程序设计计划等,以保证程序设计按照预想的步骤进行;测试主要讲授如何进行单元测试,重点讲授白盒测试技术来保证程序设计的正确性,提高程序质量;总结主要是讲授如何借助表格来统计程序设计的数据以及如何对统计的数据进行分析等。

3.2 实践教学内容

良好的编程习惯和工程素养必须通过反复的实践训练才能逐步形成。为此,必须依据PSP规范流程对传统程序设计上机实验的流程进行变革。首先,要培养学生的计划能力,让学生自己确定在编写代码前干什么,如何去干,然后再开展工作,检查工作并且确保工作的正确性,即上机实验之前要制定一份计划,这份计划要包括程序设计的目的、要求、流程、编程用时估计等。当计划制定完成之后,还需要对其进行检查,确保没有遗漏重要的事项,甚至还要检查相关信息的填写是否正确。其次,在实践过程中,学生要依据PSP的规范制定相应的表格来统计编程的相关数据,表格的样式见4.1部分。最后,学生在提交实践报告时,要进行总结,将实践计划、实践数据的相关统计信息、程序测试的测试用例、测试结果写在实践报告中,便于以后进行查看。

4 工程化教学方法设计

PSP能帮助程序设计者积累编程过程数据,根据积累的数据,识别程序设计过程中的优势和不足。个体过程是用来指导软件开发的指南,为适应程序设计语言的教学,本文结合CDIO理念,对PSP过程进行简化和重定义,设计适合语言教学的基于PSP的教学方法。

4.1 程序设计教学过程数据采集

在软件过程中实现“做中学”。首先,对于程序设计语言基础知识的讲授,要采用与实际应用相结合的方法,用实战项目进行演练,并将复杂或者规模较大的任务模块变成结构可分析的对象。其次,在实践演练中,让学生灵活运用PSP中的相关约束规范,主要是遵循PSP的设计原则,对于实践中的数据进行统计分析,体现在教学上就是设计合理的表格,帮助学生进行个人数据的管理。

参照PSP过程框架(见图1)可知程序设计要经历4个阶段:设计、编码、编译和测试,在每个阶段都需要用相应的表格对程序设计中的数据进行统计,统计的主要内容包括程序的规模(可用代码行数进行计数)、整个程序从设计到完成的用时和在设计过程中出现的缺陷等。因此,表格设计是否合理直接影响数据统计的有效性、实用性和数据分析的准确性。针对程序设计时间和缺陷统计设计相应的表格,供教学参考。

1)程序设计时间记录。

编程时间是衡量一个程序大小及编程者能力的重要元素之一,传统程序设计语言的教学往往不注重时间的统计。恰好PSP提供了时间记录日志,对编程时间进行统计,若将其用于程序设计语言类课程的教学中,就能达到统计编程时间、积累原始数据的目的。为此,根据PSP提供的程序时间记录日志设计出能应用于教学实践的个人时间记录日志,包括项目、阶段、中断时间、结束日期及时间、净时间和注释。

在对设计的每个小程序进行编程用时统计之后,学生可以在程序时间记录的基础上,用表1进行个人历史数据的总结统计,其中的单元即为程序的代码规模(可用代码行数来统计)。在进行分析统计后,可以得到个人编程的单位时间(即平均值)、最大值以及最小值。

表1 个人程序历史数据总结表

2)程序设计缺陷记录。

从以往的软件开发经验可以看出,在任何软件开发过程中,都不可避免出现各种各样的错误。针对此问题,PSP程序设计框架也提出了相应的解决措施,提供指导软件工程师对缺陷进行有效跟踪和管理的方法。同样,在程序设计语言类课程的教学中,也会遇到各种各样的错误,如果在教学过程中能够提供一种有效的方法对错误进行统计,分析造成错误的原因,那么将能大大提高学生的编程水平,降低同类错误的出错率。

基于以上情况,首先,对于程序设计中可能遇到的错误进行统计,主要可以分为以下几种:拼写错误、声明错误、名称类型错误、标点符号说明错误、指令格式错误、赋值错误、功能错误(逻辑、指针、循环等)、系统错误(配置、内存)等。然后,针对可能出现的错误,设计好表格(见表2)对其进行统计。最后,对同一种类型错误出现的次数进行统计,分析出错的原因。这样,在以后出现类似的程序设计时,可以避免出现类似的错误。

4.2 基于数据分析的教学过程改进

有了历史数据的积累,教师可以更好地安排教学,并针对出现较多的程序错误进行分析讲解,避免学生出现类似的错误。学生也可以对自己的编程能力有一个清晰的认识,对于相似规模的程序,可以更加准确地制定时间计划。

根据个人程序纪录日志,可以清楚地看到某个程序的开始时间、结束时间和中断时间,并通过计算得到每个程序的所用净时间。应用这样的表格对编程用时进行统计,得到个人的第一个比较准确的时间数据。根据这份统计的数据,教师可以清楚地看到每个学生的编程用时,在以后安排类似的程序设计题目时,教师可以根据每个人的不同掌握程度进行指导。学生个体也可以用这份数据得到自己的中断时间和净编程用时,数据积累之后,可以比较自己哪个程序设计用时较长,然后针对用时较长的项目进行分析,找到自己学习的薄弱点。学生还能依据这份数据对以后类似的程序设计进行用时估计。

表2 错误统计表

在表1中,从平均值的变化可以清晰地看出个人编程能力的变化,如果平均值整体上变小,说明单位模块的程序设计用时减小,个人编程能力呈上升趋势;若相反,就要分析造成这种情况的原因,并采取相关措施改善这种状况。对于程序设计过程中出现的异常值(数值偏大或者偏小),分析其造成原因。长此以往,就能大大改善学生的编程能力及编程习惯,并能对下次估计编程时间和规模提供参考数据。

除此之外,学生对于程序设计中遇到的缺陷,要找到尽可能合理的方法对缺陷进行预防。以下给出缺陷分析步骤:①对出现的某个缺陷进行分析;②找到出现缺陷的原因,是拼写错误、声明错误,还是其他错误等;③对于缺陷原因,可使用鱼骨图[5]来标明错误注入的先后顺序(见图2);④找出缺陷中较普遍问题的趋势,一些潜在的原因是不合理的沟通、拼写错误、理解偏差或者不完整的过程等;⑤通过以上分析,设计出预防这些问题的方法;⑥分析过去有效的方法,确保在过程修正中能将有效的方法结合到程序设计中;⑦重复以上步骤,直到没有更多的想法。

5 结 语

将软件工程师的自我改进过程应用到程序语言类课程的教学中,将大大改善传统的教学模式,遵照PSP规范过程教学的学生将会在编码规范、时间管理、程序设计速度、代码正确率、软件开发能力等方面有明显的提高。这将有利于提高学生的工程素养,在程序设计语言类课程学习时就养成良好的个人软件开发规范,能更好地适应当今快速变化的软件开发形式,避免低质量软件的产生。

图2 错误分析鱼骨图

基于PSP的程序设计语言类课程工程化教学改革方案,主要涉及如何在程序设计语言类课程的教学上规范化PSP,教学并没有涉及个人循环过程,下一步研究将针对高年级的实训过程,开发出基于 PSP的个人循环过程的工程化教学,从而完善程序设计语言类课程的教学改革,使学生真正全面接受个体软件工程化的培训过程,达到软件开发人员的基本素质要求。

[1] 钟寿仙, 张瑛, 郭绍辉. MPC-CDIO教育教学模式的探索与实践[J]. 高等工程教育研究, 2015(2): 169-175.

[2] 李善寿.“CDIO”工程教学模式在实践教学中的实施方法研究[J]. 重庆科技学院学报(社会科学版), 2010, 25(20): 164-166.

[3] 杨丽娜. 基于过程控制的个体软件质量管理: PSP[J]. 计算机系统应用, 2002, 11(1): 4-7.

[4] Humphrey W. PSP(sm): A self-improvement process for software engineers[M]. 北京: 人民邮电出版社, 2006: 8-169.

[5] 皮圣雷. 综合鱼骨图及其在项目管理中的应用研究[J]. 中国软科学, 2009(4): 92-97.

[6] 任永昌, 朱萍. 软件项目进度计划控制的过程与方法[J]. 计算机技术与发展, 2012, 22(11): 97-99.

(编辑:史志伟)

1672-5913(2017)03-0119-05

G642

山东科技大学优秀教学团队建设计划资助项目(JXTD20160506)。

张丽,女,在读硕士生,研究方向为软件工程,zzgw0005@163.com。

猜你喜欢
工程化程序设计编程
医学专业“Python程序设计”课程教学改革总结与思考
编程,是一种态度
世界首台高温超导高速磁浮工程化样车下线
元征X-431实测:奔驰发动机编程
时速620千米高速磁浮工程化样车下线
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
纺织机上诞生的编程
从细节入手,谈PLC程序设计技巧
PLC软件工程化在高端工艺装备研制中的应用初探