以开源项目为驱动的软件工程课程改革与研究

2019-12-20 20:29章宗长王艺深
计算机教育 2019年1期
关键词:开源编程服务器

章宗长,王艺深

(苏州大学 计算机科学与技术学院,江苏 苏州 215006)

0 引 言

人类社会正在迈入智能时代,企业对软件人才的要求越来越高。一些著名的互联网公司,如腾讯、网易、阿里等,要求业务项目不仅能满足各类人群的使用需求,还能在不同设备上稳定运行。这样的业务属性需要软件人才不仅拥有出色的编程能力,还要精通可行性研究、需求分析、软件项目管理等软件工程理论。如何培养出企业满意的软件人才是当前软件工程课程改革亟待解决的重要课题。

目前,已有不少关于软件工程课程改革的方案:文献[1]提出基于“自主学习任务单”的软件工程课程改革;文献[2]提出以设计型项目为驱动的软件工程课程改革;文献[3]提出以企业项目驱动的软件工程课程改革;文献[4]提出基于开放模式的软件工程课程改革。这些改革方案都取得了一定的效果,但是仍然存在一定的问题:没有讨论开源项目对计算机技术发展的促进作用。事实上,使用开源工具进行团队协作已成为软件开发的主流。

以开源项目为驱动的软件工程课程,不仅考虑了学生现有的知识水平,还着眼于企业对软件人才的要求,特点是从开源项目入手,以现代企业的软件开发流程为标准,通过团队合作的方式,在云服务平台上搭建开发环境,培养学生的编程、沟通和自学能力。

1 课程设置存在的一些问题

软件工程一直是计算机及其他相关学科的核心,在培养高素质软件人才方面发挥重要的作用。但是,目前软件工程的课程设置存在一些不容忽视的问题。

1)课程内容枯燥乏味。

许多学生把软件工程视为一门死记硬背的学科,并不理解软件工程理论在项目开发中发挥的重要作用。笔者发现,许多学生即使学习了相关的软件工程规范,但并未在项目实践中去遵循。此外,课程设置同质化严重,难以激发学生的学习兴趣,导致普遍存在抄袭的现象。

2)课程内容脱离实际。

现代的企业项目规模大、结构复杂,往往需要十几人乃至上百人共同开发。基于云平台、使用版本控制软件的团队协作已成为当今企业生产开发的主流模式。然而,笔者在教学中发现,目前的课程内容依然是围绕单人独立完成的项目展开,忽视了多人协作在项目开发中的重要地位。

3)课程提供的实践项目较为落后。

互联网企业无不投入大量的人力物力发展人工智能、区块链、物联网等新业务,而当前课程设置的实践项目往往是基于Windows平台开发,以数据管理系统设计、个人网站的搭建为主,这与目前基于Web、多平台部署的应用开发相悖,脱离了当前企业的实际需求。

2 以开源项目为驱动的课程改革

2.1 以开源项目为驱动的优势

课程实践项目的设置必须考虑学生的已有知识水平、当前科技热点以及学生兴趣爱好。课程实践项目如果设置的过于简单,则会导致学生的工作量太少,学生难以真正理解书本的知识;如果设置的过于复杂,则会严重打击学生的学习积极性,难以达到让学生在实践中运用已学知识的目的。因此,课程实践项目的设置必须遵循难度适中、循序渐进的原则。

开源项目数目庞大、类型繁多,学生可以根据自己的兴趣爱好选择适合自己的开源项目,并和志同道合的同学一起开发。这可以激发学生的学习兴趣,调动其学习积极性,促使学生主动学习当下热门的技术,提高自主学习能力。此外,开源项目一般有着良好的社区支持。如果学生在开发过程中遇到自己无法解决的编程问题,可以在社区找到解决方案,大大降低课程实践项目的难度。

笔者以中英文翻译系统为例,阐述如何实施基于开源项目的课程改革,培养出企业满意的高素质软件人才。

2.2 项目准备阶段

由于学生此时对软件工程还不了解,因此教师在该阶段应以书本内容为主。与此同时,教师应该鼓励学生自己制订学习方案,培养学生的自主学习能力。以中英文翻译系统为例,教师除了向学生介绍如何进行可行性研究、如何撰写需求分析、如何完善详细设计等软件工程方法外,还可以要求学生充分利用开放网络课堂、个人博客、问答社区等优质网络资源,自主学习当前流行的开发技术。教师可以要求学生每周撰写1篇学习笔记并发送其邮箱,以方便掌握学生的学习进度。教师还可以向学有余力的学生推荐软件工程经典书籍作为扩展阅读,从而提高学生的知识水平。通过这种教学方式,笔者发现多数学生都能对软件工程这门课程有较为深入的了解,并能掌握Linux、Python、Git等开源软件的基本用法。

2.3 项目设计阶段

