软件体系架构案例教学:连珠软件开发

时间:2022-07-16 04:07:18

软件体系架构案例教学:连珠软件开发

摘要:软件体系架构(SA)是软件工程专业主修课程。本文通过五子棋软件开发案例,介绍我们给软件工程专业学生教授SA课程方面的经验。通过需求分析加深对软件系统的理解,在此基础上确定软件质量属性的优先级和所采用的、用来实现这些质量属性的战术。设计合适的五子棋软件架构以满足质量属性要求,并对架构进行评估。

关键词:软件体系架构;案例教学;本科课程;统一建模语言;软件工程

软件体系架构 SA(Software Architecture)是软件工程专业本科生的一门主修课程,通常在大学三年级开设。该门课程实践性强、涉及内容丰富,如何让学生在短短一学期内、在缺乏实践经验的情况下,理解掌握架构设计方法,就成为一个亟待解决的问题。根据学生特点,我们选择五子棋人机交互软件FIR(Five-in-a-Row)作为案例进行教学。五子棋趣味性强、规则简单、老少皆宜,同时,极具挑战性。设计这样一个软件会用到学生学过的很多课程知识,包括数据库、数据结构、算法设计与分析、高级程序设计语言,等等;初级版本的FIR程序代码量约4 000至5 000行,这样规模的软件,如果不进行架构设计就直接来写,是很困难的。因此,我们认为这是一个极佳的教学案例。

在案例教学中,我们采用质量属性驱动ADD

(Attribute Driven Design)方法[1] 165-185来设计架构,用UML(Unified Modeling Language)语言描述架构[2],遵循统一过程RUP(Rational Unified Process)方法开发软件。以下第1节对功能需求进行描述和分析;第2节深入理解系统功能和运行时状态;第3节分析质量属性和战术;第4节设计架构;第5节评估架构;第6节介绍代码开发及“架构-代码”一致性检查;第7节总结全文。

1需求描述和分析

需求分析一般在立项阶段进行(RUP中,需求分析在每一次迭代中都可能进行),它的作用是使学生在编码前初步了解系统功能以及功能模块之间的关系,为确定质量属性和决策架构做准备。这个FIR软件,主要以算法研究和教学为目的,初期版本计划用时1月左右开发完成。

图1是学生根据需求描述设计的FIR软件的顶层用例和内部用例,只要稍有下棋经验及机器博弈方面的知识就能够完成。这时的用例图不需要十分精确,因为随着后面内容的进行,用例图会不断进行调整。

2对系统功能及状态的深入理解

需求用例图让学生对系统各功能场景有了初步解,然而模块之间具体如何交互,到目前为止仍不明朗――必须在架构决策之前搞清楚其主要部分,这样得到的架构才可能合理。为此,我们选择了典型的双人对战场景,让学生弄清楚各模块之间的交互关系,然后利用UML顺序图和协作图描述场景。参考图2和图3。

这种(对系统功能的)理解还可以通过完成其他场景的顺序图和协作图来持续强化加深。但场景随条件不同有很多,不可能都这样来做――这个问题可由有限状态机图来解决。图4是我们指导学生设计的FIR系统有限状态机,其中包括一个顶层有限状态机和3个内部状态机。通过此环节,学生弄清楚了系统运行时所处状态及变迁条件,结合前面的顺序图和协作图,进一步明确了系统模块功能的划分和交互。

3质量属性及战术

深入了解系统功能及运行时状态后,下面着手分析系统的质量属性及相应战术。

3.1质量属性优先级

本软件质量属性场景主要有两个:算法研究平台、教学案例。表1是学生根据系统功能和质量属性场景列出的质量属性优先级,分高(High)、中(Middle)、

低(Low)三个等级。由于算法研究主要追求更有效的搜索算法,因此把性能列为高等级质量属性。其余质量属性处于相对次要的地位。

3.2实现质量属性所采用的战术

这一小节涉及内容较为抽象,因此在确定战术时,教师与学生一起进行讨论。

针对性能属性需求,最终决定从3方面战术着手:控制资源需求、对资源进行管理和对资源竞争进行仲裁[1] 120-135。分别采用提高计算效率、引入并发、合理调度的战术。其中,提高计算效率的主要措施是通过发现更多的知识来建立更有效的估值函数,然后利用剪枝技术提高算法搜索效率;另外还采用数据库(End Game Database)技术进一步提高搜索效率。引入并发涉及两方面:一是分离人机交互部分和搜索部分,二是通过增加计算资源(并发线程)来提高搜索效率。

针对可修改质量属性,主要采用局部化变更战术和防止连锁反应战术。局部化变更战术包括抽象通用服务、保持语义一致性、预期可能变更等;防止连锁反应战术包括信息隐藏和维持现有接口。

针对易用性质量属性,采用了支持用户主动(实现回退、重新开始等功能)、维持用户模型(对某些任务做预先计算、给出提示信息和增加帮助功能等)战术。

4架构分析和表述

