陈文楷
(江汉大学数学与计算机科学学院 湖北 武汉 430056)
近年来,随着德国工业4.0、中国制造2025以及“一带一路”等发展战略的提出,软件化、信息化、数字化和智能化的工程发展思想正不断渗透到农业、航空航天、生产制造等各个领域。软件工程作为计算机领域的一个重点学科,在社会生产的各个领域发挥着不可替代的作用。因此,本文在深入分析软件工程发展现状的基础上,提出了目前软件工程存在的问题,并进一步分析了软件工程的发展趋势。
自上世纪60年底开始,计算机科学领域的研究人员开始意识到“软件危机(Software Crisis)”,并努力探究应对的技术和方法。“软件工程”一词最早是于1968年召开的一次国际会议上提出的,目的是鼓励相关科研人员努力探究“软件危机”的应对方法。软件工程的定义,许多研究学者已经给出,总结下来可以得出:软件工程,就是要运用科学的技术和方法设计并开发计算机软件程序,并对其进行监测、维护和修复的一系列理论与方法的集合[1]。
20世纪70年代初期,方法学成为软件工程研究的重点内容,经典的“瀑布模型”就是此时提出的;之后,相关学者围绕“瀑布模型”进行了一系列更加深入的研究与应用[2]。然而,“瀑布模型”虽然有管理严格、能够确保软件的性能等优点,但仍存在一些不足,如过分依赖于软件开发前期的需求分析,难以满足多变的用户需求等。见图1。
图1 采用瀑布模型的软件研发过程
到70年代后期,软件工程研究的重点开始转向研究涵盖整个软件生命周期的软件工程环境,典型的工程环境为计算机辅助软件工程环境(Computer Aided Software Engineering,CASE)[3]。80年代后期开始,研究的重点又转向了对软件过程的研究,主要包括三个方面:过程模型、建模技术和过程成熟度评估。
近年来,随着科学技术的不断发展以及社会发展的本质需求,软件工程逐渐走向了智能化、信息化、集成化的道路,并出现了如极端编程模型(Extreme Programming Model,XP模型)[4]、基于构件的模型等新型的软件工程模型。这些模型通过改善模型的逻辑流程、提高代码的重用性等途径进而提高软件的研发效率和质量。
我国软件工程的发展起步较晚,但随着多年的研究与发展,也取得了一定的进步,并在短短几十年的时间里获取了多个属于自己的软件工程技术与方法,如XYZ系统、B-45系统等[5]。虽然经过了长期的发展与沉淀,但目前软件工程仍需要相关研究人员不断探究与改进。
目前计算机软件工程的发展仍存在如下的问题,包括软件危机依然存在、管理体制不完善、人才培养方式不合理等。
自软件危机显露至今还依然存在。软件危机的产生是由于在软件研发过程中,从用户需求分析开始,由于对需求表达和描述的不贴切,为软件开发过程中出现一些错误和漏洞埋下隐患;其次,软件的研发者与用户看待软件的角度有所差别,对软件的期望值也不尽相同。因此,软件的开发人员应该加强与用户的沟通,尽可能充分理解用户的需求,以确保高质量完成开发任务。
计算机软件的开发往往是一个庞大的工程,需要软件开发团队拥有一套完善的管理体制。项目经理一般在软件研发过程中充当着计划制定、任务监督等重要的角色。目前,大多数的软件公司中,项目经理往往是有软件开发人员晋升的,拥有丰富的软件开发经验,但在项目管理能力往往稍显不足;另一方面,项目经理的管理素质和能力较强,但专业知识和技术不够过硬;如何做到技术和管理素质两者兼顾,是一个不小的难题。
目前多数高校软件工程人才培养方式存在诸多不合理之处,造成了培养出来的学生难以满足软件工程的需求。主要表现在一下几个方面[6]:首先,高校往往只盲目的高层次,造成了软件工程领域的人才结构分布不合理,某些层次的人才短缺;其次,高校存在软件工程专业知识体系安排不合理、课程陈旧、不能与时俱进等现象;最后,高校培养软件工程这种实用性较高的专业人才的过程中,缺少对学生的开发经验以及工程素质等的培养。
世界经济的全球化发展带动了软件工程行业的全球化。从软件的需求分析到概念设计,从架构设计到详细设计,从编码到测试,从交付使用到售后支持,整个软件生命周期的各个阶段被分配到各个国家的不同子公司甚至外包给其他公司进行,能够有效划分各个公司的职能,充分的利用不同国家的劳动资源和科学技术资源,让专业的团队做专业的事,极大的提高了软件研发的效率,进而提升用户的满意度。因此,全球化已成为软件工程发展必然趋势。
软件工程发展全球化的发展趋势形成的一个必然条件就是软件工程的开发性。所谓的开发性,包含三个方面:开发性标准、开发性框架和开源软件。一个行业的标准是行业内必须遵循的制度,软件工程行业相关标准的开放,能够有效提高不同软件之间的交互性,方便软件不同部分的集成;开发性框架为不同团队间能够分享有效的软件开发架构提供了可能;开源软件为软件开发人员提供了一个难得的学习资源,对软件开源事业的发展起到了一定的鼓励作用。
模块化的软件工程设计思想,强调对功能的抽象、封装、分解以及层次化等,软件工程行业同时也提出了面向对象的编程、面向组件的编程以及面向服务的编程等技术,这些技术有效提高了对现有代码、功能模块、组件或系统资源的重用性,大大提高了软件研发的效率,并能够借助历史开发经验避免软件研发过程中出现漏洞和错误的几率,从而帮助企业获取较高的业务灵活性。
随着软件化、信息化、数值化和智能化的工程思想的发展,软件工程也要与时俱进,不断提升本行业各方面发展的科学性,朝着全球化、开发性和模块化的方向不断发展和完善,从而更好的满足实际社会发展的对软件工程的需求。
[1] 陈慧敏,张瑞.软件工程理论及其在软件开发中的应用研究[J].西安石油大学学报(社会科学版),2001,10(4):57-59.
[2] 郭晓娴.浅析瀑布模型[J].福建电脑,2011,27(7):137-138.
[3] 王国军,陈松乔.软件工程与CASE发展综述[J].微型机与应用,1999(5):4-6.
[4] 潘秋菱,刘宗田.极端编程模型——新颖的软件工程模型[J].计算机科学,2000,27(12):97-100.
[5] 王章宁.浅析软件工程的现状及发展趋势[J].软件,2013(10):136-137.
[6] 宋海玉,李锡祚,郑海旭,等.软件工程专业人才培养的研究与实践[J].大连民族大学学报,2008,10(5):93-96.