目录

 

个体软件过程在Java编程教学中的应用

我国目前软件从业人员约有72万人,尚缺50万人左右,而且这种需求以每年20%的速度增长,构成了软件人才需求的巨大空间。高校每年毕业的计算机专业学生有数十万之多,但是软件行业仍然缺乏大量的软件编码人员,原因之一就是学校培养的软件人才和企业的需求仍然有一定的差距。学校往往从学科教育角度出发,侧重知识的传授,注重理论和概念,而忽视了培养学生直接解决问题的技能,因此学生到了企业不能马上进入状态,需要经过较长时间训练和企业再学习才能成为成熟的软件人才。如何培养出满足软件产业实际需要的软件人才是摆在各高等院校面前的重要课题。高职类软件学院由于其所处的地位,担负起为软件产业培养底层编码人才的重任。

Java程序设计语言是当今最流行的面向对象的编程语言,也是软件技术专业学生的一门核心课程。在这门课程的教学上,不只是让学生掌握Java语言的语法,编写出一个个Java程序,我们需要通过Java语言的教学,培养学生掌握面向对象的编程思想,提高学生的编程能力,让学生能够用工程的思想去进行软件开发,培养学生具备一个成熟的软件开发人员的基本素质。为了实现这个目标,我们进行了大量的研究,在教学和实践的过程中不断探索教学方法和教学手段的改革,逐步摸索出一套多门课程整合在一起,培养学生软件开发综合能力的一套教学方法。

在教学过程中,我们发现,学生在开始学习一门编程语言的时候,往往把精力主要放在学习编程语言的语法格式,学习如何写出代码,及如何实现基本的功能方面,但是由于水平较低,写出来的代码质量也比较差,因此大量的时间被浪费在编码-调试-修改代码-再调试上,日复一日,进步缓慢。出现这种情况的原因就是学生在学习过程中,把注意力主要集中在了细节上,而没有一个对整体过程的宏观把握,这样会使学生停留在大量编写劣质代码的层次上,软件开发能力得不到提升。为了解决这个问题,我们在Java教学上尝试引入过程管理方法——个体软件过程(Personal Software ProcessPSP),来帮助学生提高个人开发能力。

个体软件过程是由美国卡纳基梅隆大学软件工程研究所开发出来的,它可以说是由定向软件工程走向定量软件工程的一个标志。个体软件过程是为帮助软件工程师出色完成任务、提高个人能力而设计的,它讲述如何把先进而详细的估计和计划的方法应用到日常的任务中去,告诉人们如何按照计划去跟踪任务的执行情况,并详细解释如何利用已定义的过程来指导工作。

提供高质量的软件产品是软件企业的职责,而提供高质量的代码则是软件开发人员的职责,一个合格的软件开发人员应该能够在预定的时间和进度下交付高质量的软件产品。由于软件是知识产品,进度和质量都难以度量,生产效率也难以保证,同时,软件系统的复杂程度也是超乎人想象的,因此人们需要一种方法能够对软件开发的进度和质量做定量的分析,以便于进行控制和管理,提高开发效率和质量,个体软件过程就提供了这种方法。据统计,软件项目开发成本的70%取决于软件开发人员个人的技能、经验和工作习惯,而个体软件过程能够帮助软件开发人员提高编程技能,养成良好的编程习惯,开发出高质量的软件产品。我们把《个体软件过程》作为一门针对软件专业低年级大学生讲授的专业基础课程,核心内容就是讲授软件开发规范与效率,该课程与Java语言编程课程同步进行教学,两门课程的整合互补给学生掌握和提高软件开发技能提供了极大的帮助,教学效果十分明显。

1.过程改进方法在Java编程教学中的应用

个体软件过程提供了过程改进方法,这种方法可以帮助学生改进工作方式,从而提高工作的质量和效率。

Java教学是从Java的基本语法和语句开始,当学生学习到一定程度时,就开始自己编写代码。在编写代码的过程中,学生会不断犯错误。在教学过程中,我发现学生犯的错误重复率非常高,例如:括号不匹配的问题,大多数学生在自己编写的程序中80%以上都会反复出现这个简单的错误,虽然可以在编译和调试过程中发现,并纠正错误,但是已经耽误了一定的时间,影响了效率。还有一些类似的简单错误,都会反复出现在学生的编码过程中,并且这些错误并不会随着学生编写程序数量的增多和编程经验的丰富而明显的迅速减少,大多数学生不断的在写代码-编译调试-修改代码-再编译调试的过程中浪费时间,写出的代码质量却始终提高甚微。因此,需要跟踪找到学生在编码中常犯的错误,根据收集到的数据分析犯错的原因,针对其提出有效的改进方法,才能切实的帮助学生做出改进。个体软件过程提供了对学生学习过程进行跟踪的方法。首先定义测量方法,规定了测量方法后,就必须收集和分析数据。如果需要作些改进,接下来就要分析工作过程,看看什么地方需要改进。最后要想真正的改进,必须切实改进工作方式。