前面完成了需求分析、功能状态分析、质量属性及战术分析。接下来的任务就是根据战术来创建或选用合适的软件构架。

架构风格可以看做是一整套预制好的决策。我们已清楚地了解到FIR是一个典型的人机交互软件系统,这方面有许多成熟架构风格可以选用:PAC(表示-抽象-控制模型)、MVC(模型-视图-控制器)、seeheim(塞海姆)等。最终通过集体讨论选择了MVC作为FIR的架构。该架构风格把交互过程分为3部分:输入、处理、输出,分别由控制器、模型、视图来负责,避免了系统核心函数和用户界面函数紧密交织带来的可修改性和扩展性问题,可以很方便地添加新的搜索模块、增加新的界面功能,非常适合FIR系统。架构的UML描述见图5。

根据ADD架构设计方法,在确定了顶层(即系统本身)及最初几层架构后,接下来就是分解求精架构的各个模块,针对这些模块,再选择架构驱动因素、战术和模式,继续分解求精直至系统分解为某适当的粒度为止。这部分内容受空间限制略去。

5评估架构

完成架构设计后,我们并没有立即开始详细设计及编码工作,而是与学生一起针对所选架构进行评估。评估能发现一些潜在风险,对大型软件系统尤其重要。

表2根据架构评估权衡分析方法(ATAM) [1] 276-303,列出了FIR软件架构的质量效用树。限于空间,表中仅展示了性能、可修改性部分的质量效用树。

针对质量效用树的高优先级场景如VCF_搜索,我们讨论了所采用的架构决策点和权衡点,包括提高计算效率(使用了一种Cache技术)、引入并发(见图6)等等。

6代码开发和架构―代码一致性检测

6.1代码开发

当架构层次分解稳定后,就可以将各个模块分配给开发小组在确定了接口规范及通讯消息协议后,我们将学生分组,分别负责不同模块的代码开发工作:数据库小组、人机交互界面小组、搜索函数模块小组(数个)、集成和测试小组等等。定期开会交流进展情况,由教师负责全局统筹管理。其中某些实现困难的模块,由教师事先完成。图7是FIR软件进行VCF(Victory by Continue Fours)计算的一个实战场景。

6.2架构-代码的一致性检测

软件系统最终性能不仅受SA影响,还受限于编码质量,因此,对SA与系统实际功能是否一致需进行检查。迄今,未见参考文献介绍如何在代码中跟踪具体战术或架构风格。为此,架构设计时,我们根据实际需要制定了一些功能场景的效能目标,然后在代码完成后检测这些目标的实现情况。这部分工作已经记录于表2中。以性能质量属性为例,在架构设计时要求完成一次除VCF、VCT等高级搜索外的人机交互操作不超过10ms响应时间,参考表2的“性能”行,其中,第4层场景求精列的括号中数字显示了实测运行时间,满足设计架构时设定的目标(见第3层场景概念列和第4层场景求精列的括号外部分)。

7结语

好的案例胜过千言万语,通过亲身参与全过程的软件开发,学生理解了软件架构对于软件开发的重要性,掌握了一种架构设计方法,并深刻体会到从架构到编码再到最终软件所付出巨大努力。

在这个案例中,学生会碰到各式各样的问题。教师应当以发挥学生主动性为主,以自己出手代办为辅,充分利用学生渴求知识、思维活跃的特点以及对棋的兴趣,引导他们独立解决问题。随着问题的解决,学生不但融会贯通了本课程及以前课程所学知识,还获得了很大的成就感和自信心,激发了学习兴趣。

今后,我们计划让学生利用课余时间,并根据自身兴趣参与国内外举办的机器博弈竞赛或工业级项目产品开发,以此作为课堂教学的有益补充。

参考文献:

[1] L.Bass,P.Clements,R.Kazman. software architecture in practice[M].2nd ed. Indianapolis:Addison Wesley,2003:88-356.

[2] Grady Booch,James Rumbaugh and Ivar Jacobson. The Unified Modeling Language User Guide [M].2nd ed. Indianapolis: AAddison Wesley,2005:53-205.

Developing FIR Software: A Case Study Approach for Teaching Software Architecture

LU Gang, LIU Shigang

(School of Computer Science, Shaanxi Normal University, Xi’an 710062, China)

Abstract: Software Architecture (SA) is a major course in software engineering curricula. This paper, through the development of a Five-In-A-Row (FIR) software, describes our experience on teaching SA course to the students of software engineering. Based on the requirement analysis, which can help us enhance the understanding of the system, we assign the quality attributes with the appropriate priority rankings and decide tactics employed to fulfill the correspondent attributes. The software architecture for FIR is designed to accommodate these tactics and an evaluation for the SA is set up and run.

Key words: Software Architecture; case teaching; undergraduate course; the unified modeling language; Software Engineering

上一篇:ACM/ICPC亚洲区预选赛命题经验谈 下一篇:计算机基础教学中的课程整合研究