前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇软件开发培训计划范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
【关键词】软件;策划;风险分析
【中图分类号】TP399
【文献标识码】A
【文章编号】1672—5158(2012)10-0416-01
引言
嵌入式软件已经在我国航天导弹武器系统等尖端产品中得到广泛的应用。目前,《GJB5000A-2008军用软件研制能力成熟度模型》已经并实施,航天嵌入式软件项目的研制过程逐渐要依据这个标准进行。软件作为航天控制系统的关键部分,其地位显得越来越突出,分系统级软件规模已经超过数万行。同时从事软件研制人员已经形成一个组织分工明确、相互配合紧密的团队,从任务书、需求分析、概要设计、详细设计、代码实现、软件测试、交付和维护等环节,每个岗位可能涉及到多个人员。如何通过软件项目策划,保证软件研制流程明晰、可控、软件产品质量可靠,成为型号研制工作的一个不可或缺的重要环节。
1 项目策划的目的
随着管理要求日益严谨,软件管理由粗放式向精细化和准确化转型成为大势所趋,利用软件策划帮助研制方提高研制进度管理的有效性,保证产品质量、提升核心竞争力已经成为共识。策划的目的是为执行软件工程和管理软件项目制定合理的计划,旨在使软件开发人员及管理人员充分了解软件项目策划过程,使项目管理人员遵照过程实施项目策划活动、制定项目开发计划及执行相关策划活动。
2 软件策划前提和输入
项目策划的前期,软件项目组成员要积极参加整个系统项目的早期策划活动,并在系统方案的制定和评审过程中,共同讨论方案报告,协商有关软件项目的目标、范围、进度、资源等,从而逐步了解软件在系统中的作用、进度、功能等。同时对设计输入的任务书要进行认真评审,对其每项内容了如指掌,并纳入配置管理。参加项目策划活动的人员还要接受相关培训。
3 软件策划的规程
软件策划需经多个步骤,从而对整个项目阶段工作进行全面梳理。根据输入的任务书和标准等,首先依据策划的主要内容,制定软件策划的工作计划,然后选择软件生命周期模型,确定软件开发阶段,其次就要进行工作分解结构(WBS)分解,这是策划中非常重要的步骤。在此基础上进行规模、工作量、成本和进度估计,最后形成软件开发计划。其中有多个非常关键的环节,直接影响策划的真实性和可执行性,因此需要重点关注。
3.1 工作分解结构
工作分解结构(Work Breakdown Structure,简称WBS)是归纳和定义整个软件项目范围的一种最常用方法,它将一个项目分解成易于管理的几个部分或子项,以确保找出完成项目工作范围需要的所有工作元素。
工作分解结构是对软件工作产品和软件过程进行分解,以层次结构来组织软件项目的产品元素和活动元素,将项目的软件工作产品和软件过程分解为较小的、更易于管理的元素。
WBS分解时,通常按照树型结构,不断将项目的最终目标分解到一些较小工作单元,直到这些工作单元可以被很容易地“控制”住为止。在划分任务时,任务的颗粒度不能太大,也不能太小。颗粒度太大,难以及时发现问题;颗粒度太小,就会增加管理成木。任务的颗粒度最小可以到半天,最大到周,一般以小于3天为宜,也就是说项目经理能够在1周中至少检查2次成员的工作进展情况。适当的任务颗粒度便于监控,另一方而也有利于调整任务。当出现任务拖期时,可以比较灵活地重新安排人员接手其他人员的任务。
3.2 项目估计
根据WBS分解的项目内容进行项目估计,项目估计包括项目规模、工作量和成本的估计,这是整个策划中的关键环节,只有项目估计尽量准确,才能保证项目进度、质量能够受控。为了保证项目估计合理性,可采用下面措施:
1)借助历史数据。历史数据是“经验”的量化,通过和历史项目的数据对比,可降低估计的风险。在借鉴历史数据时,要注意数据的可比性,要考察项目类型是否类似、生命周期模型是否类似等。
2)采用多种估计方法互相验证。在估计时可以采用多种估计方法,然后对多种方法的结果进行对比,通过分析其差异以判断合理性。
3)细分任务。任务拆分的越详细,就越容易估计,越容易和历史数据对比。内容任务要完备。估计时要识别出所有工作,不要有遗漏。
4)有估计经验的人参与估计。一方面要对参与估计的人员进行培训,另一方面需要在实践中积累估计经验。每次估计完成后,都要和实际的情况进行对比,经过3-5次反复,则可积累估计经验,提高估计准确性。
多人分别估计并形成估计表,然后由项目负责人进行汇总形成软件估计报告。
3.3 资源和管理计划
人力资源策划方面要包含完成软件开发项目必需的人员数量,姓名,指明项目管理、软件工程、正式软件测试、软件产品评价、软件配置管理等分别所需的人员数目及总数。相应岗位若需通过相应岗位的培训考核,则还要制定培训计划。
项目负责人要确定软件项目相关的利益相关方,包含硬件设计人员、任务提出方、测试设备负责人、用户代表、评测机构等。从而协调制定相关的计划或关键点,描述利益相关方的权限和责任,以及与其它组织的关系。
基础设施资源的策划要同步进行,估计时参考类似项目的历史数据,根据项目需求、工作产品的规模,考虑开发环境、测试环境、目标环境或者这些环境的任何适当组合情况下所需的基础设施资源。同时制定测试计划、配置管理计划、质量保证计划、风险管理计划、数据管理计划、里程碑评审计划和沟通计划等。对上述计划确认后进行配置管理。
4 风险估计
标识风险源为项目研制过程中检查随时间而更改的状态提供了基础,直接显示出影响项目研制目标的各个因素。风险源来自项目的内部和外部。随着项目的进展,可能会发现更多的风险源。项目策划阶段就要识别和分析风险,并制订风险减缓计划,才能进一步跟踪项目风险,及时消除各个风险源带来的影响。
5 形成软件开发计划
策划输出的果就是软件开发计划,根据WBS分解的结果,根据软件任务、任务的工作量、项目成本、任务之间的衔接关系、系统的约束条件和人员分配表等,得出项目的进度和关键路径,并得出软件项目预算,连同项目进度及网络图写入阶段软件开发计划,在形成项目计划过程中,如出现各项约束条件与任务进度冲突情况,需重新估计。软件开发计划应通过正式评审,从而保证具有相应约束力,并纳入管理和控制。
【关键词】电力岗位应知应会标准;培训模型;智能化
1、建设背景
电力企业培训模型被提及比较多的有电力企业岗位胜任能力模型等,但由于各种原因以及和实际培训工作存在一定差距,始终没有找到合适的方法加以推广和利用。行业内一度认为职业胜任能力模型“看起来很美“,但是无法在实际教育培训工作中加以应用。
2010年,佛山供电局作为广东电网公司教育培训创先工作的责任单位之一,主要负责学习项目子体系创先工作。学习项目体系是教育培训创先的主线,围绕公司组织能力需求,全面梳理内部知识,以关键技术技能培训标准和课程课件建设为突破口,实现对公司内部知识的系统管理。以岗位胜任力为基础,以岗位说明书、作业指导书、关键绩效指标等为依据,对应专业(工种)、岗位和作业目录,制订覆盖公司管理、技术和技能专业领域的、以应知应会为核心的能力培训标准。借助国内外企业培训先进理念,从课程设置和课程设计入手,开发菜单式培训课程,使每一个岗位的专业知识和业务技能模块化,形成具有广东电网特色的学习项目培训系列教材和电子化课件。
佛山供电局根据本单位实际情况,分析了国内外的先进培训手段,结合广东电网公司创先工作思想及智能电网先进思路。积极探索利用信息化手段和网络技术,在原有网络教育培训系统的基础上,开发基于岗位应知应会标准的电力智能化网络培训系统。
2、岗位应知应会的标准的定义
岗位应知应会标准,是指员工完成某岗位工作所应具备的理论知识和技术能力,将这些知识和能力进行梳理和规范后,制定出的可量化的标准。
岗位应知应会标准是各单位开展年度培训需求分析和制定培训计划的主要依据,是系统建设的核心。
岗位应知应会标准模型(图1):
3、系统的构建策略
3.1建设思路
由于系统建设的成败关键在于岗位应知应会模型的建立,主要工作都围绕岗位应知应会模型建设来展开,根据广东电网教育培训创先工作方案的要求,建设以岗位胜任力为基础,以岗位说明书、作业指导书、技术标准,以及设备和技术参数、关键绩效指标等为依据,对应专业(工种)、岗位和作业目录,制订覆盖公司管理、技术和技能专业领域的、以应知应会为核心的能力培训标准。
佛山供电局人力资源部和信息中心通力合作,开展了岗位应知应会标准培训模型信息化落地工作。邀请专业咨询公司及软件开发公司,对人力资源部梳理出的工作内容进行了进一步研究和划分,拟定需求分析说明书、系统架构设计、拟定应知应会培训项目编码规范和项目开发监理,由实施厂家进行系统设计、开发以及相关数据转换工作。
3.2建设方法
3.2.1业务再造流程先固化后优化。为了保证流程再造成果得以迅速推广应用,在项目实施中佛山供电局采取“先固化后优化”的工作思路,由“点到面”的推广方法对系统进行逐步的升级和完善。
3.2.2集中开发、统一部署。该系统是在原有系统的基础上进行功能扩充改造,以佛山供电局为中心进行集中的软件开发、测试,统一对各部门和区供电局进行部署。
3.2.3加强业务流程再造宣贯与培训。为更好落实“先固化后优化”的实施策略,佛山供电局通过专项培训情况,开展了针对培训业务人员的流程扩充成果的逐层宣贯工作。
3.2.4充分发挥监理的作用。利用监理方丰富的实施管理经验深度介入项目的组织管理工作,从项目的准备工作开始时就要求监理方深度介入项目的每一个环节,配合做好项目的组织、进度监控、成果审查和测试等工作,保证了项目的进度和质量。
3.3系统的架构
3.3.1信息系统总体架构(图2)
3.4建设目标
佛山供电局网络教育培训系统在原有的网络教育培训系统上进行扩充,在充分考虑与人力资源等其他业务系统进行集成的基础上进行建设,主要实现以下建设目标:依据佛山供电局岗位应知应会标准,建立一套科学、灵活的全员培训管理体系,实现培训项目的全过程管理;提高培训宏观管理能力,依据单位对人才的需要,制定切实可行的培训方案,并依据远近期目标,选择所需的培训知识和技能及评估绩效等;建立员工的全方位培训档案管理,可记录员工的历次培训情况、培训得分等,作为对员工技能的考核与能力选拔的重要依据;可依据培训目标制订详尽、周密并可操作的培训,并可从培训、业务主管部门、直属上级等不同层次对培训目标的监督考核,保证严格按培训计划与要求将培训落到实处。
4、系统的主要功能介绍
4.1应知应会标准固化与维护 由各负责单位培训员负责录入标准,可实现各个岗位的应知应会标准维护。通过人员编码与岗位代码的一对一映射关系,可自动形成人员编码与培训项目代码的一对多映射关系。
4.2岗位符合度评估 根据人员和岗位信息,通过一定的公式和逻辑关系,得出个人积分,依据岗位应知应会标准,计算出人员岗位符合度。
4.3培训需求调查管理 由员工所在部门利用岗位应知应会标准,确定员工应知应会差距清单,识别差距对员工培训的要求,从而得出年度培训需求,形成年度需求报告。
4.4培训计划生成 年度培训计划应包括岗位应知应会培训需求调查每年自动生成的、员工自己选择的、直接上级领导指定的。由各单位培训员负责汇总录入每个人的计划,自动形成部门年度培训计划初稿。对下年度培训项目进行策划,选择合适的方式和时间,编制培训预算。
4.5培训项目实施管理 实现培训课程管理、题库管理、师资管理、培训机构管理、培训场地管理、专家团队管理和培训证书管理。根据年度培训项目计划,举办培训班,网上报名,培训班上报,并进行归档,并可进行在线的考试和成绩登记。
4.6培训考核与评价 将教育培训目标考核的内容在系统中进行定义,对能够自动采集的数据实现自动采集。下一步在时机成熟时,将试行由各责任单位定义培训目标考核指标及评价标准,并经人事部审查后正式。
4.7统计分析与报表 可动态分析每个员工培训情况与岗位的符合度情况,作为了解员工知识结构与水平、以及人员选拔的依据之一,可依据某一岗位统计出单位内非本岗位员工岗位培训度情况,并按积分从高到低进行排序;直接上级、主管部门可动态跟踪、统计员工的培训情况,有针对性的了解需求、组织培训;员工可动态的查看本人需培训的课程,本人的培训档案与积分情况,以便及时参加相关培训,能动态地查看计划与完成情况的对比。
5、系统的建设和推广解决的问题
5.1实现了局培训的全员覆盖 系统的使用实现了全局全员培训的完全覆盖。截止到2012年7月,系统已经稳定运行了了将近2年时间,审核并固化了全局698个岗位应知应会标准,为支持网络培训应用,开发了将近400门电子课件,并同步建设了基本涵盖所有岗位的配套题库数万道,节约培训成本,提高效率。
5.2实现了培训的智能化全过程管理 依据佛山供电局岗位应知应会标准,按岗位制订培训方案,自动生成员工的培训计划,并结合课程课件,推送到员工的学习任务中,实现员工学习过程的监控,培训积分的自动计算、学习档案的自动归档,实现培训项目的全过程管理,有效提高培训宏观管理能力,并可依据远近期目标,选择所需的培训知识和技能及评估绩效等;
5.3实现对员工岗位符合度评估 根据人员和岗位信息,计算个人积分,依据岗位应知应会标准,推算出人员岗位符合度。可按员工进行分类统计,查看详情后,可查看具体的员工已完成的课程与实际应学习的课程之间的对照关系,为员工绩效评价和人才选拔提供依据。
5.4实现网络培训的在线管理 实现从培训项目的建立到培训效果分析等一系列在线管理功能。可由系统生成学员报名、办班管理、学员学习情况监测与统计、培训效果评估、月度、季度、年度等报表,实现办班管理的网络化、数字化,提高各项数据查询的速度与准确性;
5.5实现培训的监督考核管理 可依据培训目标制订详尽、周密并可操作的培训,并可从培训、业务主管部门、直属上级等不同层次对培训目标的监督考核,保证严格按培训计划与要求将培训落到实处。
6、小结
国外先进企业早已有通过培训模型信息化来实现智能化培训的案例,国内一些较先进企业也已经逐步开展岗位胜任力模型及岗位知识库的建设工作,但大多由于电子化培训资源不足没有得到很好的推广。
佛山供电局基于岗位应知应会标准的电力智能化网络教育培训系统的建设以“智能化、实用化、标准化、集约化”为基本原则,以“创先”为指导思想,运用“大规模、低成本、高效益”的远程网络教育为主的培训方式,以岗位课程体系为指引,以课件教学为依托, 以培训管理机制为约束,以岗位符合度考核为手段的培训教育模式,强调以人为本、整合培训资源、优化培训流程、注重培训效果,使得员工的知识、技能、工作方法、工作态度以及工作价值观得到改善和提高,从而发挥出最大的潜能,提高个人和企业的业绩,推动企业和个人的不断进步,实现企业和个人的双重发展,使教育培训工作在服从企业主业发展过程中逐步发挥重要作用。
参考文献
[1]广东电网公司远程教育系统建设规范
[2]佛山供电局网络教育培训系统扩充需求说明书
[3]佛山供电局网络教育培训系统扩充建设实施方案
关键词:GJB5000A;软件研制能力成熟度模型;过程域;军用软件;配置管理;软件工程
0 引言
随着现代武器装备中计算机技术发展的日新月异,软件在其中的比重越来越大。各种军用产品中的很多重要功能不得不依靠软件设计来完成,但传统的过程管理模式已满足不了日益增长的软件研制要求。
为了评价软件研制单位是否具有相应的软件研制能力,总装备部制定了GJB5000A-2008《军用软件研制能力成熟度模型》,并交由新时代认证中心组织实施认证。通过贯彻GJB5000A的要求并不断改进的软件过程,各军工企业已经认识到过程改进后可以缩短软件开发周期、节省成本、提高软件可靠性等好处。
通过GJB5000A二级认证评价,是军用软件开发单位的基本要求和建立软件过程控制体系的第一步,也是提高软件工程化水平的基础。结合GJB5000A二级实施现状和评价中发现的各类问题,分析GJB5000A实施的关键点,对解开软件改进过程中的疑点和困惑具有重要的意义。
1 GIB5000A二级过程概述
1.1 GJB5000A软件研制能力等级
军用软件研制能力成熟度模型采用分级表示法,共分5个等级(见表1)。所有认证工作必须从2级(已管理级)开始,每一个成熟度等级都是下一个等级的必要基础,所以跳跃式实施认证是达不到预期和无意义的。
1.2 GJB5000A二级过程概述
GJB5000A二级是软件开发单位实施软件工程化的开始。它包含了7个过程域:配置管理(CM)、测量与分析(MA)、项目监控(PMC)、项目策划(PP)、过程和产品质量保证(PPQA)、需求管理(ReqM)和供方协议管理(SAM)。这7个方面是软件开发过程的控制关键点,由于软件研制过程参与人员多、部门多、人员技术水平参差不齐,这些特点增加了软件过程改进实施的难度。
表1 软件能力成熟度等级及特征
任何一个过程域实施不到位,都会影响到项目计划的执行和产品的交付。由于项目中涉及软件外包问题较少,因此不对供方协议管理(SAM)问题进行分析。下文主要分析GJB5000A过程中相关的6个过程域的关键点及问题。
2 配置管理(CM)
软件配置管理主要是控制软件技术状态,保证工作产品在整个软件生命周期中受控。软件配置管理活动主要包含配置标识、配置控制、配置审核、配置状态记实、软件发行和管理。其中在实施软件配置管理的过程中容易忽略下面几个关键问题。
没有明确配置项选择准则。为防止重要的软件配置项没有得到控制,同时避免浪费过多资源管理不重要的资料,应在过程文件中列出如何选择软件配置项,必要时应列出应控制的软件配置项清单。
没有建立软件配置管理的多级控制。对于大型软件开发单位,往往参与人员众多,单位结构复杂,只建立一个软件技术状态管理机构,是无法有效实施软件过程管理的。因此建立二级软件配置管理机构是可行的:项目级和组织级,这样可以提高组织对软件变化的反应和问题的处理能力。
没有明确软件配置审核的要求。软件配置审核包含功能配置审核、物理配置审核和配置管理审核。进行软件配置审核时,应分清这三中审核的界限和要求,才能有效地在不同时机发现软件配置管理的问题。
3 测量与分析(MA)
进行软件测量与分析主要是为改进软件过程,便于采取纠正措施达到组织的目标。通过测量活动,组织可以找到如何提高软件质量、节约成本、提高用户满意度等方法。其中在实施软件测量与分析的过程中容易忽略下面几个关键问题。
没有分析过程和活动的评价准则。对于选择的测量项进行合适的分析,有助于检查数据的必要性和可靠性。只有通过建立评价准则,才能够从数据中找到问题的所在。
不能清晰反映测量项和测量目标的关系。如果测量项和测量目标的关系不明确,就无法正确理解测量项和进行优先级排序,所以要细化项目中测量项和测量目标的映射关系。
4 项目监控(PMC)
软件项目监控主要是在项目未按计划执行并发生显著偏离时,能及时采取纠正措施。通过计划监督项目中的参数、承诺、项目风险、数据管理、利益相关方和评审等方面,在发生显著偏离计划时能及时分析和解决问题。其中在实施软件项目监控的过程中容易忽略下面几个关键问题。
一些重要评审和会议缺少利益相关方的参与。往往在一些里程碑会议上,会议组织者未按计划要求或由于种种原因没有邀请有关人员参与评审。这样不利于问题的解决和沟通,为后续工作的开展埋下了隐患。
缺少里程碑的评审准则。在评审过程中,项目应明确制定里程碑评审规程,并对参与人员、评审内容等方面进行约束,这也是项目实现承诺、提高用户满意度的有效手段。
5 项目策划(PP)
软件项目策划是进行软件过程控制的前提,保证你能按正确的方法去开发软件。软件策划活动是通过历史数据进行估计,通过估计编制计划,依据计划开展各种活动。其中在实施软件项目策划的过程中容易忽略下面几个关键问题。
没有依据工作量导出工作进度。项目软件负责人在安排任务进度时如何合理安排资源既是工作的重点,也是难点。利用估计工作量来划分阶段,便于区分各种活动之间的关系,也是唯一估计进度的手段。
制定项目培训计划时没有考虑项目组成员的实际技能和能力。按照传统管理方式,项目在开始制定管理计划时,往往容易忽略人员的各种技能的培训,简单认为能开发软件就行。事实上,进行项目管理软件开发人员必须懂得在软件开发过程中所涉及过程域的要求和组织制定的过程文件。
6 过程和产品质量保证(PPQA)
过程和产品质量保证是对项目计划进行跟踪与监控,说明具体的方法,为软件项目的实际进展提供足够的可见度。软件质量保证活动往往已得到组织的重视和认可,但在开展评价活动时必须保持客观性和有效性。其中在实施软件过程和产品质量保证的过程中容易忽略下面几个关键问题。
没有明确如何处理不符合项的准则或规程。对于不修改不符合项的关闭问题,不是交由当事人,也不是交由QA人员,而是由高层经理决定的。在实际进行项目管理过程中,如果不明确关闭的准则并考虑到特殊问题的处理,容易造成问题记录不正确或出现遗留问题。
在项目早期工作中没有及时进行审核。如果软件质量保证人员等到项目计划评审后,才开始审核,就会出现审核不及时、工作不到位的情况。所以在制定过程文件时应增加早期策划质量审核的要求,将工作做细避免遗漏。
7 需求管理(ReqM)
需求管理主要是管理项目的产品和产品部件的需求,并标识这些需求与项目的计划和工作产品之间的不一致性。需求管理对软件过程及工作产品影响很大,因为需求总是在变化而且如何获得需求的承诺是放在软件开发面前的难题。其中在实施软件需求管理的过程中容易忽略下面几个关键问题。
需求跟踪矩阵不完整,特别是非功能性需求的跟踪不到位。对需求进行逆向跟踪是很有必要的,对于需求的双向跟踪,即要有水平和垂直的跟踪,才能够实现承诺,并有效地保障了软件开发的过程不偏离。
没有评估需求变更对原承诺的影响。任何需求变更不止是对开发进度、进度、人员有影响,对现有约定的影响也需要进行分析,有助于管理好需求,更好地做出判断是否需要采用更好的控制方法。
8 结论
实现GJB5000A二级软件过程目标和要求是一项系统工作。它需要发动组织各个层面上员工的主动性和创造性,才能够克服各种管理上和技术上的难点和关键问题。任何组织进行过程改进不考虑自身的现状,去照搬某个单位的解决办法是不切实际的,因此需要结合软件工程实践的最佳经验,才能选择实际的改进方法和措施。
在推进软件工程化工作中,选择软件研制能力成熟度模型已成为众多航空企业提升软件管理和研制能力的新要求。越来越多的软件专业人才将会致力于软件过程的转变,通过及时总结技术经验避免走不必要的弯路,促进航空软件技术水平的提高。
参考文献:
[1] GJB5000A-2008军用软件研制能力成熟度模型.
关键词:技能型软件人才;教学理念;职业技能;教学方法
软件蓝领一词来源于印度,泛指技能型软件专门人才。目前全球软件与服务外包市场规模依然巨大,并以膨胀方式持续增长,外包市场需要大量技能型软件专门人才。上世纪末,“千年虫”解决方案成就了印度,使之成为软件与服务外包产业强国,令世人瞩目。在印度的软件企业中,软件开发如同传统产业的流水线作业,每个基础编程人员按照规定的工序加工某个标准件,从而实现工业化生产,正如印度卡纳塔卡邦首席行政长官Krishna在解读为什么班加罗尔会成为印度乃至亚洲的硅谷时回答,除了教育,还是教育。
目前,在我国软件企业中,人才缺乏是制约软件企业发展的主要瓶颈之一。我国各级各类教育机构依然存在着教学内容与市场实际需求脱节,面临最大的教学问题是企业求贤若渴、却英才难觅,其根源在于传统的“本科压缩型”人才培养模式问题。笔者针对技能型软件人才培养过程中实践教学环节的教学问题,从教学理念、教学内容和教学方法3个方面进行实践和总结,其目的是为了探索软件工程专业本科生教育的人才培养模式。
1 若干教学问题
2001年12月教育部和国家计委联合发出通知,批准清华大学等35所高校试办示范性软件学院,旨在通过软件学院的建立,实现软件人才的跨越式发展。在示范性软件学院计划中,明确提出面向软件产业培养高素质的工程型软件实用人才的专业定位。2003年教育部批准建立了36个示范性软件职业技术学院。2004年IEEE-CS组织了软件工程知识体系指南SWEBOK2004,在指南中划分了软件需求、软件设计、软件构造、软件测试、软件维护、软件配置管理、软件工程管理、软件工程过程、软件工程工具和方法、软件质量等lO个关键知识域,规定了每个知识域中的具体教学内容,如“软件需求”知识域有需求基础、需求过程、需求获取、需求分析、需求规格说明、需求确认、需求实践等教学主题。
回顾多年的软件工程专业发展,我国各高校中已有近200多所院校开设了软件工程专业,各级各类培训机构相继出现。为了支持软件与服务外包人才的培养,自2006年起,商务部开始实施服务外包“千百十工程”人才培训计划,2007年教育部在“质量工程”中加大了对信息类专业的支持力度,软件工程专业列入第2类特色专业建设项目,2011年国务院学位委员会正式公布了修订的学科目录,把软件工程新增为一级学科。这充分说明软件工程专业和学科在国家战略层面上已经提升到一个新的高度。
政府层面安排的各级各类专项培训资金,主要用于支持大学生增加软件与服务外包专业知识和技能,鼓励外包企业新增大学生就业岗位的各类人才培训项目,重点培训大学应届毕业生和尚未就业的大学毕业生,以及服务外包企业新入职员工。培训内容包括软件与服务外包企业人才定制培训、从业人员资质培训、国际认证培训、行业标准及相关知识产权培训、大学生实习项目及勤工俭学培训、企业新人职人员岗前业务技能培训等。政府层面出台的政策目标,主要是为了建立软件与服务外包人才的培养培训体系,调整专业结构以适应软件产业需要,加强高校学生实习实训工作,深化高校与软件与服务外包企业的合作等。
综上所述,市场对人才需求仍有较大缺口,适应产业市场不断发展的软件工程专业教育任重道远。培养技能型软件人才已经到了应该采用全方位、多渠道、企业广泛参与的多种培养模式,才能从根本上解决目前企业人才短缺、现有人才结构不合理等问题。高校的根本任务是人才培养,要实现人才培养与企业需求之间的无缝衔接,本文主要讨论3方面教学问题:
(1)实践教学理念。在教师组织教学过程中,其教学理念必须符合产业标准和项目规范,软件项目的成功取决于项目团队,项目团队必须遵循软件工程规范,规范是指项目规程和实施项目的相关技术标准,与之相关的专业知识只求其核心的基础知识,不求知识全面。
(2)职业技能结构。通常职业能力贯穿整个职业生涯,其职业技能可以划分为,特定技能、通用技能、核心技能3个层次,其中的核心技能具有普遍适用性,在职业生涯中受益终生,此外个人的职业素养也是一种职业能力,主要有交流能力、沟通和表达能力、文档的规范写作、分工合作、团队协作、敬业奉献等。
(3)实践教学方法。在项目实施过程中,必须遵循软件工程原则,根据“项目经理系统分析员软件工程师具体程序员”的人才结构组建项目团队,按照项目管理流程和技术规范实施项目,其教学内容必须紧跟产业技术、及时更新教材内容,注重实用性和针对性,项目实训从最简单的项目做起,在强调掌握具体专业技能的同时,要求学生善于交流、勤于沟通,逐步提高职业能力。
2 实践教学理念
印度软件企业快速进步的重要原因之一就是能够按照软件产业发展的需要,通过多层次、多渠道方式培养人才,形成多层次的人才结构。分析软件产业特点,任何大型软件项目的实施,团队是项目成功实施的重要基础,如图1所示;把大项目分解成无数小模块任务,要求按照具体的技术规范和标准施工,遵守项目流程,如图2所示;不同层次上的人员有着具体而明确的分工,在合作或协同的过程中,需要具备相应的沟通技巧和职业素养,团队角色职责如表1所示。
在项目实施的过程框架中,工作指南规定了要完成的任务步骤、方法、进度等,各“角色”执行任务时必须参照工作指南,工作模板是指“角色”按照计划进度完成具体任务以及必须完成的各种文档结构,QC根据指南,逐一核对任务列表,通过检查表监督各角色是否按进度执行。在项目实施过程中,项目团队为了一个共同的目标(某个项目)一起学习和工作,团队必须具有良好的沟通机制。例如项目专用的公告牌(公告、通知、状态报告),项目邮件列表;项目网站(文档、团队成员主页、相关的技术论文和笔记以及自学培训材料),项目会议(关于简报和问题解决方案),关于团队成员工作的最佳实践会议和讨论,面对面交谈等。
在教与学的过程中,教师必须思考如何让学生尽可能块地掌握实际动手开发能力,尽快与产业技能接轨,要求学生给自己制造一个理由来组织学习型工作团队,通过发放团队工作规范和模板,签订团队工作责任书、内部承诺等方式来提高团队学习效率。通过教学实践,明确人才培养目标,总结并提出团队、规范、交流的教学理念,团队是项目基础,规范是项目规程和技术标准,交流是团队成员的基本素养,其教学理念符合产业需求和企业实际。
3 职业技能结构
全球软件产业市场呈现两大特点,国际化分工合作步伐加快、产业化技术更新加速。前者使得软件服务外包成为全球性软件市场中的追逐热点,涌现了象印度、爱尔兰、以色列等一些软件外包强国,后者说明软件产业中的技术从业人员必须时刻保持适应产业发展的技术能力和技能,尤其是直接面对软件开发环节中的技能型软件人才。
印度软件人才培养模式的独到之处就在于软件企业的人才结构合理,其软件教育的核心理念是紧跟国际软件领衔企业的技术发展,快速更新教材,注重实用性和针对性,使毕业生能迅速适应企业的需要,可承担任何大型软件项目中具体某个环节的规范且熟练工作。对于软件产业来说,教育部门提供大量技能型软件人才是软件工业化生产的基础,同时这种专门化知识结构的人才模式也将推进软件流水线生产的标准化。因此,必须分析研究技能型软件人才需要什么样的知识、能力和素质结构,应该寻找培养这种能力结构的方式方法。
职业能力包括贯穿技术人员整个职业生涯的就业和创业能力、工作能力、职业转换能力。现行教育部门或软件企业中的技能型软件人才的职业能力之内涵必须得以重新构造;已经不仅仅是动手能力、操作能力和理论知识的代名词,职业态度、敬业精神、团队合作交流和职业行为评价等因素都应纳入到职业能力的培养中去。以职业活动为导向,以职业能力为核心的原则正在改变学科导向的职业教育培养体系,产业现场的实际需要和认同正在主导专业教育的内容和形式。接受任务、解决问题、执行规范、完成任务,这是最基本的标准。例如对于低档软件人员不懂操作系统、计算机原理、关系数据库原理等常识,并不妨碍他编写代码、使用工具开发用户层界面等专门工作。所谓技能训练,就是掌握最基本、最必要的专业基础知识的前提下,在较浅的程度内掌握几种计算机程序设计语言,然后学习目前流行且高效率的软件开发工具(如果企业需要,还可以学习一些更加专用的软件开发工具),学习实用的软件编程、数据管理、硬件维护等技术。
在教学实践中,我们提出“围绕编程规范,研究技能知识结构”的课程建设思想,把技能型软件人才的职业能力分为特定技能、通用技能、核心技能3个层次,其中核心技能是范围最窄、通用性最强的技能,体现了职业活动中的最基本技能,具有普遍适用性,在职业生涯中受益终生。特定技能可以理解为按照国家职业分类来划分范围,例如各种职业资格证书的认证考核。通用技能通常比特定技能的口径要宽,可以理解为在一组特征和属性相同或者相近的职业群中体现出来的共性技能和知识要求。我们提出软件工程专业的“职业技能”边界,按照软件阶段划分,制定不同阶段所要求的职业技能,例如编码阶段,要求有规范代码书写、单元测试能力,专业教师(或项目经理)要善于观察、发掘、培养新人,根据学生的各自特点,固化训练或交叉培养设计、编码、测试、文档书写或管理能力。按照职业成长过程区分,哪些人是技术型,哪些是项目管理型。哪些技能操作型人才。高校不是企业,企业也不该承担高校职能;在校企合作过程中,围绕职能能力训练,企业和高校之间有职责分工的边界,例如外包委托、实习见习活动等等。在职业素养和能力方面,着重在交流表达、规范写作、分工合作、团队协作、敬业奉献等方面对学生加以训练。我们提出的软件工程专业的“职业素养”边界,坚持任何人都有“用”的原则,关键“用”到实处。刁钻苛刻的人“用”到测试上去,勤奋好胜的人“用”到技术攻关上,豁达人缘好的人“用”到项目协调上去,条理规矩的人“用”到设计上去。
在软件工程专业的人才培养方案中,专业知识只求核心基础知识,不求全面知识,知识教学内容必须与技术发展同步更新。软件工程专业“职业技能”方面的教材较少,这类课程建设有一定难度,需要大量的人力、物力投入。一方面,通过校企合作、校际协作来组织开发此类课程,另一方面,借鉴真实项目的仿真实训来开发此类课程,此类项目的文档比较规范齐全,可实施规范训练。在校企合作的真实项目软件开发过程中,应该根据学生年级高低,使课程教学和训练仅局限于某个开发阶段,例如编码阶段,着重让学生看懂详细设计文档、规范编码书写、模块单元测试。另外,在课程教学和项目训练过程中,必须强调学生的说(交流)、写、做,特别是说和写。“说”可以通过组织定期或不定期、正式或非正式的会议讨论,“写”可以写个人小结或技术分析等。这些内容和要求都应该作为课程建设的必须内容,并用恰当规范的格式或流程编写起来。
4 实训教学方法
根据培养目标和技能要求,通过校企合作形式,开发出一系列实训项目,构建了以实训项目为主题的实训环境,明确提出以项目实训为主的教学方式。通过教学实践,提出以“职业技能为根本、工作体验为主题、知识点恰到好处”的教学方法,如图3所示。
以实训项目为主题的工作模式,是仿照软件企业规范的运作模式,由教师(或项目经理)演示需求分析、总体设计文档,安排学生编写详细需求、详细设计文档,将学生分成项目小组,分片包干,个人承包,每人都有机会承担项目的某个具体内容(如编制模块,编写测试计划和测试报告等)。旨在提高学生的规范化开发能力和团队分工协作,强化程序设计基础,使学生掌握软件开发所必需的知识与技能,熟练运用开发环境和工具。
以项目实训为主题的实训模式,通过实训平台让学生依照软件开发的规范流程进行训练,做到、学到、用到,加深理论、技术和实践的结合,通过平台让学生对自己的工作做出总结,阐明个人成果的理论依据、技术规范及采用的技术手段等。在项目实施过程中,必须遵循软件工程原则,必须按照项目管理流程和技术规范实施项目,注重实用性和针对性,项目实训从最简单的项目做起,在掌握专业技能的同时,注重学生实践操作能力和分工协作能力的培养,锻炼交接工作能力,培养责任心与完成任务的决心。
关键词 软件工程教育 角色体验 软件工程知识体系 工程文档
1 引言
软件产业是互联网和新一代信息技术发展的重要基础,软件工程作为一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科,始终是软件产业发展的根基。对于计算机专业人才的培养,软件工程在计算机高等教学中占有重要地位。但是无论从学生、教师还是业界的反馈都可以看出,软件工程教学的实际效果远未达到我们的期望。系统完整的软件工程知识体系建立仍然面临众多挑战,理论与实践结合的创新人才依然难寻,完整严谨和有效的软件工程架构风格依然遥远。作为高校教师,我们必须从软件工程的教、学、研进行深入的研究,探索一条行之有效的教学培养方法。
软件工程是“将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,其重点在于软件的分析与评价、规格说明、设计和演化,同时还涉及管理、质量、创新、标准、个人技能、团队协作和专业实践等”。①相比于其他的计算机专业课程,软件工程的教学有很大的不同。软件工程中重要的技术和开发原理来源于应用和实际商业软件开发,之后这些核心技术被提炼和整合形成原则和理论基础而引入课堂,教授给学生。通过软件工程课程的学习,学生需要了解和掌握软件工程的理论、技术和方法,具备作为软件工程师所需的专业能力。优秀的软件工程研究者David Parnas将软件工程计划分成三个阶段执行:(1)首先,详细说明软件工程师可能要执行的一些任务;(2)定义软件工程师需要的知识体;(3)将其实施作为一个培训计划。②③由此可见,软件工程是一门综合性和实践性很强的学科,传统的教学模式和教学方法在软件工程教学中存在很大不足,人为地强调实践或者理论基础无法有效地培养学生的综合技能和水平,从而直接影响了课程的教育质量和教学效果。
软件工程课程必须面向解决实际问题,即如何成功地开发可靠的、可用的、可维护的软件系统,满足用户的要求。这包含了需求分析、规划说明、设计、构建、测试、操作和维护等软件生命周期的各个阶段。目前,软件工程教学主要包含两部分:课堂教学和实践教学。以传统的教师为导向的教学方式为主,实践教学为辅。教师在课堂上讲授软件工程方法、原则、技术等知识;实践教学主要是采用实验课的方式,由学生设计完成一个项目。根据多年教学的经验和我们调查反馈的结果,很多学生在本课程学习时感到茫然和无所适从,理论的东西感觉抽象难以理解,缺乏学习热情和兴趣。针对软件工程课程的特点,我们认真分析调研了课程教学存在的问题,总结分析导致课程教学效果不理想的主要原因如下:
1.1 课程设置安排不尽合理
软件工程是一门涉及内容较多的综合性学科,所教授的原理、方法较为抽象。软件工程中核心的技术和开发原理均来源于实际商业软件开发,经提炼形成原理和方法而引人课堂。目前,大部分高校将软件工程课程设置在大三,对于刚刚完成两年大学公共基础课和专业基础课教育的学生来讲,软件开发的基础理论和概念仍然匮乏,与软件工程相关的前期课程前后脱节。尤其在计算机科学专业课程设置中,只有一学期的必修的软件工程课,在这么有限的时间内学生很难掌握软件工程的理论与实践的精髓,从而造成大多数学生认为是在学习枯燥无用的理论。
1.2 理论和实践的脱节
软件工程是一门实践性很强的课程。相比于其他的计算机学科的课程,软件工程课程核心和精髓不可能从教师的授课和课本的理论学习而获得,靠“死读书,读死书”是无法完成本课程的学习的,实践和理解相结合的融会贯通非常重要。在实际软件开发中真刀真枪的实现,在练习中理解基本原理,在真正练的过程中提升理论的水平是软件工程课程教学和实践的有效方法。
1.3 重代码,轻文档
在软件工程课程的教学中,大部分的学生甚至部分教师都会自然地认为实现高效整齐的代码是课程学习中最重要的工作,对于文档工作未有足够的重视。在实际软件开发的工程实践中,一般认为代码的工作量只占到整个工程工作量的30%左右,完整、有效的各种文档,包括设计文档、算法文档、说明文档、维护文档等是整个软件工程核心。因而在软件工程的教学中,我们必须转变观念,突出工程文档的重要性,将各种统一、标准、高效和实用的文档设计和撰写方案融汇到课程的教学中,并且与软件工程理论和代码编写结合,形成完整的的理论、算法、代码和文档并重的教学新方法。
1.4 缺乏软件工程知识体系的系统概念
商用和实际应用软件开发的工作是系统的团队工作模式,单打独斗无法完成商业和实用软件开发。然而,现在软件工程的教学中,教师和学生注重的是单个原理和系统的学习,从而造成了学生软件编程风格五花八门,程序可读性差,软件工程的完整知识体系混乱。团队工作的模式要求程序员在整个工程中需要承担不同的角色,不同的角色承担的任务不同,又同时需要与其他的角色互相配合沟通,从而完成整个工程的开发。这一点,在目前软件工程的教学中非常缺乏,为此我们需要建立系统的概念,将角色体验的模式引入软件工程课程教学中。
在参考文献④中,Nurkkala和Brandle对软件工程教学进行了分析,并对现行软件工程教学方法中存在的问题进行了总结:(1)没有产品——学生在学习中仅仅是创建项目,而并非真正地开发商业级别的产品;(2)持续时间短——通常软件工程课程只安排一或两个学期,课程受限于时间过短很难真正理解软件工程的方法、原理等在实际软件工程项目中如何应用,并完成开发真正的产品;(3)高流动性——对于一个项目来讲,每个学期都有新学生加入意味着人才库始终只有很少的人,新加入的学生很难基于之前的经验开发其自身的技能;(4)低复杂性——由于学习必需时间以及学生本身技能的限制,只能开发简单的应用;(5)无法维护——作为持续时间过短结果,学生没法经历软件开发非常重要的一个方面,即系统维护阶段;(6)没有客户——学习过程中,大多数软件工程项目都没有真正的与客户进行接触,而实际的开发中必须要了解客户的需求,根据客户的需求进行软件开发。
综合上述分析,我们深入调研了现行软件工程课程教学的困难和挑战,分析了国内外报道的先进的软件工程课程教学的新方法,结合我们几年来课堂教学的经验大胆改革课程体系框架和教学内容,积极探索案例教学和实践教学模式,提出了角色体验和工程文档应用于软件工程教学的新方法和新思路。我们强调建立理论与实践相结合的软件工程知识体系,采用任务驱动的角色体验方法,加强学生协同分工和集成创新能力;突出强调工程文档在软件工程应用开发生命周期的重要作用,建立软件工程中规范化的任务、知识体系和实施培训的流程。
本文第二部分将介绍目前报道的国内外软件工程教学的有效方法,第三部分介绍我们探索的引入角色体验和工程文档的软件工程教学新思路,第四部分进行总结。
2 国内外现行有效软件工程教学方法
为了解决以上提到的软件工程教学中存在的不足,目前,国内外已经提出了多种教学方法来改进软件工程课程教学。范锐⑤等人提出了基于“做中学”的教学理念的“项目驱动、案例教学”的软件工程教学模式,其教学理念认为软件工程教学不能单纯依靠理论讲解,强调实践对于软件工程教学的重要性,在学生的实践过程中,采用项目团队方式进行项目开发,学生分组分工,明确每个人所承担的职责,以此培养团队意识。“项目驱动”的教学方式,将整个软件工程教学过程包含于一个完整的项目之中,学生通过完成项目学习和掌握软件工程的包含的知识,实现对知识的掌握和应用。
陈建国⑥等人针对传统以教师为主的软件工程教学方法提出了改进,在传统的软件工程教学中引入了集体工作、实验、案例学习、合作教育相结合的软件工程教学方法,详细地论述了这四部分对软件工程教学作用以及对学生掌握软件工程方法的帮助。采用了合作教育的方式,学校和企业合作为学生提供真正的商业软件开发的机会,增强学生理论与实际的联系,使得软件工程教学中的项目管理、软件过程、质量保证等不再那么抽象难于理解。
近年,国外对于软件工程教学方法中存在的不足提出了不少有效学习方法,其中相当一部分方法着重强调了协同工作⑦⑧⑨在软件工程教学中的重要作用,在教学中分成多个小组,使学生加入其中,这些小组的组织结构与组内分工与实际的项目开发小组完全相同,这样学生在学习的过程中完全按照实际的工程开发的需要进行学习,使得学生学习中能充分掌握软件工程的方法、原则等的实际应用。此外,还提出了一些其他软件工程教学的有效教学方法,如使用Liu⑩形式化方法教学;Deveaux豘等提出专注于软件开发过程中的文档,Deveaux认为在教学中很难获得实际的足够大具有开发意义的项目,而文档的学习却可以使学生充分了解软件工程项目的基本原则,方法等内容;Li豙则成功地将统一过程方法应用于实际的教学当中;Pandey豛在教学中使用竞争的方法教授学生开发原则;更有一些在软件工程的教学中采用游戏的方法,豜使学生充当游戏中项目小组的项目经理的角色来学习软件工程。Scott豝等人在本科生的软件工程教育中采用了开源工具,并将之整合到软件工程课程中,通过学生的反馈对比,表明此种方法获得了很好的效果。
3 角色体验与工程文档结合的软件工程教学方法
3.1 国内软件工程教学现状
在实际的课程教学中,运用了案例开发,与企业合作等方法,并结合国内外其他一些有效的软件工程教学法后,我们发现学生在有限的时间内所能理解的软件工程知识相当有限。在对计算机科学专业的学生进行调查时,我们发现大约80%学生对大三进行的软件工程课程没什么兴趣。他们认为那只是枯燥的理论课学习和繁琐的文档编写。在前两年专业基础课学习中,他们几乎没有接触到文档编写,大部分项目的完成都是在草稿纸上设计然后直接进入程序编写阶段。他们认为这样可以一步到位,省去很多繁琐的细节。当然,正如我们前面提到,在本科教学中,学生在课堂上能实现的项目只能是中小型项目,复杂性低。学生无法感受到缺乏软件工程流程中首要的基础工作而可能造成的困难和严重的后果,所以学生们大多认为写各种各样的文档是在浪费时间。而对于教师来说,到大三软件工程课时,在没有大型项目做支持的情况下,再教导学生编写文档的重要性,似乎没有说服力,也很难扭转学生已经形成的直接编程的习惯。所以在计算机学科的学习中,我们大胆改革教育的方式并修订了阶段性的培养目标,形成一种潜移默化提升学生综合能力和水平的模式。在本科生进入大专院校就读后,计算机专业课程,尤其是编程课程的项目设计上需尽早地让学生接触到软件工程知识的基本概念和方法。从大一专业课开始,学生们就需要开始完成简单的项目。如果教师们可以从一开始就让他们了解到软件工程的生命周期,接触到软件工程流程中的各个步骤,从简单到复杂地进行实践,到大三的软件工程课时他们就会对这些知识已经有所了解,并不会感觉到枯燥,因为在前两年的学习中他们一直都使用这些方法,已经养成了良好的软件工程的习惯。
3.2 基于文档撰写的潜移默化式教学法
我们经常只会在软件开发或维护过程出现问题时才意识到那些被忽略的文档的重要性。在我们的调查中,软件工程师们大约有60%以上都认为自己的文档的编写能力只是一般,有些甚至不会撰写文档(见表1)。很多工程师在学校并没有受到专业的训练,只有到工作中才开始慢慢学习与实践,但是经常由于时间有限,项目截止日期逼近而只好疏于对文档的编写或是只能牺牲其质量。如果我们在本科教学中尽早地让学生接触到各类文档,在撰写项目文档的过程中,学生不但能学习到软件工程的流程,也能把撰写文档的技能锻炼熟练,更重要的是他们会渐渐地把文档的撰写与管理当成一种习惯,当成一种必须。这样,无论是大型项目还是小规模项目,他们都会用一定的软件工程流程来完成。一开始的小项目中,也许他们并不能理解为什么要撰写那么多文档,但当他们到高年级创建相对复杂的项目时就能体会到文档的好处。他们就能领会,计算机软件并不只是程序,还应该有一整套文档资料。这些资料都是在开发过程中产生出来的,对软件管理人员,开发人员,维护人员,测试人员,客户,包括程序员自己都是必不可少的。那么如何开始这种潜移默化式教学法呢?教师们要对所有四年的专业课程进行分析,总结出需要参加这个软件工程教学计划课程和项目。加入到这个计划里的课程教师要设计符合这个计划的项目,并将文档撰写作为对学生必须的要求。在整个计划中,建议提供一套完整统一的各类文档的模板以供学生们使用,包括软件需求说明书,软件设计说明书,软件测试说明书,项目开发计划书等。这些模板要一致,学生在所有课程中要使用一致的模板,由简化版到完整版,低年级的学生先使用简化版的模板,让他们渐渐地学习撰写文档。比如一年级的项目可以只要求写软件需求说明书。在模板的设计中,最好是和企业界运用的文档保持一致,然后进行简化,给学生提供一种他们可以胜任的文档模板,然后逐年增加内容,最终可以与业界使用的文档保持一致。这个计划的实施需要得到计划内课程教师们的认同,通力合作,把学生四年的学习列入计划,并随时进行监督。经过四年的训练,学生的写作能力一定能得到大幅度提高,对软件工程的认识也会非常深入,毕业后能够胜任商业软件和应用软件的开发要求。
3.3 基于角色体验的软件工程课程教学法
上面提到的文档式教学法是为了训练学生创建各类软件工程文档的能力。在课堂项目中,由于时间有限,一个学生往往不可能完成整套文档的撰写。在低年级阶段,在小型或中型项目中,学生学习了软件需求和软件设计文档,学生应该可以单独完成。但当项目变得相对复杂,大多课程项目都是以团队合作的形式来完成。教师通常知道哪些同学组成一个团队,但并不清楚或关心这些同学在项目组里担任的角色。这样,在四年的学习中,有些同学在项目组里只保持着一种角色,如只担任了程序员或测试员,并没有机会对各个相应的角色进行体验,导致他们知识的不全面。与文档教学法相结合,我们提出一种叫做角色体验的教学法,和文档式教学法同步进行,一同潜移默化地将软件工程知识注入学生脑海。所有加入计划的课程要统一安排项目组成员,目的是让每个学生在这些课程项目完成的过程中能体验所有的软件工程角色,并完成这一角色相对应的文档。这样不但训练了每个学生各种文档的写法,让学生了解了软件工程生命周期整个团队要进行的工作,而且锻炼了学生互相合作的团队精神,避免学生在团队中只依赖于几个学习相对比较优秀的学生来完成项目。假设我们要训练学生四个角色:项目经理,系统分析设计师,程序工程师,和测试工程师,我们需要至少四门课程加入此计划。如图-1所示,四个学生分为一个项目组,经过这四门课程项目的训练,他们可以完成这四个角色的训练,学会四种文档的撰写,体验各个角色在软件工程流程中的职责。如果要增加角色和文档种类的话,可以适当调整学生团队组员数目与职责。经过这样的训练,学生对团队合作一定会有更加深入的认识,也能提高队员的沟通能力,以改善毕业生在企业界缺乏沟通能力的现状。
经过四年的文档与角色的潜移默化式训练,一定能大幅提高学生的软件工程能力。相比单纯的一到两门软件工程课程,学生对软件工程的理解要深入得多,实践能力也会大幅度提高。由于计算机科学专业课程设置并不像软件工程专业对软件工程的教学那么有针对性而且课时较少,所以这种方法尤其适合计算机专业的教学。