在学生掌握基本开发工具的用法和了解软件工程理论后,教师就可以选择几个开源项目让学生按照自己的兴趣爱好去选择。教师可以把选择同一个项目的学生划分为1个小组。一般1个小组会有5~6个人,教师可以指派1名沟通能力较强的学生担任组长,并让组长安排组员的分工。划分完小组并选出组长后,教师就可以带领学生按照软件工程理论对项目进行分析,包括撰写可行性报告、进行总体设计、完善详细设计等。以中英文翻译系统的开发为例,教师可以要求每个小组定期报告项目进展,并通过PPT等方式汇报当前工作。在该阶段,笔者发现虽然大部分学生已经学习过软件工程理论,但是仍然难以写出符合要求的可行性报告和设计文档。只有经过教师的多次指导和修改后,学生才真正明白这些软件工程理论在实际项目中是如何应用的。

由于从无到有构建一个中英文翻译引擎耗费巨大,所以本项目推荐基于公开的翻译引擎做二次开发。为了保证翻译的质量,项目将选择多个翻译引擎同时对同一文本进行翻译,并利用人工智能对翻译结果进行筛选,将评价最好的翻译结果呈现给用户。在此阶段中,教师可以指导学生确立该翻译系统的基本要求:①基于云平台进行开发测试;②基于分布式系统和多线程技术从多个翻译引擎采集翻译结果;③使用强化学习理论对翻译结果进行筛选,选择最优翻译结果呈现给用户;④基于Web技术编写跨平台的翻译系统客户端;⑤对整个中英文翻译系统进行测试与维护。

2.4 项目实施阶段

在完成项目设计阶段后,教师就可以指导学生根据项目需求和项目设计来实现项目。在此阶段,教师应注重培养学生的编程、团队协作和自主学习能力。整个项目实施阶段又可以分为几个阶段。以中英文翻译系统为例,整个过程分为5个部分:云服务器开发测试环境的搭建、翻译结果的采集、翻译结果的智能筛选、翻译系统的客户端开发以及翻译系统的测试与维护。

2.4.1 云服务器开发测试环境的搭建

现在绝大多数企业都选择云服务器作为生产测试环境,因为云服务器具有安全可靠、配置灵活、弹性扩容等优势。笔者选择云服务器而不是本地服务器作为项目的生产测试环境,顺应了时代的发展,有利于培养出符合企业需求的高素质软件人才。

在本阶段,教师应让学生实际运行Linux命令并查看运行结果,使学生掌握Vim编辑器的使用方法,并了解线程、进程、协程等基本的操作系统概念,最终完成在云服务器上搭建生产测试环境的目标。在此过程中,学生可以掌握相关知识:①通过SSH远程登录云服务器;②安装Python、Git等生产测试软件;③设置不同的用户,并按照其职责赋予不同的权限;④配置Linux网络参数,开启防火墙,保护云服务器的安全。

通过在云服务器上搭建生产测试环境,学生可以掌握Linux系统的使用方法,理解操作系统中的重要概念,了解服务器安全的基本知识,为后续的学习和工作打下坚实的基础。

2.4.2 翻译结果的采集

随着科学技术的进步,计算机硬件技术飞速发展,但由于用户量的不断增长,单台服务器越来越难以满足需求,因此分布式计算应运而生。为了顺应时代的发展,教师可以要求学生在开发中英文翻译系统时,基于Hadoop架构来建立分布式翻译结果采集系统。Hadoop是开源的、优秀的分布式系统架构,已在雅虎、百度、腾讯等知名互联网企业广泛应用。学生通过参加这样的实践项目,可以学习最先进的技术,养成规范的编程习惯。

在此阶段中,教师可以对学生有如下要求:①使用面向对象的编程思想,将各翻译引擎建模为不同的对象,编写出易于理解、便于维护的代码;②学习OSI七层模型和TCP/IP分层模型,掌握传输控制协议和用户数据报协议,了解传输控制协议的建立过程和关闭过程;③学习超文本标记语言和层叠样式表,能够从内容繁杂的网页中快速找到翻译结果;④学习多线程编程技术,对一个待翻译文本同时向多个翻译引擎查询,减少查询的等待时间;⑤掌握基本的数据库查询技术,了解分布式系统下的数据同步;⑥基于Map/Reduce思想,通过对Hadoop软件的二次开发,使用分布式算法完成翻译结果的采集。

通过本阶段的学习,学生可以体验企业项目的开发流程,学得当前的尖端技术,快速提高编程、沟通和协作能力。

2.4.3 翻译结果的智能筛选

