张志敏, 杜景龙, 连达军
(苏州科技学院 环境科学与工程学院,江苏 苏州 215009)
“GIS软件工程”作为高校地理信息系统专业的主干课,是理论与实践并重的一门年轻课程[1-4]。实验教学是重要环节,它对于掌握GIS理论课所讲授的基本内容、提高学生的实际动手能力、培养学生的创新思维和团队合作精神,都具有十分重要的意义。
目前“GIS软件工程”实验教学主要是按照传统的软件工程实验方法,以软件生命周期的瀑布模式进行设计,没有将GIS软件的特点与实验方法进行有效结合[5-7],学生普遍反映枯燥乏味,效果不好。因此,如何改进“GIS软件工程”的实验教学,提高实验环节的效果是培养高素质合格GIS软件人才的迫切要求。
“GIS软件工程”是一门工程实践性较强的课程,目标是让学生掌握GIS软件的基本思想、工具、技术、过程和方法,为后续的专业知识学习以及今后从事GIS软件项目开发与管理奠定良好的基础[8-9]。本课程学生学习起来感到较抽象枯燥,感觉无用,教师讲授起来也比较困难,难以控制。其主要原因有:
(1) 课程的复杂性强。“GIS软件工程”是建立在复杂的空间数据处理和专业的GIS组件二次开发基础之上的,需要学生具有程序设计、空间数据处理、数据库开发、网络通信和开发测试工具等多方面技能和综合素质。而学生知识面单一,而且没有系统化的训练。
(2) 学生主动性不足,动手能力不强。学生对GIS工程实践没有感性认识,难以理解所讲述的实践经验和知识,学习的动力和主动性不足,认为没有什么用。再加上授课对象是大二的学生,学过的专业知识和开发工具很有限,动手能力不强。
(3) 教师工程经验不足,缺乏有效的指导。本课程的很多授课教师是刚从学校毕业就从事教学的,没有实际的GIS工程项目经验,对真正有效的工程实践缺乏了解,因此感觉本课程较难讲授,难以驾驭。
(4) 实验教学学生独立完成,没有考虑团队合作和沟通。在实验教学过程中,学生都是根据实验指导书按部就班地独立完成,而忽视了沟通、交互与团队合作,学生的积极性没有调动起来。
根据与学生访谈和毕业论文完成过程中的情况来看,很多同学并没有真正理解“GIS软件工程”的思想,更没有在实际软件项目开发中很好地运用所学的软件工程的方法和技术。应该对实验教学内容进行改进,通过引入敏捷开发模式,并结合GIS案例教学等教学手段和教学方法,来培养学生实施GIS软件系统的工作能力、实际操作能力以及合作沟通能力。
在传统软件工程理论饱受争议、冷落的今天,软件开发领域中的另一种思想却给人以如沐春风的感觉,正以势如破竹之势迅速燎原到软件开发者阵营中,它就是敏捷开发[10]。在2001年召开的研讨软件过程未来发展趋势的一次会议上,一批业界专家聚集在一起概括出一些可让软件开发团队具有快速工作和响应变化能力的价值观和原则,这就是敏捷联盟的诞生。他们提出展示他们价值观的敏捷联盟宣言。内容如下:
“我们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。通过这项工作我们认为:人和交互重于过程和工具;可以工作的软件重于面面俱到的文档;客户的合作重于合同谈判;随时应对变化重于遵循计划。虽然右项也有其价值。但是我们认为左项更加重要。”[11]
敏捷方法强调应加强开发人员之间的交互,加强与客户的交互,注重有可工作的软件和完善、不过分的文档,积极、快速应对客户的需求变化,而不是回避。
极限编程(Extreme Programming,XP)是敏捷软件开发中最富有成效的方法之一[12]。极限编程是大师级人物Kent Beck于1998 年首先倡导的,它是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、简单、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。极限编程是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。极限编程的核心是结对编程,它的核心精髓就在于小组内(通常为2人)成员紧密合作,时刻交流。采用极限编程进行合作的学生能更有效地交流,相互学习和传递经验;能提供更好的设计质量和代码质量;能训练更强的问题解决能力。同时,采取结对编程,以强带弱,学生更容易树立信心并能从学习中获得更多的友谊、快乐和满足感。
通过分析“GIS软件工程”的课程特点、敏捷开发的核心思想以及极限编程的有效实践,在“GIS软件工程”课程实验教学中引入敏捷方法有助于提高学生对GIS软件工程关键性技术的全过程实践与应用,理解软件需求与软件测试、开发的紧密关系,掌握响应客户需求变化、结对编程、测试驱动、重构等方面的技术。因此,在“GIS软件工程”课程中以案例驱动的方式讲授应用敏捷开发[13-14]。在实验教学中,教师组织学生以分组的形式完成规定题目系统的敏捷开发,并全程指导应用结对编程、测试驱动、重构、持续集成等敏捷方法,鼓励并促进小组成员之间的沟通与合作[15-16]。
(1) 案例选择及学习。由于实验教学环节的时间限制,一般指定学生较熟悉的应用型GIS系统进行设计与开发,这样学生可以腾出更多的时间与精力,来体会和实践敏捷开发的过程。因此就选择像校园地理信息系统、城市旅游地理信息系统、城市交通地理信息系统等案例,业务功能比较直观,和学生日常生活联系也比较紧密。
(2) 构建敏捷开发实验环境。将现有的实验设施稍做调整,使工作台和计算机的摆放便于两名搭档之间和各组搭档之间高效率的交流,并配备白板以便于展开更充分的讨论。参加实验的人都将担任一个角色(项目经理、客户、开发人员、测试人员等),所有的人都在同一个开放的开发环境中工作。教师扮演“客户”的角色全程指导项目开发,选择一名组织沟通能力比较强的学生担任项目经理负责项目进度和资源控制,学生按照自愿原则每两个同学结成编程小组,再选择两名同学组成测试组人员负责验收测试用例的编写和管理。
(3) 需求分析与管理。教师在整个实验过程中全程参与和指导。教师和学生一起,把各种需求变成一个个小的用户故事(User Story),例如“按照名称查询并在地图上定位公交站点”,这些模块又会根据实际情况被组合在一起或者被分解成更小的模块,它们都被记录在一些故事卡(Story Card)上,之后分别被学生在各个小的迭代中(Iteration,通常是1周一次实验课)实现;教师根据每个模块的重要程度来指定它们的优先级,学生要做的是确定每个需求模块的开发风险,风险高的(通常是因为缺乏类似的经验)需求模块将被优先研究、探索和开发,经过学生和教师分别从不同的角度评估每个模块后,它们被安排在不同的开发周期里,教师将得到一个尽可能准确的开发计划;最后,教师指导测试组学生为每个需求模块指定验收测试(功能测试)。
(4) 基于测试驱动的设计。从具体开发设计的角度来看,极限编程过程是一个个基于测试驱动的开发周期,诸如计划和设计等外层的过程都是围绕这些展开的。每个开发周期(1周一次的实验课)都有很多相应的单元测试。刚开始,因为什么都没有实现,所以所有的单元测试都是失败的;随着一个个小的需求模块的完成,通过的单元测试也越来越多。通过这种方式,教师和学生都很容易检验,是否完成了既定的开发任务。另外,通过设计走查、代码走查以及重构来优化设计;在这些过程中不断运行单元测试和功能测试,可以保证经过重整和优化后的系统仍然符合所有需求。
(5) 结对编程。2个学生结对坐在同一屏幕前,使用同一台计算机进行编程开发。所有的开发人员写程序和重构程序的时候,都要严格遵守编程规范。任何人都可以修改其他人写的程序,修改后要确定新程序能通过单元测试。结对编程的好处是,1个人编写代码时另1个人在思考,思考者的头脑中保持总体概念。如果编码者遇到困难,他们就交换位置。如果2个人都遇到困难,他们的讨论可能被在这个区域工作的其他人听到,可能给出帮助。这种结对方式,使事情顺畅、有章可循。也许更重要的是,他能使程序设计更具有社交性和娱乐性。
(6) 测试。极限编程要求学生开始写程序之前先写单元测试。学生应该经常把开发好的模块整合到一起,每次整合后都要运行单元测试;做任何的代码走查和修改,都要运行单元测试;发现了BUG,就要增加相应的测试。除了单元测试之外,还有集成测试,功能测试、压力测试和系统测试等。所有这些测试,是极限编程开发过程中最重要的文档之一,是最终交付内容。
(7) 结果评审。在实验结束时学生提交项目报告和进行项目设计答辩,对其取得的学习和开发的成果进行评估,鼓励学生撰写科技小论文,整理发表。对有进一步开展研究兴趣的学生,组织他们完善其应用开发设计作品,参加全国的GIS高校学生开发大赛。最后,教师要对小组的表现进行总结点评,帮助学生整理敏捷开发过程中的技术内容,鼓励积极性,但也要适当地指出系统开发中的不足。
引入敏捷开发方法后,学生普遍反映能够较好地理解并掌握GIS软件工程的开发理论和方法。敏捷开发模式对于教师的要求比较高,首先,要求教师应当能够灵活地应用敏捷开发的思想,其次,要求教师能够正确地指导学生。采用敏捷开发模式的GIS实验教学方案,其主要特色可以归纳为:
(1) 通过引入敏捷开发模式能降低学生开发一个实用GIS软件系统的难度,使学生能在开发实用系统的同时自觉应用软件工程思想,包括运用敏捷开发的方法来分析问题和解决问题,从而激发了学生的学习热情,增强了学生勇于实践的信心。
(2) 采用案例教学法,学生通过案例操作得到具体的体现和理解,使学生在深入理解案例的基础上能效仿该案例,运用其中的技术来开发新系统。
(3) 学生通过参与并在完成小组任务和实验的过程中,掌握了极限编程的主要实践,锻炼了自学能力和团队合作意识,提高了动手解决实际问题的能力。
总之,敏捷开发模式在“GIS软件工程”教学中是一种新的尝试,如何有效地在实验教学中深入应用敏捷开发思想将是笔者下一步探索的重点。
[1] 孙亚琴,张海荣. GIS软件工程课程教学实践与探讨[J]. 测绘通报,2011(5):91-93.
SUN Ya-qin,ZHANG Hai-rong. Teaching Practice and Study for Course of GIS Software Engineering[J]. Bulletin of Surveying and Mapping,2011(5):91-93.
[2] 田 雨,郑文华,卢秀山. “地理信息系统GIS”课程实验教学体系改革[J]. 实验室研究与探索,2006(11):1426-1428.
TIAN Yu,ZHENG Wen-hua,LU Xiu-shan. The Experimental Teaching System Reform of Geographic Information System Course[J]. Research and Exploration in Laboratory,2006(11):1426-1428.
[3] 汤国安,周 卫. “地理信息系统”课程的设计与实践[J]. 地球信息科学,2005(2):65-69.
TANG Guo-an,ZHOU Wei. Exploration and Practice for the Construction of Advanced GIS Course[J]. Geo-information Science,2005(2):65-69.
[4] 吴信才. 地理信息系统设计与实现[M].北京:电子工业出版社,2009.
[5] 焦东来,杨立君,王得玉. 《GIS软件工程》实验模式研究[J]. 现代计算机(专业版),2011,24:32-34.
JIAO Dong-lai,YANG Li-jun,WANG De-yu. Research on the Experiment Pattern in GIS Software Engineering[J]. Modern Computer,2011,24:32-34.
[6] 李华蓉. 工程驱动下的GIS实验教学改革[J].实验室研究与探索,2010(1):120-122,167.
LI Hua-rong. The Reform of Geographic Information System Experimental Teaching System Based on Engineering [J].Research and Exploration in Laboratory,2010(1):120-122,167.
[7] 孔维华,曲国庆. 《地理信息系统》课程教学改革研究[J]. 测绘科学,2006(6):167-168.
KONG Wei-hua,QU Guo-qing. Research on teaching reform of Geographic Information System course[J]. Science of Surveying and Mapping,2006(6):167-168.
[8] 陈 昊,明 仲. 在软件工程实验教学中引入敏捷方法的探索[J]. 计算机教育,2008,24:46-47.
Chen Hao,Ming Zhong.Research on Introducing the Agile Methods in the Experimental Teaching of Software Engineering[J].Computer Education,2008,24:46-47.
[9] 管林挺,顾沈明. 基于敏捷软件开发的软件工程教学研究[J]. 计算机时代,2009(8):45-46,49.
GUAN Lin-ting,GU Shen-ming. Software Engineering Teaching Research Based On Agile Software Development[J]. Computer Era,2009(8):45-46,49.
[10] 李中华,陈建国,倪明涛. 敏捷开发模式在本科层次教学中的应用探索[J]. 科技视界,2012,17:26-28.
Li Zhong-hua,Chen Jian-guo,Ni Ming-tao.Research on Application of Agile Methods on Undergraduate Teaching[J]. Science & Technology Vision,2012,17:26-28.
[11] Robert C.Maitin. 敏捷软件开发:原则、模式与实践[M]. 邓 辉译. 北京:清华大学出版社, 2003.
[12] Kent Beck. 解析极限编程——拥抱变化[M].唐东铭译.北京:人民邮电出版社,2002.
[13] 刘国栋,王政霞. 案例教学法在GIS原理教学中的应用与实践[J]. 矿山测量,2011(3):90-92.
Liu Guo-dong,Wang Zheng-xia. Practice and Application of Case Teaching in Geographic Information System Course[J]. Mine Surveying,2011(3):90-92.
[14] 张润莲,张向利,叶 进.案例教学法及其运用[J].桂林电子工业学院学报,2004(4):102-105.
ZHANG Run-lian,ZHANG Xiang-li,YE Jin.Case Teaching Method and its Application [J].Journal of Guilin University of Electronic Technology,2004(4):102-105.
[15] 蔡 勇,杨海中. 软件工程实验教学体系的探讨[J].实验室研究与探索,2008(2):49-51+55.
CAI Yong,YONG Hai-zhong. On the Experimental Teaching System of Software Engineering[J]. Research and Exploration in Laboratory,2008(2):49-51+55.
[16] 舒兰英.以小组合作学习模式进行软件工程教学[J].四川师范学院学报(自然科学版),2003(1):138-140.
SHU Lan-ying.Teaching Software Engineering by Group Learning Model[J].Journal of China West Normal University(Natural Sciences),2003(1):138-140.