举例来说,通过帮助学生跟踪他们编程常犯的错误,我发现学生编写代码时经常忘记输入后面的半个“}”,从而导致出现“{ }”不匹配的问题,针对这个错误的反复出现,我建议学生每次输入代码时如果遇到“{”,那么就成对输入“{”和“}”两个大括号,然后再两个大括号中间输入应写代码,这样,学生就不会忘记输入后半个“}”了。学生采用了这个改进方法后,括号不匹配的错误明显减少,从而使整个代码编写过程的效率得到提高。可见,仅仅进行测量和数据收集并不会产生什么提高,仅仅靠努力也不会有明显改善。在很大程度上工作方式决定了所得到的结果。如果还是按照原有方法工作,得到的结果也不会有很大变化,而适当的有针对性的调整工作习惯,就能起到事半功倍的效果。

改进工作方式图示如下:

 

2.时间管理和制定计划在Java编程教学中的应用

不管学生有没有意识到,他们都会对自己的时间进行安排,但是大多数学生对时间的安排往往是不成功的,因此,很多学生在做事情时会经常发现时间不够用,事情不能按时完成,这点在他们完成编程任务时,表现得非常突出。因为他们没有对自己花费时间进行跟踪,所以经常不知道自己的时间跑到哪里去了。个体软件过程PSP提供了一整套的方法,可以帮助学生管理好自己的时间。

为了管理好时间,首先制定时间分配计划,然后按照计划去做。例如:一次编程课的时间是100分钟,通常根据程序的大小,可能会要求学生完成一至三个小程序,如果程序复杂,也可能两至三次课完成一个较复杂的程序。不管如何,学生在编写程序前需要有一个简单的计划,一个程序要花费多长时间,或者一次课应该完成程序的哪些部分等。制作计划容易,但真正实施计划是困难的。特别是刚开始的时候,学生通常不能制定出合理的计划,也无法按时完成编程任务。因此,有的学生认为,制定计划毫无用处。

通过学习个体软件过程,学生们认识到按照计划进行工作有三点好处:第一,了解计划存在哪些问题,有助于更好的计划下一个项目。第二,按照好的计划完成工作。这看起来不重要,但是事实上软件工程中的许多错误都是由于考虑不周、粗心大意或是不注意的小细节而造成的,按照好的计划工作是避免这些错误的最好途径。另一个更加微妙的好处就是它实际上在改变你的工作方式,有了计划就不用浪费时间去考虑下一步要干什么,它会帮助你把精力集中在所中的事情上,很少分心,从而提高了工作效率。也许在学生编写小的程序时还不能完全体会到计划的好处,但是当我们学习到期末进行为期两周的一个较大的项目实训时,这三点好处就充分显示出来了。

当学生学习开发较复杂的软件时,首先要对自己的工作进行计划,而计划的依据就是平时对自己时间的记录数据。学生通过采用时间日志收集自己编写代码的时间数据后,通过对这些数据进行分析,就可以了解自己在编程过程中,大量的时间耗费在什么地方,从而提出相应的解决办法,并为下一次作计划提供指导意见。对每项主要编程活动所花费的时间进行精确的记录,必须使用标准的时间日志表。

学生用于记录时间的时间记录日志表如下:

 

时间记录日志

学生

            

日期

           

教员

            

课程

              

开始时间

结束时间

中断时间

净时间

活 动

备  注

C

U

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

做计划是软件工程师工作的一个重要部分,要成为一个有才干的工程师,就必须知道如何制订准确的计划,也需要知道如何将这些计划与实际结果相比较,从而学会制定更好的计划。这正是我们在教学中要培养学生掌握的重要技能。

 

3.缺陷管理在Java编程教学中的应用

缺陷是指程序中存在的错误,例如语法错误、标点符号错误或者是一个不正确的程序语句,是任何影响程序完整而有效的满足用户要求的东西,是可以表示、描述和统计的客观事物。

对于任何一个编程人员,无论是经验丰富的软件工程师还是刚刚入门的Java语言初学者,都避免不了自己的程序中出现缺陷。一些微小的编码错误可能引起严重的系统问题。事实上,绝大多数软件缺陷都源于程序员的疏忽大意。为了减小缺陷,就必须进行缺陷管理,研究已经引入的缺陷,确定引起这些缺陷的原因,并学会在将来如何避免重复同样的错误。

