资源描述
编译原理课程实践改革探索
摘要:本文介绍了我系对编译原理课程实践的改革,陈述了该实践活动的内容、方法、效果和经验教训。<br> 关键词<br>本文来自:计算机毕业网 :编译原理;课程实践;改革<br> <br> 1引言<br> <br> 当今本科生人数大幅增加,高校毕业生就业竞争加剧,用人单位对人才要求不断提高,计算机及相关专业的不少毕业生在就业过程中暴露出动手能力差、分析问题解决问题能力薄弱、创新意识不强等问题。这些问题的出现在很大程度上反映出高校在学科的专业实践(特别是课程实践)教学方面的不足:<br> 1) 各课程的课程实践各自独立,实践内容跟不上计算机科学与技术的发展,内容陈旧、覆盖面窄、综合性不高、难度低、规模小,不注重对学生工程、质量、团队等意识的培养;<br> 2) 学生数与助教数比率增加,一些学校采用研究生作为助教,助教对学生实验的检查力度和深度不够,难以真实反映学生的实验水平;<br> 3) 未结合新形势下学生的特点来规划和组织实践,学生的热情不高,拷贝风气日益蔓延。现在的学生兴趣广泛,精力分散,多数有计算机,但是投在课程学习及实践的时间大大减少;不少学生学习目标不明确,遇到挫折容易退缩,在学习上的钻劲和毅力有所降低。<br> 针对这种现状,笔者认为加强和改善专业实践应首先抓课程实践改革,而课程实践改革则应以整体规划各计算机专业课的课程实践为指导思想。专业实践所能覆盖的程度依赖于制度的保证、学科机构的资源以及教职人员的利益。<br> 就软件类的课程而言,课程实践主要围绕着软件的设计与实现展开。课程实践的整体目标是学生至少能参与完成一个有一定规模的软件项目的设计与开发,这样的项目应能涉及到对多门课程所学原理的综合运用。在整体规划课程实践时,应遵循由小到大、循序渐进的原则,注意整体规划课程实践所涉及的语言、工具和环境,注意学生软件工程意识、质量意识和团队意识等的培养。<br> 在内容选取上,低年级的课程实践(如C语言、数据结构)以巩固课程知识的小实验为主,训练学生基本的程序设计技能;而高年级的课程实践(如编译原理、操作系统等)则应以综合运用的课程设计为主,训练学生软件工程的能力。<br> 在上述思想的指导下,笔者经过两年多的调研和准备,于2007年上半年在本系2004级学生的编译原理教学实践中开展了编译原理课程实践改革。本文将在以下各节依次介绍这次课程实践改革的内容、方法和实施效果,总结实践中的经验教训,供同行参考。<br> <br> 2课程实践方案<br> <br> 2.1课程实践的规划及历程<br> 根据上述指导思想,我们将编译课程实践定位为综合运用的课程设计,即学生(通过合作)为某个实用语言设计和开发一个可运行的编译器。这不仅能使学生加深对编译原理和技术的理解,还能提高学生的软件开发水平。学生在实践中将熟悉和掌握一些软件工程工具、环境和规范,培养工程、质量和团队等意识。<br> 制定这样的课程设计方案,首先要合理选择编译知识点,定义待实现的语言;然后对语言的编译器进行模块划分和预实现,估计实现的难度和工作量;最后研制提供给学生的支持库、样例、工具和文档,明确学生的任务。在方案研制中,既要注意使课程设计有一定的规模,又要考虑到学生和课时的实际情况,以使学生在有限的时间内尽可能多地掌握编译知识并得到综合训练。<br> 为此,我们于2004年秋开始调研国外一些知名大学的编译课程设计,从中选择美国加州大学伯克利分校的编译课程设计进行深入分析与研究。我们以本科毕业论文的形式让学生做其中的部分实验,从中感受和总结实验的难度、难点以及工作量等。2006年起,我们着手设计适合国情的课程设计,它由一系列的小课程设计组成,学生通过循序渐进地做其中的一部分即可实现一个实用语言。我们选取Java语言的一个子集MiniJOOL作为实验语言,它不支持import和package指令,也不支持interface、抽象类和抽象方法、public等访问控制修饰和异常等,程序中所有的类都放在同一个文件中。这样的语言既具有相当规模的语言特征,又比Java语言小得多。但是即便如此,实现这样的语言也不容易。为循序渐进地引导学生进行语言的实现,我们又对MiniJOOL进行裁剪,定义了SimpleMiniJOOL和SkipOOMiniJOOL两个非面向对象语言。前者只允许程序中包含一个方法,后者则包含MiniJOOL的所有非面向对象特性。目前,系列课程设计及支持库等仍在不断改进之中,感兴趣的同行可以从 为检验系列课程设计及相关资源的合理性和效果,发现其中的疏漏和不足之处,我们在2007年上半年的编译原理教学中开展了如2.2节描述的编译课程实践,并制定了如2.3节描述的考评方法来督促、激励、评价学生的课程设计。<br> 2.2课程实践的任务<br> 在这次课程实践中,要求学生用Java实现SkipOOMiniJOOL语言,每个学生需要独立完成编译器的前端(或后端),并自行选择完成后端(或前端)的合作伙伴。前端要求完成词法分析、语法分析、语义检查并生成抽象语法树(AST);后端则要求由AST生成x86汇编码,不要求代码优化,生成的汇编码应能直接用gcc汇编连接得到可执行文件。前后端的学生需要定义好接口,不开放源代码给对方,而只提供jar文件和接口说明,在运行时应能输出前端和后端的作者名。<br> 我们规定采用Eclipse JDT(Java Development Tools)中的AST实现,但不限制学生实现前端或后端所采用的方法。我们在3月底将已编写的课程设计讲义印发给学生,并将相关的工具和支持库等发布在主页上,供学生参考。下面简述本次课程设计涉及的语言、工具、支持库和样例。<br> 1) SkipOOMiniJOOL语言<br> 一个合法的SkipOOMiniJOOL程序有且仅有一个名为Program的类定义;类中所有数据和方法成员都必须是static的;除主函数外,其余函数都允许有参数和返回值,所有函数都必须由return语句返回。出现在程序中的类型只能有int、boolean、String以及一维的int型数组(数组长度是常量)。<br> 2) 工具<br> 我们选择一些开源的免费工具供学生使用,包括Java集成开发环境Eclipse (http://www.eclipse.org/)、Java SDK()、Ant编译工具(http://ant.apache.org,<br> 编译文件是XML格式,比GNU make的makefile更清晰易懂)、词法分析器的生成工具JFlex (http://jflex.de/)、语法分析器的生成工具CUP(http://www2.cs.tum.edu/projects/cup/,<br> 支持LALR(1)文法)或JavaCC ( (http://www.mingw.org/))。<br> 3) 支持库和样例<br> 讲义中简要描述了AST并列出要用到的AST节点类,提供AST的树型显示类ASTViewer便于学生显示AST。我们以赋值语句序列语言为例,说明如何手工或利用工具构造词法、语法分析器,得到语法树,并提供相关的文法文件、Java源代码框架和ant编译文件等。我们引入访问者模式,并以此为基础提供对AST的解释器、语义检查和x86代码生成等的代码框架。不过,语义检查和代码生成部分的讲义和代码框架还显得非常粗糙,有待完善。<br> </p> <p> <p>2.3考评机制<br> 课程实践的效果不仅取决于实践的内容,还取决于实践中的激励、过程管理和考评机制等。为调动学生的积极性,我们将竞争机制引入到实践中,学生可以自行推销和选择前端(后端),如果某个学生的前端(后端)被采用得越多,则得分越高。我们在4月中旬和5月安排两次课堂辅导,并利用校bbs的CompilerTech版( cgi/bbsdoc?board=CompilerTech)和E-mail等进行日常交流。<br> 在考评方面,我们将学生分成15组,每组约10人。每组用近4小时的时间进行现场测试、答辩和评分;评委由教师、助教和同组的所有同学担任,教师主导测评过程、学生现场操作并采用投影仪显示;所有评委均可以提问,学生需当众回答,所提问题主要围绕其完成的设计和编程以及测试中暴露出的错误等展开。评委的评分依据主要包括编译器的正确性、错误定位与恢复能力、生成的目标代码质量、回答问题时所表现出的对本课程设计所涉及知识的掌握程度、对自己的前端(后端)的熟悉程度、操作的熟练程度、提交物的完整性和条理性及其中反映的分析和设计思想等。每个评委当场给该组的全部同学排名;由助教根据各有效排名表给出最终排名;由教师根据本组情况确定本组的最高分和最低分,并依据排名确定每个同学的分数。此外,还规定了其他一些评分细则。<br> <br> 3实施效果与经验教训<br> <br> 在这次课程实践中,一些学生的积极性被充分调动起来。自2007年5月11日起的一个半月中,学生在校bbs的CompilerTech版发了约300封帖子讨论课程实践,改变了该版自2005年11月开版以来不太活跃的状况(该版自开版到2007年底的总贴数仅为978封)。十来个学生编写的前端或后端有较强的语义检查和错误恢复功能,甚至支持一些代码优化功能,部分学生的潜力得到了挖掘。但是,仍有许多学生投入时间不足,采取临时突击的方式,使得结果不好或者没有做完。下面分别总结本次实践的一些经验和教训。<br> 3.1经验<br> (1) 在所提供的程序框架和文档说明下扩展实现语言的编译器,既有挑战性又有好的效果。实现一个完整的编译器不仅工作量大而且有难度,提供程序框架和文档给学生,让学生先阅读再设计编码,这能使学生易上手并降低难度,不会出现大的设计偏差。在实践效果上,学生不仅能巩固从课本所学的编译器各个阶段的功能和技术,增强实践能力,而且补上了对编译器的整体认识。<br> (2) 以AST为中间结构将实验划分为前后端两类任务,并允许自行设计接口,既控制了学生开发的规模又允许有自行设计的空间。由于规定了AST实现,选择前端或后端的学生可以以此为基础
摘要:在Photoshop图像处理的教学中,探索性的使用了案例教学法。本文从课前准备、课堂实施和总结评价三个阶段阐述和分析了教学改革尝试,得出案例教学法很好的培养了学生的求异思维和探索精神,开发了智力。<br> 关键词<br>本文来自:计算机毕业网 :案例教学法;Photoshop教学;三个阶段<br> <br> 1引言<br> <br> Photoshop平面图形处理是学生毕业后从事平面设计工作所需具备的基本技能,因此该课程具有较强的实用性。在Photoshop的教学中,目前多数采用演绎法和例证法来组织教材编写和开展教学活动,这种教材和教法常常是先阐述某种理论或某种操作的基本知识和步骤,然后举例分析,是比较典型的从一般到个别的教学过程,在高校应用普遍。但是这种教学法也有待改进,因为它在创新知识、引导学生开展研究性学习方面尚有不足,在知识创新和能力养成方面,它需要其它教学法或研究法来补充和辅助。案例教学法就是一种新的方法。<br> <br> 2案例教学法<br> <br> 案例教学早在1870年首先在美国哈佛大学法学院兴起,其目的是通过对典型案例进行剖析,以期达到对法律规则的理解,从而掌握法学的基本知识和理论。目前,案例教学方法在商业、法律、医学等领域占据着重要地位。如今,在普通学科教学中进行案例教学的探索正方兴未艾。近两年来,我们一直在努力进行着Photoshop案例教学的探索。<br> Photoshop案例教学是通过描述一个具体的制作实例,引导学生对案例进行讨论,用案例组织学生进行学习、研究。在目前的教学中,教材提供了一定数量的直观形象的典型案例,教师也可以编选一些更典型、更贴近学生生活实际的案例,如图形制作、图像处理、照片修饰等。在教学改革的探索研究中,我们主要从课前准备、课堂实施和总结评价三个阶段进行案例教学法的尝试。<br> <br> 3课前准备<br> <br> (1) 教师的课前准备<br> 该课程的教学对象是司法信息系大三的学生。教师的课前准备包括:首先深入研究教材内容,把知识点大体分为几个专题,寻找并选择具有代表性的典型案例。其次,教师在课前充分了解学生的基本情况,包括他们对教材的认识和需要、兴趣、知识储备状况和关心的话题等。还要充分地估计到学生在课堂上的可能反应和可能遇到的各种问题,拟定多种相应的教学方案。再次,课前充分运用网络环境,发布课程教案,使学生可以随时预习案例中提出的问题。<br> (2) 学生的课前准备<br> 案例教学要求学生也要在课前做相应的准备,如仔细阅读案例,以便参与课上的讨论等。学生把遇到的疑问发表在网站上,老师、同学还有社会上其他爱好或擅长Photoshop的朋友都能参与和回答他们的疑问,互相交流心得。学生间的沟通和交流激发了他们更高的学习热情。<br> <br> 4课堂实施<br> <br> 案例分析教学法的课堂实施要根据不同情况灵活组织。在时间分配上要根据学生讨论情况和理解程度合理安排;在组织方式上采用分组讨论、中心发言的形式或独立思考、自由发言的形式;在问题的设置上体现教学内容的逻辑顺序与学生认知能力的有机结合。<br> 在教学安排上,我们一般先提出一个案例任务,如设计要求,制作效果,达到何种目的,以及服务对象等。学生根据要求进行分析、讨论,提出自己的设计、制作方案,使学生逐步养成独立思考的习惯。讨论到一定程度,教师再进行适当的讲解,介绍涉及到的新知识和新技能,引导学生在完成设计、制作时学习相关知识。例如,在学习设计的过程中,遇到比较多的问题就是选择和抠图,针对这一情况,我们围绕如何用Photoshop做选区和抠图设计了一专题,让学生学习体验到各种不同的抠图方法。为了增强学生的学习信心,向他们展示历届学生的优秀作品,从图片的整体构思、创意、色彩、整体效果等审美角度给学生进行讲解。从实践过程来看,学生们觉得这些知识能帮助他们解决生活中的实际问题,因而表现出极大的学习兴趣。 <br> <br> 5案例讲解<br> <br> 案例讲解旨在分析问题,提出解决问题的途径和方法。对于同一个案例,不同的学生允许提出不同的分析结果和实现方法。具体做法是在多媒体网络计算机实验室,教师对一般案例和要求辅以样品演示, 然后讲解完成作品的步骤和方法。教师主要是方法上的指导,同时结合实际应用做一些启发性的提问。针对基础薄弱的学生,也可以进行针对性的辅导,通过演示解决一些共同的问题。<br> 对案例的完成时间,因为课时有限,主要在平时让学生自己安排时间完成任务。然后通过网络上传到服务器上,让教师掌握任务的完成情况。同时,教师通过网络发布反馈意见和参考资料。对学生提出的问题进行回答,鼓励学生在网上讨论。对于有余力的学生可以布置些补充作业,鼓励他们参与一些辅导操作,并积极在网上回答同学的问题,和同学分享自己的学习心得。这样既能提高这些学生的能力,有时还能解决教师来不及指导的问题。<br> 在讨论中,教师要引导学生滤除掉案例中次要的细节,发现案例中主要的结构和案例与理论知识之间的内在联系。教师还要做好启发引导工作,创造自由宽松的讨论氛围,让学生成为案例讨论的真正的主角,帮助让学生综合运用所学的知识独立思考,大胆交流研究,在没有压力和顾忌的良好心态下进行创造性的探索。<br> <br> 6效果评价<br> <br> 对于学生完成任务情况的掌握, 我们主要采用课堂检查和作业检查两种方式。 对于部分简单的一般练习,采用教师课堂检查的方式,通过巡视,教师将每个学生的操作情况记录在表。而对于部分复杂的一般案例,如创作设计类的案例,则采用作业检查的方式。由学生通过校园网络,将作品提交到网站上,教师和同学以及社会上的Photoshop爱好者都可以发表评论,教师将部分优秀作业公开点评。对学生所完成的任务及时提供反馈信息,帮助学生了解自己的学习情况,及时调整学习计划和方法;同时,教师可以了解学生完成的任务是否达到了教学目标、学生对所要求的知识技能是否有扩充、学生的学习方法或学习能力是否有提高,从而分析出预定的教学目标与学生实际学习状况的差异,为进行下一步的教学设计提供准确的信息。针对作业完成的质量,可以组织学生互相讨论、交流、评价,让学生在互动中学习,这也是一种协作学习的方法。在讨论交流中,学生可以表达自己的见解,接纳他人的观点,同时不断地对自己和他人的观点进行反思。在评价的过程中,教师要注意引导学生去欣赏、肯定他人的长处。<br> 实践证明,将案例教学法运用到Photoshop课程教学中,学生的学习兴趣和积极性都得到了很大的提高。新方法重视学生自我意识培养,使学生在教学活动中充分发挥了主体作用。在学习和其他活动中显示出更强的上进心、自信心和学习能力,很好的培养了学生的求异思维,开发了智力,更重要的是培养了学生的探索精神。 <br> <br> 参考文献<br> [1] 苏智. 案例教学法在高职《网页制作》课程中的运用[J]. 教育信息化,2005 ,(4).<br> [2] 徐甜,吴华. “案例驱动”教学法在计算机教学中的研究与实践[J]. 职业时空,2006,(15).<br> [3] 梁平. Photoshop案例教学探讨[J]. 广西警官高等专科学校学报,2006,(3).<br> </p> <p> </p> <p>
</p>
摘要:软件项目管理是软件工程教学中的一个重要组成部分。本文在项目管理理论的基础上,结合软件工程教学的实际,以电子商务网站工程建设为实践项目,提出了项目驱动的软件项目管理教学思想。软件工程项目实践与理论教学相结合,培养了学生团队合作精神和解决实际问题的能力,提高了教学的质量和水平。<BR> 关键词:实践教学;项目驱动;软件项目管理:软件工程<BR> 随着信息技术的飞速发展,软件产品的规模也越来越大,复杂程度越来越高,项目失败的概率也随之增长。研究表明,软件项目失败的原因主要有两个:一是错误的软件项目管理;二是应用项目的复杂性。实践证明错误的软件项目管理是导致软件项目失控的直接原因。各软件企业为了能高效高质地开发软件产品,都在积极将软件项目管理引入开发活动中。然而在“软件工程”的教学中,软件项目管理的教学效果却不尽人意。一方面,教材中的案例缺乏完整性、系统性和实用性;另一方面,软件项目管理的讲授方式不是十分合理,学生重视力度不够。作者将结合多年的软件工程教
学经验,对软件项目管理的教学方法进行分析和探讨。<BR> 1软件项目管理的教学内容及特点分析<BR> 软件项目管理[1]是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员、产品、过程和项目等进行分析和管理的活动。软件项目管理是软件工程教学中的重要内容,它涉及了软件项目管理的五个标准化过程组和范围管理、时间管理、成本管理、质量管理、人力资源管理、沟通管理、风险管理、采购管理、项目综合管理九大知识领域,几乎覆盖了软件产品从立项到结束的整个过程。图1形象地展示了软件项目管理与软件开发过程在时间上的先后顺序。<BR> 大多企业的优秀管理者都是具有丰富经验的人员,同样,软件项目管理水平的高低偏重于软件项目管理经验的积累。软件项目管理的学习不仅仅是要掌<BR> 图1软件项目管理与软件开发过程的时序图<BR> 握基本的原理、方法和完成相关的设计文档,更重要的是将理论应用于实践,让学生真正理解理论的作用,体验在实际项目实施中理论知识的具体应用场景,培养学生的软件项目管理思想。立足于软件项目管理的教学目标和要求,结合软件项目管理自身的特点,分析研究认为,项目驱动的软件项目管理教学<BR> 方法能够充分调动学生学习的积极性,培养学生动手实践和主动探索的精神,提高教学的质量和水平。<BR> 2项目驱动的实践教学法<BR> 项目驱动教学法[2]是一种以建构主义为理论基础的教学方法,它以项目开发为主线展开教学,整个教学过程是一种在教师的指导下,以学生为主体的协作过程。这种教学法的主要特点是始终以项目中的任务展开教学,既注重最终的实践结果,又注重完成项目的过程。其中教师的职责在于使学习者置身于探索知识之中,通过具体项目的开发提供真实的“情境”,即实际项目中需要解决的问题。然后,通过教师的指导,学生之间的讨论来解决问题。这种模式旨在把学生融入任务完成的过程中,让学生积极地学习,自主进行知识的建构,以培养学生综合能力为最终目标。<BR> 2.1项目驱动教学对学生能力的培养<BR> (1) 培养学生自主学习的能力。项目驱动教学法中任务的设定真正实现了以学生为主体的教学方针,学生为了完成任务就会主动去图书馆或相关的网站查阅信息,从而可以丰富知识,提高自学能力。<BR> (2) 培养学生团队合作的能力。把全班学生分成几个小组,每组项目的完成情况,影响小组每个成员的评价,因此为了团队的整体利益,小组成员之间就会不可避免地展开讨论和争辩,最终达成共识,相互协作完成任务。<BR> (3) 培养学生分析问题、解决问题的能力。任务设计后,让学生自己讨论,分析任务,提出问题,充分发挥了学生在学习过程中的主动性、积极性和创造性。这种分析问题和解决问题的能力同样可以应用到其它的领域。<BR> (4) 培养学生实践创新能力。实践是创新的源泉。对于同一个任务,每个小组采用的解决方案不尽相同。他们可以根据自己的知识背景和对任务的认识,对任务的实现方法进行大胆的设计,从而培养学生的创新思维,提高学生的创新能力。<BR> 总之,项目驱动的任务式教学方法能够充分发挥学生的主观能动性,全面提高他们的综合素质。<BR> 2.2项目驱动教学法的操作过程<BR> “项目驱动”教学模式是教学过程中诸要素相互作用而形成相对稳定的组织结构和操作程序。 采用“项目驱动”教学法,在软件工程项目实施的每个阶段,我们均采用“项目任务——分析任务——理论学习——完成任务——评价总结任务”的教学模式。学生在完成“项目任务”的操作过程中,发现问题、解决问题,通过对任务的剖析,丰富了学习的经验、提高了学生完成任务的能力。<BR> 3教学实施<BR> 从软件工程的角度讲,软件项目管理过程主要分为七个阶段[3]:可行性研究阶段、需求分析阶段、设计阶段、编码阶段、测试阶段、验收阶段和维护阶段。我们在“软件工程”的教学过程中,打破以往按教材编排顺序讲授知识的方式,以软件项目的管理过程为讲授顺序,并以一个完整的具体项目实施为依托进行“软件工程”教学。其中软件项目管理的教学内容将穿插到软件生存周期各个阶段进行讲授,各阶段将会不可避免地包含相同的管理内容,通过学生重复学习与实践,可以使其深刻体会软件项目管理的思想。本校计算机专业大三学生的“软件工程”课程共54课时,我们按照理论教学与实践教学1:1的比例,先进行相关理论知识的讲解,然后进行课程实验的具体实践,结合“PetStore电子商务网站”的建设,让学生及时运用所学内容来完成项目任务,通过将软件项目管理的教学内容贯穿到项目实施的整个过程来实施教学。<BR> 3.1教学准备<BR> (1) 设置项目任务。在教学实施前,教师应根据教学进度、教学目标和要求制定教学计划,并将PetStore系统建设分成各个相对独立的子项目,将相关的理论知识分散在各个子项目中。学生应根据教师的安排认真阅读项目要求,查阅相关资料,对相关问题进行思考分析,并为课堂讨论做好准备。<BR> (2) 建设团队。我们对学生按“项目小组”以自由组合的方式建立软件开发团队[4],每个团队不得超过6人,各组成员根据实际项目开发的过程进行分工。项目经理由小组成员讨论推荐产生,负责整个项目的规划、实施和控制。系统分析师、软件测试工程师和开发工程师通过自我推荐或项目经理指定产生。项目中的每项任务要落实到人且规定该任务的起止日期和时间。<BR> (3) 建设规范的实验、实训室。根据项目驱动教学的特点,不仅需要学生提交书面的阶段性文档,还要通过具体的实践实现项目任务,提交项目作品。因此规范化的实验、实训室成为项目顺利完成的保障。<BR> 3.2教学内容<BR> 我们将从软件的生存周期着眼,利用阶段化的项目管理方法,结合项目实践,对工程化生产中的管理工作进行讲解。对于软件项目的每一个阶段均要做出工作计划,在阶段结束之后,要对该阶段的工作活动进行总结评价,并对后续阶段的时间、人员、资金方面的需求做出估计。下面按软件项目的开发阶段,以PetStore系统的建设为例,详细介绍软件工程中软件项目管理的教学内容及相关的项目实施任务。<BR> 3.2.1问题定义与可行性研究阶段<BR> 问题定义与可行性研究阶段主要涉及的项目管理教学内容包括:确定项目实施范围、项目目标、评估实施过程中主要的风险、制定项目实施的进度计划、成本和预算计划、人力资源计划等。<BR> 针对PetStore系统的开发建设,我们让老师模拟实际的用户,学生在对用户调查的基础上,结合软件项目管理理论知识,通过查阅资料、小组成员之间的讨论,编写详细的“系统目标与范围的说明书”。按照说明书的内容和要求,分析项目可能存在的风险,建立“风险项目检查表”。明确系统流程,建立系统逻辑模型,制定不同的解决方案。通过与用户的沟通,考虑经济上、技术上的可行性,比较选择一个较优的解决方案。在任务完成的过程中,学生可以真正感受到非文档所能体现的管理问题,如人力资源管理、沟通管理、风险管理等。<BR>
<P></P>
<P>
<P><BR></P>
<P>3.2.2需求分析阶段<BR> 本阶段将更加全面、准确地分析PetStore系统的需求,主要涉及的管理工作为需求管理、质量管理、沟通管理等。通过与用户的多次沟通,明确系统可以分为用户管理、商品管理和维护库存数据库三大功能模块,每个大的功能模块又可分为若干小模块,如用户的注册模块、登陆模块、修改模块等。为保证PetStore系统的开发质量,需要在此阶段制定软件质量标准,主要包括功能性、稳定性、经济性、适用性、可靠性、安全性、可维护性等指标。明确系统的各种需求后,编写“软件需求规格说明书”。<BR> 3.2.3软件设计阶段<BR> 软件设计是一个将需求转变为软件陈述(表达)的过程,程序的质量主要是由设计的质量来决定。本阶段主要包括范围管理、质量管理、时间管理、沟通管理等软件项目管理方面的内容。例如在PetStore系统设计的过程中,根据“需求规格说明书”中需求分析方法,确定所采用的软件设计方法及系统数据、软<BR> 件框架。软件设计阶段的任务主要包括PetStore系统界面设计、数据库设计、数据结构设计、编写设计文档等。在设计过程中始终要求按照质量标准予以实施,并及时进行质量评估。学生完成PetStore系统设计后,可以邀请用户或其他小组成员参与设计复审。复审时,设计人员要提出对设计方案的详细说明,答复与会者的问题,并记下重要的评审意见。<BR> 3.2.4编码阶段<BR> 编码阶段涉及的软件项目管理教学内容主要有风险管理、质量管理、进度控制、成本管理、时间管理、配置管理、项目度量管理等。针对PetStore系统,按照设计文档的要求,对系统的各个功能子模块采用自己熟悉的语言进行编码设计。在PetStore的功能模块开发过程中,并不能完全保证项目按照开发计划进行,为了能使项目进度和开发计划同步,软件管理者在项目开始后应时刻关注计划执行情况,随时进行风险分析,调整项目进度,使实际进度与计划进度保持一致。编码结束后,由项目小组的技术人员对代码是否按规范编写进行审核,以保证编码的质量。<BR> 3.2.5测试阶段<
<P> 摘要:IP包分类算法是应用在路由器数据平面的核心算法,其中一维的IP包分类算法就是路由地址查找算法,为路由器的基本转发功能提供支持,与此对应的多维的IP包分类算法是为支持第4层交换的路由器提供对IP数据报的分类,使路由器能对每一个特定的数据报作出预先定义好的处理,以便为了新的网络应用提供数据包过滤、防火墙、基于策略的路由、区分服务、QoS、流量计费等功能。本文介绍了两种典型的多维IP包分类算法在国内外研究现状及综述研究。 <BR> 关键词:IP包分类算法;多维 </P>
<P> <BR> Classification Algorithm Study of Multi-dimensional IP Packet <BR> Zhong Pingfeng <BR> (Chongqing CYIT Communication Technology Co.,Ltd,Chongqing400065,China) <BR> Abstract:IP packet classification algorithm is applied in the router data plane of the core algorithm,one-dimensional IP packet classification algorithm is the routing address lookup algorithm,the basic forwarding for the router to provide support and the corresponding multi-dimensional IP packet classification algorithm is In support of Layer 4 switching routers provide IP packet classification,so the router to each packet to a particular pre-defined processing to applications for new network packet filtering, firewall,policy-based routing,differentiated service,QoS,flow meter fees function.This article describes two typical multi-dimensional IP packet classification algorithm and the Review of research status. <BR> Keywords:IP packet classification algorithm;Multidimensional <BR> <BR> 一、问题定义 <BR> IP包分类算法本质上是一种检索算法,它用来提供RFC1812中对路由器功能要求的支持。RFC 1812中对路由器的功能要求定义为,一:路由器必须支持IP数据报的转发操作即决定IP数据报从路由器哪一个端口转发出去;二:路由器必须支持IP数据报的交换即将IP数据报放在路由器的合适的接口上;三:可选操作-对到来的数据报作特殊处理。IP包分类算法正是对功能一和功能三提供支持的算法。一维的IP包分类算法提供功能一,多维IP包分类算法提供功能三。 <BR> (一)IP分类问题的解决方法的思想 <BR> 从数学上看,IP 分类问题与计算几何中的一些问题很相似。在计算几何中有一个多维空间的点定位问题([1]):给定多维空间中的一些互不相交的区域,找出包含指定点的区域。 <BR> 一般说来,IP 分类问题比多维空间的点定位问题复杂。假定不同区域互不相交时,对N 条过滤规则和K(K>3)的情形,计算几何的结果给出的最好结果是:在空间复杂度为O(NK)时,时间复杂度为O(logN);或者是在空间复杂度为O(N)时,时间复杂度为O(logKN)。也就是说,对100 条过滤规则,每条规则4 个域的情况, 空间大概为100MB,时间大约是访存350 次。这种效率显然是不可接受的。 <BR> 但是数据流的分布和特定数据库中过滤规则的分布都有一定的规律性,或者说有内在的结构。所以很多好的IP 分类问题的解决方案都是考察到它们分布的某一点规律性提出的。 <BR> 此外,二维的IP 分类问题(即针对目的IP-源IP 对的分类)相对简单,而且二维的IP 分类在Multicast和VPN中都有广泛的应用([2]),具有实际的意义,因此对二维的IP分类问题的研究较成熟,有一些优秀的算法作为基础。所以,IP 分类问题的解决的一个重要的思想,就是降维,将高维问题转化为二维乃至一维的问题。在下一部分中,我们将介绍IP 分类问题的几个典型的算法,这些算法很清楚地体现了这些思想。 <BR> 本节将介绍几种有代表性的算法。 <BR> 二、Grid of Tries 算法 <BR> (一)二维Grid of Tries算法 <BR> Grid of Tries([4])主要是针对二维情况下的IP 分类问题提出的有效的解决方案。实际中,这种目的-源过滤规则在VPN和多播转发中有着广泛的应用。如果将数据结构中的Trie树([5])从一维扩展到二维,就形成Grid of Tries 树。以表4.1 中的数据库为例来说明这个扩展过程。先不考虑过滤规则数据库中源IP 地址,根据过滤规则数据库中目的地址前缀构造一棵Trie 树(称为Dest-Trie 树)。这个目的前缀Trie树中每个节点,如果在数据库中存在其对应的目的地址前缀,则会指向一棵源地址Trie树(称为Src-Trie 树),否则相应的指针为空。Grid of Tries 算法在查找过程中是分成两步的,第一步是通过对目的IP地址做最长匹配前缀,然后再通过查找对应的源地址Trie 树得到代价最小的过滤规则。这意味着,任意一个Dest-Trie 树中的节点不但包含过滤规则数据库中与该节点对应的源地址前缀,还应当包含该目的前缀的“前缀”(即它在Dest-Trie 树中的祖先)所有的源地址前缀。 <BR> 以上方法建立的Grid of Tries树是 Trie树的简单扩展,其时间复杂度为O(W),但是很明显,在内存方面,它存在着极大的浪费,每个Dest-Trie节点不但存储它自身的源地址前缀,还存储其祖先的源地址前缀。在最坏情况下,其空间复杂度可达到Θ( )([6])。一种改进的办法就是去掉这些多余的拷贝。每个目的地址前缀只包含在过滤规则数据库中与该目的地址配对的源地址前缀。由此我们得到一种改进的Grid of Tries树。当去掉冗余拷贝之后,查找一个目的-源地址对对应的最小代价的classID,不仅要从目的
展开阅读全文