软件开发基础知识(合集7篇)雷火电竞
雷火电竞官网 雷火电竞雷火电竞官网 雷火电竞计算机软件技术的开发和稳定的发展,也能够为社会的发展和信息的进步做出很大的贡献,也能够对经济的发展提供着不可或缺的力量。这也需要更多热衷于计算机软件的开发的人才做出更多的努力与贡献,也需要对计算机软件的开发有着深刻的认识与经验,这才是计算机的软件开发与发展重要的基础,只有不断地努力才能在计算机软件开发的活动中发挥更好更重要的作用,逐渐地深入到人们的日常生活中,也使得计算机更加有利于人们的生活。
随着社会经济的不断发展与更新,计算机的技术也在不断发展,虽然发展的历史不长,但是已经取得了明显的进步,都在利用着计算机的有利的效果和一些方面,计算机的开发和更大的进步是现在现在需要解决的问题,软件的开发与进步也是对社会有着不可或缺的力量,目前计算机也大概能按照使用者的需要执行各种需要的任务,是计算机的核心系统CPU将电路分成两种状态通路和不通路,并且和数学中的二进制有效地联合起来并执行使用者给的任务和命令,要想有效地实行使用者也必须采用二进制的方法,这是人机交流方面的一个重大进步,但是计算机也有一些缺陷是我们必须解决的,所以也是亟待解决的问题,然而的计算机研究人员在原来二进制的基础上再进一步地发展了和研发了高级计算机语言,这个方法是通过英语简化语言的方式,准确而又方便地实现了计算机器与人类的各种信息的交流,也进一步的方便了人们的生活和日常的工作。而目前是主流的VF和VB这两种可视化的编程语言的出现,让计算机的软件技术又在人类的发展历史上有一个里程碑,也使得平时生活中对计算机软件的开发技术感兴趣和有着深刻了解的人也可以简单地能控和致力于这些技术的发展,时代是进步的,技术也是不断发展的,也由此快速而又逐步趋向简洁的发展可以看出当前的计算机软件正在朝着更加有利于人们的方向发展,技术开发也在朝着简单有利的方向进行着,这是目前有利的一方面,还是需要更多的计算机研究人员们的不断努力。
计算机的技术也在不断地成熟,随之而来的是软件的开发也是相当热门的门业与行类,伴随着计算机技术的发展计算机的软件技术也在不断地更新中,计算机的软件开发技术也在不断地发展中,就在短短几十年的时间取得了很大的进步并且目前仍有特别大的发展空间,在迎合人们生活与工作等各个方面的需要。新的计算机软件技术也在更新交替出现,目前已经存在的计算机的软件技术也在进行着不断地更新,因此,也毫无疑问地可以看出来计算机软件最明显的一个特点就是不断地交替,不间断,有着持续性。虽然目前有很多的计算机软件,但是随着经济的发展和社会的需要,新的计算机的开发软件也总是在顺应着人们的要求不断出现,也总是有不同程度的创新和发展,而软件的创新也是一个不间断的持续的过程,需要加以想象力并且很好的研究,但是对于已经存在的计算机软件不应该摒弃它们的作用,应该对其加以改革和创新,保持持续不间断的更新,才可以保证自身的安全性和其中的稳定性,就比如常见的也经常利用的Windows操作系统,作为一种现在的软件系统它就会定期地隔一段时间进行更新也会对自己的不足进行系统的完善,并且也会一些更新的消息可以自动进行更新,这也是其中的优势所在,软件的开发业在各个领域的运用中扮演着越来越重要的作用。另外,计算机软件技术开发的特点也是不断地随着经济的发展和运用以及社会生活在不断更新,计算机软件系统具有很强的针对性,对日常生活的需要和工作的各个方面都具有很大的帮助,也是它能够独立地发展成一门学科的关键所在。计算机软件的基础框架构架对于目前来说计算机软件的开发与设计已经成为了一个系统性的工程,对于软件设计的各个环节已经形成了一些固定的模式,所以在计算机软件开发的过程中最为重要的就是它的基础框架的构造与设计,只有选择一个优秀的基础框架这样才能够保证计算机软件开发的后面一些程序的编写,系统的维护和技术的拓展有着更高的利益和方便之处。因此在计算机的基础软件开发中和平时的活动中,必须首先确定计算机软件的基本框架,确定需要的基本目标,更有利于研究人员的开发,也能够为后继工作的编写提供给我们更多的便利。一个重要的问题是需要必须提高软件工程中的速度。
计算机软件的基础构架完成就需要进行一些编写工作,对需求分析工作已经认真的完成,就要进入最重要的环节,对于计算机的软件系统的实际设计环节,目前在这个过程计算机软件的研发人员最经常使用的C语言的编程,主要是因为它是高级语言,这种高级语言的结构性和它的基本框架都比较突出,所以被很多编程的人员经常使用,目前在软件编辑领域也出现了很多VF等可视化的编辑语言,但是人们大多还是使用C语言,也是因为软件设计的特殊性。一个重要的问题是需要必须提高软件工程中的速度,速度对大部分人来说都是一个重要的问题。对于基础框架的设计与利用是必须严格遵循一定的逻辑关系,计算机软件的设计是利用特定的逻辑关系必须对软件的内容进行严格的定义,而研发人员所必需遵循的特定的逻辑关系就是计算机软件技术开发中的基础的框架构造,因为计算机的基本框架的构造不仅能够决定平时运用这些软件时运行的流程和运行计算机的方式流程和速度等,还会对未来软件的维护和在发展产生更重要的影响,但是对于计算机的软件开发的基础构架不能是封闭式的,如果是封闭式的就不会具备这些基本的扩展能力,还有一个问题就是由于在编写程序的时候一些软件的系统的本身就比较复杂,这就需要研究人员的共同完成,这也造成了这个软件本身系统的庞大性,所以有时候在实际的编写过程中,那些本身庞大的软件在进行编写操作的时候会被分割成好几个编辑模块,在这些被分成细小模块的基础上就必须确立一个主函数,利用这些主函数对这些细小的模块进行管理,就比如在计算机系统软件在进行操作某个程序的时候,主函数就会对这些分散的编辑模块进行统一的调用,这样才能实现各个模块统一协调的工作,使得整个系统能够完整有序地进行,同时也提高了计算机软件设计的工作效率,加快了工作时的速度,正是因为多人的分工合作,才能更大地加快计算机软件系统的开发与工作状况。
对于计算机中软件系统可以说是整个计算机系统中最重要的管理系统,计算机的系统会根据软件的系统进行各种工作。而目前对于计算机软件的基本框架基础应用最广泛的有3层:表示层、逻辑层、和数据层三层结构组成的基础的构架,在现在的基础框架中软件表示层、逻辑层和数据层分别对应着计算机软件系统的人机交互界面,逻辑关系和计算机语言区。这样对一个软件有了基本的基础构架,在后期进行维护的时候才能不伤害其他系统,仍可以使其他系统有条不紊地进行。一个优秀的软件技术的基础构架能够极大地提升在计算机软件的应用的效率和运行的速度。而当前的计算机软件系统的针对性也越来越强,所以在后续运用方面进行运行管理时应该根据自身的结构基础进行调用,面对目前计算机软件的开发形势与方向,研究人员必须进行一定的讨论最后再根据需求者的应用设计不同的适合客户发展的方面。这样既可以保证工作的方向性,也可对后部计算机软件的维护发挥一些重要作用,也可方便研究人员的设计工作。这些软件在进行编写成功后是不能马上投入到工作的,需要进行调试,一些研究人员的跟随,因为在其中可能会出现一些漏洞。根据各个软件的不同调试方法要利用科学的方法调试,也有益于后期的维护工作。
对于一开始的确立的框架结构必须选择科学无误的框架,才能有利于后期的一些编写的进行,计算机软件的研究开发人员必须进行准确无误的研究讨论,最后才可以确定客户需要,所以对于第一步的框架构造应该认线完善程序编写数据
计算机软件技术开发过程中对于程序的编写的工作,根据第一步框架结构能够无误地进行,编写工作的进行跟从主函数的分配才使得各个工作有条不紊地进行,所以确实主函数,研究人员应该正确地讨论主函数的选用,才能使得主函数有利的支配于编辑模块,各个工作人员的分工才能更好地进行,对编写工作也有很大的方便性。因此在计算机的基础软件开发中和平时的活动中,必须首先确定计算机软件的基本框架,确定需要的基本目标,更有利于研究人员的开发,所以说建立基本的框架基础是首要目标。应该满足客户的要求进行软件的编写工作,而目前在日常生活中最常用于生活的是C语言,C语言主要特点是它的结构明显的突出,它的基础框架也是特别优秀的,也能够为后继工作的编写提供给更多的便利。一个重要的问题是需要必须提高软件工程中的速度,速度对大部分人来说都是一个重要的问题
最后就是完成后对于计算机软件的调试工作了,软件不能立即投入到使用中,需要进行严格的调试并认真地改正,满足客服的需求,在后期进行维护的时候才能不伤害其他系统,仍可以使其他系统有条不紊地进行。一个优秀的软件技术的基础构架能够极大地提升在计算机软件的应用的效率和运行的速度。这也方便后期对这些软件漏洞的维护,需要对大部分的数据进行研究工作,以保证计算机软件的有效进行,也可以防止后期漏洞的产生,也可以加快软件自动更新的作用。
随着当代社会经济的发展,计算机软件的开发技术已经深入日常生活中,也大大方便了平时的生活,成为了不可或缺的力量,编写的过程可能有些许的复杂,但是只要研究人员深刻的投入,所有问题都是可以解决的。
[1]金红军.规范化在计算机软件开发中的应用[J].物联网技术,2016,(01).
[2]董海,叶永利.计算机软件开发的JAVA编程语言分析[J].数字技术与应用,2016,(01).
[3]许葵元.浅谈计算机软件开发中的分层技术运用[J].数字技术与应用,2016,(01).
[4]林雪海,吴小勇.计算机软件开发的基础架构原理研究[J].电子制作,2016,(Z1).
一、系统计划:它包括系统定义及分析、可行性研究和实施计划报告的编写。1、系统定义是制定软件计划的第一步,它应决定所开发软件的总目标,其任务包括首先是确定所开发软件的总体要求和适用范围,描述所开发软件与外界接口的关系;其次是确定所需硬件和软件的支持,对开发的进度和成本作初步估计;第三是分析系统的可行性是否确定所开发软件与原软件的兼容性或其它关系;最后是确定所开发软件的性能与其内部复杂性之间的折中关系。2、可行性研究它包括技术可行性、经济可行性及社会可行性方面。技术可行性是研究应弄清现有技术条件能否顺利完成开发工作,对参加开发工作的人员应有哪些技术方面的要求。硬件配置能否满足开发的需要,估计的进度是否恰当以及对用户的技术方面的要求是否合理等等;经济可行性研究的目的是希望以最小的开发成本取得最佳的经济效益的软件产品;社会可行性研究则是指所开发的软件项目是否涉及到版权纠纷等法律问题,这样的软件产品投入运行后,对生产、管理或经营体制带来有什么社会影响。3、实施计划报告的编写是开发进度、人员投入计划、人员的组织及其资源的利用作个计划报告提纲。
二、系统需求分析:需求分析的任务在于完全地弄清用户对软件系统的确切需求,它具有三大特点:准确性和一致性;清晰性和没有二义性;直观、易读和易于修改。比如,你首先要知道做这个项目是为了解决什么问题;测试案例中应该输入什么数据等等,为了清楚地知道这些需求,你经常要和客户、项目经理交流等。需求分析的步骤:1、通过对现实环境的调查研究,获得当前系统的具体模型;2、去掉具体模型中的非本质因素,抽象于当前系统的逻辑模型;3、分析当前系统与目标的差别,建立目标系统的逻辑模型;4、对目标系统进行完善和补充,并写出完整的需求说明;5、对需求说明进行复审,直到确认文档齐全,并且符合用户的全部需求为止。
三、系统设计:主要分成两步即概要设计(总体设计或结构设计)和详细设计。概要设计阶段应着重解决实现需求的程序模块设计问题,如何把被开发软件系统划分成若干模块,并决定模块的接口,模块间的相互关系以及模块之间传递的信息。详细设计则是要决定每个模块内部的具体算法。经概要设计和详细设计完成后,需要进行必要的阶段评审,其目的在于使设计发生问题能够及时发现并得到及时的解决。实际上软件设计的主要任务是就是将软件分解成模块,该模块是指能实现某个功能的数据和程序说明、可执行程序的程序单元。
四、系统编码:系统编码即编程序是软件开发的最终目标,是产生能在计算机执行的程序,其目的是使用选定的程序设计语言,把模块的过程性描述翻译为用该语言书定的源程序。实质上,软件=程序+文档。编码的目的是产生程序,其余阶段是产生文档。软件编码是指把软件设计转换成计算机可接受的程序,写成以某一程序设计语言表示的“源程序清单”。能充分了解软件开发语言、工具特性和编程风格,有助于开发工具的选择以及保证软件产品的开发质量。
五、系统测试:包括测试的方法与技术和测试步骤。测试在软件生命期中占重要地位,不仅是因为测试阶段占的时间、花费的人力和成本占软件开发的比重很大,而且它直接影响着软件的质量。程序中许多细微的地方要求绝对正确无误,不能半点马虎。软件开发工作在测试以前已经历了制定计划、需求分析、设计和编码等许多阶段,每一个人的思维不可能绝对周密,而不可能不出现差错,更不用说,在大中型软件开发项目中,系统内各部分之间、各种数据之间、各种人员之间存在着复杂的关系,因而目前可采用的开发方法都不能完全避免发生差错。1、测试的方法与技术主要是机器测试与人工测试和白盒测试与黑盒测试。机器测试是在设定的测试数据上执行被测程序的过程,又称为动态测试。人工测试并不是可有可无的,为了节约计算机机时采取的权宜措施。它是机器测试的准备,也是程序测试中不可缺少的环节。而白盒法和黑盒法主要依据是软件的功能或软件行为描述,发现软件的接口、功能和结构错误。其中接口错误包括内部、外部借口、资源管理、集成化以及系统错误。2、测试步骤。分单元测试(模块测试)、综合测试、确认测试和系统测试四部分组成。它是整个计算机系统(包括软件与硬件)的测试,可与系统的安装和验收结合进行。测试的目的是让你知道,什么时候算是完成了,这样可以及时知道你是否真的完成。
测试是软件开发时期最繁重的任务,也是保证软件可靠性最主要的手段,测试的目的是发现程序的错误,而不是证明程序没有错误,软件的测试通常分散在3个阶段进行。编码阶段完成单元测试,包括静态分析与动态测试。
CDIO 工程教育模式是近年来国际工程教育改革的最新成果。CDIO 是构思(Conceive)、设计(Design)、实现(Implement) 和运作(Operate)四个英文单词的缩写[1]。CDIO 工程教学模式是一种倡导以工程项目为主线,将项目研发不同阶段涉及的知识与课程进行有机的结合,教师针对课程在工程项目的地位,运用多种教学方法引导学生进行主动学习,强调学生的学习主体性,注重能力培养的一种教学模式。
软件工程专业要求培养适应计算机应用学科的发展,特别是软件产业的发展,具备计算机软件的基础理论、基本知识和基本技能,具有用软件工程的思想、方法和技术来分析、设计和实现计算机软件系统的能力,能在IT行业、科研机构、企事业中从事软件工程项目的开发与测试、网站开发、网络游戏设计的高素质应用型人才。
CDIO 理念下的软件工程专业人才培养以软件工程项目为主线,采用理论、实践、案例分析、综合项目实践和工程化毕业设计的一体化教学模式。在整个人才培养过程中,按照软件工程项目的基础知识、分析、开发、运行和维护的流程组织教学,同时培养学生具有较强的外语能力、扎实的软件工程基础知识,并熟练掌握软件开发与测试技术,熟悉服务外包软件开发流程。
软件工程是注重系统化和工程性的专业, 其内容具有厚基础、更新快、实践重等特点,这些特点决定了软件工程人员要具备坚实的理论基础、一定的工程实践能力和创新能力。本着培养“技术基础厚、应用能力强、综合素质高”应用型技术人才为宗旨,软件工程专业的教学安排如下:第一学年主要学习公共基础课程和部分专业基础课程,使学生掌握从事软件工程领域的专业基础知识,培养学生的数学工程职业基础和人文素养;第二学年主要学习专业基础课程和专业核心课程,重点结合工程项目进行“做中学”,形成自主学习、团队协作和计算机软件基础及软件工具软件产品的基本工程能力;第三学年主要学习方向核心课程和专业拓展课程,引进当前软件开发新技术、新方法和新平台,采取合作探究式学习方法,培养软件系统与应用及软件工程软件管理能力;第四学年主要进行综合项目实践类课程的学习,塑造学生软件工程能力、团队协作能力,对学生的职业岗位能力进行训练,使学生在进入岗位前就具备较好的工程经验,实现从学校到职场的转变。
CDIO模式的核心就是项目教学,可将企业真实项目直接引入课堂,也可以由教师设计项目,要求项目涵盖该教学任务的大多数知识点,并且能有明确的阶段性目标。在项目教学中,教师的身份也就集工程师、导师、教师“三师”为一体,从软件项目的构思(C)、设计(D)、实现(I)到运行(O),教师的工程化指导至关重要,这就要求教师进行自身工程实践的经验积累。项目教学中采用过程化考核方式,以成果为考核依据。
软件工程专业综合能力素质的分解基于以能力培养为主线,突出实践性、发展性和工程性,注重学生的基本人文素质、职业基础和创新能力的培养,注重学生潜在发展能力、职业适应能力和职业迁移能力的养成,注重专业素质和身心素质的锻炼培养。同时结合区域产业发展,强调专业素质和非专业素质并重。
结合CDIO模式的特点,软件工程专业核心能力分解为项目构思阶段的计算机软件基础(CSE)能力、项目设计阶段的软件工程软件管理(SEM)能力、项目实现阶段的软件系统与应用(SSA)能力、项目运行阶段的软件工具软件产品(STP)能力,非专业技能素质的数学工程职业基础(MEP)能力和基本素质(BAS)贯穿这个项目的CDIO模式过程。CDIO模式下的软件工程专业综合能力素质分解如图1所示。
专业人才的培养要体现知识、能力、素质协调发展的原则。科学认识和分析知识、能力、素质的辨证关系,以“知识是基础、是载体,能力是知识的综合体现,素质是知识和能力的升华”先进理念为指导思想,要设计适当的知识为载体,实施素质和能力培养;设计适当的知识群构成知识体系,要强化知识体系的设计与建设,使专业教育内容的每一个教学模块构成一个以知识体系为载体,实施素质和能力培养有效的训练和学习系统。
课程体系是达成人才培养目标的有力支撑,科学合理的课程体系会促成高端技能型人才的培养。根据专业综合能力素质分解的结果,基于CDIO 的软件工程专业课程体系的构建原则从以下几方面进行考虑:
1) 充分发挥工程性的专业特点,基于CDIO培养大纲设置课程体系,实现学校与企业零距离接轨。
2) 注重公共基础课程、专业基础课程、专业核心课程的课程设置, 借助当前主流的软件开发平台,做到软件开发语言和技术四年不断线。
强调学生工程性、技术性、实用性、系统性、综合性、复合型和适应软件工作流程等素质的培养,实现“熟悉软件工程技能、更完整的系统级认识、掌握某一方向的软件设计开发技术和适应软件企业的英语加计算机能力”四个目标。在这一阶段中,综合考虑主干专业课程和特色课程的设置,全面考虑课程之间的关联,强调统一设计、统一规划。
3) 结合区域经济发展特点,根据软件的新兴技术和行业软件的发展需要设置专业选修课, 形成独特的教育内容、教育途径和教育体系。
按照顶层设计的方法,软件工程专业教育内容由普通教育内容、专业教育内容和综合教育内容三个类别,公共基础(通识教育、基本素质)课程平台、学科及专业基础课程平台、专业(核心)课程平台、专业拓展(选修)课程平台、集中实践教学项目平台等五个平台及13个教学模块构成:
普通教育内容包括:①人文社会科学,②自然科学,③外语,④体育,⑤实践训练等教学模块。
专业教育内容包括:①本学科专业基础,②专业核心,③专业方向,④专业实践训练等教学模块。
综合教育内容包括:①思想教育,②学术与科技活动,③文体活动,④自选活动等教学模块。
该平台是依据人才培养规格而设置的,包括较宽广的基础课程、通用课程。包括英语、政治理论课、德育和体育、数学基础等。侧重培养基本素质、职业素质和职业道德。主要课程有思想道德修养与法律基础、思想、理论和“三个代表”、马克思主义基本原理、中国近代史纲要、大学英语、体育与健康、高等数学、大学语文等课程。
该平台是依据软件工程学科来设置课程,侧重于软件工程中的专业技术。包括软件基础课程群、硬件基础课程群和理论基础课程群等,主干课程包括顺序开设的程序设计基础、数据结构与算法、工程数学等课程。
该平台是依据人才培养主线而设置课程,主要培养学生面向软件开发岗位群的应用能力,并为其解决实际应用问题打下坚实的理论基础。主要包括以下顺序开设的课程:面向对象程序设计、面向对象程序设计、建模课程、系统开发、软件工程、项目管理、软件质量保证、计算机网络等。
该平台是依据应用型本科定位而设置的。考虑到计算机应用型人才在知识结构上应具有知识面宽、基础扎实、应用性强的特点,在该课程平台上设置的课程具有学科知识面宽;理论深度稍低,学科知识在应用有针对性,共设计了职业素质、软件体系、行业软件应用、游戏软件等模块,设置了如下课程:国际软件工程师职业道德、软件体系结构、软件项目管理、物流信息技术、大宗商品交易系统、管理信息系统、RIA编程技术、游戏脚本编程、3DMAX建模制作、心理学、Flas制作、中国文化史等。
CDIO 模式下的软件工程专业人才培养模式以提高学生工程实践能力为本,注重培养学生的工程基础知识、个人能力、人际团队能力和工程系统能力。在CDIO工程教育模式中,参照 CDIO 标准11,采用多元化过程式的模式评估学生的软件工程能力和职业素养。其中,工程要从软件开发与实现、软件测试与质量保证、软件建模、软件开发过程管理、软件方法、文档写作和英文阅读写作能力等方面进行评估;职业素养主要从职业道德、职业素质、主动学习能力、行业知识技术和团队合作能力等方面进行评估。评估采用理论考核、实践考核、大作业和小组评价等方式。理论考核主要考查学生对软件工程基础知识的掌握程度,实践考核主要考查学生的工程系统能力,大作业主要考查学生对项目工程的理解和掌控程度,小组评价主要考查学生的团队合作能力。这种多种方式结合的考核模式能够比较全面有效地反映学生的工程构思、设计、实现和运行各个阶段的情况,促进学生全方位发展。
基于CDIO 的软件工程专业课程体系符合软件工程专业的工程性和学科性的特点,围绕软件工程基础知识、软件管理能力、软件系统与应用能力和软件工具和产品能力四个方面开展工作,创新了人才培养模式,加强了软件开发技术和工程方面的课程教学,这些课程通常都能使学生拥有自己的作品,教学效果良好。实践教学环节无疑是与企业无缝连接最好的渠道,通过设置多种方式的实践教学,使学生真实的接触企业项目,按照企业要求模拟软件开发流程,在毕业设计完成后,学生的实践动手能力达到企业要求。真正做到了“技术基础厚、应用能力强、综合素质高”,这是CDIO教育模式的本土化,为促进工程教育模式的改革和创新、卓越工程师的培养和现代职教体系的建设提供借鉴。
[1] 尹春娇, 沈桂芳. 探析CDIO模式在应用型本科院校软件工程课程实践教学中的应用[J].科技信息, 2012(31):15-16.
[2] 张锦华,丁新慧. 基于CDIO理念的创新型软件人才培养模型[J]. 周口师范学院学报,2012(9):119-122.
[3] 屈卫清. 区域产业发展与软件专业细分相关性[J]. 人民论坛, 2010(11):234-235.
[4] 田玲, 尹庆民, 马丽仪. 基于CDIO模式的服务外包人才培养探索与实践[J]. 科技管理研究,2012(16):164-167.
随着“互联网+”时代的到来,推动传统产业升级转型,走创新之路,这其中,人才是关键。传统学科领域的数字化、信息化、智能化呈现出的加速变革是创新驱动、“中国制造2025”“一带一路”“互联网+”等国家战略的驱动力。这些学科的发展日益依赖软件及其相关技术。在特色型专业为主的高校中,建设特色专业领域软件工程专业已成为学科建设与发展的共识。特色型软件工程专业培养目标是:充分发挥特色学科人才培养经验,培养兼备软件工程与领域专业知识,具备特色领域软件设计、开发与应用有较深见解,具备利用软件技术解决特色领域专业问题的软件工程人才。以地学学科为例,对软件技术依赖度较高的专业有地理信息科学、测绘工程、勘探技术与工程、环境工程、水文与水资源工程、石油工程、地球物理学等。随着地质大调查的深入开展,国内外地学相关应用软件得到了迅速发展,这些专业软件具有软件种类繁多、专业性强、开发周期长、投资巨大、利用率低等特点[2],主要表现在:海量地学信息远远超过了人工所能处理的范畴;地学信息的采集、处理、展现分别由不同的部门进行处理,越来越呈现信息集团化处理的趋势。“互联网+”时代,地学的发展离不开计算机技术的进步和应用软件的发展。随着互联网、人工智能、大数据技术的发展,如何快速开发满足领域要求的软件显得越来越紧迫[3]。由于在软件工程专业建设与培养过程中普遍存在轻视领域背景知识的问题,导致具备地学与软件工程专业背景复合型人才稀缺。在实际工作中,软件技术人员会遇到不同领域之间知识鸿沟,从而引起交流障碍。特色型专业高校的软件工程专业建设过程中,知识体系构建的关键是培养规格问题,主要体现在培养标准和总体知识结构的设计与制定上。
在日新月异的“互联网+”时代,特色型软件工程专业应坚持以工程教育思想为核心的专业培养模式,使之满足未来企业、新兴产业、经济社会对工程技术人才的需求,坚持在软件(包括领域软件)开发过程的管理、开发方法、开发工具和关键技术等方面,培养面向软件产业和专业领域实用型软件工程高级人才。为此,应着重从如下四方面构建特色型软件工程专业培养体系。(1)国际型。借鉴和引进国际先进教学经验,优化教学模式、教学内容、教学方法、课程体系,制定系统化的人才培养计划和课程体系。(2)创新型。优化基础理论知识的教学内容,包含新理念、新模式、新方法、新内容。培养学生创新、创造、创业和跨领域学习能力。融合学生的学习能力、工程能力和综合素质,帮助学生“发现问题、分析问题、解决问题”能力的养成。(3)工程型。依据学科的工程特性,有针对性地设计通识基础课程、将专业主干课程与工程实践结合。优化实践教学,强化工程能力培养,培养学生针对软件产品质量、开发效率、工程度量、知识产权保护等方面的分析、设计、开发、测试和维护能力。(4)复合型。结合特色型高校的专业优势,加强以目标为导向的一体化培养、增强学生的领域知识背景,培养学生的学科知识交叉与融合、技能与管理相结合、团队合作、软件研发能力与领域知识素质相结合的复合型专业人才。基于上述原则构建的特色型软件工程专业培养体系,除了培养学生软件工程基本理论和开发技术,还培养学生软件需求分析、架构设计、度量与测试、系统设计能力,这些能力是学生分析与解决问题、沟通与协调、项目管理、工程实践和参与国际竞争能力的途径,也是培养学生持续学习能力的基础[3]。
2014年,IEEE协会了《软件工程知识体系》指南第3版(SWEBOKV3,SoftwareEngineeringBodyofKnowledge)[4],该指南将软件工程专业知识体系划分为15个知识域,其中包括11个软件工程实践知识域,分别是软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量、软件工程职业实践,以及4个软件工程教育基础知识域—软件工程经济学、计算基础、数学基础和工程基础。以中国地质大学(北京)软件工程专业为例,依靠地学领域的学科优势,该专业明确以“建设特色鲜明、培养体系现代化、国内先进的行业型软件工程专业”为专业建设总目标。在设计基于SWEBOK设计软件工程专业培养体系的教学内容时,由于该指南涉及知识内容繁多,因此遇到很大的挑战。为此,只有加强课程体系的系统性和开放性,采用通识与专业结合、科学与人文结合、理论与实践结合的培养体系,才能做到有的放矢,抓住软件工程本质。基于这一原则,构建了由“通识基础+学科基础+专业核心+实践创新”四个模块构成的系统化、层次化的软件工程专业培养体系,最终目的是使学生“理论上有深度、实践上有招术”.在这一体系的通识模块和学科基础模块中,除了设置软件设计与开发相关基础课程以外,还设计了含有地学领域相关基础课程和地学信息工程领域知识,为学生熟悉地学相关领域软件的需求和业务逻辑的软件实现的方法打下基础。为了进一步加大实践课程的力度,突出学生在专业教学过程中的主体地位,在培养学生计算学科基本概念和技术方法的前提下,增加了以培养学生专业素养为目的的软件工程专业导论课、现代软件工程简史、软件工程新技术与新思维、新生研讨课、学科前沿课、地球科学概论等开放型课程,这些课程采用开放式教学内容,重点考虑与特色型专业领域紧密结合,为学生搭建领域知识与软件工程学科结合的信息传授平台。目的是培养学生良好的领域软件研发、设计与实现能力、良好领域创新与竞争能力、良好的项目规范管理能力、良好的沟通、交流与组织协调能力。最终达到特色型专业领域高层次、复合型、国际化的软件工程专业高级人才的培养目标。
在特色型软件工程专业培养体系的实施过程中,应遵循软件工程专业人才培养的基本原则和方向,充分发挥特色学科的优势,坚持走“特色学科+软件工程”的道路,强化实践环节,实现特色学科与软件工程学科的交叉与联合。
特色型软件工程专业是采用软件工程的方法和技术解决特色型专业领域的问题,解决特色专业领域信息处理流程的自动化和智能化问题。因此,必须有针对性地对学生的特色专业领域背景知识加以科学设置[5]。构建领域基础知识教育,就要坚持走“特色学科+软件工程”的道路。以地学学科为例,结合国土、地理信息、环境、地质、工程、能源等领域,在新生研讨课、学科前沿课、专业导论课等课程的设置上,每一个方向都包含了相关领域的基础知识,软件工程专业的学生可以根据自己的兴趣爱好选择一个地学领域为方向,修习相关的通识课程。通过对地学领域知识的学习和实践,培养学生广阔的地学知识。在进行地学领域软件设计研发时,达到和专业领域的需求的最合好契合。只有坚持“特色学科+软件工程”学理念,在世界上有特色学科领先的技术理论与领域软件,才能在特色学科领域的数字化、信息化发展趋势下处于领先地位,从而提升特色学科的综合实力。
软件工程是实践性特别强的学科,特色型软件工程专业应将软件工程和领域知识有机结合,让学生真正参与到项目中,通过项目来推动学生不断的实践与锻炼,使学生不但具有软件工程专业素质,还具备广阔的领域知识。以中国地质大学(北京)软件工程专业为例,为提升学生实践能力,我们优化实践教学课程体系和教学内容,构建课程设计、科研创新训练、软件项目实践(实习)、毕业设计为主要内容的“实践和创新”体系,包括社会实践、科研训练和创新创业活动3大类。在学生的整个培养过程中,采用了“2+1+1”培养模式,即:2年基础知识,1年专业课程的学习,1年实践训练。学生在前2年期间选择1个领域背景知识学习的方向,并且选修2~3门有关领域专业通识课程。学生有近1年的时间是在各类实践、实验环节中完成的。在现有学时学分框架内,实践教学(实验)教学环节的比重已占到整体学分的27.3%,如表3所示,其中实践创新模块主要包括的专业实践性教学环节有:软件工程实习(1~3学年)、面向对象程序设计课程实践、数据库系统原理课程实践、面向对象分析课程实践[6]、Oracle数据库应用课程实践、网页程序设计课程实践、毕业设计等。为确保实践教学体系完善,在实践基地的建立过程中,还要加强与先进的软件企业、开发园区合作办学力度,与领域相关专业共建实践基地,共同设置和开发课程。做到专业建设目标明确、培养方案先进,课程体系与教材与时俱进。
目前,“互联网+”已成为国家经济社会发展的重要战略。许多颠覆传统服务行业的互联网服务公司,其运作的基础、内核本质都是软件。随着“互联网+”行动计划的实施,软件人才的需求量会急剧增加[7]。要充分利用综合优势和办学资源,注重学科的交叉与融合,注重软件工程化的教育,从软件工程、领域信息工程、领域应用工程技术三个方向,在领域软件与通用软件机研发两个方面,强调软件工程专业教育、领域背景知识教育和项目驱动的实践教学,建设以软件工程技术为基础的多学科交叉的、创新型的研究平台。
“互联网+”的背景下,软件工程专业的理论与技术的发展日新月异,复合型软件人才的社会需求量剧增,与此同时对软件人才的素质也有了更高层次的要求。软件工程专业的教学必须着眼于行业的需求,培养出具有较强工程能力、实践能力和创新能力的符合时展要求的综合型软件人才。目前,软件工程与领域学科交叉人才是非常缺乏,坚持“特色+软件”的培养理念,培养具有宽阔领域背景的软件工程人才,只有坚持专业理论与专业技术并重、基础与实践统一、坚持课程体系、教学内容和教学方法创新,在培养方案、合作办学机制、课程体系建设、教学设施完善、专业办学条件等方面不断改革创新,才能做到与时俱进,增强软件工程专业学生的综合竞争力,培养出以业界需求为导向的创新型、工程型、实用型、复合型的软件工程人才。培养出符合领域需求的“互联网+”背景下的软件工程专业人才。
[2]冯居易,罗养霞.“互联网+”背景下的软件工程专业实践教学改革研究[J].高教学刊,2016(19):133-134.
[5]教育部高等学校软件工程专业教学指导分委员会.高等学校软件工程专业规范[M].北京:高等教育出版社,2011.
软件学院软件工程硕士的培养目标是培养高层次、应用型人才,针对这个目标,其教学实施应着重体现出以下两个差异性:
(1) 软件工程学科领域和计算机学科领域间专业设置的差异性,这个差异应能够很好地体现培养应用型人才的目的;
(2) 工程硕士课程和软件学院本科课程的差异性,这个差异应能够很好地体现培养高层次人才的目的。
目前国内软件学院软件工程学科和传统的计算机科学学科在课程设置上差异还不显著,工程硕士的培养方案中甚至部分课程只是本科阶段的重复。虽然大都开始强调学生的软件项目实践,但普遍缺乏过程管理。本文在对IEEE的软件工程知识体系进行深入学习的基础上,针对软件学院软件工程硕士提出了实现开放式教学体系的教学改革方案。
2004版SWEBOK将整个软件工程知识体系分为11个知识领域(Knowledge Area,KA),其中前5个知识领域是按软件开发的生命期诸阶段排列的,即软件需求、软件设计、软件构造、软件测试和软件维护;后6个知识领域是软件开发中的支撑性或者辅的方面,可能覆盖软件开发的多个阶段,包括软件配置管理、软件工程管理、软件工程过程、软件工程工具与方法、软件质量、相关学科知识领域。这些知识领域SWEBOK并没有重新系统规定,而是直接套用已经成型的各领域知识体系,因此不可避免地存在重叠和不匹配。
在SWEBOK的基础上,IEEE与ACM又共同拟定了CCSE。其中的核心部分是软件工程教育知识(SEEK)。SEEK由十个知识领域组成,包括:计算机基础(CMP)、数学和工程学基础(FND)、职业实践(PRF)、软件建模与分析(MAA)、软件设计(DES)、软件验证(VAV)、软件演化(EVL)、软件过程(PRO)、软件质量(QUA)、软件管理(MGT)。
可以看出,SEEK和SWEBOK基本内容是相近的。总的来说,二者都是包含了软件工程核心类的知识领域、基础类或前导类的知识领域,以及其他相关领域的知识。
目前国内关于高等教育教学改革的论文很多,如翁敬农、刘云等在软件学院实践教学体系的内容与规划中提出了“一个目标”、“两种途径”、“三大环节”、以及“四级台阶”的具体步骤。王移芝、林艳琴提出基于“两段教学”的计算机基础课程的教学体系框架。谢芳清、闫大顺提出了以素质教育为目标的实践教学体系。王浩、胡学钢等提出计算机科学与技术专业实践教学体系的总体研究与建设。王志英以国家实验教学示范中心为例,提出实践是综合能力培养的基础,并以此构建计算机科学与技术专业实践教学体系。董玮、邱建华等以专业课“程序设计基础(C语言)”为例给出了建设实践教学体系的实践探索。然而目前还没有检索到专门研究软件学院工程硕士教学改革的论文。无论是从传统计算机科学与技术专业与软件学院软件工程专业的区别,还是本科生与研究生的区别来看,针对软件学院工程硕士的教学改革研究都是十分有必要的,同时也是迫切的。
我们以IEEE SWEBOK和CC2004SE的知识体系为主体,结合中国软件产业以及本院的具体实际情况,设计了中国科学技术大学软件学院软件工程专业的知识体系,作为我院工程硕士课程设置和教学计划实施的依据。以SEEK为基础,我们对软件工程的课程设置进行规划。整个课程设置可以分为三个层次,即导论性课程、软件工程核心课程和其他课程。如图1所示,该知识体系定义了7个知识体系子类。计算机基础和数学和工程学基础属于导论性课程、其他课程包含了职业实践、领域课程、软件工具、工程实践等四个子类。
其中计算机基础定义了软件工程作为计算学科所必需包含的计算科学基础以支持软件产品的设计与建设;数学与工程学基础提供了软件产品获得所需属性的理论和科学基础;职业实践则聚焦于软件工程师以职业行为从事软件工程实践所必需具备的知识、技能和态度;软件工程核心课程应该包含软件开发生命周期所涉及到的主要知识领域;领域课程包含了对于某个特定领域软件工程师应该接受的特定教育或经验;软件工具定义了从事软件工作所必需掌握的当前主流工具与软件产品等;工程实践则是学生使用所学到的知识从事实际开发活动,提供动手能力的重要环节。
对于工程硕士来说,大部分同学经过计算机本科专业的学习,已经具备了初步的计算机基础以及数学与工程学基础,因此目前其课程体系建设如图2所示,重点是完成软件工程核心课程教学,并结合IT界的最新技术趋势设计相关领域课程。教学改革的核心是如何设计软件工程的核心课程,并指导学生熟练掌握相应的软件工具,强化他们的实践动手能力。
对于如何设计软件工程的核心课程,我们的主要思路是打破原先各子知识体系间的界线,围绕专业培养目标,结合学生的工程实践,引入课程组的概念,实现一个完整的开放式教学体系。如图3所示,整个开放式学习体系包含三个部分:
(1) 设计课程组:在理论环节采用课程组的概念,集中讲授较高层次的、符合硕士生水平的软件工程的某些重要环节;
(2) 开设实践教学环节:在实践教学中采用做中学(Learning by Doing或LBD)理念,由指导教师讲述软件工具的具体操作过程,同学实际动手学习;
(3) 强化工程实践:在工程实践中由学生自主选题,并将LBD中讲述的工具在项目整个生命周期中贯穿使用。
目前我院开设的高级软件工程和本科的软件工程课程内容并没有太大差别,对于软件工程的各个环节面面俱到,但又都比较浅显,对于工程硕士的培养显然是不合适的。因此我们设计了软件工程课程组的理念,初步设计了以下课程:
第一门课程主要针对以后立志从事软件工程管理方向的同学,课程针对IT项目集中阐述如何实现风险、资金、工期等各方面的管理;第二门课程主要针对以后立志从事软件高级开发方向的同学,课程主要讲述复杂软件系统架构层上的设计,介绍目前通用的软件系统结构、设计技术以及实现这些结构的模型、表述方法等。这两门课程对于软件工程硕士应该至少必修一门。除了这两门课程,其他软件工程类的课程包括了设计模式、软件测试、语言类课程如J2EE、等,学生可根据自己的实际情况进行选修。
针对该课程组,我们开设了实践教学环节,采用做中学理念,由指导教师(可以由助教担任)根据事先确定的主题,选用具体工具讲述如何使用该工具完成项目开发的某具体环节,工具涵盖了项目管理、架构设计文档化以及测试等软件项目开发的主要方面。
对于软件工具的选择,有两种思路。一种方法是对软件工程的不同环节分别选择不同工具,例如项目管理选Project、开发文档化选Rational、测试再选别的工具这样来做,但结构分散,不利于整体化考虑。另一种是采用套件,完成项目开发全程的所有操作,目前我们选择了两种套件,一是微软的VSTS,该套件和微软的Visual Studio开发平台绑定,适合学习.net开发框架的同学;另一种是IBM的RSA,该套件和Eclipse开发平台绑定,适合选择开源J2EE开发框架的同学。
大多数的软件学院目前都开设了专门的工程实践环节,但实际的效果并不尽如人意。因此我们将工程实践环节也纳入到开放式学习体系中,以前面所说的理论以及实践教学环节来指导学生更好地高质量完成整个工程实践。
从教学方法上,工程实践应尽可能地贴近现实项目,除了常见的软件工程文档,我们还要求学生提交过程管理类文档(软件开发合同、会议记录、工作日程记录、合同执行报告:财务报告和开发过程报告、个人总结、小组总结等)。
从技术上,学生可以自由选题,也可参考工程实践题库中的选题。选题涉及所有领域课程包含的内容。要求学生必须采用实践教学环节中介绍的工具全程介入项目开发的各个阶段。学院设立专门的工程实践网站提供学生选题及交流,以及指导教师的监督。
从教学形式上,则注重如何实现应用型软件人才的核心能力分析与培养,要求学生运用职业实践子知识体系中的相应内容,锻炼学生的口头表达能力、书面表达能力等。通过学生的开题演讲、采用各种工具完成相应的项目文档、结题答辩等环节来实现学生职业素质的培养。
从实践效果评价上,我们制定了一系列的成绩考核方法、管理考核信息、分析考核结果、评价教学质量等措施,实现完整的考核体系。
软件工程专业学生的培养,在学科教育与培养面向市场需求的人才方面有着事实上的矛盾。软件学院现有的实践教学体系存在着专业课程设置定位不准确、课程实验师资不足、实验教学内容质量不高、实验指导和管理落后等问题。根据软件工程专业教学所面临的挑战,在充分调研IEEE SWEBOK和CC2004SE知识体系的基础上,针对软件学院的工程硕士,我们提出了软件工程硕士开放式教学体系的建设,围绕专业培养目标,结合学生的工程实践,引入课程组的概念,制定了一套较为完整的开放式实践教学实施计划。
[2] 翁敬农,刘云. 北航软件学院本科生实践教学体系的研究与实践[J]. 计算机教育,2007(11).
[3] 王移芝,林艳琴.“计算机基础课程”实践教学体系的研究与实践[J]. 实践教学,2008(8).
[4] 谢芳清,闫大顺. 计算机工程专业实践教学体系的研究[J]. 中国科技信息,2008(9).
[5] 王浩,胡学钢,侯整风,等. 计算机科学与技术专业实践教学体系的研究与建设[J]. 计算机教育,2007(11).
软件工程这一术语首次出现在1968年的NATO会议上。软件工程这一概念的提出,其目的是倡导以工程的原理、原则和方法进行软件开发,以期解决当时出现的“软件危机”。张效祥院士主编的《计算机科学技术百科全书(第二版)》将软件工程定义为“是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度实现满足用户要求的软件产品的工程,或以此为研究对象的学科”。
“软件工程”作为计算机科学与技术及相关专业教学计划中一门重要的专业基础课,其主要目标是,培养学生运用软件工程的原则、开发方法和技术进行软件的开发和维护。作为一门多学科交叉的工程学科,如何合理地构建软件工程本科教学知识体系,对于培养国家急需的高素质的创新型软件人才具有重要的意义。
为了满足中国软件产业发展的需要,北京大学积极探索和推进软件工程教育。在1984年,北京大学首次为本科生开设了“软件工程”课程,培养学生在软件工程学科的基础知识以及基本实践能力。同年,在国家科委的支持下,北京大学和复旦大学分别举办了共4期软件工程研究生班,教学以工程实践为主,聘用国际上一些计算机专家任教,先后培养了近200名软件工程人才;1988年北京大学计算机科学技术系试办软件工程的本科专业;1996年北京大学开始招收软件工程领域的工程硕士。目前,在北京大学软件工程领域培养的人才,大部分已成为我国软件企业和国际软件企业的技术骨干。
通过多年软件工程领域的教学实践,杨芙清院士提出“软件工程教育体系需要多层次、多样化。比如,在本科教育阶段,重点培养软件工程学科的基础知识、基本的实践能力。而研究生教育阶段,首先要培养扎实的理论基础、软件工程技术和方法,然后再根据人才需求和职业发展分为两种,一是学术研究型,二是工程应用型”。
针对北京大学本科学生的特点,一是基础知识扎实、自学能力强,二是毕业后大部分继续学习深造,攻读硕士和博士学位(根据历届统计,直保本校研究生的比例大约在50%~60%),这为软件工程教育课程体系的建设提出了新的挑战,即如何体现启发式和因材施教原则,如何适应持续培养“本-硕连读”学生的需要。
围绕以上问题,我们自1984年开设本科生“软件工程”课程以来,不断结合北京大学软件工程团队在大型“软件工程”科研项目上的丰富的研究和实践经验,结合软件工程领域最新的研究成果,不断对软件工程本科教学知识体系进行改革,在探索和实践的基础上不断充实和完善,以期创建具有北京大学特色的软件工程本科教学知识体系。
在软件工程本科教学知识体系的探索和实践过程中,我们一直遵循以下两条基本原则:(1)一是软件工程本科教学知识体系不仅需要体现先进性、系统性,而且选取的内
容需要有助于提高学生求解软件的能力,特别是提高学生直接参与软件开发实践和工程管理的能力。(2)二是选取的内容是基础性的、比较“稳定”的,我们向学生尽量介绍有关软件工程的国际标准和成熟技术。我们从以下几个方面来推动软件工程本科教学知识体系的不断发展和完善。
多年来,北京大学软件研究所承担了数十项部级科研项目(包括国家科技攻关计划项目、863计划项目、973计划项目、国家自然科学基金项目等)。其中,以研究软件工程开发环境为主要宗旨的国家科技攻关项目“青鸟工程”,对北京大学软件工程本科教学知识体系的构建影响最为显著。它是国家重点支持的软件产业的共性、基础性建设工程。从“六五”计划开始,历经二十个春秋,由北京大学牵头、中科院院士杨芙清教授主持了持续的科技攻关课题,其目标是以实用的软件工程技术为依托,建立软件产业基础,推行软件工业化生产技术和模式,提供必要的工业化生产手段和装备。
图1概括给出了“青鸟工程”动机、发展及研究内容。青鸟工程历经了国家 “六五”科技攻关项目“软件工程核心支撑环境BETA-85”、国家“七五”科技攻关项目“软件工程技术、工具和环境的研究与开发(SEP)”、国家“八五”科技攻关项目“软件工程开发环境(CASE)的标准化与实用化”、国家“九五”科技攻关项目“软件工程环境(青国际上令人关注的一支科研队伍。通过这些大型软件工程项目的实践,使教师提升了软件工程领域的知识,丰富了
鸟CASE)工业化生产技术及系统(JB/SEIMS)的研究与开发”、国家“十五”973项目“Internet环境下基于Agent教师的软件工程知识体系结构。我们坚持教学与科研相结合,教师积极参加科研项目,从学习跟踪到自主创新,并的软件中间件理论和方法研究”等,取得了一系列重要的研究成果,在理论上不断创新,每年在国际重要刊物和国际会议上发表上百篇论文,理论成果覆盖了软件工程领域几乎所有的研究方向。北京大学软件工程研究团队已成为不断将这些科研成果和软件工程实践经验融入、引入软件工程的教学和实践活动中。
另外,北京大学软件研究所积极接收本科生进入实验室从事科研实践工作,这些学生可以应用最新的科研成果进行软件工程实践,并对科研成果提出相应的反馈意见。这样,通过科研项目极大地提升了学生的软件工程知识和技能。
北京大学软件工程教育长期研究和借鉴IEEE/ACM推出的软件工程规范。IEEE最新的软件工程知识体系SWEBOK(Software Engineering Body of Knowledge)将软件工程知识分解成10个知识领域,即软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程工具与方法、软件质量,从而明确了软件工程学科的内容和体系。IEEE/ACM软件工程学科小组研究和公布了软件工程教育知识体系SEEK(Software Engineering Education Knowledge),将软件工程的本科教育分为10个知识领域,包括计算基础、数学与工程基础、专业实践、软件建模与分析、软件设计、软件验证与测试、软件演化、软件过程、软件质量、软件管理。这两个知识体系明确提出学生要有工程素质和专业实践能力,要有问题求解和工程管理能力,要有职业道德和相关法律的教育,要有书面和口头表达能力,要有交流和沟通的能力,要有国际交流的能力,要有组织和管理能力,要有纪律性和团队精神、主动性和创造性、为适应科学技术发展和学科变化进行自主学习的能力等。我们在课程体系的建设和教材的编写中,不断完善对学生以上能力的培养。
在软件工程本科教材编写和教学过程中,参照以上两个软件工程规范,关注软件工程课程知识体系的完善。通过多年的教学实践,给出了软件工程本科教材的基本知识结构,如图2所示。软件工程基本知识结构,基于对软件开发本质的认识,即实现问题域到软件解域之间的映射,紧紧围绕软件开发,讲解软件工程的生存周期过程;讲解有关过程、活动和任务的组织框架,即介绍一些在工程中常用的软件生存周期模型;讲解实施开发活动和任务的一些基本途径,包括结构化方法和面向对象方法,以及支持软件评估所需要的软件测试技术等;简单介绍作用于开发活动上的一些管理活动,其中重点介绍支持管理活动的一些基础性技术,例如过程创建以及成本、进度估算等。
为了建设世界一流大学,培养出具有创造性的一流软件人才,我们充分地利用了北京大学软件工程科研队伍。这支科研团队在理论上的创新,给教材的编写和讲授提供了源源不断的新知识。在教材的建设中,不断总结新的知识和经验,编写了《面向复用的需求建模》、《构件化软件设计与实现 》和《面向复用的软件资产与过程管理》,这三本书是北京大学软件工程研究几十年经验的结晶,在理论上有许多创新、对教学和科研有重大的指导意义。在多年从事软件工程教学和科研的过程中,编写了《软件工程》,该书先后出版三版,每一版都增添了新的教学经验和科研成果。
我们不仅利用自身团队的经验,我们也充分吸取世界最新软件工程成果为我所用。我们先后翻译了《软件工程――实践者的研究方法》、《软件复用实践》、《管理软件开发项目》和《软件工程最佳实践项目经理指南》等经典著作,作为我们所用教材的补充。
这些教科书和参考书的编写和翻译有力地推动了软件工程课程体系的持续优化。例如,在《软件工程――技术、方法与环境》第一版中,在面向对象分析和面向对象设计两部分,我们讲授的是Coad-Yourdon方法,而到了第二版,我们介绍的是主流的UML和RUP。又如,在《软件工程――技术、方法与环境》第一版和第二版中,我们没有系统地介绍软件项目管理内容,而在第三版中,我们参考和借鉴了软件工程知识体系SWEBOK,引入了“软件工程项目管理概述”一章,进而加强了对本科生软件工程管理能力的培养。
北京大学的学生具有很强的自学能力,而且不同专业和不同层次的学生对软件工程知识的需求也各不相同。基于以上因素的考虑,我们设置了以下课程分别满足不同层次本科生对软件工程教育的需求,体现了因材施教的原则:
(1) 为计算机科学技术专业的学生在设置了“软件工程”课程,使学生系统地学习软件工程的基本思想和方法,培养他们从事软件开发、维护和软件工程项目管理的能力。
(2) 为二学位的学生设置了辅修“软件工程”课程,与计算机科学技术专业的“软件工程”课程相比,该课程在内容和难度上有所降低,主要培养学生的软件工程思想以及基本方法的应用能力。
(3) 为“电子信息科学类”专业、基础好、领悟力强的学生开设了“软件工程―实验班”。这些学生经过计算概论实验班以及数据结构与算法实验班的培养,具备了很强的程序设计技巧与能力。本课程不仅讲授软件工程基本思想与主流方法,而且主要通过实际系统的工程化开发,培养学生的软件工程素质和能力。
(4) 为研究生和高年级的本科生共同开设了一些先进软件工程技术或研究探索性课程,如“高级软件工程”、“方案工程”和“软件项目管理”。这些课程的开设,主要是使学生对先进的软件工程理论、方法和技术有一定的了解和掌握,培养学生从事软件工程研究的素养。
图2所示的软件工程基本知识结构体现了计算机科学技术专业设置的“软件工程”课程的内容体系,而辅修“软件工程”根据非计算机专业学生的知识基础和专业需要,对软件工程本科教材内容进行适当剪裁,“软件工程-实验班”依据其培养目标,结合实际需求,更加关注软件工程有关知识的应用。
我们不仅在教材编写过程注意启发式教学,而且在讲授中更要突出启发式教学,让启发式教学贯穿教学活动的始终,这样很好地调动了学生学习的积极性和主动型,开发了学生的创新思维,培养了学生的创造能力。
(1) 教师授课中的启发式。教师讲授不是照本宣科,而是在深入备课的基础上提炼出重点、难点,拟好带有启发性的关键问题,在课堂上提出,让学生认真思考和讨论,老师有目的、有重点地做点评。例如,在讲授“软件过程”一章时,我们主要提炼出两个关键问题:①软件开发要做哪些映射-活动?②应如何正确地组织开发活动,形成求解软件的逻辑?让学生带着这两个问题去阅读、思索和讨论,从而得到对这一章节知识的深入理解。
(2) 学生登台讲授。这是调动学生学习主动性和积极性的极好方法。北京大学的学生基础好、自学能力强,并有一定的动手能力,这是他们登台讲授的良好基础。我们选择一些章节,在教师的指导下,让学生做准备,然后在小组或班级做讲授。学生准备的过程就是深入学习的过程,这样学习的知识掌握得更深透。一位讲过课的学生深有感触地说:“自己讲一遍胜过听别人讲三遍。”
(3) 老师解惑答疑。我们采用启发式教学充分调动了学生的学习积极性,并不能解决所有的问题。学生越愿意学习,越容易发现问题,提出问题。老师必须居高临下,采用讨论的方式,给学生以及时准确的回答,增强学生的信心,鼓舞学生继续向前攀登。
根据教材,我们设计了一些配套的课程实践课题,如结构化方法实践和面向对象方法实践课题,这样学生可以充分利用北京大学软件工程领域研究的各种软件开发环境(因为北京大学软件工程领域的研究成果覆盖了软件工程各研究方向),如青鸟面向对象建模工具JBOO、青鸟配置管理系统JBCM、基于软件体系结构的可视化建模和构
件组装工具ABCTOOL等,进行课程实践。软件工程课程实践要求学生采用“项目小组”的形式,结合具体的开发项目进行分析和设计,每组不得超过5人。每个项目小组选出项目负责人或项目经理,由其召集项目组成员讨论、选定开发项目。学生分工合作,学习软件开发小组的组织和管理,将项目开发各阶段的任务明确,熟悉软件开发环境,培养团队精神,共同完成该项目的开发任务。教师的主要任务是总体指导学生。学生在规定的时间内完成相应的课程实践,并对已有的科研成果进行反馈,从而进一步促进科研的发展。
从“六五”国家科技攻关项目的研究到目前的研究,我们一直利用科研促进教学,不断完善软件工程本科教学知识体系,在这个探索和实践的过程中,也培养了学生软件工程理论和实践相结合的能力以及创新性的思维能力,很多学生都说这正是北京大学软件工程教学知识体系和科研结合的独到之处,也是北京大学良好学风的体现。
北京大学软件工程本科教学知识体系的建设和教学活动实践既参照了国际上计算机学科发展规范所提出的质量要求规范-软件工程知识体系SWEBOK和软件工程教育知识体系SEEK,又充分考虑了国家对北京大学的要求和希望,以及北京大学软件工程教学和科研团队,高质量的学生的特点,不断进行教材建设和教学活动的探索和改革,已经取得了一定的成果,对科研和教学起到了推动和促进作用。这种探索和改革还在继续进行中,我们相信未来会取得更理想的成果。
[1] 张效祥. 计算机科学技术百科全书[M]. 2版. 北京:清华大学出版社,2005.
[2] 杨芙清. 软件工程教育的思索与实践[C]//全国高校2007年软件工程专业教育年会论文集. 北京:高等教育出版社,2007.
摘要:分析软件工程专业的岗位需求和知识结构,提出适合地方性应用型高校的软件工程专业核心课程设置方案和体系结构。关键词:地方高校;软件工程;课程体系
进入21世纪,以互联网为核心的网络与应用得到快速发展,信息技术的应用模式发生了巨大变化。在开放、动态、复杂的网络环境下,灵活、可信、协同的计算资源、数据资源、软件资源、服务资源等各种信息资源的共享和利用、无处不在的普适计算、主动可信的服务计算,均对软件工程提出了巨大挑战。
黄淮学院软件工程专业是河南省省级特色专业,近年来紧紧围绕培养“就业能称职、创业有能力、深造有基础、发展有后劲”的高素质技术技能型人才的目标定位,积极推进应用型人才培养模式改革,紧扣产业办专业,牵手企业促学业,强化职业促就业,不断提升专业价值,全面提高应用型人才培养质量。作为本科层次教育,重视较宽厚的基础知识的传授;作为应用型人才的培养定位,重视面向生产、经营、管理实际,面向经济社会活动实际,培养运用所学知识分析问题、解决问题的能力,同时也要培养学生适应社会的能力、创业发展能力。应用型本科院校课程体系的设计应有其内在的规律与特定的模式。基于此,笔者以黄淮学院为例,对这一问题做如下探讨。
原则1:构建课程体系的重要原则是核心课程体系的构建。核心课程体系的构建不是计算机科学专业课程和软件工程类课程的简单堆砌,而是对计算机学科课程进行有效的裁减和调整。对比软件工程学科和计算机科学技术学科可以看出,计算机科学的主要目标是为解决计算问题寻找有效的、能产生更好性能的途径;软件工程的主要目标更注重具体方法和技术的应用,软件工程除了关注解决软件问题的理论、原则、方法和技术,还关注软件质量、软件过程、项目管理、团队合作、与用户/客户相关的问题,研究的对象是软件开发过程中的所有活动。软件工程专业的培养目标是合格的软件工程师,具有更明确的职业特性。
原则2:应用型本科高校软件工程专业不是简单复制211或985高校的课程体系,而要根据培养“就业能称职、创业有能力、深造有基础、发展有后劲”的目标,结合实际工作岗位职业需求,基于传统本科教育与职业教育相互渗透的培养理念,在通才与专才之间寻找平衡点,专业知识体系够用为主,“软、硬并重”,以第一课堂为核心,以行业、企业和管理服务岗位对人才知识、能力、素质的具体要求构建课程体系。
原则3:权衡软件工程专业本科毕业生所应具备知识的深度、广度和适应性。在大学教育期间,学生应学习的知识大致可以划分为4个.方面:人文社会科学知识,这是做人之根本;数学知识,这是软件工程专业的底层基础;专业知识,是软件工程学科之特色;相关领域知识,是学生就业之砝码。知识是基础,能力是知识的综合体现。对于软件工程专业的学生应该着力培养以下能力:专业必备的开发、设计能力,能终身受用的学习能力,培养领导力的处事能力和积累财富的创新能力。在注重学科知识的系统性和严谨性基础上强调实际能力培养的重要性。
黄淮学院软件工程专业知识体系如图1所示,该知识体系以人文外语知识和科学基础知识为基本,软件工程专业基础知识为中坚,软件工程与软件管理专业知识为塔顶,辅以实践和顶岗实训构成软件工程专业知识体系金字塔。
人文与外语知识包含由教育部统一要求的思想政治类课程、大学英语、专业外语以及创新创意和职业规划方面的拓展课程;学科基础知识则涉及数学系列课程、电子基础课程和计算机科学基础课程;专业基础知识和专业技能知识包含程序设计基础、软件工程和软件管理等,具体教学过程中可以涉及部分软件工具和软件产品作教学载体。针对软件行业普遍反映的毕业生独立解决问题能力不强、责任心差、对问题进行抽象和分析的能力差的问题,设计了如图2所示的实践能力渐进培养模式,该模式贯穿在课程教学、实验、实训和毕业设计等教学过程中。
黄淮学院软件工程专业的课程体系既考虑了工程性、技术性、实用性、系统性、综合性和复合型,又注意到强化基础在有效解决复杂软件的构造和应用方面能起到关键性作用,采取了根据就业岗位的能力需求进行知识分解,由课程模块构建系列课程,分阶段互动式的课程设置方法。具体安排如图3所示。
从图3可以看到基础知识教学阶段共2学年,这样设计是为了强化学生基础知识,实现“基础扎实、学科认知和专业融入”的目标。公共基础系列课程针对人文与外语知识,学科基础理论系列课程的启动从数学基础课程系列和计算机导论开始,内容贯穿软件工程所涉及的计算机系统、程序设计语言、软件工程、网络技术等专业基础知识的知识点以及与信息技术有关的社会人文等知识,力求使学生对所学专业有比较深入的了解,树立专业学习的责任感和自豪感。其中包括高级语言程序设计、程序设计基础、数据结构和面向对象程序设计,旨在引导学生领会计算思维的同时训练其编程能力;硬件与网络系列课程包含数字逻辑、计算机组成原理和计算机网络,软件工程系列基础课程包括操作系统、数据库系统原理和WEB程序设计,这样安排力求达到“编程、网络和应用开发”三位一体的教学目标。
专业技能教学阶段共设36周,设计思路是强调对学生工程性、技术性、实用性、系统性、综合性和复合型能力的培养,实现“熟悉软件工程技能、树立系统概念和掌握软件设计开发技术”3个目标。在这一阶段中,综合考虑主干专业课程和特色课程的设置,基于办学特色设置若干动态可扩充的课程模块,全面考虑课程之间的关联,强调统一设计、统一规划。所有方向以系统分析与建模、软件工程、软件测试技术和嵌入式系统为基础,学生必须选修WEB程序开发和嵌入式软件两个专业方向中的一个课程模块,WEB程序开发方向设置网站前台开发技术、数据库应用技术、软件框架技术、软件需求工程和现代软件开发技术;嵌入式软件专业方向开设单片机与接口技术、嵌入式Linux程序设计、移动编程技术、手持设备软件开发和嵌入式系统开发综合实践,同时要求至少选修4门任选课以拓展专业知识。
工程实习教学阶段开设在第4学年,设计思路是通过具体项目参与真刀真枪的项目训练,通过毕业设计与论文培养总结概括能力,实现理论与实际结合、技能与职业素质结合的目标。
在软件工程专业的课程体系设计中还应充分考虑课程间的衔接性、系统性和创新能力培养。教学计划中通过设置10门设计类课程,加强课内实践教学,常设性的学生软件设计比赛如ACM竞赛和软件设计大赛也被引入教学过程中。上述思路形成的课程体系更细化的结构如图4所示。
一个好的软件工程课程体系应该在一个或若干个应用领域方面体现出自己的特色,为了帮助学生在适当的深度上学习其他应用领域的知识,软件工程课程体系应该安排相应的支持课程。软件工程的应用领域如此广泛,软件工程课程体系不可能也不应该面面俱到。在相关领导的支持下,黄淮学院软件工程专业建设已取得了可喜的成果。软件工程专业在2010被批准为河南省特色专业,2012年批准为河南省专业综合改革试点专业,每年毕业学生到各大公司进行项目实践,并推荐部分优秀学生到IBM等业界著名企业实习,获得各公司的一致好评。这几年的实践表明,教学计划的设计是确保培养目标实现的保障,课程体系的设计是合理安排教学过程的关键。学院软件工程专业的每一位老师在这几年的教学改革中付出了辛勤的劳动,但回首软件工程专业取得的进步,大家都感到心情舒畅。高等院校的教学改革是永恒的主题,作为应用型本科院校软件工程专业的课程体系更应与时俱进,我们一定会在现有基础上进一步优化软件工程专业的课程体系,以期获得更好的结果。
[1]杨青,刘洪星.软件工程学科的特征及其课程体系设计原则[J].武汉理工大学学报,2005,27(2):183-186.
[2]曾永卫,林志刚,杨尧彪.应用型本科院校课程体系顶层设计的探讨[J].湖南工程学院学报,2007,17(3):65-67.
[3]祁文青,纪鹏,冯运仿,等.计算机类应用型本科的人才定位和课程体系[J].黄石理工学院学报,2012,28(1):60-63.
扫一扫关注微信公众帐号