由于各翻译引擎采用的技术不同,所以无法找到一个对任意文本的翻译其结果都是最优的翻译引擎。为了提升用户体验,笔者认为有必要对所有翻译结果进行比较,将最优的翻译结果呈现给用户。为了实现这一目的,笔者指导学生基于强化学习理论,使用Tensor flow完成对翻译结果的筛选。强化学习是人工智能领域最热门的课题之一,被誉为“通往通用人工智能的钥匙”。与监督学习相比,强化学习不需要对样本进行标注,这可以大大减少工作量。此外,Tensor flow是迄今为止最流行的人工智能开源框架之一,使用Tensor flow可以大大降低编程难度,快速完成项目的开发。

在此项目中,笔者把待翻译的文本建模为状态,将呈现给用户的翻译结果视为对动作的选择,把用户评分(0~5分,0分最差,5分最优)作为奖励。强化学习把不同翻译引擎对同一文本的翻译结果抽象为关于用户评分的值函数。用户的评分越高,其对应的值函数也就越大;值函数越大,翻译引擎的翻译结果可能就越好。因此,笔者总是把值函数最大的翻译引擎翻译结果提交给用户,这在强化学习中被称为利用。当然,最优的翻译引擎可能有一小部分翻译结果不令人满意。为避免这种情况的出现,笔者随机选择次优翻译引擎的翻译结果呈现给用户,这在强化学习中被称为探索。这样,笔者就选择出最符合用户需求的翻译结果。

在这一过程中,学生学到的知识有:①人工智能的发展历史;②目前主流的人工智能技术有什么优势及缺陷;③强化学习的基本概念;④在强化学习的探索和使用上进行权衡;⑤值函数的更新方式;⑥Tensor flow的基本使用。

通过学习前沿的理论知识,学生可以有更开阔的视野、更浓厚的学习兴趣和更强的自学能力。

2.4.4 翻译系统的客户端开发

为了将翻译结果呈现给用户,一个简洁、美观的客户端是必不可少的。目前Android、IOS、Windows在操作系统市场占据着统治地位,而这三大系统之间的应用又不能通用。为了降低项目难度、减少工作量,教师可以建议学生使用Web技术开发翻译系统的客户端,这样做:①可以实现客户端跨平台使用;②编写测试方便,各平台对Web应用的支持基本一致,不需要对使用平台做适配调整;③学生在前面已学习过相关知识,对Web技术有了一定的了解,学习成本低;④多数Web技术都是开源项目,社区活跃。

在本阶段,学生需要掌握的知识有:①超文本标记语言和层叠样式表的基本使用;②浏览器与服务器进行通信的方法;③数据库的基本使用方法;④掌握使用动态网页刷新来减少网络流量的方法;⑤掌握使用JavaScript语言实现客户端与用户互动的方法。

通过这个阶段,教师可以快速提高学生的编程能力,促使学生养成良好的编程习惯。

2.4.5 翻译系统的测试与维护

软件的测试与维护是项目开发的重要环节。通过对软件进行测试,可以找到代码中隐含的错误,从而避免意外情况的发生。软件维护可以延长软件的生命周期,提升用户的使用体验。在此阶段,学生需要掌握的知识有:①黑盒测试和白盒测试的区别;②评估软件可靠性的方法;③软件调试的过程;④软件维护的流程。

通过本阶段的学习,学生可以基本掌握软件测试与维护的基本方法,在实践中认识到软件工程理论在项目测试和维护中的重要作用。

2.5 团队协作出现的问题及解决方法

随着时代的发展,用户的需求越来越多,项目也越来越复杂,仅靠个人的力量已无法完成软件开发。大部分企业都是采用团队分工的方式完成项目,这样做可以大大降低项目的复杂度,缩短项目的开发周期。但是笔者在实际教学中发现,团队协作需要成员间良好的沟通,否则容易出现代码错误无法修复、程序实际运行结果与需求不符等问题。

因此,教师可以要求组长合理分配任务给组内成员,充分发挥Git、SVN等开源开发工具的作用,尝试将代码提交到码云等在线代码托管平台来完成软件的开发,使用石墨文档等在线协作文档完成相关文档的撰写。此外,教师还应要求学生遵循相关的编码规范,以方便代码调试与维护。经实践检验,上述方法能有效消除团队协作过程中出现的问题,确保项目顺利地按时完成。

3 结 语

以开源软件为驱动的软件工程课程改革,遵循了循序渐进的教学原则,将软件工程理论与项目实践有效结合,让学生在项目开发中意识到软件工程理论的重要作用。在中英文翻译系统的开发过程中,学生学习了云生产平台的搭建、翻译结果的智能筛选、跨平台客户端的开发等一系列前沿技术,提高了团队协作、编程和自学能力。实践表明,以开源软件为驱动的软件工程课程教学能够培养出顺应时代发展的高素质软件人才。

猜你喜欢
开源编程服务器
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
五毛钱能买多少头牛
2019开源杰出贡献奖
2018年全球服务器市场将保持温和增长
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
用独立服务器的站长注意了