“软件工程”教学策略探讨

2014-09-24 20:02姚红岩马云吉
软件工程 2014年8期
关键词:工程能力软件工程案例教学

姚红岩 马云吉

摘 要:以“卓越软件工程师教育培养计划”为背景,分析软件工程在专业中的位置和意义。对软件工程教学中存在的问题进行了深入探讨,提出了一种软件工程教学策略,指出提升教学效果和教学质量的实践改革思路。

关键词:软件工程;工程能力;案例教学

中图分类号:G642 文献标识码:A

Abstract:Taking the educational program for outstanding software engineering as a background,we briefly analyze the course of software engineering with respect to its position in the whole curricula system, and then explore an issue taking place in the teaching practice.A strategy for improving the teaching effect is proposed after the analysis.Our practice indicates the strategy is helpful to the students for highlighting the understanding of software design.

Keywords:software engineering;engineering ability;case study

1 引言(Introduction)

“卓越工程师教育培养计划”是教育部于2010年6月启动的为期10年(2010—2020年)的重大改革项目。该项目旨在全面提高我国工程人才培养质量,对于计算机专业则是要求其以新的教学改革尝试,培养具有高工程素质的卓越软件工程师。笔者以这一计划为大背景,围绕软件工程专业课教学,深入探讨该门课程的性质及课堂教学策略,以期能够引导学生通过学好软件工程,成为一名卓越的软件工程师。

2 软件工程教学中存在的问题及分析(The analysis for issues taking place in teaching software engineering)

软件工程是核心专业课[1,2]。该门课程能将先前学习的程序语言,面向对象思想,算法设计与分析,网络原理,数据库建模,开发工具等综合地融合到一起,在设计层面使之成为一个整体的工程方案,解决需求分析中的领域问题。作为软件工程专业的学生,应当通过学习软件工程这门课程,综合地领会各种基础课程在软件建模中的具体应用,并通过分析和设计案例,体会现实需求与抽象设计的转换之美,为将来成为一名软件工程师打好基础。然而受教学资源、课时以及学生自身条件等诸多因素限制,在实际教学过程中,学生更倾向于较快地进入编程阶段,而对早期的分析设计阶段认识不足。由于软件工程专业的学生,在长远规划上,应被培养成为软件设计人员或软件工程师,而不应是专职编码人员,因此对于教学期间出现的这种现象:易倾向编程而非重点优化设计,应当给予重视并在授课策略上作调整。笔者认为出现这种现象的原因可归结为:

(1)预修的课程较多强调编程,较少关注设计,导致一种惯性思维——跳过设计直接编程。如C++语言,授课时更多的是讲解如何编写一个类型、构造函数的编写规则,以及继承、重载、多态等编写规则和运行原理,而较少用标准制图的方式描述类型的设计以及类型间的逻辑关联。

(2)不是所有的预修课程学生都能透彻领会,依据“短板原理”,未领会的理论将使学生在设计阶段卡壳,想不出哪些理论方法可使设计进行下去,导致学生设计热情锐减。例如学生对网络原理理解不深,将影响数据传输协议的选用。

(3)从需求分析中抽象必要的设计词汇,并将这些词汇通过绘图、编档以展现业务逻辑,是一种必要的设计能力。然而,这种能力对于工科学生而言较为薄弱。部分学生词汇贫乏,导致设计时的逻辑、时序关系不清晰,给接下来的设计带来不便,从而失去设计的乐趣。如从需求中抽取动宾短语绘制业务流程图,部分学生对词性把握不当或选词不妥,使得词汇在语义上有重叠,直接导致制图过程不顺畅,而这会为后续设计,如从动宾短语映射功能类型带来麻烦。

(4)案例规模较小,学生在头脑中简要构思即可编程实现。案例规模小,学生不能通过案例感受设计的重要性,往往是先编程后补文档。这直接导致一个后果,一旦需求变动,整个程序和文档几乎要重做:这不是软件工程的初衷。反之,一个规模较大、层次分明且兼具扩展性的设计对于开发软件的成败是决定性的,通过观摩此类软件设计,能使学生感受到设计给编程带来的便利。

(5)缺乏使用开发工具的经验,不能很好地在设计概念和编程概念之间进行映射。比如选用在.Net框架下开发软件,由于学生不具有一定的使用经验,想不出设计在转为具体编码时可能面临的问题,甚至对于设计能否编程为可用的软件都缺乏信心。尽管有观点认为做设计时不要陷入技术细节,笔者也同意这一说法,但对一个技术经验不足的学生片面强调设计只会使学生认为软件工程课程虚飘,落不到实处。相反的,一旦学生有开发工具的使用经验,那么设计和编程会在学生头脑里往复映射,使学生心理上有掌控感,因此即便设计上出现问题,学生也极有可能自行寻找办法修正。

3 软件工程教学策略探讨(The discussion for software engineering teaching)

基于前一部分的讨论,笔者认为软件工程在教学策略上要强调三个方面:

(1)设计与代码的转换方式。即在为软件建模时,挑选典型的图例为学生展示相应的代码转换,体现编程与设计是相辅相成的。

(2)选取规模适中的案例并结合软件工程的设计元素,强调建模时准确抽取词汇的重要性。软件工程涉及的编档和制图在本质上都是词汇,准确的抽取词汇能使得文档和图纸在整体上层次分明,归属明确,在各自的具体表达上也能逻辑合理,时序清晰。endprint