收集缺陷首先需要对代码中出现的缺陷进行分类和统计,通过缺陷分类,可以迅速找出哪一类缺陷的问题最大,然后集中精力预防和排除这一类缺陷,这就是缺陷管理的关键。最有效的发现和修复缺陷的方法是个人复查源程序清单。事实证明,这是最快而且最有效的方法。

代码复查的第一步是了解自己引入的缺陷的种类,因为在下一个程序中引入的缺陷种类一般会与前面的基本类似,只要采用同样的软件开发方法,情况会一直如此。代码复查的目标是在软件过程中尽可能早和尽可能多的发现缺陷,为了更好的进行代码复查,我们帮助每个学生建立了Java代码复查指南和检查表,下表是一个Java代码复查指南和检查表示例:

Java代码复查指南和检查表

程序名和程序号#

目的

指导你进行有效的代码复查

#

#

#

#

累计

累计%

一般性说明在完成每个复查步骤之后,将发现的某个类型的缺陷的个数记录在右面的栏目中。如果该步骤没有发现缺陷,就在右面的栏目中打个表示检查无误的交叉符号()。在开始复查下一个程序单元之前,要按照检查表完成对程序,,对象或方法的检查

完整性

验证设计的所有功能都已经编码

 

 

 

 

 

 

Import

验证import语句是完全的

 

 

 

 

 

 

初始化

检查变量和参数的初始化:

l         在程序的开始;

l         在每个循环的开始;

l         在方法的入口

 

 

 

 

 

 

调用

检查方法调用的格式:

l         参数;

 

 

 

 

 

 

名字

检查名字的拼写和使用:

l         是否前后一致?

l         是否在说明的作用域之内?

l         结构和类中变量的引用是否使用了’.’

 

 

 

 

 

 

对象

检查所有的对象:

l         必须经过初始化

 

 

 

 

 

 

输出格式

检查输出格式:

l         换行是否合适?

l         间隔是否合适?

 

 

 

 

 

 

{ }

保证检查{ }是适当的而且是成对的

 

 

 

 

 

 

逻辑操作符

验证= = =|| 等逻辑操作符的使用是合适的。检查每个逻辑函数的(  )是合适的

 

 

 

 

 

 

逐行检查

检查每一行代码:

l         指令的语法是否正确?

l         标点是否正确符号是否正确?

 

 

 

 

 

 

标准

保证所有代码符合编码标准

 

 

 

 

 

 

文件的打开与关闭

验证所有的文件:

l         是合适地声明的;

l         是合适地打开的;

l         是合适地关闭的

 

 

 

 

 

 

全面检查

对整个程序进行全面的检查以发现系统问题和非期望的问题

 

 

 

 

 

 

总计

 

 

 

 

 

 

 

 

学生对照Java代码复查指南和检查表中所列的缺陷,可以更好的进行代码复查,从而减少缺陷,提高编程的质量和效率。需要注意,不同人的代码出现缺陷是不同的,因此,每个学生都要根据自己的缺陷采集情况制定自己的代码复查指南和检查表。并定期的对它进行检查以保证检查表更有效。只要在代码复查中还遗漏缺陷,就要不断寻找改进检查表的方法。代码复查是很耗费时间的,但是通过在教学中让学生不断实践,得到的结果显示,节省的时间远远大于耗费掉的时间。

通过实际教学效果的比对,我们发现,学习了个体软件过程的学生,在软件开发基本技能方面明显有了很大的改善和提高,包括能够对自己的不良开发习惯进行修正;能够对新的项目给出比较切实的估计和计划;能够对个人工作质量提供一定的保证,能够按时完成任务;工作效率提高;不断提升自身能力等。因为个体软件过程能够帮助学生养成良好的工作习惯,所以这门课程可以和很多软件专业课程进行整合,这还需要我们进一步研究和探索。

参考文献 (References)

[1] W.S. Humphrey, A Discipline for Software Engineering [M]. Addison-Wesley, 1995.

 

个体软件过程在数据库项目实训中的应用

1. 引言

PSP (Personal Software Process 个体软件过程)是由美国卡内基梅隆大学软件工程研究所(SEI)的Watts S. Humphrey领导开发的,它是一种可用于控制,管理和改进个人工作方式的自我持续改进过程,是一个包括软件开发表格,指南和规程的结构化框架。PSP与具体的技术(程序设计语言,工具或者设计方法)相对独立,其原则能够应用到几乎任何的软件工程任务之中。PSP能有效地帮助软件工程师使用正确的工程方法,指导他们如何计划工作,对工作进行追踪记录通过对工作结果的分析改进下一计划中的个体行为过程。它使工程师们从自己及他人的实际工作中总结并找到最适合特定任务及自己能力的工作方法,提高了个体的过程意识和过程能力。它针对项目计划,时间管理,缺陷管理,质量管理等几个方面提出了规范,经过PSP学习和实践的正规训练,软件工程师们能够在他们参与的项目工作之中充分利用PSP,从而保证了项目整体的进度和质量。

