前言:想要写出一篇引人入胜的文章?我们特意为您整理了软件工程创新性实验教学课程实践范文,希望能给你带来灵感和参考,敬请阅读。
摘要:传统的软件开发方法以及对应的软件工程课程实验设计通常缺乏一致性、系统性,不利于提高学生软件开发的综合实践能力。针对上述问题,开设实施了软件工程创新性实验教学项目“基于AADL模型驱动的软件开发方法”,使得软件开发过程的各个阶段集成于统一、一致的建模框架中。同时,辅以“做中学”与项目驱动相结合的教学模式,让学生从实践中体验一个完整的软件开发过程,提高学生的自主学习探索、软件开发综合实践能力,为软件工程实践教学的开展提供实用的可选方案。
关键词:软件工程;创新性实验教学;AADL;模型驱动;项目
驱动传统软件工程课程教学主要以经典的结构化方法学和面向对象方法学为主线,讲授两种方法学在软件生命周期开发各个阶段的原理、方法及工具的应用[1]。在课程实验阶段,结构化方法学通常使用数据流图、软件架构图、流程图[2]等不同的描述方式来分别刻画软件从需求分析、概要设计到详细设计的开发模型,对于软件开发初级者来说,同一软件在开发过程中采用不同描述手段,在两个不同阶段之间,都需要进行手工的模型转换(例如从数据流图到软件架构图的转换),容易引入错误,很难保证所建模软件系统的输入输出一致性。而面向对象的软件开发方法学尽管在软件开发生命周期的各个阶段主要采用统一的UML语言来建模软件,但是由于仍然采用了多种视图模型[3](如用例图、类图、顺序图等)来描述同一软件不同阶段的开发,同样容易导致软件开发的不一致性。基于上述问题,软件工程创新性实验教学课程引进了一种有别于传统软件方法学的新型软件开发方法,即基于AADL(ArchitectureAnalysisandDesignLanguage)[4]模型驱动的软件开发方法。基于模型驱动的软件开发方法[3]主要以高度抽象的模型为核心,将软件开发焦点聚焦于需求功能的获取、软件体系架构及业务逻辑的设计,而底层与平台实现相关的代码框架则可以由相应的软件工具自动生成,极大地提高了软件开发效率。基于UML的软件开发方法也属于模型驱动的开发方法之一。为了避免UML多种视图模型可能导致的软件开发不一致性,本课程结合当前高可信系统的开发研究热点,选取了美国汽车工程师协会提出的体系结构分析与设计语言AADL作为模型驱动开发方法的建模语言。该语言支持自顶向下、粒度逐级细化的基于组件的开发方法,将系统、子系统、进程、线程、子程序等常用的计算机运行时组件集成于统一的描述框架中,能够较好地保证软件开发的一致性。另外,该语言除了提供图形化的表示方式以外,还提供具有精确语义的文本描述以及支持第三方插件的通用XML描述方式,因此便于在软件设计早期对其表示的软件体系架构模型进行分析校验,尽早地检测出系统设计缺陷,有效地减少软件故障检测成本。本课程在引入上述方法的同时,还结合“做中学”[5]与项目驱动相结合的教学模式,将基于AADL模型驱动的开发方法应用于实践项目的开发过程中,从而使需求分析、概要设计、详细设计、代码生成等开发过程集成于统一的开发框架中,让软件开发者对于软件开发各阶段的系统一致性及软件回溯确认验证有一个良好的开发实践,聚焦于业务需求、架构设计,提高软件开发综合实践能力。
1基于AADL模型驱动的软件开发方法的应用
本课程选取了AADL语言作为模型驱动的建模语言,能将软件工程开发各阶段统一于视图一致的框架中,能够很好地顺应经典的瀑布模型的开发过程。在软件开发的不同阶段,仍然采用以AADL组件为基础的统一视图,下层视图模型在上层的视图模型的基础上,提供组件粒度更细的视图。例如,AADL系统及细化的子系统组件模型对应于需求分析阶段的业务需求建模;AADL进程组件模型在系统需求模型的输入输出接口限定下进一步推导出体系结构模型,对应于软件工程的概要设计阶段;AADL线程组件及子程序模型作为进程模型内部的执行体,刻画软件的动态行为,对应于软件工程的详细设计阶段。由于该方法遵循自顶向下、逐级求精的方法学,所以每个阶段获取的AADL模型都是基于上一阶段的模型框架下细化得到,便于复审验证分析。若发现某个开发阶段的模型缺陷,可以回溯至上一阶段进行重新分析与设计。对于最终确认的详细设计模型,学生可以进一步手动完成整个编码工作,也可以选取相应的代码生成工具生成代码框架,再补充完整业务代码。该方法在需求分析、设计阶段通过对模型进行早期分析验证来部分替代传统的代码测试方法,以减小代码测试晚期检测到的错误代价。
2以“做中学”模式提高学生探究式学习能力
2.1教学设计
课程实验采取“做中学”教学模式,以促进学生自主学习,探索未知科学的能力。参与课程的学生包括计算机专业以及来自于地理信息科学、机械电子工程、信息科学、信息管理等非专业的学生,基础各不相同,且大部分同学从未接触过AADL语言建模项目,所以配套编写了详细的实验指导书,提前分发给学生进行实验准备与预习。给学生提供丰富的国内外文献参考资料,学生可以在遇到问题时进行查阅解惑,并要求学生将问题及解决方案写入报告。要求学生通过系列调研后,自主选择一种AADL语言建模工具,在实践中快速学习一门语言的使用与相应的建模方法。课程同时也给予学生自由的探索空间,对于问题的解决给予开放式的策略,不作过多限制。例如在AADL建模时,学生可以选择AADL文本、XML、图形表示之一,但要求整个软件建模阶段采用前后一致的表示方式,以便于模型的分析与验证。对于模型分析验证的方法可以基于不同的表示形式,采取不同的分析手段。
2.2教学效果
学生通过自主学习实验指导书以及查阅文献资料,能够选择当前流行的AADL语言建模工具(如OSATE等)辅助软件系统的开发,并能通过工具自带示例快速的学习AADL语法,体验该语言的建模特性。例如,有的学生选择采用AADL文本的建模方法,并利用现有的词法、语法分析工具(如LEX,YACC)对AADL文本进行分析验证;有的学生则以AADL文本相对应的XML表示为基础,采用XML解析技术(如DOM、SAX)自己实现模型解析与分析的逻辑。有的学生采用图形表示方式进行建模,直观明了,但发现图形表示的模型不便于之后的模型检测,因此利用相应工具将图形转换为文本方式,进行进一步处理。通过做中学的模式,学生通过实践,发现具体问题,激发学生的求知欲与好奇心,再辅以详实的实验指导书和丰富的参考资料,提高学生自主探究解决问题的能力。
3以项目驱动提高学生综合实践能力
3.1教学设计
通过项目制的方式,让学生组成2~3人的团队实践一个完整的基于模型驱动的软件开发过程,提高学生的综合知识应用能力、沟通合作能力、软件复审能力、文档撰写能力等多项综合实践能力。首先,学生需要综合软件工程、操作系统、计算机组成原理等多门课程的知识来理解AADL各组件的建模语义,并将其准确地应用于项目开发各阶段的建模。其次,每组学生都要负责该组项目开发的一个或多个阶段的建模与分析任务,负责每个阶段建模的学生还需要对其建立的模型采用适当的方式进行分析验证,如果发现问题,可回溯至上一阶段的模型,与其负责的学生进行沟通确认,共同解决问题。同时,在每个阶段需要输出规范的文档,以备复审,且作为下一阶段开发的依据。
3.2教学效果
多数团队项目成员能够严格按照软件开发瀑布模型各阶段进行任务分工,并利用AADL语言固有的分层组件语义进行自顶向下逐级细化的开发。例如,负责需求建模的成员使用AADL语言精确地刻画出系统及子系统模型的输入输出接口,并给出相应的需求分析文档。该团队负责概要设计的成员依据该需求分析文档,继续在由AADL系统组件刻画的需求模型的接口之下进一步细化推导出体系架构模型,并输出概要设计文档。负责详细设计的成员依据概要设计文档,在由AADL进程组件刻画的体系架构模型的接口之下进一步刻画系统的动态行为模型,以保持系统的一致性和可回溯性。由于整个软件开发过程的一致性,当发现问题时,团队成员能够依据该阶段的模型和撰写的文档快速向上回溯,通过进一步沟通探讨,及时解决问题。
4结语
该项目作为华中农业大学本科创新性实验项目之一,来自于计算机科学与技术等六个不同专业的学生参加了总共30个学时的课程实验。学生自由组成了多个小组体验了基于AADL模型驱动的软件开发方法,通过“做中学”的方式,从实际项目中体验了软件工程从需求分析到详细设计的自顶向下逐级细化的设计思想,提高了学生的自主学习探索能力以及软件开发综合实践能力,增加了学生探究科研、开发可信软件的兴趣。该项目为软件工程创新性教学改革提供了一种实用可行的参考方案。
参考文献
[1]窦万峰.软件工程方法与实践(第3版)[M].北京:机械工业出版社,2016.
[2]窦万峰.软件工程实验教程(第3版)[M].北京:机械工业出版社,2016.
[3]杜德慧.UML建模分析与设计:基于MDA的软件开发[M].北京:机械工业出版社,2018.
[4]杨志斌,皮磊,胡凯,等.复杂嵌入式实时系统体系结构设计与分析语言:AADL[J].软件学报,2010,21(5):899-915.
[5]邹欣.构建之法:现代软件工程(第三版)[M].北京:人民邮电出版社,2017.
作者:王颖 陈仲民 王建勇 单位:华中农业大学信息学院