(3)使用工具为软件模型映射实现框架。通过映射框架并作讲解,能使学生掌握软件的基本建制方法,还能刺激学生学习使用建模或编程工具的热情,使得进一步编码以完善软件成为可能。

为了在讲授软件工程时强调这三方面,笔者在实际教学期间形成以下策略:

(1)结合真实企业案例,主体讲解抽取词汇,制图和编档。重点讲解词汇的层次性,以及词汇与制图、文档的关联。

(2)选取代表性制图,实际演示如何转化为必要的函数并进行初步的类型封装。重点体现于函数名称和类型名称上,只要能体现制图逻辑即可,不需给出函数或类型的具体实现。

(3)参照较为完整的软件模型,演示如何配置主干对象以形成可运行框架。重点讲解相关设计元素与可运行框架的对应关系。

4 软件工程教学策略的实践效果(The practices of our software engineering teaching strategy)

为了实施前文提出的软件工程教学策略,笔者所在单位深入企业调研,与企业合作,主要目的有三个:其一,获取企业在用人方面的实际需求,如希望毕业生能重点学习哪些语言、平台;其二,邀请企业提供建议,定制专业课程,如与Oracle合作共建专业体系;其三,由企业提供真实案例供教学使用。这些目标都与2013年ICSE(International Conference for Software Engineering)大会中给出的调研结果不谋而合[3,4]:一定程度上说明,软件工程的教学是离不开企业案例的。应用本文教学策略的结果是令人鼓舞的,主要表现为:

(1)学生通过观摩整个案例的设计文档,并参照关于编档和制图的讲解,能够理解案例的设计逻辑,对于制图时用到的标准图形元素能够自然的接受并记忆。再加上课堂上对个别典型制图如活动图、时序图做编码上的映射,学生能更好地体会图纸与编码之间的转换方式,增强了学生编制软件的信心。

(2)以练习题的形式要求学生重新手绘当堂指定的图纸,以加深记忆有关制图。只是观摩、参看,不足以掌握和消化必要的制图方法,往往是“提笔忘字”,知识点认识模糊。只有要求学生再现图纸,真正落实到纸面上,才能有助于细节的把握,也能促使学生重新审视整个图纸的逻辑关系,以此巩固加深记忆。实际教学效果良好,学生能自主地讨论并基本再现指定制图,同时,能够认识到良好、标准的制图对软件建模的作用,不再认为软件工程是空洞无物的理论。

(3)通过参考制图及演示图纸如何转变为可运行框架,不仅提高了学习软件工程的兴趣,同时也带动了学好工具软件的积极性。在学生基本理解和记忆了必要制图之后,我们实际演示并建立了软件的可运行框架,如以.NET为平台,使用Visual Studio工具建立配置文件并初始化必要的主干对象,使整个程序框架能够运行[5]。通过这种方式,学生能够感受到软件的基本制作步骤,并对学习必要的工具和完善其余的软件代码产生了极大的兴趣。

(4)学生自组讨论软件设计文档并能提出编码时可能碰到的问题。基于可运行框架的演示,学生能主动地参照设计文档在头脑中构建软件模块,对于构建时可能有问题的地方,能主动地先行自组讨论,再与教师提问确认。有时尽管限于认识不足,教师的解答学生不能完全理解,但学生仍能清楚地知道问题出在哪里,以及需要补充哪些知识点。

5 结语(Conclusion)

本文对软件工程教学当中存在的问题以及成因进行了探讨,继而给出了一种软件工程教学策略。该策略强调软件工程的课程重点是理解和掌握有关的建模理论,而不是要求学生掌握建立软件的所有方面。在软件工程的课堂上重点仍应是设计,而不是编程。笔者不否认编程经验对良好设计的支撑作用,但能理解标准的软件工程理论并能掌握运行框架的建立方式,对于软件工程的课程教学而言已足够。至于具体的完善工程的实践经验,则有待于在卓越工程师的职业生涯中继续实践、完善。

参考文献(References)

[1] 蒲保兴.软件工程课程教学改革与实践探索[J].软件,2011(5):114-115.

[2] 荀启峰.应用型卓越软件工程师培养模式探讨[J].软件工程师,2014(2):42-43.

[3] Chris J. Pilgrim.Industry Involvement in ICT Curriculum:A Comparative Survey[C].2013 ICSE,Advanced Software Engineering Education,1148-1153.

[4] Andrew Meneely.Samuel Lucidi: Vulnerability of the day:concrete demonstrations for software engineering undergraduates[C].2013 ICSE,Advanced Software Engineering Education,1154-1157.

[5] Donis Marshall.我们在微软怎样开发软件(第1版)[M].北京:人民邮电出版社,2009.

作者简介:

姚红岩(1979-),男,博士,讲师.研究领域:软件工程.

马云吉(1978-),男,博士,副教授.研究领域:软件工程.endprint

猜你喜欢
工程能力软件工程案例教学
纺织工程专业工程能力培养体系初探
基于CDIO的网络服务配置与管理课程教学改革探讨
依托工作室的软件工程实践教学研究
基于工程教育认证的《软件工程》课程教学质量建设研究 
关于如何创新和完善计算机软件工程管理的探讨
案例教学在机械创新设计课程中的应用
马克思主义基本原理概论课案例教学的几点思考
EXCEL在《投入产出法》案例教学中的应用
《运筹学》教学模式探讨
基于“卓越计划”的机械制图课程教学改革初探