由于PSP课程强调的是在软件系统开发过程中养成良好的习惯和职业态度,因此不应该把它仅仅当成是一门独立的课程,教师应该引导学生将PSP的方法应用到其它专业课程的学习中,在自己的工作中坚持贯彻PSP的原则。在传统教学中,PSP与编程课程的结合是比较常见的,但是PSP在软件开发的领域中有着更广泛的应用,它的基本原理除了可以应用到编程任务中,还可以应用到系统分析,设计以及数据库开发等活动中。

 

2. 个体软件过程在组织中的作用

这些年来,在我国软件企业界掀起了能力成熟度模型评估的热潮,能力成熟度模型(CMM)是由美国卡内基梅隆大学的软件工程研究所(SEI)研制成功的,是一种用于评价软件承包能力并帮助企业改善软件质量的方法,也是目前国际上最流行最实用的软件生产过程标准和软件企业成熟度等级认证标准。随着我国软件产业的升温,越来越多的软件企业开始寻求出口的道路,而认证是软件企业走出国门的通行证,更重要的是认证还是软件企业走向标准化,提高竞争力的行之有效的途径,也是一种提高企业质量和降低成本的管理方法,而这正是中国的软件企业最缺少的。
    CMM
虽然提供了一个有力的软件过程改进框架,但它只告诉我们"应该做什么",而没有告诉我们"应该怎样做",并未提供有关实现中关键过程域所需要的具体知识和技能。一个高效的软件组织是由高效的软件工程师组成的,SEI因此开发了个体软件过程为个人在其工作中使用CMM过程原则提供了具体的指导,这些指导可以应用到几乎任何的软件工程任务之中,借助于PSP提供的一些度量和分析工具,个人可以了解自己的技能水平,控制和管理自己的工作方式,使自己日常工作的评估,计划和预测更加准确而有效,进而改进个人的工作表现,提高个人的工作质量和产量,积极而有效地参与高级管理人员和过程人员推动的组织范围的软件工程过程改进。

PSP为基于个体的软件过程的优化提供了具体而有效的途径,其研究与实践填补了CMM的空白。实践中已被证实,在由受过PSP培训的软件工程师构成的组织中,程序质量更高,开发周期缩短,软件过程得到改进,成本和进度有效地被跟踪,组织的生产力得到提高。

学院针对软件专业的学生开设PSP课程,也是出于为软件组织培养具有过程改进思维和技能的有效人才的考虑,对加速我国软件产业的发展起到积极的推动作用。

 

3PSP在软件技术专业教学计划中的设置

在学院软件技术专业的教学设计中,第一年两个学期分别安排了周2学时的《个体软件过程》作为专业必修课程,与此同时开设的编程课程有C,C++VB。并且安排有一周的PSP项目实训课程,项目将PSP与编程活动结合起来,旨在提供学生一个机会认识和体会到在实践中软件开发不仅仅是编代码活动,它包括各种生命周期活动,规模与时间的估计、测量和跟踪,缺陷及质量管理等。

 

4.数据库课程在软件技术专业教学计划中的设置

在学院软件技术专业的教学设计中,第二年安排了数据库与SQL Server课程,该课程涵盖了概念数据建模、数据库架构、关系数据模型的逻辑数据库设计、数据和数据库管理、物理数据库设计和数据操作。在为期两周的数据库管理系统实训中,我们选用了包含数据库创建和操作的一个项目,要求学生分别用MS AccessSQL Server实现。

 

5PSP在数据库管理系统实训中的应用

5.1 PSPMS Access项目的结合

MS Access项目中,要求每个学生根据一个完整的数据定义创建和装载一个数据库,然后利用已有的视图设计来使用查询向导完成逐渐复杂的查询,这里采用的是查询向导而不需要学生直接编写SQL代码。

尽管以前没有太多的经验,学生仍然需要在开始项目之前先估计每项开发活动所需要的时间,整个项目被划分为数据库定义,数据库装载,简单列举查询,交叉表查询,查找重复项查询和查找不匹配项查询。在开发过程中还需对每项活动的实际花费时间记录日志,并进行统计,具体表格设计如下:

5.1 MS Access数据库项目时间总结表

                      Table 5.1 MS Access Project Time Summary

天数    活动

数据库定义

数据库装载

简单列举查询

交叉表查询

查找重复项查询

查找不匹配项查询

日总计

 

 

1

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

3