时间:2022-07-16 12:26:00
开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇软件工程论文,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。

1.1专业定位不适应社会需求
专业人才培养不具有明确针对性,人才培养结构合理性欠缺,专业人才培养层次相对单一。造成这一问题根源是地方院校对行业企业实际需求不明,导致专业人才培养定位不清。毕业生虽然专业知识结构比较全面,但实际工作能力不强,无法满足企业实际需求。
1.2专业课程设置不合理
课程体系建设是地方高校软件工程未来走内涵发展道路的核心。从调研地方本科学校现有软件工程课程体系实情来看,传统“学术型”课程体系架构占据主导,“应用型”与“学术型”课程体系架构区分度不明显。
1.3教师队伍应用型能力欠缺
地方高校软件工程现有师资队伍的实践能力不足,专业教师参与企业生产科研活动的力度不够。双师型结构教师比例低于30%。
1.4专业人才就业率低与企业“无人可用”矛盾冲突明显
软件工程专业高层次应用技术和技能人才数量严重不足,同时应用技术和技能人才培养的学历层次不高不能满足企业实际需求。地方高校软件工程专业定位和人才培养目标不明确、教学方式方法缺乏科学性、系统性,实践教学体系不完善,没有与行业就业有效对接,导致培养的人才无法满足社会生产实际需求,导致“软件工程专业毕业生无职可就,软件开发行业以及相关软件应用单位招不到满意的员工”现状普遍存在。
2软件工程专业课程体系理论设计
以行业、企业实际对人才需求为引导,软件工程专业毕业生真实就业情况调查为依托,地方高校软件工程专业课程一线教师众多教学研究成果为参考,专业教师在企业挂职学习经验体会为借鉴,围绕地方高校软件工程专业课程教学体系存在事实问题,来对地方本科院校软件工程课程体系建设进行设计建设。设计建议如下:
2.1学科建设
以专业相关的行业、企业人才的实际需求和当前使用的主流开发工具或技术为依托来不断调整专业架构,优化专业人才培养方案,完善人才培养目标,对专业进行合理定位,系统性调整教学方式方法,从而实现以行业、企业对人才的需求来引导地方本科院校软件工程专业的学科建设。
2.2校企办学
学科建设以输出满足行业、企业需求合格的应用型人才为目标,通过校企联合办学,对学生进行定向培养、训练,专业课程体系嵌入资格认证课程模块,实训课程以企业开发项目方式贯穿培养环节以达到提高专业人才的实际动手能力。
2.3师资建设
采取教师企业挂职锻炼参与企业项目研究开发,共同承接开发项目等方式锻炼提高师资队伍实战能力。教师在企业实战经历和相关经验成果带入到日常的教学环节,不仅能促进专业教师学术、科研能力提升,还能够最大程度丰富、提高专业学科建设。
3三层结构课程体系建设
软件工程专业课程体系建设以工程教育理念为指导,项目实战为背景,社会需求为导向,提高学生专业素养、理论知识体系以及实践能力为宗旨。学生完整地专业培养环节结束后具有程序设计,系统分析,软件设计、开发,项目管理,网络和移动通信终端应用开发能力。
3.1基础理论
由公共基础课程和专业基础课程构成:
①公共基础课程主要涵括地方高校各现行必修公共课程,
②专业基础课程是专业课程坚实的理论基础,专业必修前导课程,是对软件工程专业基本“计算”概念理解、掌握,问题计算求解能力和构建中小规模软件系统综合能力的初步培养。
3.2专业理论
以市场对人才需求为导向、行业最新前沿技术为引领、专业骨干课程为核心、专业素质全面拓展和综合素养整体提高为目标来对专业主干课程进行建设,主要包括以下几类课程:
3.2.1面向行业认知能力培养课程主要包括对行业、企业认知学习以及计算机专业知识学习等专业认知方面课程。一般包括行业相关法律、法规,从业道德规范,行为准则,经营管理常规模式,软件项目开发流程等认知类课程。
3.2.2计算机编程与算法设计能力课程算法设计类课程主要包含离散数学、数据结构、算法分析以及数据结构课程设计等方面的课程;编程课程主要包含C语言程序设计、面向对象程序设计等传统程序设计语言课,还包括当下企业应用最为广泛的,最流行的技术前沿课程。
3.2.3软件工程专业系统分析课程系统分析能力课程主要包括操作系统、计算机网络,软件工程、数据库原理等系统类课程。
3.2.4系统实现与集成能力课程系统实现与集成能力方面课程主要包括网络编程、移动互联开发编程、编译技术、软件开发以及软件测试等课程。
3.3实践
以校企联合培养为手段,一至两学年时长为周期,贴近企业实际需求为指导,综合技能全面提高为目的来对专业学生进行实践能力培养,方式如下:
3.3.1校企共同建设实训课程以项目介入为主线,企业实际效益项目和高校产学研项目为实际授课主体。引进企业优秀项目人才或具有企业项目实战经验的教师来对专业人才展开课程实训,全面提高学生专业技能水平,综合素养。校企共同培养模式不但能够提高学生工程实践能力,知识转化生产实际速度,同时反向激发学生探究、学习知识的热情,最终提高就业竞争力。
3.3.2合作企业岗位实训针对毕业学生和部分专业老师做岗位综合实训:
①学生岗位实训:让学生真实参与企业项目实战,充分消化吸收前期所学理论和技能知识,进一步提升学生综合能力,为就业夯实基础。
②老师岗位实训:专业老师参与企业项目研发,并将企业项目开发经验和技术进行梳理总结、编纂成册,运用到实际日常教学环节,促进教学质量提高,有利于缩短理论转化实际成果周期。
3.3.3校企合作运用项目方式指导学生做毕业论文(设计)毕业论文(设计)是对学生的专业知识掌握程度与提升高度的一次全面的考核,同时也是培养学生综合运用所学知识,独立地分析问题和解决问题的能力的一次全面的实训。但是传统的教育模式导致大多地方院校工科专业学生毕业论文流于形式,与实际脱节。通过与企业合作运用项目方式指导学生做毕业论文(设计)弱化学生对毕业论文(设计)的抵触情绪,可以进一步让学生了解行业企业实际运作规范及最新技术,进一步加强对学生实践和技能能力的培养,为毕业后从容就业夯实基础。
4结语
1.1教学目标不明确
“C”是很多高校普遍开设的一门课程,大部分学校教学方法大同小异:课堂讲授+上机实验,教学目标也集中于让学生掌握C的各种重难点,比如数组、函数、指针等。其实不同专业人才培养目标中本课程的作用差异较大,采用模式化的教学方法和雷同的教学目标是不合理的。此外很多教学方法忽略了编程思想锻炼,局限于讲授语言本身,变成了教“语言”而不是“程序设计”。
1.2学生动手应用能力较弱
多年来,大部分学生学习完本课程后,仍难以针对一个简单应用编制程序,此问题十分普遍。一般C语言教材,都是先介绍程序设计基础知识,然后介绍各种数据类型和输入输出等语句,由于内容枯燥,因此学生逐渐丧失了学习兴趣,甚至不愿上机,浪费了宝贵的实验机会。此外各种例题、习题也是数学性较强或者演示性质较强,比如牛顿迭代、水仙花数、10整数排序等,这些内容和实际应用关系相去甚远。
1.3未体现卓越工程师培养特色
如前所述,卓越工程师培养的不仅是一个程序员,更重要的是培养学生具有扎实的理论基础和创新能力,为进一步从事设计、架构规划打基础。由于课时所限,计算机专业的一些理论课程如自动机、组合数学等一般未纳入软件工程的培养方案,但对于卓越工程师而言,初步学习这些内容是必要的。此时如果在相关课程中融合部分上述知识将大有益处。
1.4没有为后续课程打下良好基础
一方面由于例题和习题所限,在学习“C语言”时学生未能充分理解软件工程的一些重要思想如模块化等,导致编程时思路混乱、僵硬。另外由于课时所限,结构、文件等章节经常被略讲甚至不讲,导致学生在后续课程学习时基础薄弱。
2教学改革措施
针对上述问题,结合软件工程卓越工程师培养目标,在近年来的教学实践中我们采取了如下教学改革措施:
2.1实验室授课
对于程序设计课程,学生在课堂听讲时,是一种静态的信息接收过程。当讲到各种知识点时,如果能够即时编程验证,将成倍地提高学生对信息的吸收消化效果。基于此,近年来我们努力实现了全程在实验室机房授课,学生可以实时动手分析,教师也可以从讲台主机远程指导、控制学生设备,效果良好。
2.2采用国外教材及引入软件工程思想
“C”的国内教材大都偏向初学者,存在细节被过度简化的问题,不利于实现培养面向实践的工程师的目标。为此我们采用国外知名教材进行授课。该教材的最大特色是面向应用,对C语言的应用特征、程序设计的特色描述详尽,例题及习题应用性很强,并且可结合软件工程的基本思想进行讲解,例如商品条码校验位计算、扑克牌发放及手牌比较、零件数据管理等。学生学习后,在后续应用性课程中能够很快上手并进行拓展。
2.3编程思维训练
我院“C”课程开设在大一上期,其目的是引导学生进入编程领域。因此在教学时,我们避免拘泥于C本身的语法细节,而是淡化其语言色彩,偏重讲述如何利用程序语言来处理问题。在此列举一例:很多C课程都会讲授如何编程打印一个由星号组成的菱形。某些教材上给出的解法是将菱形分为上半部和下半部分,用两个循环来打印,这种方法对学生思维训练无太大帮助。笔者在授课时,采用了如下思路:将菱形放入一个二维坐标系(原点在左上角),画出菱形所在区域边界,由此写出区域的解析表达式|x-3|+|y+3|≤3,从而得到程序循环中的核心判断语句.
2.4有机引入计算机理论课程知识
如前所述,软件工程专业一般不开设有限状态机等理论课程,但是作为卓越工程师,掌握这些知识是必要的。为此我们在课程中有意识地引入了这方面的知识,给学生提供初步认知,为有意自学者提供基础。例如,一直以来学生在学习“计算一个句子中单词个数”这一经典程序时,总是不明所以。为此我们另辟蹊径,采用如下方法讲授。首先抽取问题核心:把句子看成是由字母序列和空格序列(单词间可能有多个空格)交替组成的一个字符串。程序处理的方式,是对句子中的所有字符进行逐一扫描,然后在这个过程中判定单词的出现,如出现则把计数变量加1。其次将问题抽象化:用有限状态机来描述上述过程。其中“1”代表当前扫描字符“位于字母串中”这一状态,“0”代表当前扫描字符“位于空格串中”这一状态。当“扫描到字母”事件或者“扫描到空格”事件发生时,扫描器的状会被改变,如图箭头所示。我们关心的是当处于状态0时,“扫描到字母”事件发生的情况。此时意味着之前扫描到的是空格,现在是字母,即到了一个单词起始处,故此时计数变量加1。然后引导学生将问题转化为表格描述,(第一行表示事件,第一列表示状态,中间单元格表示某事件发生后,应进行的状态转换及其他操作),进一步地可以精炼为(b)。由此可得到示流程图。在此基础上学生很容易写出程序。这种教学法十分透彻,为学生今后自学相关知识打开了一扇大门。
2.5作业批改及考试规范化
为了避免传统教学中学生作业及考试批改过程低效,分析困难,且难以发现问题的缺陷的情况,我们开发了一套C语言作业及考试批改系统,该系统通过代码分析及用例执行等方式,客观地对学生程序进行判定,一方面提高了教学效率,另一方面更重要的是促使学生养成良好的编程习惯,改变了以往在纸面上写代码的随意性,从而培养起作为一个软件工程卓越工程师必备的素质。
3结语
软件工程监理与网络工程监理共同构成信息系统工程监理,软件工程监理与网络工程监理不同,网络工程监理贯穿于网络建设的整个过程,为网络建设的单位提供网络质量控制、确定系统集成商、论证网络方案以及提供咨询等服务,网络工程监理的目的在于帮助业主建设最具性价比的网络系统。而软件工程监理则是指对信息系统工程进行监理,主要对信息系统应用工程以及信息资源系统实施监理工作,所以,必须要根据软件工程思想来对整个软件建设的生命周期实施全过程监理工作,除此之外,还要实施配置管理过程监理、管理过程监理、质量保证过程监理,为用户提供帮助和咨询,帮助其建设服务项目,实施软件工程监理最终的目的就在于帮助业主单位建设出一个生命力持续、质量高的软件系统。
2意义
因为软件工程具有自身的特征,再加上在信息技术等领域中,业主单位的经验不足,缺少技术人才,因此,业主单位自己开展软件工程监理工作并不能提升其项目建设水平和项目投资效益。软件工程监理不仅可以保证业主单位投资工程的进度和质量,客观处理好投资项目进度、质量以及投资的关系,更可以为政府信息系统工程建设保驾护航,保证政府信息系统工程的质量。除此之外,实施软件工程监理工作还能够对承建单位与业主单位之间关系进行协调,在项目实施过程中,当承担单位与业主单位产生争议的时候,均希望会有第三方介入,软件工程监理单位就是第三方。监理单位可以在工程维护阶段、工程验收阶段、工程实施阶段、工程设计阶段以及工程立项阶段等软件工程监理的整个过程中对其效果实施权威、恰当、公平和公正的评价。再加上国家的信息产业的主管部门了开展软件工程监理工作的制度,从本质上为我国信息系统工程实施提供了强有力的保证和监督,进一步对我国信息化工程建设工作发挥保障作用。
3过程
对于软件工程监理来说,明确监理环节和内容是监理活动得以顺利开展的基础和前提。软件工程与一般的土建工程、电气工程的差别非常大,其监理活动也具有独特的特点,下面简单分析一下软件工程监理可以分成哪几个环节以及各个环节的监理要点。
3.1招标阶段的监理
招标是软件工程开展下去的第一步,只有做好充分的准备,才可能满足业主的期望,这一环节的成败将会直接影响到整个软件工程项目的成败。在招标阶段,合同成功签订表明该环节的结束,业主与软件开发商签订了具有法律效应的合同,双方具有了相互约束、相互配合的法律关系,是保证接下来工作顺利进行的基础。在这一环节中,监理工作主要包括这样几部分:(1)监理人员协助业主编制招标计划、审核软件工程的需求等。(2)监理人员仔细审核标书。(3)协助业主明确软件工程的目标、内容、功能以及进行软件工程的预算。(4)审核承建合同,仔细审核合同中的软件工程功能、技术指标、测试内容、验收要求、双方责任等内容。(5)协助业主与其他软件开发商进行良好的信息沟通,确保双方沟通的顺畅。在招标阶段,软件开发商尚未走进工程项目中,故此监理人员的主要职责是审核和确认,做好前期基础性工作。
3.2设计阶段的监理
设计阶段是软件工程项目的一个关键阶段,虽然设计费用仅占软件工程项目总造价比例的1%-3%,但是其对整个项目的顺利开展以及造价、质量、进度等的管理影响非常大,设计方案质量高低将直接影响到软件工程项目实施过程中的开发与配置。在这一阶段,监理内容主要是:(1)审核软件系统的需求是否合理,以及实施路线、关键技术等内容是否合理,签署审核意见。(2)监理人员协助业主开展设计方案的评审工作。(3)组织业主、专业人员对软件工程项目测试方案、验收方案等进行详细审核,并签署审核意见。(4)结合合同要求进行进度计划审核,并确认进度计划的可行性、合理性,签署审核意见。(5)协助业主配合软件开发商开展软件工程实施前期的调查。在设计阶段,监理重点内容就是对设计方案进行细之又细、慎之又慎的审核。
3.3实施阶段的监理
在软件工程项目实施阶段,一般可以分成需求分析、设计、编码、测试这4个步骤,每个步骤都有相应的监理内容和侧重点。(1)需求分析是软件工程实施的第一步,是保证最后开发出来的软件产品符合业主需求的基础,这一阶段的工程内容主要包括词汇表、用例模型、用例规约等内容,而对应的监理内容则包括监督需求分析过程、审核需求分析计划、审核需求分析结果等内容。(2)是设计阶段的监理过程,主要包括监督软件开发商的设计过程、审核设计计划、审核软件结构文档、监督软件设计结构中存在的问题并提出意见等。(3)编码阶段的监理,这一阶段是将软件开发商的设计思想变成计算机语言的过程,监理任务主要是审核项目组的人员、设备、进度计划等,并实时掌握软件开况,确保软件工程开发能按照进度计划顺利开展。(4)测试阶段的监理。软件工程的测试一般可以简单分成单元测试、集成测试、系统测试等内容,而监理内容则主要是审核测试计划、监督测试流程、复核测试结果等。
3.4验收阶段的监理
验收阶段是软件工程项目的最后一个阶段,该阶段就是软件系统的试运行、验收移交过程,监理内容则主要是对软件系统进行细致的审核、监督、验证、测试、确认。
4应用分析
正确的软件工程监理方法有助于保证软件工程监理质量,从而确保软件工程质量,但目前国内软件工程监理工作中,还没有形成系统的监理方法体系,只有一些零散的监理方法和理论,比如,PDCA戴明环、鱼骨图等。在软件工程项目中,监理单位扮演的是技术方角色,其与普通土建工程的旁站监理不同,需要从软件工程项目一开始就做好进度、成本、质量等方面的监理,确保软件工程的顺利开展。
4.1质量控制
在质量控制方面,最常用的方法是鱼骨图和PDCA戴明环。在运用鱼骨图进行软件质量控制时,首先需要确立质量控制目标,分析影响质量的因素,并对这些因素进行深入分析,在鱼骨图上标出来,讨论解决问题的方法,并标出解决方法的权重,以此来控制软件工程质量。比如说:在软件工程具体某实施项目的质量分析上,从人、机、料、法、环5个角度分析现场作业的质量因素。例如:某税收管理系统建设中,监理单位为有效控制工程质量,在需求分写环节非常重视需求的调研以及需求分析结果的审核,运用鱼骨图从人、事、时、地、物五个方面分析影响因素。
4.2进度控制
在进度控制上,软件工程监理常采用甘特图进行,而采用这一方法的前提是对软件工程项目的任务了如指掌,绘制出详细的工作任务分解结构图,将所有项目的开始时间、工期等到标注到甘特图上,然后结合软件工程项目的特点确定控制关键点,并确定项目的关键路径,确定项目活动之间的相互依赖关系以及时序进度,按照项目类型将项目联系起来。例如:在某税收管理系统工程项目的进度监理管理中,监理人员绘制甘特图,对软件开发商的进度计划进行整体分析,发现其中存在这样几个问题:任务阶段划分不明确、任务间的关系不合理、关键任务不明确、忽略国家宏观政策对项目的影响等,结合这几个问题要求软件开发商立即进行进度计划的调整和整改,得出最优化的进度计划,并确保整个软件工程实施都处于受控状态,有效保证软件工程项目的顺利开展。
5结语
软件配置数据库作为整个软件开发过程中的核心,其主要的作用就是要将软件开发过程中所产生的一些配置信息进行收录,并且将不同作用的数据分隔开,使得每一项数据在进行编写、修改的过程中不会对其他项目的数据产生不利的影响,同时,不同的软件项目之间的数据又能够通过数据库这一媒介进行相互的信息传递、数据处理,保证软件开发中的每个环节能够相互联系、相互促进。从整体来看,配置数据库的作用可以划分为两大方面。一方面是,数据库可以将软件开发所产生的数据进行复制以及隔离。在软件的开发过程中,软件的信息一旦上传至数据库,就会被所有的软件开发人员看到,而要想在对于数据信息进行修改的时候不会影响到其他部分的数据,就需要每一位软件开发人员能够在配置数据库的基础上建立一个只有自己能够操作的子数据库,以该子数据库为平台,对于软件的某一项目进行编写和修改,之后再将确定的内容上传至数据库,使得软件中的多个项目综合在一起,完成整个软件的开发过程。另一方面则是软件开发数据的管理。软件开发人员完成自己所编写的那一部分之后,就可以通过配置数据库这一渠道,将自己完成的部分的信息传达给自己所在的开发小组,整个开发小组是任务完成后再用类似的方式将该项目信息再次上传,而通过配置数据库,每一位软件开发人员都能够同时接收到最新的软件数据信息,通过这种方式,软件的信息一层层地上传,最后达到整个软件开发项目组,也就完成了整个软件开发的过程。通过配置数据库,软件开发的信息可以自动地进行管理,而不需要软件开发人员进行人工操作。
2软件工程中的配置管理中的版本控制
众所周知,为了能够让软件更符合用户的需求,软件会不断地进行更新优化。传统的配置管理中,在对软件进行更新优化时,都是在软件原来的版本上进行的,这种配置管理方式存在一定的限制。一是软件开发人员在对软件进行修改的同时也能够看到其他人员对软件进行的修改,这为其判断是否要继续进行软件的更新,有时会浪费了时间与修改已经更新过的数据或者漏掉某一项未做修改。二是这种配置管理方式会造成软件更新优化的障碍,难以进行无限制的优化。三是这种配置管理方式导致被优化后的数据信息与软件源文件分开,不方便数据的提取。因此,软件的配置管理应当能够解决这些问题,也就是要能够在开发软件的时候建立起一个作为参考的项目模型,这样,才能够开发出软件复合产品。通过项目模型的建立,可以将软件的开发划分为多个不同的子项目,每个软件开发小组负责其中一项的开发研究,再将不同的项目进行组合、匹配,就形成了一个软件复合产品。在以后对于软件进行更新优化时,每个软件开发小组负责自己原本负责的那一部分,就不会出现任务重叠或空白的情况,同时,也避免了软件升级遇到的瓶颈问题,并且软件更新后的信息能够得以保留,使软件的每一个历史版本都能够被清晰地记录下来,方便提取。
3软件工程中的配置管理的关键
3.1建立合理的软件工程实施组织结构
在软件开发过程中,必须建立起一个具有较强能力的软件工程实施组织结构。对于某一软件的开发,并非是一个人能够完成的,而软件开发人员的分工配合,将会对软件配置管理发挥很大的作用。在配置数据库中,软件信息庞大而复杂,将软件开发人员划分成多个软件开发小组,使每一个小组负责一个特定的项目,而小组内不同的人则是负责一个项目中不同的部分。通过这种方式建立起来的软件工程实施组织,就会以一种树状的形态而稳定地存在。这样既能够保证每一位软件开发人员都能够发挥自己的作用,为软件开发贡献出一份力量,也能够避免多个人重复地对软件开发的一部分做太多的工作,防止了人力资源的浪费。而不同的开发小组和每个开发人员之间,又能够通过配置数据库这一平台进行信息的交流和传递,从而保证了软件开发的整体进度,这也就保证了软件配置管理更具有条理性。
3.2设置清晰的、准确的管理任务
在建立起一个稳定的软件工程实施组织机构之后,就要为软件开发小组中的每一位成员分配任务。在以往的软件开发中,任务的分配比较笼统,每一位软件开发人员所负责的任务范围也比较模糊,这不但浪费了一部分的人力资源,也为软件配置管理增加了难度。而通过为软件开发人员分配具体的、清晰的任务,就能够明确每个人的责任。而每个人在软件开发过程中所产生的软件配置也就会有一个较为明确的概念,从软件开发的源头开始,做好配置管理工作。每一位软件开发人员将自己完成的任务上传给软件开发小组,通过对多位人员任务的结合,就可以完成软件开发中的一个具体的项目,再依次完成整个软件开发的任务。在对任务的划分以及多位人员、小组的合作中完成软件开发,这种方式能够有效地降低软件配置管理的难度,使得软件配置中的数据、程序、文档更有条理,更方便于管理。
3.3设计可靠的配置管理检测方法
软件并不像其他产品那样可以有一个固定的标准来进行检测,并且通常是多个人来完成一个软件的开发,并不是大量的生产,不能采用其他产品抽样的方法来进行检测,而有些软件涉及到较为复杂的系统,其检测将会耗费大量的人力物力,甚至不可能进行全面的检测。在这种情况下,如何对软件的配置进行合理的检测是软件配置管理中的一大难题。对于一些常用的软件,软件开发人员可以通过鼓励用户对软件的使用,来进行评测、反馈、优化,来完成对于软件的检测工作,而对于一些难以通过实际运用的方法来检测的软件,则是要设定一种特殊的检测方法,如果具备条件,应当每一种软件都单独设计一种检测方法,因为软件不同,其所具备的特定也必定不同,其他软件的检测方法并不一定适用于该软件。
3.4采用先进的配置管理工具,实现高质量配置管理
软件的配置管理不仅需要软件开发人员合理的工作来保证,更需要先进的配置管理工具来实现高质量的管理工作。在传统的配置管理工作中,往往是软件开发人员进行人工记忆和管理,或者只是运用简单的配置管理工具来辅助管理工作。这种管理方式大大增加了管理的难度。而先进的管理工具能够对软件配置中所有的程序、数据、文档进行扫描、归纳和管理,保证了软件信息的完整性,保障软件的长时间正常运行,也更有利于软件的更新优化,帮助软件开发人员在更短的时间内研究出更高质量的软件,方便用户的使用。
4小结
A类学生集中表现是计算机专业素养强,其实践开发能力往往高于在校学生,甚至相当出色;B类学生具备计算机专业课程的理论基础,但由于从事非计算机技术类工作,实践能力相比A类学生较弱,同时因为各种原因(如:希望将来能有机会在信息技术领域或信息技术相关的市场销售服务发展职业生涯、实现专科到本科层次学历的提升等)选择继续学习计算机专业;C类学生从事计算机技术工作,但由于受以往专科学习知识结构限制,希望在继续教育学习过程中提高自己的理论知识水平,进而拓宽自己在信息技术领域的职业发展空间;D类学生对计算机专业的理论与实践水平相比前三类学生均处于弱势地位,但该类学生抱有希望将来能够从事计算机技术或服务类的职业发展设想,同时也希望通过继续教育学习过程来深入理解计算机专业理论和方法。E类学生学习目的最为盲目,往往是因为种种原因(提升学历、对目前职业不满意、对未来职业发展不明确)抱着尝试的态度而在继续教育中选修了计算机专业。通过上述分析,我们发现一个显然的事实:成人计算机专业教学,相比从普通高考直接进入高校学习计算机专业学生而言,成人学生对象对我们的教学的接受要求、接受能力、接受方法等都不一样。因此,我们有必要在充分考虑上述因素的基础上,结合我们在对高校在校生理论与实践的教学方法,针对成人继续教育特色对软件工程开展教学创新。
二、差异化的实践教学
(一)实践教学主要内容
针对学生的学习基础、职业背景与发展等特点,本文主要通过情景教学模式、以项目实践为载体引导学生自主探究性学习,提高学生分析和解决实际问题的能力。运用当前软件企业开发实践中流行的建模工具搭建软件工程环境,调动学生积极性,寓教于乐,加快对软件工程理论和方法的理解。具体实践教学内容包括:1.掌握软件工程中的统一开发过程、面向对象等思想、方法;2.以UML语言为核心,要求学生掌握用例图、时序图、协作图、活动图、状态图、类图等模型,尤其是掌握由用例图开始逐步建立类图模型的过程;3.软件的编程实现与测试。以教师引导、学生自学为主让学生复习程序设计课程,掌握NET、PHP、数据库编程、软件测试工具Nunit等,在UML模型基础对软件原型进行代码实现。
(二)分组实践
软件工程课程实践一般采用如下形式:学生以开发团队的方式协作开发一个具有一定规模的软件系统,运用软件工程理论和软件建模技术解决软件开发问题。和以往计算机专业课程实践有所不同,软件工程实践中不仅仅要训练、考查学生对软件开发中分析、设计、编码、测试等的实践能力,而且要注重学生团队合作共同完成软件项目的思想、能力的提高。所以,课程实践分组进行尤为必要。本文通过让学生填写课程实践情况调查表的方式,让学生对自己、学生与学生之间的专长、特点进行清楚认识,然后在教师的协调下进行实践小组的组队。在成立小组之初则明确成员在实践中所扮演的角色:分析、设计、编码、测试等,或者将项目进行功能模块划分,学生在不同模块的开发工作扮演不同的角色。
(三)实施步骤
本文按照软件生命周期、瀑布模型进行,以学生自主实践,教师全程参与指导的方式开展小组分组实践。具体实施步骤如图2。其中:分析、设计、编码、测试等角色由每个小组成员进行分担;组内评审由小组成员共同完成;组际评审由各个小组派出代表联合完成;教师的在每个步骤中给予小组成员理论、方法的指导,及在每个阶段工作的提交结点上和小组成员共同对阶段工作进行考核、小结。
(四)实施结果
我们选取40个学生作为教学实验样本,分为10个项目实践小组,每组4人。首先,通过学生填写分组情况调查表来了解学生的以往专业背景、当前从事工作类别、未来职业发展意向等信息。在这一过程中,让学生联系自己的课程学习情况对未来的职业发展进行了思考,促进了参与课程实践的热情。
1.大专阶段学习专业对实践内容选择意向分析
对大专阶段学习专业对实践角色选择意向的影响统计分析如图3。统计分析表明:大专所学专业为计算机专业的学生侧重于选择承担编码、设计工作,但选择意愿仍是比较均衡;大专所学专业为信息技术类的学生则偏重于选择测试、设计工作;大专所学专业为非信息类专业学生则偏重于选择分析、测试工作。进一步分析可知:以往的知识背景、专业对学生选择实践角色有着重要影响,计算机专业毕业的学生对实践角色所承担的工作认识较为全面,侧重于选择技术程度高的编码工作。
2.目前从事工作类别对实践内容选择分析
我们将学生目前从事的工作分类为:计算机类(软件开发、项目管理、测试)、信息类、非信息类。学生工作背景对选择角色的意向统计分析如图4。统计分析表明:从事软件开发工作的学生侧重于选择承担设计、编码角色;从事项目管理工作的学生偏向于选择承担需求分析角色;从事软件测试工作的学生偏向于选择承担软件测试工作;从事其他类别工作的学生(信息、非信息类)学生选择偏向于分析、设计、测试工作。
3.职业发展意向对实践内容选择分析
我们将学生职业发展意向分类为:计算机类(编码、分析、设计、测试、项目管理)、信息类、非信息类。学生职业发展意向对选择承担角色的统计分析如图5。统计分析表明:职业发展意向为编码(软件工程师、高级程序员)的学生侧重于选择承担编码、测试角色;职业发展意向为软件需求分析、设计、测试、项目管理的学生偏向于选择承担分析、设计、测试角色;职业发展意向为信息类、非信息类的学生偏向于选择承担分析、设计角色。
4.分组实践比较分析
标准的制定应当建立在先进的科学技术与丰富的实践经验之上,这一点光靠凭空捏造是不行的。制定标准的根本目的是:对社会生产秩序加以改善,并且在一定范畴内推动产品的流通,进而实现整个社会资源的优化配置,从而最终实现经济效益与社会效益的最大化。从某种层面上而言,与人类的语言相同,"标准"是衡量人类劳动产品的一项重要标准,且随着人类文明和知识水平的不断进步和发展。在进入工业时代后,产品的生产过程开始呈现工业化、综合化以及现代化的趋势,在此过程中,常常需要多家企业与多个行业参与其中,并且需要对多项技术进行融合,才能将产品完美地呈现。伴随着全球经济一体化的推进,各国之间的贸易活动愈发频繁,这势必会影响各个国家的国家标准,在某种程度上这其实也促进了国际标准的形成。一般情况下,国际标准通常是经由国际电信联盟、国际标准化组织以及国际电工委员会共同制定,并且通过国际标准化组织的进一步明确的标准。
2软件工程质量管理的有效措施
(1)不断强化软件工程质量。软件工程质量保证工作所指的就是开发出现的新软件进行检验,来确保这些软件达到有关规定的标准。该项工作的主要内容有对软件产品进行审查、对一些工具、设备进行审查,以及对软件开发技术的审查评审,最后根据审查所得出的数据做成报告。具本人多年的研究经验,软件工程质量保证工作的开展主要包括以下几个流程:
①成立软件工程质量审查小组;
②合理规划小组审查活动;
③不断优化小组工作内容,避免小组在审查过程中出现漏洞。
(2)不断强化软件工程质量的管理程序工作的开展。我们知道,通过有效的软件管理,可以有效的实现软件工程的工业化、软件开发、生产的规模化,所以可以说科学、完善软件工程质量管理程序是软件工程发展的强有力后盾。本文经过研究,其具体包括以下几方面内容。
①对软件工程产品的质量需求加以构建。其中产品的质量需求应当满足全部客户的不同要求与条件,且将这些要求与条件转变成实际的标准,并加以介绍;与此同时,还必须对客户的要求进行密切的观察,一旦这些要求发生改变,那么就必须在第一时间内对软件工程加以补充,进而使软件设计更加的完善。
②制定一套软件产品开发与维护的有效方式。
(3)不断加强对软件开发队伍的建设与管理。人是软件工程开发、管理等一系列活动开展的主体,所以不断加强软件开发队伍、软件工程质量管理队伍建设对于提高软件工程质量标准至关重要。其具体包括以下几方面内容,第一,聘请优秀的软件工程质量管理方面的人才,积极学习国内外高效的管理经验,降低甚至是避免软件管理问题的发生。第二,定期组织有关软件开发知识与技术方面的培训,并积极号召广大管理人员与技术人员参与其中,以便使其能够掌握最先进、最前沿的软件工程开发技术与管理知识,且进行考核,以保证培训的效果与质量,进而真正实现提升员工素质与技能的目的。
3结语
1.1构建迭代优化的教学模式
(1)更新教育理念,采用基于CDIO的软件工程教育模式。
参考当前国际工程教育改革的最新成果,按照构思(conceive)、设计(design)、实现(implement)和运作(operate)的流程将从研发设计到生产运行的完整生命周期作为实践教育的载体,让学生以主动的、实践的、课程之间有机联系的方式进行学习。浙江大学软件学院结合该教学模式和原有政产学研合作优势,注重培养学生的工程创新能力、职业技能和素质,探索出适合软件工程专业教育的新方法。
(2)紧跟行业动态,持续优化专业教学内容与课程教育体系。
学院持续不断地将最新技术引入课堂教学,每年都会根据当前热点技术调整教学计划,甚至设立新的专业方向,使得学生能够在第一时间掌握热门技术,从而在实习、就业中保持竞争优势。例如,为顺应移动互联网发展潮流,学院设立了移动互联网和游戏开发技术方向;近期为了将云计算、大数据等热门技术引入课堂,学院正在筹划设立云计算、大数据处理等方向。
(3)加强校企合作,建立以就业为导向的校企合作联动机制。
学院结合多方需求,将更多的企业力量引入到教学体系中,使他们参与到课堂教学、课后实验、项目实训、科研创新、实习创业等教学和实践环节中。为了增强企业参与教学的积极性,学院教师团队密切研究跟踪大型软件企业的发展方向,找到教学内容与企业发展方向的契合点,同时结合企业在用人方面的需求进行针对性培养,形成互惠共赢的局面,建立长效合作机制。
(4)提高教师素质,形成具有“双师型”教育能力的专业教师队伍。
学院青年教师均具有博士学位,多年学术研究的经历使他们具有扎实的理论功底,但工程实践能力比较欠缺。通过加强与社会及企业的合作,我们将更多的实际开发项目引入到实验室,同时也将部分教师安排到知名企业中进行交流,在实际项目中锻炼和提高教师的技术应用能力,逐步形成了一支理论知识丰富、应用技术过硬的“双师型”教学队伍,从而使得培养的学生具有理论功底扎实、动手能力强的特点。通过迭代优化,课程体系得到及时更新,教师项目经验得以不断增强,企业参与教学获得持续动力。教学内容变得全面而立体,理论与实践并重,动手与互动并行,形成了互动式立体化软件工程教学模式。在课堂教学、课后实验、项目实训、科研创新和实习创业5个重要教学环节中均以学院专职教师为主、企业兼职教师为辅,双方共同参与的形式进行。大量的互动交流增强了学生解决实际问题的能力,使学生在毕业时已具备参与实际项目开发的能力。互动式立体化教学过程如图2所示。
1.2主要创新点
1)基于迭代的方法对教学体系的主要环节进行持续优化,形成了软件工程教学的新模式。
根据技术发展趋势和市场人才需求,我们对教育模式、课程内容、实践教学、教学方法等方面进行改革,按照更新教育理念→优化课程体系→强化校企合作→提高教师素质的过程进行循环迭代,持续不断地改进每个环节中出现的问题。经过多年的探索实践,结合国际先进的工程教育经验和原有资源优势,最终提出了面向复合型应用人才培养的互动式立体化教学模式。
2)基于国内外最新科研成果和技术动态,及时融入前沿知识,形成立体化课程体系。
我们紧跟国内外技术前沿,动态调整专业方向,淘汰落后方向,设立新兴方向,采用系统科学的方法,按照自顶向下的方式对培养目标和课程内容进行设计和优化。将每个方向的教学课程分为公共基础课、专业基础课和专业提高课3个层次,分别注重拓宽基础知识领域、强化专业应用技能和普及前沿技术热点,形成分层次立体化的知识体系结构。
3)基于学校教育与企业利益的结合点克服校企合作困境,建立三方互动的教学机制。
我们结合知名企业发展方向和人才需求对部分课程内容进行调整,大大提高了企业参与教学的热情。我们对课堂教学、课后实验、项目实训、科研创新、实习创业等教学环节进行精心设计,安排学院专职教师和企业兼职教师共同参与,前者注重理论授课和过程管理,后者注重实践指导和经验分享,以此建立学院教师、企业工程师、学生三方互动的教学机制。
4)基于校企双向互动机制
提高学院教师工程实践能力,理论与实践并重,弥补课堂教学的短板。我们通过产学研平台的建设加强学院教师与企业工程师的互动交流,鼓励教师经常参加知名企业组织的技术研讨会,直接参与企业人才培训和工程项目开发,将更多的实际项目引入到学校实验室,带领学生一起完成开发任务;增加学院教师的实际项目经验,增强他们的“双师型”素质,使他们在教学过程中能够理论联系实际,培养学生动手解决实际问题的能力。
2互动式立体化软件工程教学模式的实施
互动式立体化软件工程教学模式在新专业方向建设的过程中取得了良好的实践效果。以下将以移动互联网与游戏开发技术方向的设立和教学实践为例介绍这种新型教学模式的具体实施过程。
2.1移动互联网与游戏开发技术方向的设立
近年来,数字娱乐和移动互联网产业得到了各级政府部门的高度关注和支持,并成为目前市场投资和开发的热点方向。大量游戏和移动互联网公司的高速成长预示着市场对本方向人才的巨大需求。为顺应市场发展的需要,浙江大学软件学院成立了移动互联网与游戏开发技术方向,与微软、巨人网络等知名企业合作建立移动互联网应用研究中心,进行合作教学和实训、实习指导。在软件工程培养体系下,移动互联网与游戏开发技术方向通过课堂教学、项目实训和公司实习等方式,形成了鲜明的特色和技术优势,重点研究方向包括:移动互联网应用开发、游戏开发、数字娱乐、人机交互等。教学注重课堂、实验室与产业界的无缝结合,注重强化训练学生的动手能力、设计能力、沟通与整合能力、创新能力以及领导能力等,使之逐步具备国际化视野。本方向围绕移动互联网应用开发、游戏策划与开发、用户体验与交互设计等领域开设具有鲜明特色的课程。授课以开发技术为主,交互设计为辅,面向当前信息技术产业的热门领域进行有针对性的人才培养,为国内外知名的互联网公司和游戏公司培养高水平的骨干人才。
2.2教学与实验环境建设
浙江大学软件学院对移动互联网与游戏开发技术方向的建设给予了充分的支持,分配了专门的实验室和实训室,配备了数十台苹果一体机和图形工作站。实验室拥有可靠的Internet网络环境资源和丰富的电子资源,浙江大学图书馆提供了丰富的学术资源库,如ACM、IEEE、Springer、Elsevier、万方、维普、中国专利库、美国专利库、欧洲专利库等,为学生进行文献搜集、国内外研究进展跟踪等提供了便利条件。通过引入知名合作企业,学院先后成立了数字媒体技术实验室、微软移动互联网应用研究中心、巨人技术中心等联合实验室,并获得了合作企业的手机、图形工作站等硬件支持及Windows正版软件、游戏引擎等软件支持。实验室建设旨在基于与知名企业的教学互动,培养学生理论和实践相结合的能力。学生通过实验设备可熟悉Mac、Linux、Windows、iOS、Android等开发环境的建立和使用,使自身的开发能力得到良好的锻炼。
2.3课程体系建设
为了紧跟当前技术动态,学院主要专业课程的教学大纲每年都会跟合作企业商讨调整,使教学内容始终保持领先。移动互联网与游戏开发技术方向软件工程专业硕士的课程体系包括英语、自然辩证法等公共课,软件项目管理、系统分析与设计等基础专业课以及移动互联网应用开发、游戏开发等特色专业课。每门专业课的授课均强调理论与实践并重,教学过程分为课堂教学和课后实践。这里以游戏开发关键技术课程为例展示授课内容。
2.4校企合作的推动
通过校企合作的方式进行工程专业人才培养已经成为广大工科院校进行教学改革的重点内容,这种培养方式也得到了学生的热烈欢迎。然而,由于现行学校机制、教师观念、资金问题以及企业不愿意投入太多等原因导致目前校企合作教学面临困境。浙江大学软件学院经过多年探索,找到了一条产学研合作进行互动教学的道路,充分调动了企业参与教学的热情和积极性。这从上一节中移动互联网与游戏开发技术方向主要专业主要专业课程设置及教学内容就可以证明。之所以能做到这一点,主要原因包含两个方面:
(1)研究知名企业发展战略,将教学内容与企业技术发展推广方向相结合。
知名企业是行业技术的引领者,一些前沿、高端技术往往由这些企业提出,他们有推广自身新技术的需求,而高校是推广新技术的最佳场所,及时与这些企业取得联系就很容易将企业工程师请入课堂。例如,在移动互联网与游戏开发技术方向的教学中,微软不但提供了设备支持,还派出了数名资深工程师进行现场授课。
(2)了解中小企业的技术要求,将学生的实习就业与企业用人需求相结合。
中小企业是行业技术的追随者,他们不愿意也没精力去主动推动一些新技术的普及,但这些企业的发展需要大量人才。而高校是最大的人才聚集地,从满足企业用人需求的角度出发也很容易建立合作培养学生的关系。例如,在移动互联网与游戏开发技术方向的教学中,杭州无端科技、上海毅睿网络等公司通过设立实训项目的形式对教学进行了支持。
3教学模式应用效果
1)招生数量逐年增加。
移动互联网与游戏开发技术方向研究生招生数量近年来持续增加:第一年为33人,第二年为84人,第三年为91人。这说明新的教学模式对学生产生了持续的吸引力,相信该模式对其他院校软件工程人才培养也将产生良好的借鉴意义。
2)课堂教学成果更加丰富。
将知名企业引入到学院教学中,丰富了课堂教学内容,企业工程师与学生形成良好互动,学生也做出了更多有创意、有技术含量的作品。例如,学生学习WindowsPhone应用开发技术课程,完成数十款App的开发,并成功到了应用商店;游戏开发关键技术课程学生也分组完成了十余款跨平台游戏作品,并到了多个应用商店。
3)科研创新成果突出。
经过学院教师和企业工程师的联合授课,很多学生已经具备了参与实际项目开发的能力。一些合作企业会将合适的项目放到实验室由学院教师带领学生完成开发,这进一步促进了校企合作,形成良性循环。近年来,以学生为主力开发完成的项目包括:宁波团市委“最青春”、仁通科技牛扣网及客户端、兰州智慧旅游、智慧医疗手机客户端、宁波海关移动办公、机器零件互动展示等。
4)科技竞赛成绩显著。
学院鼓励学生积极参加各类科技竞赛和程序设计竞赛,使学生既锻炼了动手实践能力,又提高了创意设计能力,同时培养了团队合作精神。例如,软件学院有多支队伍报名参加一年一度的微软“创新杯”全球学生大赛,每年都有队伍晋级中国赛区半决赛,并多次获得了中国赛区三等奖等奖项。5)实习就业效果良好。学院通过互动式立体化软件工程教育模式进行专业学位研究生的培养,学生的实习就业质量得到明显提升。2012—2014年,学生实习率每年都达100%,进入一流IT企业实习的比例保持在70%左右。毕业生就业率每年都达100%,毕业生进入世界500强和重点企业的比例也在逐年上升。
6)地方人才教育和产业水平得以提升。
该专业方向有多门专业课程入选宁波市智慧产业人才基地核心引导课程和宁波市数字图书馆网络视频公开课,每年考核结果均为良好以上。学院教师还面向宁波其他高校和企业举办了移动互联网开发技术等专题培训,提升了宁波人才教育和产业水平。
4结语
传统的软件工程方法一般都具有结构化样式,包含多个程序构件,需要将问题概括定义。然后对该问题的解决方法的工程实施过程进行必要性和可能性的综合分析,分析此工程方法所要满足的要求,在分析基础上对应用方法进行系统性建构。建构整体完成后,再分层次进行详细的内容建构,总体建构及层次建构完成后,就可编写软件代码,最后检测软件性能是否能够满足要求,以便对不合理之处与弊端进行修复以及维护。在这样一个复杂的过程中,需求分析是关键步骤,只有了解需求,将大众需求切实反映在软件中,才能开发出成功的产品。其次,系统建构也非常重要,从整体建构到层次建构,都应以需求为基准进行设计,再结合相关软件数据,具体问题具体分析。可供选择的建构方法有这样几种:数据流动图像、数据关系图、状态图等。结构图主要应用在建构程序中,是系统建构的常用方法,程序图表的编码方式则在层次建构中经常使用到。
2现代工程方法的内容与特点
现代软件工程方法之所以超出传统方法,主要是因为它针对的是具体对象,即面向的是具体存在的问题和弊端,这一点,完全克服了传统软件工程方法的缺点和不足。现代软件工程方法包含五部分,分别是分析、设计、编码、测试、维护。这几部分虽与传统工程方法大同小异,但细比较便可发现现代工程方法的优点。在分析部分,传统工程方法主要是笼统地分析,没有具体的面向对象,而现代工程方法则是分析现实事件的具体问题,因此,具体问题的性质可以更好地反映事件的性质。在设计部分,面向对象主要是系统中的具体时间。传统软件工程方法单一无序的状态使得设计的软件没有突破,没有适应发展的迁移性,现代软件开发方法摒弃这种自发式状态,采用更为先进的模块式开发方法,引进先进技术,维护系统正常运行,同时能及时对软件问题进行修复。模块式开发方法更适合现代经济的高速发展,更能适合大众需求的日新月异,更能满足不同群体的需求。这种方法具有超强的适应性,因此更具有稳定性,一旦软件出现问题,能及时修复,一旦有新的需求出现,也能及时优化性能更新换代,大大降低了软件开发失败的风险。富含高技术的方法还可以整合计算机资源实现资源共享,而且只要将模块定义,在系统允许下可以重复利用。
3现代工程方法的有效运用
3.1现代软件方法的适用局限性
软件体系结构决定着软件适用的工程方法,主要依靠数据库进行数据分析的软件体系结构是指软件的分层结构,比如C/S结构。现如今,传统的数据库管理系统还具有相当的适用性,其在现代数据管理系统还未成形的今天仍然发挥着举足轻重的作用。传统的数据管理系统在数据存储、数据共享、数据保障以及故障维护等方面都有着很好的效果。特别值得注意的是在结构化语言查询方面,其不但不会损害整体性查询,在高水平查询上同样能够完美实现,这是现代管理系统不占优势的地方。现代管理系统优势凸显于具体的数据储存与操作方面,比如表结构的处理方法,传统软件工程方法在运用时会有所扩展,导致表述模糊。
3.2现代软件开发的工程理念
软件应用脱离了早前的局限性,在各行各业都得到有效应用,餐饮业、服务业以至于医疗卫生业都能将软件运用发挥到极致,大大提高了行业的生产效率,取得了前所未有的效果。同时,利用软件的资源与信息共享功能可以在各行业建立标准的操作规范,统一行业的操作程序。只有在软件开发过程中树立现代软件开发的工程理念,才能顺利进行软件开发和应用。以医疗卫生业为例,通过大量引进现代软件进行信息管理和操作,不仅规范了医护人员的诊断操作行为和疾病检查,还可以对疾病及时有效地进行监督和管理。引进的软件不仅仅局限于资料信息的管理系统,还有与影像资料存储与共享、通信内容等相关的信息管理软件。以病理信息管理的软件开发为例,这种软件的主要作用就是将病理分析情况如实收入软件中,从而对该数据资料进行长期有效的存储。这种软件的操作简单易学、分工明确,是模块化处理方式的最简单应用。需求性直接决定软件实用与否,因此,在开发之前,必须对软件的需求性和实施的可能性进行详细的调查研究与分析。如果软件公司开发新产品之前没有进行需求和可行性分析,必然导致软件的适用性不足以应对大众需求,不能够很好地适应具体情况,给开发者造成不必要的损失。此外,在软件开发时,开发公司应该对整个工作进行协调一致的规划安排,各工作人员应明确分工,尽量规避工作中出现环节空缺或重复的情况,避免开发过程中出现混乱不堪的状况。
4结语
(一)头脑风暴法
在软件工程项目投标风险识别过程中,头脑风暴法主要是通过发挥集体智慧来对软件工程项目中存在的风险进行分析与谈谈。在此过程中要求风险识别工作的参与者对自身观点做出明确的阐述,其目的是为了通过让参与者在自由提出多种方案的基础上更加科学且全面的认识到软件工程项目投标工作中的风险。在此过程中并不提倡对其他成员提出的问题和方案进行批评,并且要求能够将所有成员所提出的问题与方案进行记录。
(二)德尔菲法
在软件工程项目投标风险识别过程中,德尔菲法是Q•赫尔穆与N•达尔克在20世纪40年提出,这种风险识别方法的基础在于对专家能力的利用。当然这种方法已经在社会经济、工程等多个领域的工作中得到了广泛的应用,德尔菲法主要是通过组建专家队伍来对项目投标中的风险做出分析。专家队伍主要是由项目风险小组来进行选定,通过专家意见和整理专家意见并反馈给专家队伍来获得意见。最后将统一的专家意见当做软件工程项目投标风险管控策略选取的依据。
(三)情景分析法
在软件工程项目投标过程中,情境分析法主要是以多样化的发展趋势为依据,对系统内外问题开展系统的分析,并设计得出多种可能发生的前景,随后对这些画面以及情景做出描述。在此过程中,社会因素、经济因素以及技术因素是必须要重点考虑的内容。一般情况下,情景分析法可以在以下情况下产生十分有效的作用:一是提醒软件工程项目投资的决策者需要注意一些政策和措施所引发的风险;二是对一些影响未来工程项目投标的关键因素做出研究,尤其是技术发展在软件工程项目投标中所产生的风险。由于情景分析法建立在假设以及可能性的基础上,所以在软件工程项目投标中,可以得出多种不同的情境,从而为软件工程项目投标风险的防控工作提供更多依据。然而由于这种方法具有一定的操作难度和复杂性,所以在我国的软件工程项目投标风险识别过程中,这种方法并没有得到广泛的应用。
(四)核对表法
在软件工程项目投标过程中,软件工程项目投标企业可以将曾经出现过的风险以及其他企业曾经出现过的风险进行总结、整理与罗列并形成核对表。通过对核对表的查阅,工作人员可以了解到软件工程项目投标过程中可能出现的风险,并可以通过总结各类风险应用中的经验和教训来确定使用何种风险管控策略来对风险发生几率以及风险损失进行控制。在核对表的制定中,主要内容包括其他软件工程项目投标成败原因、项目管理成员能力以及相应软件工程项目的合同、进度、质量、成本、范围以及各类资源等。虽然这种风险识别方法与其他方法相比并不能发现较多的绝对量,但是却具有着一定的针对性,所以在这种识别方法的使用中,也可以发现一些其他风险识别方法所不能识别的潜在风险。
二、软件工程项目投标过程中的风险管控
(一)软件工程项目投标过程中风险的规避
在软件工程项目投标过程中,风险的规避主要是通过变更计划来制约风险产生条件的生成,从而保护软件工程项目投标主体能够避免受到风险所带来的过度影响。与其他风险管控策略不同的是,风险的规避主要是对风险产生的损失作出控制,而不是对风险进行消除。因此,风险的规避主要体现出了两点特征:一是通过使用事前控制策略对风险所造成的损失产生的几率进行降低;二是通过事前控制与事后补救的结合来实现损失程度的降低。风险规避作为软件工程项目投标过程中能够最有效降低风险所产生的损失的方法,是软件工程项目投标阶段开展风险管控工作的重要手段,具体而言,风险规避的方法包括程序法、教育法以及终止法。其中程序阿发主要是通过提高软件工程项目投标过程中个性工作的规范化、制度化以及标准化程度来避免风险造成过大损失;教育法主要是通过对参与软件工程项目投标工作的工作人员开展教育来让工作人员认识到软件工程项目投标过程中存在的潜在风险因素,从而在提高工作人员风险防控意识以及防控能力的基础上降低风险所造成的损失;终止法则主要针对较大的风险或者过大的损失,这主要是因为终止法是通过终止软件工程项目投标行为来规避风险造成过大的损失。由于这种风险防控策略在避免风险以及风险损失的同时也放弃了让企业获得效益的机会,所以即便这种方法能够最有效的对软件工程项目投标中的风险做出防控,也并不是软件工程企业在投标风险管控中经常考虑的方法之一。
(二)软件工程项目投标过程中风险的降低
在软件工程项目投标过程中,风险降低可以理解为对风险的缓解而并非完全的消除与避免。这种风险管控策略体现在降低投标过程中风险产生的概率以及降低风险所造成的损失两个方面。实现风险降低的手段主要是对风险做出有效的监控与环节,在构建风险预警机制的基础上确保风险的及早发现与及早解决,从而降低风险产生几率。在使用风险降低策略对软件工程项目投标风险进行管控的过程中,首先要承认软件工程项目投标过程中风险的不可完全避免性,并以积极的态度来最大化的避免风险对投标主体造成过大损失。
(三)软件工程项目投标过程中风险的转移
在软件工程项目投标过程中,风险的转移主要是将管控风险的责任和权利以及风险可能造成的损失转移个其他主体承担。很明显,在风险转移策略中,并不能对风险进行完全消除,而是与其他主体来对风险进行承担。在软件工程项目投标过程中,由于要做到完全的规避风险需要付出较高的成本和较大的管理难度,所以将风险转移给其他主体承担则更为方便。在软件工程设计内容复杂以及分工逐渐细化的背景下,参与投标的软件工程企业也并不一定能够独立完成业主所要求完成的任务,所以投标主体可以利用分包形式来对投标过程中的风险进行转移,这种策略的意义主要体现在两个方面:一是不会让投标主体面临过大的风险;二是能够在工程质量以及工程进度等多个方面做出更为良好的管控。
(四)软件工程项目投标过程中风险的自留
1数据挖掘技术
常见数据挖掘技术包括:分类树技术、关联发现技术、聚类技术、人工神经网络、最优集合规约技术以及可视数据挖掘技术等。软件度量数据往往具有多维度、高耦合性,软件工程数据挖掘中会采用一些特殊处理技术,包括统计分析、回归建模、分类树以及神经网络等。在具体软件工程实践中,选择何种挖掘技术,其决定性因素为想要达成的目标。
2数据挖掘实现过程
通常,数据挖掘过程包括4个步骤,即选择数据、预处理、实施挖掘以及吸收数据。数据挖掘整个过程具有交互性,有时数据需要重新选择,有时也要对数据预处理进行改进,也可能出现算法反复被调整现象,基于这种特征,数据挖掘时要设置反馈环。挖掘数据第1步是将管理和目标反映到1个(或多个)挖掘任务中,整个过程可主要划分成为六种:1)评估、预测。评估包括对软件产品、过程以及资源的属性进行相应检查就是整个评估过程,同时也需要根据这些属性,赋值给未知属性,当然这些未知属性需要进行量化。评估工作完成后,要对属性值进行预测。2)分类。检查1个特定实体属性,根据结果将其划分到另1个类别或范畴(事先定义好)中。3)关联发现。关联发现能够识别出特定内容中互相存在关联某些属性。如,可将找出在软件开发属性和产品属性相互关联的内容找出来。4)聚类。将1个结构不相同的群体划分到另1个具有相同结构的子群集合中,这个过程叫做聚类,它的划分依据是成员之间具有高度相似性。5)数据可视化。数据可视化是利用可视化描述方法来定义复杂信息。6)可视数据探察。可视化数据探察是对描述工作的相应拓展,可利用数据可视化交互控制来分析和检视海量数据[3]。它应用具有可视化功能和数据挖掘技术来对数据进行处理。
3挖掘技术在软件工程中应用
上文提及到软件工程度量,部分可利用信息已在海量数据中被提取出来,但普遍认为更为有效且数量众多的数据依然在软件工程相关数据库中隐藏,而没有被发现。实际上,数据挖掘就是1种被公认为提升软件工程度量的技术。图1为数据挖掘在软件工程中的应用。
3.1数据挖掘繁荣原因1)计算机硬件系统和软件系统的基础设施建立具备发现驱动、分析数据等功能;2)每种技术都在实际应用中不断得到改进,其使用能力不断提升。如,模式识别、神经网络等有明显进步趋势;3)数据存储、贮藏、集成成本不高,海量数据可轻松获得。数据挖掘技术被人们认识,并在实践中逐渐被重视,同时也给研究和进一步提高数据挖掘技术提供了便利条件。
3.2面临挑战软件工程自身存在很多数据上的特殊性,给数据挖掘领域研究工作带来制约和影响,主要表现在以下三个方面:1)数据复杂。软件工程数据主要分为两个组成部分,即结构化数据、非结构化数据。结构化数据主要包括缺陷报告、版本信息等内容,而非结构化数据则包含数据代码、相应注释以及文档等内容。结构化数据、非结构化数据并不能同时适用一种算法,而且两种数据间还存在对应联系。如,1个缺陷报告中往往包括缺陷代码段。而结构化数据里常常涵盖部分非结构化信息,非结构化数据中亦是如此,这也是今后工作中需要重点解决的问题之一。2)非传统分析存在局限。数据挖掘最终想实现的目标就是将转化而来的信息传达给用户,实现信息共享。传统数据挖掘技术在使用过程中,信息手段比较单一,如文字、图表等表达形式。其实,软件开发商对信息的要求很高,1个统计结果根本不能满足其工作需求。为促进软件开发不断向上发展,开发人员需要相关信息作为参考依据,包括开发实际案例、编程所需模板、系统缺陷定位以及软件结构设计等。研究数据挖掘技术,提升其实际使用功能,需要不断提交新信息、新知识,并改进相应手方法。3)挖掘结果评价标准不够具体。软件工程数据挖掘尚未形成完善的结果表示体系,其评价体系也有待加强。人员在软件开发过程中需要大量信心,这些信息非常具体且复杂,表示方法不尽相同,互相之间难以做出对比,也很难用定量方法去分析挖掘结果。
4结束语
“数据挖掘”是在发展过程中被人们定义的,但软件工程中对此类数据的研究早就存在。数据挖掘技术能够为研究软件工程数据提供方便,具有重要应用价值。因此,笔者认为将两者充分结合是计算机信息技术发展的必然趋势。若以过程角度来看,软件工程涉及到数据挖掘各个周期、阶段,甚至是具体实施步骤;以技术角度看,数据挖掘在软件工程中应用广泛。数据挖掘技术虽然在实践中取得一定应用效果,但还有更广阔的空间没有内充分挖掘出来,为广大从业人员提供创新空间。
作者:贺玮单位:同济大学软件学院
1燃尽图的应用
燃尽图主要是通过图形化的表现形式反应出时间与剩余工作量的关系,在图形中分别以x轴和y轴来体现。横坐标主要表示工作时间,而纵坐标用来表示剩余工作量,同时用点对工作量进行划分,最终通过点之间的折线连接来反映出工作量的变化轨迹,并与另外一个原估计线进行对比,两种线段以不同的颜色进行区分,当控制线高于实际趋势线,那么则表示工作进程正常,反之则表示工作存在滞后性,当趋势线呈现上涨趋势,则表示一些工作被疏忽,这种表现形式相比以往更加直观和准确。其价值还体现在以下方面:第一,可以反映出项目的实际进度;第二,具备风险预测能力;第三,对当前项目消耗时间做出直观的评判。当燃尽图的线段趋势出现变化时,则表示对应的不同情况,当依次上升、下降时则代表很多事务没有纳入计划当中,而开展工作后又发现了更多的任务;当燃烧突然停止则表示目前任务的划分不够精细,必须在下一个迭代中对项目进行细化;缓慢之后到结束有余下的工作任务,则会推迟到下一个迭代当中,进入下一个迭代中,可以选择将一些无关紧要的故事纳入其中。在实际的项目开发当中,使用敏捷过程能够实现较大的优势,可以显著提高产品本身以及开发的质量,并且便利了人员的交流,提高了团队的自我管理能力。
2监理机制在远教服务网的应用
监理机制应该在项目最初的策划阶段就予以完善,在前期监理单位主要扮演咨询顾问的角色,能够协助完成IT战略的制定。完成战略制定之后,监理单位的角色就成为监理公司,并且利用资讯时期累积的工作经验开展以下工作,避免了繁复的监理选择过程。监理公司将内部高素质人员组成一个专项的监理委员会,并与项目咨询师保持密切的联系,同时还能够对项目的相关人员进行监理知识培训,从而提高项目的运作效率。经过对敏捷方式的调整,目前监理工作与项目的契合度更高,能够发挥出更多的优势,其已不再是外来的单位,而是项目内部的组成部分,利用敏捷方法进行监理能够获得良好的管理效果。监理工程师主要承担Scrummaster的角色,其职能与Scrummaster相结合,能够提高项目的实效性。Scrummaster的职能主要包括以下几个方面:第一,让产品负责人与产品开发之间的障碍得到排解,便于产品负责人开展相关工作;第二,使产品负责人了解投资回报的额度,协助其明确工作方向;第三,优化开发队伍的自主创造力;第四,提高开发队伍的工作效率;第五,完善工程工具以及实践,使得功能增量都存在可交付性。监理人员则负责与项目经理之间相互沟通,辅助其完成Sprint信息页面额创建,而这个过程对成员阶段目标的实现也有重要意义,另外还需要控制燃尽图的变化情况,保持故事进度的及时性,当迭代完成后监理人员还应该演示Sprint,使相关方对项目进度的运行情况进行直观的了解,避免项目偏离原本设定方向。总的来说Scrummaster与项目经理协商阶段计划的过程使其控制功能的具体体现。在计划的制定过程中,产品负责人应该预估时间,尤其是合同中的故事必须进行粗略的估算,而监理工程师应该确保估算过程不是由产品负责人单独制定的,而是与团队协作后的写过,最后产品负责人回答疑问并对条目内容进行描述。建立工程师还需要对生产率进行计算,主要依据是迭代中实际的完成情况以及计划,结合项目在每个阶段的结束时间,对是否按期完成做出评价,针对实际情况对人员以及计划做出动态调整。
3沟通管理的应用
Scrum的主要功能就是加强队伍之间的联系,而远教项目本身就是有三方共同组成的,即咨询监理和甲乙双方,正是因为这种结构模式导致沟通的成本上升,因此在远教服务项目当中,三方的沟通是重点工作之一,只有保证沟通机制完善,才能够提高执行的效果。Scrum主要沟通包括计划会议、展示会议、站会、总结会议。计划会议主要围绕backlog的内容,在会议内对其执行方式以及时间进行协商;展示会议主要与用户沟通,向其展示阶段性的项目成果;站会是对每天的工作进度进行回报和沟通;总结会议则是对Scrum进度进行总结,并对其问题提出针对性的建议。在以上沟通方式中,每天一次的站会最为关键,其时间和地点相对固定,而其形式也易于接受,目前其实质主要是工作内容的汇报过程,为了防止其与既定目标相偏离,可以采取以下措施:第一,如果人员出现迟到情况,那么应该采取一定的罚款措施,收缴的罚款用在会议的一些支出上,这样能够约束人员的纪律性;第二,如果工作汇报的过程中被无故打断,那么可以采取token的发言方式,任何人员在进行陈述的时候必须申请token;第三,当会议已经偏离既定轨道,呈现汇报形式时,可将讨论的目标设定为项目组成员而不是仅仅针对Scrummaster进行回报;第四,发言的过程必须有明确的层次,即三段发言方式,主要是昨天所做工作内容的回报、后续工作的执行方式以及对出现的问题寻求帮助,在问题一环节的阐述中,应该避免过多的纠缠问题的解决方式,而应对问题进行详细的讲述。展示会议也是较为重要的一种沟通方式,监理工程师在工作中应该注意以下要素:第一,对spirnt的内容进行详细阐述,如果人员对产品知之甚少,有必要用几分钟进行描述;第二,演示应该侧重于快节奏,以效率为首要准则;第三,重点在于成果展示,而不是对过程的过多阐述;第四,有条件的时候可以让客户实用相关产品;第五,避免过于花哨的演讲,而是应该对实际工作的代码进行演示;第六,在bug修复问题上可以粗浅提到,但是不应进行演示,避免模糊视线,忽略重点故事。总结会议是指回顾会议,主要是对项目进行归纳和总结,主要由产品负责人带头,并让项目人员都参与进来。会议重点应该是未来工作的优化方式而不是具体工作任务,目标放在提高开发效率上。总结会议完全依靠于人员的主观意识,因此对人员的素质有较高要求,当问题出现时应该结合相关素材予以总结,并对会议的内容和成果以文档的形式记录下来,从而为下一个Sprint提供参考建议。
4结束语
总的来说,软件工程管理技术的不断成熟大大提高了远教服务网的运行效率,发挥出协调和监管的作用,当然也对人员的综合素质提出了更高的要求,监理工程师必须了解敏捷开发各个环节的工作流程,并提供正确的指导,只有这样才能够对项目整体带来较大的效益。
作者:王听 单位:武汉大学信息管理学院 武汉交通职业学院
关键词:软件工程管理开发人员组织结构用户
一、引言
软件工程管理目前还没有引起人们的足够重视。究其原因:首先是人的传统观念,工程管理不为人们所重视;另一方面软件工程是一个新兴的学科领域,软件工程管理的问题也是刚被提出的。同时,由于软件产品的特殊性,使软件工程管理涉及到很多学科。因此。对软件工程管理,人们还缺乏经验和技术。但事实证明,由管理失误造成的后果要比程序错误造成的后果更为严重。很少有软件项目的实施进程能准确地符合预定目标、进度和预算的,这也就足以说明软件工程管理的重要。
二、软件工租,理的内容
目前软件生产自动化程度很低,在开发过程中人是起决定性的因素,因此,软件工程管理很大程度上是对人的管理。我们可根据软件产品的特点。分析软件下程管理的具体内容,它包括对开发人员、组织机构、用户、文档资料等方而的管理。
(一)开发人员
软件开发人员一般分为:项目负责人、系统分析员、高级程序员、初级程序员、资料员和其他辅助人员。根据项目的规模人小,有可能一人身兼数职,但职责必须明确。不同职责的人,要求的素质不同。如项目负责人需要有组织能力、判断能力和对重大问题能做出决策的能力;系统分析员则要有概括能力、分析能力和社交活动能力;程序员需要有熟练的编程能力等。人员要少而精,选人要慎重。软件生命期各个价段的活动有分工又互相联系。因此,要求选择各类人员既能胜任工作,又要能相互很好地配合。没有一个和谐的工作气氛很难完成个复杂的软件项目。
(二)组织机构
组织机构不等于开发人员的简单集合。这里的组织机构要求:好的组织结构、合理的人员分工和有效的通讯。软件开发的组织机构没有统一的模式。下面简单介绍三种组织机构。
1、主程序员组织机。IBM公司提出的主程序员组是软件系统结构化思想在组织上的体现。它的目的是为了保证全组的协调和统一。一位高级工程师(主程序员)主持计划、协调和复审组的全部技术活动。技术人员(一般25人)负责分析和开发活动,一位后援工程师支持高级工程师的工作,并且在该项目继续进行时,可以代替高级工程师工作,以减少可能的损失。
2、专家组。专家组强调每个人的才能,把每个人都看作是某一方面的专家,由这些专家组成一个开发机构。这种组织结构虽然能发挥所有工作人员的积极性,但往往有可能出现协调上的困难,选择这种方式要慎重。
3、民主组织。民主组织由从事各方面工作的人员轮流担任组长。很显然,这种组织结构对调动积极性和个人的创造性是很值得称道的。但是由于过多地进行组长信息“转移”不符合软件工程化的方向。
(三)用户
我们是为用户开发软件的,在开发过程中自始至终必须得到用户的密切合作和支持。作为项目负责人,要特别注意与用户保持联系,掌握用户的心理和动态。防止来自用户的各种干找和阻力。
1、用户不积极,不配合。这种表现通常来自对采用先进技术持怀疑态度的用户,他们心理上的抵触情绪会在行动上表现为消极、漠不关心。在需求阶段,做好这部分人的工作很重要,通过他们中的业务骨千,才能真正了解到用户的要求。要使他们认识到:计算机的发展和应用是现代化的必然趋势,使用计算机将会带来巨大的经济效益:让他们掌握新的技术和方法去取代某些可能过时的或淘汰的专长。
2、用户求快求全。这种表现来自对使用计算机持积极态度的人。他们中一部分人希望一个早上就能用上计算机,并且全能用上计算机。要他们认识到;开发一个软件项目不是一朝一夕就能完成的,软件工程不是靠人海战术就能加快的工期。另外,即使计算机能够处理的事情,系统也不能下于包罗万象,贪大求全。要根据现有的条件量力而行。如果系统大而全,必然会很复杂,开发时间就拖得很长,因此可能会导致一个系统的失败或性能太差。
3、用户需求变化。在软件开发过程中,用户可能会不断提出新的要求和修改以前提出的要求。从软件工程的角度不希望有这种变化。但实际上,不允许用户提出变动的要求是不可能的。因为一方面每个人对新事物有一个认识过程,不可能一下子提出全面的、准确的要求:另一方而还要考虑到与用户的关系。对来自用户的这种变化要正确对待:要向用户解释软件工程的规律,并在可能的条件下部分或有条件地满足用户的合理要求。例如:软件需求分析阶段结束后软件的设计口标已经确定,这时用户要求的重大变化要导致设计目标的变化,特别是到软件开发的后期,一般不可能满足这种变化的要求。要向用户解释清楚工程的内在规律,但对用户提出的如性能等局部方而的要求,只要是合理的,就要加以考虑。
4、控制。人员控制是对开发组织内部人员控制。就是要保证开发人员的积极性和稳定性。人员的频繁更换或流动将会大大增加软件出错误的机会。至少要保证软件项目每一期工程或软件生命期每一阶段中人员的相对稳定性。同时注意发挥每个开发人员的积极性和创造性。经费控制要编制详细的经费预算。并在各阶段进行经费的核算。在经费上失去控制,软件项目就没有经济保证。质量控制与各阶段的复审在意义和作用上是一致的,在此不再叙述。
5、文档资料。开发过程的各种活动后都要反映在文档资料上。每一个阶段的文档资料是以后各阶段工作的基础,又是对前面各阶段工作的复审。软件工程管理很大程度上是通过对文档资料管理来实现的。因此,要把开发过程中的初步设计、中间过程、最后结果等建立成一套完整的文档资料。文档标准化是文档管理的重要方面。: