工程哲学在软件工程教学中的应用

2014-10-27 10:14伍永豪尹朝庆
计算机教育 2014年11期
关键词:哲学思想软件开发软件工程

伍永豪 尹朝庆

摘要:介绍工程哲学和软件工程教学融合的可能性,指出软件工程知识中的工程哲学思想,提出改革软件工程的教学,并将其用于学生综合能力的培养中,让学生掌握并灵活运用软件工程知识,激发学生的想象力和创造力。

关键词:软件工程;工程哲学;软件开发;哲学思想

0、引言

工程哲学以工程为研究对象,它是关于整个工程领域的哲学理论,也是关于重大工程问题和工程共同规律或一般规律的哲学思考。我国一些专家进行了软件工程学科的哲学研究,罗伟刚在《软件体系结构设计原理的哲学思考》一文中介绍了软件体系结构的概念以及软件体系结构中常用的原理,并用自然辩证法中的一些哲学思想来说明软件体系结构原理。宋连鹏在《软件工程与哲学》一文中从软件的开发周期中分析了软件工程的哲学思想,但是没有从软件工程的整体来进行哲学思想的探讨,也没有将工程哲学在软件工程领域进行应用研究,因此有一定的研究空白。

从哲学的视角探讨软件工程的概念与本质属性,将工程哲学应用于软件工程课程的教学具有现实意义。工程哲学在软件工程教学中的应用探索研究,既能丰富工程哲学的理论,也能进一步提升软件工程教学的质量,让学生在工程化的思想中得到人文的熏陶。

1、软件工程教学中运用的工程哲学思想

1)系统工程思想。

在软件工程的课程中,要始终把软件开发视作一个整体,从宏观上把握软件体系。在软件开发的过程中,注意关注各个模块之间的关系,全面考虑引起问题的各种因素,从系统的角度分析解决问题。

2)矛盾论思想。

教学中会大量用到矛盾论的取舍,教师在教学中引入矛盾论,可以加深学生对于事物本质的把握,知道在实践中遇到问题时如何取舍。

3)抽象模型思想。

抽象事物的本质是人类具有的一种独特能力。我们在软件设计时,要善于抽象模型,通过抓主要矛盾抽象事物的本质,然后具体问题具体分析。我们通过对事物本质的分析,构建不同的模型,这样有利于我们找出事物的潜在规律,从而解决软件开发的实际问题。

4)先整体,后局部的思想。

教师应注意教授学生学习方法,当面临较大或者较难问题的时候,要指导学生善于利用先整体后局部的思想。

5)分层分解和模块化组装的思想。

在软件工程的发展中,需要学生能够对问题进行分解,按照层次结构,将复杂的问题通过分层简化,把系统从上而下逐步分解,大问题一步步分解成小问题。同时,通过模块化组装的思想,把分层以后的模块集成化组装,最后合成一个软件系统。这种思想在软件过程的设计中大量存在。

2、工程哲学在软件工程应用中的意义和应用案例

2.1 重要意义

软件工程作为一门计算机专业的主干课程,除了传授书本的知识以外,还需要把一些思考问题、处理问题的思维方式传授给学生。计算机是一个发展速度非常快的学科,许多技术从出现到大规模应用往往只需几个月,教学可能远远滞后于企业的应用技术。在这样的大背景下,要求老师在讲授软件工程课程中,重点传授思想和思维方法。教师在通过案例教学等方式让学生在学到知识的同时,了解软件的开发方法,掌握软件工程的专业知识,还需要学生掌握软件工程所蕴含的哲学思想,使学生在以后的工程实践中能够运用哲学思想来解决未来软件开发的实际问题。

(1)学生掌握软件工程中的哲学思想后,能够进一步加深对软件工程专业知识的理解。由于哲学是一切学科的基础和源头,我们完全可以相信,如果能够很好地理解软件工程所包含的哲学思想,将更容易使学生的软件工程知识融会贯通,比如分层分解和模块化组装的思想能有利于学生掌握数据流图模型的构建,有利于学生理解流程图为什么用一组图去代替一张图的方式,让学生很好地体会分层和组合的概念。

(2)学生掌握软件工程中的哲学思想后,能学会灵活地处理问题,知道利用矛盾论等方法实事求是地解决实际问题。学好软件工程中的工程哲学理论,有利于学生在面临矛盾问题时明白“过犹不及”的道理,在实践中把握度,通过掌握软件工程的工具和方法,利用模型方式构建现实世界的逻辑模型,并利用抽象和分层的思想去简化现实世界模型化的难度,最终实现软件的设计。

(3)学生掌握软件工程中的哲学思想后,能激发学生的想象力和创造力,促使学生主动探索新知识。软件工程是一门发展中的学科,只有不断地创新才能跟上IT行业的发展。软件工程是许多工程经验的总结,随着计算机新技术的大量运用和移动互联网的飞速发展,知识的更新速度不断加快,我们要通过开展工程哲学在软件工程课程教学中应用探索促使学生知道自己的不足,努力学习新知识,应用实践软件工程的理论,同时总结自己的经验来提升软件工程学科的内涵,为促进软件工程学科的发展贡献自己的力量。

2.2 工程哲学理论在软件工程教学中的应用案例

2.2.1 系统工程思想在教学中的应用

在讲解系统的设计部分时,我们首先必须均衡各个模块之间的关系,综合考虑系统的各类影响因素,并根据划分阶段,按照一定的顺序组织开发,在实际操作中可能存在部分迭代的过程,但是总体会按照模型规定步骤逐步推进。在软件工程的教学中,我们要注意合理运用系统工程的实现,让学生掌握从宏观着手去思考软件的开发过程,合理运用软件开发模型,综合考虑软件开发的各种因素。比如学生在课程设计中容易犯直接编码的错误,如果没有设计而直接编码,当开发过程中引入新的需求的时候,就需要重新返工,这种重复工作在课程设计中比比皆是。

2.2.2 矛盾论思想在教学中的应用

在软件需求分析阶段,我们讲解传统的需求数据模型,提到E-R图的五范式。在数据库设计中,第五范式从设计的角度来讲是最好的设计,但是它也有弊病,范式级别越高,存储同样数据就需要分解成更多张表,“存储自身”的过程也就越复杂。随着范式级别的提高,数据的存储结构与基于问题域的结构间的匹配程度也随之下降,因此,当需求产生变化时,数据的稳定性较差。范式级别提高则需要访问的表增多,因此性能(速度)将下降。从实用角度来看,在大多数场合选用第三范式比较恰当,这个就是典型矛盾论的选择。在讲解到模块化时,我们指出模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能从而满足用户的需求,这样的设计并不是模块化越小越好,当模块小到一定程度时,单个模块的成本会降低,但是模块间接口成本会上升,因此要求设计者能够在矛盾论的指导下,选择最合理的平衡点,根据不同的情况、不同的项目具体问题具体分析。endprint

2.2.3 抽象模型思想在教学中的应用

在讲解软件需求时,我们通过构建数据模型来分析系统的静态数据,通过数据流图来完成系统的功能模型的设计,通过状态图来完成系统行为模型的构建,善于利用模型能够大大节约我们的需求获取时间,提升软件设计的效率。在传统的模型基础上,软件开发过程进化到面向对象的时代,在这个时代,通过类模型的构建,进一步接近人类的思维,更加有利于软件需求分析师触及系统的本质模型。

在软件的设计阶段,统一建模语言(UML)的出现,使得系统的模型搭建更加容易,这种图形化的建模语言,非常便于系统分析员和目标用户的需求交流,通过图形化的方式能够实现无障碍沟通,大大提升了需求分析的效能。同时,由于面向对象开发方法的持续性和无间隙,进一步提升了软件开发的效率。

2.2.4 先整体,后局部的思想在教学中的应用

讲解软件设计时,需要设计者能够从宏观上把握系统,只有这样才能很好地解决系统的构架问题。一个好的构架能够起到事半功倍的作用,通过滞后解决问题的方式,降低系统的开发难度,把大问题分解成小问题,然后各个击破,这样能降低系统的开发难度,减少系统开发失败的几率。在传统软件设计方法中,经常将软件的设计阶段划分为总体设计和详细设计,既关注宏观也关注微观,通过分步处理的方式来解决大问题。总体设计主要考虑系统各个模块之间的结构,不去考虑模块中算法的具体实施。在详细设计阶段,设计者主要考虑模块内部的实现机制,当模块设计完成的时候,整个系统的设计也就完成了。

2.2.5 分层分解和模块化组装的思想在教学中的应用

在软件流程图模型的构建中,我们通过一张高层次的系统流程图总体描述软件系统的概况和软件将提供的关键功能,然后分步骤逐步细化功能,最后画在单独的一页纸上。流程图模型通过分层次、分步骤的方法描述目标系统,这样的方式有利于阅读者逐步深入地了解一个复杂的系统。

在软件工程开发模型中,可以将软件划分成一个个可重用的软件成分,通过提升构件的可复用性来降低软件开发的成本,IBM公司就是通过构建软件构件库的方式来完成对全球客户的定制化服务。这种组装的思想其实借鉴了其他行业的知识,把软件设计变成了和硬件生产一样的流水线式生产模式,这种思想归根到底就是分层分解和模块化组装思想的体现。

2.3 软件工程教学的建议

(1)在软件工程课程的教学中,不能只局限于课本知识。软件工程课程是实践的理论,需要通过案例的方式将工程哲学的理论融入课堂,在传授专业知识的同时,传授哲学的知识,通过案例讲解让学生明白哪些地方是工程哲学在软件工程中的应用,让学生知其然,知其所以然。在讲解一些具有代表性的哲学理论的时候,老师要讲透。

(2)由于工程哲学在软件工程教学的应用属于研究范畴,目前教材配套的习题基本没有涉及这个领域,要求老师能够设计一些开放型思维的题目,让学生完成作业的时候开动脑筋去思索,通过习题的方式巩固所学知识,加深对知识的理解。

(3)教师带领学生参与工程实践,通过课程设计,上岗实习等方式让学生去参与实际项目,提升学生的动手能力,让学生在实践中学习。在软件开发的实践中,学生会提高独立处理问题的能力,也将有机会在实践过程中面对文中提到的哲学思想,这样更能加深学生对课程的理解,锻炼学生运用所学的哲学思想解决问题。

(4)通过邀请哲学老师来有针对性地给学生讲解一些基本的哲学思想,让学生通过课外讲座的方式了解其他学科情况,弥补老师在教学中可能存在的对于哲学领域本身的不理解造成的误读,进一步扩宽学生的知识面。

3、结语

软件工程是工程学在软件行业的应用,它在一定程度上具有工程学的很多共性,软件工程是解决软件开发过程的所有理论成果的概括和总结,是关于对软件重大工程问题和工程共同规律或一般规律的总结思考。从哲学的视角探讨工程哲学在软件工程教学中的应用探索,既能丰富工程哲学的理论,也能进一步提升工程哲学的实际应用。endprint

猜你喜欢
哲学思想软件开发软件工程
《西风颂》中的矛盾与调和
论中国养生文化
以“微积分”理念推进高职院校学生日常管理工作
信息安全环境下的计算机软件开发研究
依托工作室的软件工程实践教学研究
基于工程教育认证的《软件工程》课程教学质量建设研究 
核电厂定期试验管理软件开发
关于如何创新和完善计算机软件工程管理的探讨
FPGA软件开发过程中编码规范的作用
高等数学中的哲学思想研究