软件工程教育:迎接网络时代超大系统的挑战
2009-04-23齐治昌谭庆平宁洪毛新军董威
齐治昌 谭庆平 宁 洪 毛新军 董 威
摘要:本文系统回顾了软件工程的发展历程,分析了网络时代软件工程的特点以及以此为基础构建超大系统面临的机遇与挑战,并提出了对软件工程教育改革的思考。
关键词:软件工程;网络时代;超大系统;软件工程教育
从工程的角度看,将一个系统做大、做快、做强有两个途径:一是采用集中式体系结构,二是采用分布式体系结构。二者各有优缺点,需要不同的支撑环境。有人形象的把集中式体系结构比喻成计划经济体制,把分布式体系结构比喻成市场经济体制。20世纪80年代大型、巨型计算机体系结构走过了这一历程。最近十余年来,随着应用软件规模、复杂性的扩大以及网络和计算机的普及与广泛应用,分布式软件系统的重要性快速提升。应对这一挑战产生的概念、方法、工具和过程称为网络时代的软件工程。基于网络的软件系统开发必将进一步发展和丰富软件工程的内涵,推进软件工程教育的改革。
一、软件工程的回顾
1968年在德国举行的NATO软件工程会议上,为应对“软件危机”的挑战,提出了“软件工程”的术语。40年来,伴随着计算机科学技术的进步和软件产业的发展,软件工程已由最初的一个学科方向发展成为一个以计算机科学技术为基础的新兴交叉学科。同时,软件工程方法学的研究与实践大大丰富了计算机科学,促进了软件产业的发展。
软件工程的主流方法和技术走过两个阶段。
第一个阶段是以结构化方法为主的时期,时间大概是20世纪70年代初至80年代末。这一阶段的计算机速度和内存空间以兆(M)计,分大、中、小几种类型,采用集中式、批处理或分时工作方式。软件工程提出了软件生命周期的概念、软件开发的瀑布模型。从结构化程序设计语言及结构化程序设计方法开始,逐步扩展并形成结构化分析、结构化设计、结构化编码、结构化测试等一整套系统完整的结构化方法。结构化方法是集中式的计算机体系结构和问题求解方式在软件层次的延伸和发展,与计算机求解问题的规模和能力相协调。基于瀑布模型的软件工程以阶段论看待软件生命周期,围绕软件生命周期的主要活动制定质量标准,给规范和规程的制定、工具研制、预算管理、工程核算、质量保证带来极大方便,使得软件开发走上工程化的轨道。由此产生的问题为计算机科学的研究提供了课题,产生了面向数据、面向数据流、面向实体/关系、面向事件驱动和状态变换的结构化分析设计方法、白盒与黑盒测试方法。软件工程将这些成果规范化、模式化,并开发成相应的软件工具,提高了软件生产率和质量。20世纪70年代软件工程流行的定义是:“软件工程是一种工程形式,它运用计算机科学和数学原理,针对软件问题获得一种经济有效的软件解决方案。”这个定义反映了当时软件工程的特点和人们对软件工程的认识。1972年IEEE的计算机协会第一次出版了《软件工程学报》,很多大学的计算机科学系先后开设软件工程课程。1991年,ACM和IEEE/CS的计算教程CC1991专题组将“软件工程”列为计算学科的九个知识领域之一,确立了软件工程课程在计算机学科中的地位。
软件工程的第二个阶段是以面向对象方法为主的时期,时间大约是20世纪80年代中期至今。这一阶段的计算机速度和内存空间以吉(G)计,个人计算机和服务器日益普及,大型机采用多处理器体系结构。显示屏、鼠标、多种传感器、网络普遍用于计算机系统,人机交互的图形人机界面为面向对象的分析、设计、编码和测试提供了发展机遇,并迅速占据主导地位。分布计算成为计算机科学研究的热点,并行算法、并行编译、分布式操作系统、分布式数据库、中间件的研究成果丰富了计算机科学的内容。这一时期软件工程的典型定义是:“软件工程是开发、运行、维护和修复软件的系统的、规范的、可量化的方法。”这一定义至今仍被广泛认同。以软件过程能力成熟度模型CMM、敏捷软件开发为代表的开发过程的改进,提高了团队的软件开发能力。2004年8月,ACM和IEEE-CS发布的软件工程知识体(SWEBOK)、软件工程教育知识体(SEEK)两个文件的最终版本,标志着软件工程学科在世界范围正式确立。SWEBOK定义了软件工程学科的内涵,包括软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程工具和方法、软件质量10个知识域。SWEBOK还把软件工程相关学科列为知识域,它们是软件工程发展不可或缺的部分,包括:计算机科学、计算机工程、数学、管理学、项目管理、质量管理、系统工程学和人类工程学8个领域。目前,软件工程已与计算机科学、计算机工程、信息系统、信息技术并列,成为计算学科的5个独立子学科。
软件工程走过了40年,但软件产品的成本高、质量低的问题仍很突出。美国专门跟踪IT项目的机构Standish Group指出,成功的大型软件项目1994年只有16%,到2005年也只占34%。统计表明,目前人们仍能接受这样的软件失效率、成本和质量。这在其他工程领域是不可接受的。问题的本质是:软件是复杂的智力产品,采用集中模式开发大型复杂应用软件系统受到了领域知识、知识产权、人类智力、项目管理等诸多复杂因素的局限。
二、网络时代的超大规模软件工程
目前,计算机芯片工艺进入纳米时代,主频/存储以G计的计算机系统普及并成为网络系统的有力节点,网络更快、更便捷、更普及。受到这些因素的推动和影响,软件工程进入了第三个阶段。突出特点是:以网络为基础将单个软件按照用户需求“渐进式”组合为一个应用系统成为广泛的社会需求。各行各业的人们正在逐步将现实社会各种形式的信息映照到“网络一计算机世界”。网格计算、计算服务、Internet应用普遍,软件工程进入了以网络为中心的新阶段。“网络一计算机世界”和现实社会一样安全问题突出,为维护系统安全耗费许多系统资源。
在这样的背景下如何构建基于网络的超大系统?卡内基梅隆大学软件工程研究所对超大规模软件系统进行了研究,并于2006年6月发表题为《超大规模系统:未来的软件挑战》的报告。报告试图回答在目前软件工程的基础上如何构建未来基于网络、可能具有数10亿行代码的系统。报告反映了当前软件工程面临的社会需求和自身应对挑战的困难和思路。超大规模系统依赖于日益复杂的支撑系统,这些系统由大量的平台、传感器、决策终端、执行系统、执行单元通过异构的有线或无线网络组成。如物流系统、全球气象系统、指挥控制系统等。系统在任何维度都会大大超出目前的系统,如代码量、雇员数、数据存储量、读取量、操作量、软构件数及复杂性等。急剧增长的系统规模将使很多事物由量变发展到质变。基于网络的系统需要多种分布方式,大量用户按照不同需求开发、使用和持续演化系统,并通过异构构件进行连接。用户带着需求在网上漫游寻求并选择服
务,根据服务的效果修订需求或提出新需求,直至达到目标。软件和硬件失效是不可避免的常见现象,不再是异常。对系统的查询及其他操作会同时发生,需要新的控制方式。这些特征对传统的软件工程原则、假设、方法学、软件项目管理等都提出了巨大的挑战。如果把传统软件工程开发的软件比喻成“建设房屋”,那么建设超大系统的软件工程相当于“建设城市”。二者之间的差异由量变发展到质变。房屋、电气和水利系统属于工程范畴,可以采用传统的工程方法构建,但城市不能。城市受限于自然、社会和人的约束。一个或少数几个开发团队建设“城市”是无能为力的,需要许多开发团队按照规划、行业分工逐步建造。“城市”可以一边建造一边发展一边提供服务。系统不是静止的,是一个社会生态系统。社会生态系统有很高的复杂度和组织性,不能通过工程方法构建。同样,因特网使用的协议可以工程化,但网络的形式受限于自然、社会和人的管理,不可能工程化。将来系统提供的功能会超越现在的Internet。这就是基于网络的软件工程面临的新挑战。
三、深化软件工程教育改革,迎接网络时代超大系统的挑战
软件工程的进步必然影响着软件工程教育的发展。十余年来,基于网络的软件工程已逐渐进入软件工程的教学活动中。在国内外有广泛影响的软件工程教科书,如Ian Sommervill,R.S.Pressman,S.L.Pfleeger编撰的教科书中已有一定的反映。将三本软件工程教材的新版与前几版进行对比可以发现网络时代软件工程教学内容改革和发展的动态。Ian Sommervill于2007年出版的《软件工程》第八版充实了安全工程、面向服务的软件工程、面向方面的软件开发、敏捷软件开发等内容。R.S.Pressman于2005年出版的《软件工程》第六版充实了Web软件工程、敏捷软件开发的内容。S.L.PfleeRer于2006年出版的《软件工程》第三版充实了抽象、建模、敏捷软件开发等内容。这些内容是对传统软件开发方法的扩充,反映了网络时代软件工程的部分新特点,但离解决网络环境下的超大规模软件开发、运行与管理问题尚有很长的路程。
为了迎接超大型软件应用对传统软件工程的挑战,必须对当前的软件工程教育体系进行研究,从目标定位、教学内容、教学方式、实践环节等方面进行改革,为网络时代超大型应用软件研发人才的培养作好准备。基于网络的软件工程将面对规模庞大、软件密集,包括人、策略、科学、技术、文化、经济和安全组成的网络社会生态系统。网络环境超大规模的软件设计理念将从传统的以技术为中心转变为以人、组织、社会为中心,并系统地考虑环境感知、设计规则、管理策略等因素。软件工程需要认知科学、自然语言理解、信息安全、微观经济学、生物学、城市规划、社会学的支持,软件工程教育需要扩展这方面的内容。
高端软件工程教育的目标可定位于培养超大规模复杂系统的系统软件和应用软件的研发人才,研究建立与超大规模复杂系统的基本特征相适应的知识体系和研发能力框架,在此基础上改革教学内容、教学方式和实践环节。具有一定专业领域知识是高层次软件工程师完成需求获取和系统测试的必要条件。软件工程与领域相结合开发各领域的应用软件是信息社会的必然要求。要有意识地拓展软件工程专业教师队伍的知识结构,适当引入和培养具有认知科学、人机工程、管理学、生物学、运筹学、信息安全、微观经济学等多学科综合知识背景的教师和学生,强化这些学科与软件工程的交叉研究,并在这些研究成果的基础上探索面向超大规模复杂系统的软件工程教学内容体系建设和教学实践环节改革的有效途径。在继承传统软件工程教学内容的基础上,妥善处理“建设房屋”与“建设城市”的关系。
由于超大规模软件工程在诸多领域还非常不成熟,更有必要强调教学与科研相结合,开展探索式学习。在人机工程领域,要进一步强调人在复杂系统中的关键作用,探索复杂系统中人与系统组成元素之间的交互协作模式、用户及用户社群的建模、用户意愿的理解、环境感知计算等。在超大规模软件设计领域,有必要研究复杂系统的多级设计空间及设计规则,探索面向冲突目标和冲突利益的软件设计技术、复杂系统的软件设计表示及分析、基于动态反馈的自适应设计及设计进化技术、分散设计活动的协调与管理方法、基于动态反馈的系统连续进化方法。研究以用户为中心的复杂系统质量度量及质量控制方法,复杂系统的软件过程模型及过程改进。研究软件开发平台对分散式协同开发、配置、发布的支持技术,复杂系统软件运行平台对系统运行监控、动态配置、在线热发布、动态进化的支持技术。通过激发学生的学习兴趣和探索热情,让学生在探索未知世界的过程中理解超大规模复杂系统软件研发的技术、方法和管理过程。针对超大规模软件系统的本质特征设置实验课题,要求学生在课程实习过程中动手探索超大规模软件系统研发过程中出现的新问题、新技术,实践新的过程管理方法。利用现有的分布式软件技术平台模拟、仿真复杂系统的主要特征,加深学生在复杂系统与现有的大规模系统之间的本质差异、复杂系统的特征、复杂系统对现有软件技术的挑战等方面的认识。利用软件仿真原理,以社会一技术综合系统(例如城市建设及运行管理)或以生态系统为仿真模拟目标,设计复杂系统的仿真软件。学生在这些富有挑战性的实验课题中学习、探索了复杂系统的设计与进化技术、复杂系统的质量控制与软件研发过程改进等。
为迎接网络时代超大规模软件工程的挑战,不仅要重视学生工程素质和专业实践能力、问题求解和工程管理能力、适应科学技术发展和学科变化需要的自主学习能力,还要十分重视学生专业道德与相关法律教育,重视书面和口头表达能力、交流和沟通能力、国际交往能力、组织和管理能力、纪律性和团队精神、主动性、创造性和美学修养等。所有这些都必将丰富软件工程学科的内涵,促进软件工程教育的发展。
[责任编辑:余大品]