时间:2022-11-17 12:13:59
开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇软件开发项目总结,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。
关键词:软件开发;风险分析;风险控制
中图分类号:TP311.5 文献标识码:A 文章编号:1674-7712 (2014) 04-0000-02
随着社会需求的不断增加,国家信息化得到逐步的发展,软件技术作为基础载体被应用到社会活动中,软件的开发项目也越来越受到人们的关注,但由于软件自身特点的限制,在软件开发的过程中容易出现各种各样的问题,因此,应在理性分析出软件开发项目风险要素的同时,及时针对风险采取相应措施进行规避并使其得到有效控制。
一、软件开发过程中的风险要素
风险要素分析作为软件能否开发成功的关键,需要在软件开发前进行确认,并将其归纳进整个开发过程的计划考量中,使其成为软件开发项目的一部分。软件开发的风险要素只要分为:
(一)软件开发的内容及质量风险
软件多是应需而生,社会的需要决定了软件的开发内容,而软件开发是一项长期而复杂的工程,与普通的工程项目相比具有很多潜在的风险,这些风险具有很大的危害性,需要开发人员及时对其定性并分析,使软件项目所受影响和损失降到最低。开发内容作为软件开发项目的基础,是整个开发过程的导向,始终贯穿于软件开发项目中。要想取得开发项目的成功就必须具备一个理性的开发内容及范围,如果在开发前不能将开发项目的内容及范围加以明确,必然会导致开发项目的风险甚至失败。
为了满足社会的进步和发展,软件开发也成为人们工作、生活的重中之重。软件开发项目的成功,不仅要具有明确的开发内容和范围,还要避免开发项目中出现质量问题。相应组织人员应制定质量技术衡量标准,使软件开发具有一定的规范性和可行性,否则,软件出现质量风险就可能导致软件开发项目达不到预定目标或者失败。
(二)软件开发的人员及组织风险
软件开发的过程由诸多因素组成,例如参与人员、组织团队、外界环境等,这就决定了开发过程的不确定性,工程中的控制与管理也就具有一定的难度。软件开发人员作为软件开发项目的主体,期间的人员变动或者人员的技术不达标,都可能使软件开发过程产生风险。
而组织风险是指,在软件开发项目组内部对于开发项目的内容或标准存在分歧,这样就容易因为计划的临时变动而带来软件开发的风险。组织的工作目的就是在决策者的引导下,通过对风险因素的分析将软件开发项目的风险降到最低程度,而工作的重点则是工程的进度、质量和资金,因此,组织风险的出现与否决定着软件开发项目的成败。
(三)软件开发的技术及政策风险
软件开发技术具有不确定性,在许多方面如设计、实施、验收和维护上都存在一些未知的因素,任何技术方案的变动都会引起软件开发的风险。技术主要表现在语言、环境及硬件层面,技术不过关会引起整个软件开发系统的变化,从而引起风险事件的发生。
同时,国家政策具有阶段性,它的制定来源于市场经济的变动,随着社会的不断发展,国家的相关政策也会随之调整,这些都可能成为软件开发中的风险,要阻止这类风险的产生是不可能的,想要赢得与政策风险的博弈,就要对当前的经济发展趋势及软件开发项目的可行性进行科学的比对,平衡在政策与风险之间的控制,这样不仅有利于项目的顺利开展,也大大提高了软件开发项目的成功率。
二、软件开发风险的控制途径
在软件开发的项目中,有些风险是可以根据已有的经验进行防范和控制,属于可预知类风险,有些风险则不以人的意志为转移属于不可预知类风险。风险根据不同的项目情况类别也不尽相同,想要有效的将风险控制住,就要在确定风险类别的基础上进行分析,采取科学有效的方法加以防范。
(一)通过风险监控防范软件开发的内容及质量风险
在软件开发项目中,开发的内容及质量风险属于可预知风险,而风险监控作为对软件开发风险控制的基础,对开发内容及质量风险具有一定的防范性。风险监控,是指对已潜在的风险进行监控并针对不同情况制定相应的措施进行解决,并对解决情况及进度加以实时防范,以防止风险的发生。
风险监控要从遏制风险的源头开始做起,软件开发的内容作为软件开发的基础是风险监控的首要任务,要规避内容风险,就要在软件开发项目开始前对开发的具体内容及范围进行明确定位并取得相关管理团队的一致通过,防止日后因软件开发内容的变动而产生风险,否则,根基不稳,就会导致软件开发进度的延误,前期所做的一切工作便会付诸流水,浪费人力物力。
质量问题,是软件开发项目的重中之重,只有质量过关软件才能造福于社会,反之一切都是空谈,要控制质量上的风险,就要在团队中明确质量技术标准并制定相关的技术文件,将开发过程规范化,防止质量问题的产生,尽量减少软件开发项目中质量风险的出现。质量,是项目工程的灵魂,只有把握住质量大关,产品才具有合格性。因此,要将风险监控的理念贯穿于整个软件开发的质量问题中,防范由于未达到相关技术标准而出现的质量风险。
(二)通过风险调控规避软件开发中的人员及组织风险
风险调控是指在软件开发项目的过程中,在已实施风险监控的基础上通过对软件开发方案进行探讨得出相关可行性并在开发过程中加以控制。在这个过程中,管理者应积极制定相关的可接受风险标准,对超出合理范围的风险及时予以调控,并不断从实践中总结经验形成相关风险数据库,为今后的软件开发项目提供参考资料。
在软件开发项目中,项目组相关人员的变动或者人员的技术不到位都属于可调控类风险,要想规避这类风险,就要在相关项目进行前加强对项目组人员的挑选,在给予员工物质条件的基础上多对员工的精神状态进行了解,避免出现项目进行中的人员离、换职现象。而人员的技术水平则需要相关管理者在招募时要对员工技术进行相应的考核,并且在挑选到合适的人员后,对人员进行系统而全面的业务培训,防止出现因人员对于业务不理解而产生的风险。
组织风险,一般是指在软件开发过程中,高层领导者或者组内人员对当前实施方案意见出现分歧而导致的风险,具有可调控性。俗话说,家和万事兴,用在团队之间也是一样的道理,只有大家共同协作,才能取得项目的最大利益,反之,组织内部意见不一致就会导致资金的缺失和计划的断档,延误工程进度。要想规避软件开发中的组织风险,就要在开发前对技术及方案进行讨论并达成一致意见,并在项目进行中加以适当的调控,对于超出预定风险范围的行为要及时加以制止,这样,才能进一步促进软件开发工程的顺利实施。
(三)通过风险缓解控制软件开发的技术及政策风险
在软件开发的过程中,经过前期的监控及调解方式,一般的可预知性风险就会得到有效的控制,但风险因素中的技术及国家政策因素具有不可预知性,这就导致了后期问题的产生。风险缓解是通过对不可预知类风险的审核和定期跟踪,将具体风险因素进行重点分析,从而对可能出现的风险进行缓解。尤其是在软件开发的过程中,很多风险因素后期会出现叠加的情况,管理者要根据项目的进度对不同的因素进行比对分析,得出相应的指标,对超出范围的部分找到原因并予以纠正,及时缓解因技术问题及国家政策带来的风险。
技术风险主要指开发、实施、维护等各个环节所潜在的问题,这些问题的共同特点是具有不确定性,这就导致了技术方案也随时可能出现临时变动,技术人员需要在整个软件的开发过程中定期对技术方案在合理范围内进行修正,以缓解因技术变动而带来的开发风险。
国家政策是软件开发项目的导向,它的变动所带来的风险不可预知性最强,需要管理者时刻保持警惕的心态。基于社会经济的不断发展,国家的政策也会随之进行相应的调整以满足社会人群的需求,这就需要管理者在熟悉相关政策法规的同时,对政策变动所引起的偏差及时作出调整,尽量予以纠正,以缓解软件开发过程中的此类风险。
三、结束语
随着社会的不断发展,在经济全球化的推动下,人们的消费欲望得到了有效的刺激,这就导致了软件开发项目的势在必行。想要促进软件开发项目的顺利进行,就要对开发过程中的风险因素进行分析,并根据其自身特点制定出相应的措施予以控制,只有这样,才能合理规避风险,达到成功开发软件的目的。
综上所述,软件开发项目不仅是经济发展的需要,也是社会进步的必然产物。在软件开发过程中,相关人员需要在不断吸取经验的基础上通过实践积累一定的经验,切实制定出规避风险的措施,降低风险出现的几率,为软件开发项目的成功作出充分准备,为满足社会需求作出贡献。
参考文献:
[1]万焘.软件开发的需求风险分析综述[J].科技广场,2011(01):15-16.
[2]唐颜M.IT项目风险管理及其控制措施研究[J].商情,2012(02):34-35.
[关键词]投资决策;实物期权;净现值
一、引言
在不确定条件下的项目投资决策分析中,实物期权理论正替代传统的净现值法(NPV)而得到广泛的运用。许多学者也将该方法引入了IT项目的投资决策分析之中,如:Benarch和Kauffman运用Black-Scholes模型,近似地估算一电子银行网络项目中所包括的实物期权价值,他们将项目投资机会看成一个仿真的美国式买入期权(Pseudo-AmericaCallOption),并考虑分红的情况,将项目现金流现值和看成是期权的基础资产;Taudes运用Black-Scholes期权定价模型分析软件升级项目的经济效益;Panagi和Trigeorgis运用实物期权理论分析了某通信项目的经济价值;Schwartz运用动态规划法(DynamicProgram-ming)讨论了两种IT项目的期权定价。
上述文献中存在着两个缺陷:一是虽然在软件开发项目经济分析时考虑了项目内含的实物期权价值,但在项目投资决策分析中却仍然遵循NPV方法的思路,而没有考虑实物期权的执行问题以及何时执行问题;二是缺乏对软件开发项目在生命周期的各个阶段所包含的实物期权作全面、系统的研究,大多只是考虑到项目中的等待期权。本文则对上述问题作了详尽的研究和分析。
二、软件项目的生命周期
从项目管理与项目经济分析的角度看,软件项目的生命周期可归纳为图1所示的一般过程:
在图1中,横坐标是时间,纵坐标是收益或投资成本,t0=0是项目的决策点。在决策时,I是项目可行性研究费用(成本),相对于项目的整个寿命期,一般来说项目的可行性研究阶段的时间很短,所以假设项目的可行性研究是在瞬间完成。t1是项目开发的起始点,t2-t1是项目前期开发阶段,在这一阶段,项目有一现金流C1支出,C1可能是常量,也可能是随时间的变量C1(t)。从t2时刻起,项目的首期开发完成,项目开始有收益,即现金流B1,B1也可能是常量,更一般的是随时间的变量B1(t),这一收入可能是企业出售软件或软件相关服务效益的收入。同时,对于大多数成功的软件项目来说,从t2时刻起,该软件项目又开始了进一步的开发,如增加软件的新功能,或将软件移植扩展到其他的计算机操作系统等。从t3-t2阶段是软件项目的第二次开发阶段,在这一过程中所发生的开发费用为C2,C2的特点也与C1相似。从t3到tn,其中可能包括多个与t3-t2阶段相似的软件项目的扩展(二次开发)阶段。T是该软件项目结束的时间。由于技术进步与消费者需求的变化,一般来说一个软件不可能永远继续下去,它可能在某一时刻被完全淘汰。综上分析,t0是项目的决策点,t1是项目的开发起始点,他们可能是同一时间,但大多数情况下可能是不同点。t1-tn是项目的开发阶段,其中t1-t2是项目的纯开发阶段,在这一阶段上,项目无收益。t2-T是项目的收益阶段,在这个时段上项目有现金流入,他们通常大于本阶段上的开发费用。值得指出的是,软件项目在t2-T阶段,企业可以中止并出售该项目,并一次性收取转让费。
三、软件开发项目内含实物期权分析
从图1的分析可以看出,一个软件开发项目包含了多个阶段。把软件项目看作是由一系列序贯开发的小项目所组成,这一观点在软件开发项目管理中已被广泛接受。在软件项目中,前一阶段的决策,决定了后续阶段的开发投资。所以,在前一阶段的经济评价中,应考虑本阶段的决策所带来的后续阶段投资机会的价值。从这一观点出发,可以分析在软件开发项目的不同阶段中项目可能包含的实物期权。
在t0点,即项目投资决策时,项目内含一个等待(wait)或推迟(defer)开始的实物期权,这相当于一个美国式的买方期权(CallOption)。该期权的执行条件是:推迟项目可以使得管理人员获得更多(额外)的有关项目的信息,在此基础上,有利于管理人员采取管理行动,而且,一般来说计算机硬件,软件的价格随时间迅速下降,推迟项目会有利于降低开发成本。但同时也应看到,推迟项目也可能导致项目收入的损失和企业竞争优势的丧失,即推迟项目具有机会成本。在项目决策时,应综合全面考虑这两方面因素。因而,在项目决策时,除了筛选项目外,还应考虑这一实物期权的价值,在时间许可的范围内,决定最佳项目开始时间。
在t0时,除等待期权外,项目还包含有第二阶段投资机会的实物期权。
在t1至tn时项目的开发阶段。在开发阶段上项目具有更大的管理柔性,项目可能包含的实物期权有:1.推迟或中止下一阶段的开发。2.若不期望的情况出现,并且继续下去,则可完全放弃该项目。3.根据新掌握的信息,扩展或缩减项目。4.发现新派生软件(项目)的投资机会。
最后,项目的经营阶段,项目还可能包括中止(出售)的期权,或由于条件的变化,进一步升级软件的机会。
虽然软件项目中所包含的期权不同,但一般情况下,影响他们价值的因素主要包括:1.执行项目中实物期权所产生的收益。对软件开发项目来说,这可能是项目在某一阶段的收益,一般来说,其他条件不变,收益越高,期权的价值也就越大。2.执行实物期权所需要的成本。对于软件开发项目而言,是投资于项目下一阶段的成本,一般来说,其他条件不变,成本越小,期权的价值也就越大。3.收益与成本的不确定性的程度。对于金融期权来说,其价值是建立在市场风险之上的,这个风险反映在证券资产的价格变化上。然而,其中之一变为不确定了,则项目所包含的实物期权价值会相应增加。4.实物期权的截止时间。对于软件项目来说,这一时间就是下一阶段项目管理决策的可能时间。在实践中,它经常是企业因素所决定的。实物期权的截止时间越长,则期权的价值也就越高。5.项目包含的实物期权执行的机会成本。若这一机会成本越高,则期权的价值也就越低。6.无风险折现率。无风险折现率越低,则期权的价值也就越高。
四、软件开发项目经济分析的目标与内容
Trigeorgis等学者提出,在考虑内含实物期权时,投资项目的价值包括两部分:一是传统的、被动的、静态的(static)项目直接现金流的净现值(NPV)。二是管理柔性或灵活性所产生的项目内含实物期权价值。这一思想可归纳为下式:F=NPV+V(1)
(1)式中,F是扩展(Expand)的NPV,也是整个项目投资机会的价值;NPV是按净现值法计算出的项目净现值;V是项目内含期权的价值。
根据项目投资决策的NPV法则,内含实物期权的IT项目,其投资机会的价值大于零时,项目可行;筛选IT项目的多个独立方案时,选择投资机会最大的投资方案。在大多数投资项目的实物期权理论研究以及实证研究的文献中,都遵循这一准则。然而,这类投资项目的决策思路却值得重新审视。
传统的投资项目经济评价中,没有考虑项目中可能包含的实物期权,其经济评价是为其投资决策服务的。而投资决策的特点是在决策时只有投资或不投资两种选择,若项目选择投资,其经济评价的使命便告结束。若选择不投资,项目就放弃了。传统的投资项目决策的内容可归纳为下面三个基本内容:1.决定投资项目是否经济可行;2.若可行的投资项目存在多个相互排斥的投资方案,筛选最佳的投资方案;3.在企业资源(预算)约束的条件下,筛选多个项目的投资组合。然而,若投资项目中包含实物期权,项目经济评价中也考虑了项目内含实物期权的价值,那么投资项目不仅在经济评价的内容与方式上与传统项目的经济评价不同,而且项目的决策内容和方式也与传统项目的决策不同,具体体现在下面三个方面:第一,项目的决策不仅在项目最初的决策阶段(点)进行,而且还应延伸进项目的整个过程之中。第二,在项目最初的决策阶段(点),管理者不仅要决定项目是否可行,筛选最佳方案和选择投资组合,而且还要依据项目经济评价的结果,决定项目内含期权是否应该执行和何时执行。第三,投资项目内含期权的经济分析,不仅在项目决策阶段进行,而且还应延伸至项目开发的全过程。在项目开发的每一个阶段,根据项目经济分析的结果,决定当时项目所含实物期权是否实施、何时实施。
五、软件开发项目决策框架与准则
从上述分析可以看出,在软件开发项目经济评价中引入实物期权的概念和实物期权定价方法,是软件开发项目经济分析与决策管理的革命,它必然给原有的软件开发项目的管理带来深刻变革。本文构建了软件开发项目的经济分析与管理决策过程的框架,其主要内容是:1.确定本阶段软件开发的范围及下一阶段开发的可能范围,决定是否可引出相关的开发项目。2.构造确定本阶段开发项目包含的实物期权,如推迟开发、进一步扩展开发等。3.预估开发项目成本、收益、时间和无风险折现率,特别应分析确定成本与收益的不确定性特征,如变化方差等。4.根据开发项目的不确定源的特征,选择合理、恰当的市区期权定价模型,确定开发项目内含期权的价值。对于相似于美国式期权的实物期权,还应确定最佳执行时间。一般来说,实物期权定价模型主要包括:已有的期权定价模型、偏微分方程法和动态规划方法等。5.根据项目的经济分析结果作出管理决策。应该指出的是,在软件开发项目的不同阶段,管理决策的内容有所不同,下面详细分析不同开发阶段管理决策的内容与规则。
在软件开发项目的最初决策阶段,决策内容包括两个部分:一是传统项目投资决策内容相同;二是针对项目内含期权的决策。具体可归纳为图2所示:
具体的决策准则如下:新晨
1.筛选可行项目。若软件开发项目的投资机会价值(扩展NPV)大于或等于零,则项目可行。
F≥0(2)
2.在可行项目中,选择最佳方案。投资机会价值最大方案:
F*=max{Fi}(3)
i=1,…,N
3.投资方案的期权决策。最佳投资方案选定后,具体的管理决策选择可归纳为下表。
在软件项目开发过程中的开发阶段,管理决策的内容为:根据项目经济分析的结果,决定是否执行期权,何时执行。若项目包含的期权价值大于零,对于相似于美国式期权的实物期权,则选择最佳时间来执行;而对于相似于欧洲式期权的实物期权,则到期执行。在执行美国式期权时,涉及到最佳执行时间的确定。正如实物期权的定价没有统一的模型一样,这一时间的确定是没有统一的模型,而应根据项目不确定因素的特征来灵活掌握。
参考文献:
[1]Benaroch,M.,R.J.Kauffman.Justifyingelectronicbankingnetworkexpansionusingrealoptionsanalysis[J].MISQuart.2000,24(2)197-225.
Abstract: At present, in the domestic multimedia player software development industry, there are some following problems, for example, products can not be delivered on time, products with quality problems need rework, customer satisfaction is low, there are few iteration and customer feedback in the development, the late change cost is too high, the utilization rate of testing and documentation developers in the early is low, but later work overtime is frequent, so this kind of unfavorable factors have brought great hidden dangers and risks for the stability of product quality. Therefore, it is necessary to improve the project management of the domestic multimedia broadcast software development project. This paper firstly analyzes the current situation of multimedia player software development industry, introduces the project management method widely used in the industry at present, and then aiming at problems, puts forward the improved project management method suitable for the industry.
关键词:Scrum;软件开发;项目管理
Key words: Scrum;software development;project management
中图分类号:TP311.5 文献标识码:A 文章编号:1006-4311(2017)23-0244-02
1 研究背景及意义
随着多媒体播放软件开发行业的兴起,竞争也开始加剧。如何对多媒体软件开发项目的过程进行更加有效的管理,成为了摆在企业管理者面前的一道难题。在国内外大部分的多媒体播放软件开发项目中,比较多的是采用传统的项目管理模式,如瀑布模型开发模式,来进行新产品的研发工作。软件开发不仅仅是编写代码,更关系到如何有效地组织项目人员,如何高效地发挥项目人员的主观能动性,如何真正地发挥团队的力量,来快速地完成高质量的产品。因此,需要采用更加灵活有效的流程来克服这些问题和局限性。在多媒体播放开发行业的高速发展和客户需求的日益增加和变化的大环境之下,应该认识到只有先进灵活的、高效的项目管理理念,才能保证多媒体播放软件项目更加有效地开展,才能更快地质量更好的产品,才能占领市场的先机和优势,才能在竞争中取得胜利。
2 项目管理理论
项目管理理论是在项目过程中使用专门的技能、知识、方法和工具,对既有的资源进行合理地管理、调度和分配;通过这个过程,使得项目的完成结果可以达到或者超过项目干系人的期望和需求。为了使项目获得成功,必须对项目制定合理的计划,对可能存在的风险、所需资源、工作范围、要实现的任务、花费工作量(成本)、进度、经历的里程碑等做到合理的安排。
2.1 什么是项目管理 项目管理[1]是指项目的管理人员,使用特定的方法、技能和有关的理论知识,在资源限定的条件下,对项目进行有效地管理和控制。从项目的开始,直至项目的最终结束,在此过程中,通过制定计划、组织协调、领导、监控和干预,从而实现预先设定的项目目标。从本质来说,项目管理行为没有秘密,经过组织的工作和活动,都可以被认为是项目管理行为。但从近代开始,项目管理行为渐渐被提炼和发展成为了一种具备广泛科学性质的理论模式。
2.2 瀑布式开发模式理论 瀑布式开发模式是由温斯顿・罗伊斯在1970年提出的,直至19世纪80年代早期,它一直是仅有的被普遍使用的软件开发模型。瀑布式开发模式的中心思想是按照程序⑹虑橛煞被简,把设计与实现分别对待。这样做的优点是方便有序地分工合作。各个活动自上而下、有序衔接,如同瀑布流水,逐级下落。瀑布式开发模式是一个开发框架,是经历一系列的阶段按顺序开展的开发过程。因此,如果在过程中有功能未被覆盖或者出现了问题,需要“返回”到上一个阶段并进行相应的修改。开发阶段从一个阶段“流动”到下一个阶段,这也是瀑布式开发模式名字的由来。
在软件工程中,瀑布式开发模式占据重要的地位,它是软件开发的基础架构。它也是软件的一种开发路线,将项目拆分为一定数量的阶段。有序执行每一个阶段,而且依赖于先前的已完工的阶段。使用瀑布开发方法的情形下,开发工作的各个部分需要区分评估,并且常常由不同的团队来实施[2]。
3 基于Scrum的多媒体播放软件项目管理方法设计
基于多媒体播放软件开发行业的特点,与当前模式所存在的弊病与局限性,需要针对当前模式所存在的问题,结合行业特点,改进现有开发模式的思路,研究适合于行业的、更加高效的项目管理模式,从而使开发过程更加高效,提升产品质量,提高客户满意度。
3.1 多媒体播放软件项目特点 国内的多媒体播放软件项目的特点如下:
3.1.1 项目无法按时交付 当开始一个新的多媒体软件开发项目时,由于种种原因,通常没有人会特别清楚如何才能实现它、会碰到多少技术难题、多久才能攻克、多久才能交付。这取决于项目的范围与复杂度。
3.1.2 项目工期紧,加班普遍 软件行业竞争激烈,多媒体播放软件开发行业也是如此。很多多媒体软件开发公司加班的情况非常普遍,主要原因是项目的工期紧张。一方面,如果预估的项目的最终交付时间存在偏差,项目进展滞后,那么经常需要加班赶工来追赶进度。另外一方面,在交付产品给客户后,也存在由于质量问题而返工的现象,并且客户需要在他们的code freeze之前修复所有的bug,这也增加了加班的现象。
3.1.3 项目人员安排的不确定性 多媒体播放软件开发项目中,具体的开发人员有自己负责的模块。比如负责图像解码的开发人员在暂时没有后续的开发任务的情况之下,会抽出身来兼顾其他的开发项目。而这样的安排所导致的后果是,当有后续的图像解码方面的工作时,该开发人员仍然在其他的项目中,项目开发进度可能需要进行时间上的调整,或者是开发人员上的调整。而由其他的开发人员接管,由于需要一段熟悉期,通常会减慢之前的开发进度。
3.1.4 需求变化多 多媒体播放软件开发项目中,需求的变更正在变得越来越频繁。这包括外部环境的变更需求与客户的需求变更。
3.1.5 所需要支持的平台、系统众多 多媒体播放软件开发项目中,需要支持跨平台,不同系统,不同设备以及不同CPU架构上的播放器开发。这确保了用户可以在各平台、各系统上二次开发他们自己的多媒体播放器而不用担心平台、设备、协议的局限性。
3.2 基于Scrum模式的项目管理方法
3.2.1 改进现有开发模式的思路 如果企I的目标是重复性的制造与生产,那么原有的传统的流程是适用的,而对于像多媒体播放软件开发这样需要不断创新、需求变更频繁、需要不断开发新产品的行业来说,原有的模式已显得过于笨重和低效,需要一个不同的、改进的模式来解决原有模式所存在的问题。
3.2.2 更改项目计划的粒度 原有模式中经常出现花了很多时间做调研和制订计划,然而还是无法按计划交付产品。这是因为多媒体播放软件开发项目中有大量的创新性工作,而这些创新性工作又没有过往数据可供参考。随着项目的进行,再对即将要做的工作、涌现的需求、需求的变更制订详细的计划,依此类推。这么做的好处在于避免了前期做很多假设来制定一个看似完整、实际不准确的项目计划[3]。
3.2.3 以迭代、持续交付的方式来工作 在改进的模式中,可以将功能模块进行划分,用一个个短周期迭代的方式来工作,在每个迭代周期结束后交付可工作的若干功能模块给客户,并获取客户反馈。项目团队总是专注于优先开发并对于客户高价值的功能模块,完整的功能模块是由一系列的增量产品组成的。这么做的好处在于,基于迭代的工作模式尽早交付给客户有价值的部分功能,并更早的获得客户反馈。因此,这种改进的模式避免了开发低价值或者不需要的功能模块,从而比原有模式更快的交付产品[4]。
3.2.4 更好地获取客户反馈 在改进的模式中,需要强调以人为本,鼓励让客户“参与”到项目开发中。客户是软件的最终使用者,通过更早地交付可工作的功能模块给客户,让客户可以在实际环境中运行与测试,从而尽早地获得反馈,有助于开发人员更好地理解客户的真实需求,避免了闭门造车所带来的错误。
3.2.5 组建自组织的团队并提升团队士气 在改进的模式中,不再是项目经理分配任务给相应的团队成员,而是建立一个相对平行的组织。由于淡化了管理和被管理的组织关系,组织更加开放,团队氛围也更加和谐。这种更平等的组织结构可以促进团队成员的交流,激发开发人员的工作热情,并且提高开发效率[5]。
3.2.6 更好地处理需求变更或涌现的需求 在多媒体软件开发项目中,变更或者涌现的新需求是经常存在的。因此,改进的模式中,需要更好地处理用户需求在开发过程中的变化及时与客户沟通,必须确保在改进的模式中能够更早地知道需求变更和涌现的新需求以更好地应对所带来的影响。
3.2.7 优化测试与文档开发人员的利用率 在改进的模式中,确保项目以持续、稳定的步伐进行的情况下,保证了每个阶段都有可交付、可测试的功能模块。这种可交付、可测试的功能模块使得测试与文档开发人员可以更早地加入项目中。
4 总结与展望
基于Scrum的管理理念目前越来越流行,它强调了以人为核心,创造一个和谐的项目环境,激发团队成员的潜力,从而最大化团队的生产力。通过快速迭代,集中体现了其能快速适应各种变化的优势。这种理念要求客户相较以往更加频繁和更加紧密地参与到产品开发中。这可能会导致有部分客户不习惯或者不适应,因此在开发过程中需要和客户加强沟通,使客户更直观地意识到他们在产品开发中花费一定的时间参与进来可以帮助提升产品质量,产生双赢的局面。另外,目前基于Scrum管理理念主要是运用于软件开发项目中,相信在不久的将来会有更加广阔的发展空间。通过对个体、应用技术、资源对象的进一步研究和具体实践,基于Scrum的管理理论会更加完善,并应用到其他领域中。
参考文献:
[1]MBA lib (),项目管理:项目管理简介,http:///wiki/项目管理.
[2]周三多.管理学-原理与方法[M].五版.上海:复旦大学出版社,2011.
[3]John Hunt,《Agile Software Construction》, UK Springer Verlag, 2010.
关键词:典型程序;软件项目;程序设计
中图分类号:G642
许多高校的计算机和一些非计算机类专业都开设了程序设计类课程,这类课程理论性、操作性、应用性都很强,并且知识繁杂,严谨抽象,较难掌握。比如:Visual Basic程序设计课程,首章就是抽象难懂的属性、事件、方法等概念,然后就是更加枯燥抽象的数据类型、变量、语句、过程等语言基础知识。这些又都是VB程序设计的基础,必须掌握。如果过分追求知识体系的系统性,以概念、命令的讲解为重点,偏重理论灌输,学生就会感觉枯燥难学,失去兴趣,也不利于应用型、创新型人才的培养。
因此,笔者采用了软件项目与典型程序相结合的教学方法,深受学生欢迎,也收到了良好的教学效果。
软件项目与典型程序是教师采用软件开发项目和一些典型程序来主导学生主动学习的一种学习方法。教师精心选择、设计软件项目和一些典型程序,在一定程度上打破原有的课程知识体系,重新组织知识内容,将抽象的理论知识和软件操作融入到具象的软件项目开发与典型程序设计中。教师不再接部就班地直接向学生灌输知识,而是以学生为主体,主导学生去直接设计程序和软件项目。通过引导学生去设计程序来探究新知识,通过一个实际软件项目的开发来整合课程知识,掌握软件工程和项目管理的思想。软件项目开发是理论与实践的结合体,加大了课程实训力度,增强了学生实践能力。
软件项目开发与典型程序设计方法,将理论与实践相结合,在知识的运用中学习知识,符合认知规律,有利于知识体系的建构,充分培养了学生的应用能力和创新能力。下面,结合实践,对该方法的应用进行有益的探讨。
1 软件项目的应用
把软件项目开发应用于程序设计类课程的教学中,围绕真实的项目来组织教学,创造与实际工作环境相似的学习环境,有效提高学生的学习积极性,培养学生的职业素养和能力。
笔者建议最好一门课程采用一个软件开发项目,将整个课程的零散知识点进行整合,软件项目的开发要贯穿于整个课程的学习过程之中。例如:在VB程序设计课程的学习中,教师选择某个信息管理系统做软件开发项目,如人事档案管理系统。当然,根据不同的专业、学生及课程情况,也可以采用多个项目。
启始课上,教师可以展示一些使用相应程序开发的优秀软件,同时布置软件开发项目,使学生了解此程序设计语言的功能,明确课程学习任务,并激发学生兴趣。
按照课程的知识体系结构,教师将软件项目分解为子程序设计任务,贯穿于日常教学中。如:在VB程序设计课程中,学习控件时,可以让学生去设计软件界面;学习菜单时,让学生设计软件的菜单;学习工具栏时,让学生设计软件的工具栏……这样,课程学完了,软件也开发出来了,边学边用。随着课程学习的深入,软件越来越完整,学生体会到了成功的喜悦,学习积极性越来越高。
项目开发完成后,教师可组织学生进行评价,先由学生展示作品,自评,再学生间互评,最后由教师总结评价。此评价过程可以锻炼学生的表达能力,学生间也可以相互借鉴,纠正不足。
软件项目的应用增强了课程的实践性,缩短了课程学习与系统开发之间的距离,使实训环节落到实处。
2 典型程序的应用
典型程序设计是为了掌握某些知识点而采用的较小的并且典型的程序,主要是在章节学习中应用。例如:VB程序设计课程中,在学习标签、命令按钮、文本框和IF语句时,可以采用注册登录程序;学习框架、单选按钮、复选框、分支语句时,可以采用简单考试系统程序;在学习列表框、循环语句时,可以使用选课程序等。
典型程序应用的组织实施过程是精选程序、展示程序、分析程序、设计程序、总结扩展。教师根据学习内容和目标,选择合适的程序,选择的程序要典型、实用。教学时,教师运行程序,展示程序功能和运行效果,激发学生积极性,同时使学生明确学习目标。然后,引导学生分析程序,设计程序,此时,要以学生为主体,教师起主导作用。学生在设计程序的过程中,主动思考、探索和操作,通过控件和语句的使用,掌握了软件的操作和应用,理解了程序设计语言基础知识。程序设计完成后,教师再引导学生总结程序设计应用中涉及到的知识点,反思程序设计方法,并提出问题,激发学生通过课外学习来进一步完善、扩展程序功能。
典型程序设计应用是一种主动学习过程,在教师的引导下,通过学生自身的思考和操作,来学习软件知识,符合知识体系的建构规律。
3 采用基于学习过程的考核方式
传统的考试方式不能科学、全面地评价学生的学习效果。在程序设计类课程的教学中,笔者采用了基于学习过程的形成性考核方式。学生的成绩由设计程序与软件项目的完成情况来综合评价,每完成一个程序或项目,就给出一个成绩,根据程序或项目的难易程度来设置分数权重。这种考核方式,评价贯穿整个学习过程,结合设计程序和软件项目分阶段考核,可以科学地评价学生的学习效果,大大激发了学生的学习主动性,达到了以考促学的目的。
4 应用中应注意的问题
4.1 选择设计程序和软件项目需注意的问题:(1)设计程序和软件项目要典型,具有代表性,不要选不常用的。还要注意实用性,尽量接近生活实际。也要考虑趣味性,选择趣味性强、有吸引力的程序和项目,以激发学生兴趣。(2)选择设计程序和软件项目时要考虑到开课专业、课程大纲和学生情况,难度要合适。过于复杂或过于简单,都会降低学生的学习热情。过于复杂,学生会产生受挫感,失去信心。过于简单,对学生没有吸引力,学习积极性会降低。难度要相对适中,学生只有通过学习,才能完成作品,获得了成功感,增强了自信心,有利于提高学生学习的主动性,吸引学生深入学习。随着教学进度的推进,程序要先易后难,由简单到复杂,从单一到综合,再到软件项目,循序渐进地培养学生的软件开发能力。(3)选择设计程序总体上不要过于复杂,涉及的知识点不要太多,不要面面俱到。选择的开发项目综合性要强,覆盖面要广,从而达到对课程知识和技术的整合。项目涉及不到的重点或较为重点的知识点,设计程序可以起到辅助和补充的作用,或者利用设计程序来强化重点知识。总之,程序和软件项目要精心选择和设计,应用中也要把握技巧。
4.2 教学中,要始终以软件项目为主线,设计程序为辅助,学生为主体,教师为主导。设计程序的导入、分析、设计、总结、扩展,要以学生为主体,发挥好教师的主导作用。软件开发项目的实施也是如此,要培养学生独立分析、解决问题的能力,要授之以渔。教师要多设疑,要注意启发、引导、组织学生去探求知识。学生要多动脑,多动手,主动学习,主动建构自身知识体系。
4.3 打破传统教材内容安排,大胆调整教材内容和顺序。根据程序或项目分解后的子程序任务涉及到的知识内容,合理调整教材内容。例如:各种流程控制语句的学习,传统的教材内容是安排在一起,逐一讲解,讲一条语句,用一个程序去验证。这种统一学习的方式,会使学生感觉抽象枯燥,教学效果差。其实,流程控制语句的学习,可以贯穿到整个课程的学习过程中。将不同的流程控制语句,甚至同一语句的不同结构,与基本控件、菜单、工具栏进行合理的结合,分散到各个程序和软件项目子程序中,达到了难点的分散与克服,从而收到良好的教学效果。
参考文献:
[1]朱文增,赵竞雄,张阿娇.程序开发在VB教学中的应用研究[J].电脑知识与技术,2009,14.
[2]尤丽卓.程序开发与实例结合教学法在VB教学中的应用[J].职业教育研究,2007,6.
关键词:软件;质量管理;优化对策
0引言
在软件技术快速发展和应用范围不断扩大的同时,软件复杂性也不断提升。在当前的很多软件开发企业中,软件质量管理问题开始成了关注的焦点。
1软件质量管理中存在的主要问题分析
1.1需求模糊问题
结合软件工程来说的话,软件产品的生产主要包括多个过程:第一是系统需求研究过程;第二是系统设计过程;第三是系统实现过程。但对于软件系统需求来说,往往描述不够完善,相应的软件需求调研以及研究也不够深入,没有加强对软件质量需求的管理,这样不仅会使得研发以及测试设计工作落实不到位,还会明显提升沟通成本,导致产品实现与用户需求不一致[1]。
1.2立项管理不到位问题
大量实践结果表明,通过加强立项管理,可以有效避免质量管理项目风险的产生,赋予软件项目开发深刻的意义。(1)软件项目开展。不加强深入的立项调查,以及加强项目可行性分析,落实好立项评审,则可能会导致产品需求获取不到位,软件开发产品规划出现很多问题,无法保证软件研发工作的有效开展,致使项目研发功能明显减弱,不但会导致资源浪费,还会阻碍新产品的正常[2]。(2)软件项目。如果没有加强立项管理,可能会导致成员行为涣散问题的出现。工作人员只顾自己,不顾团队利益,无法全面了解项目产品的实际开发要求与背景,也不能从根本上明确项目开发的最终目标,无法满足用户的实际软件开发需求,最终使得软件开发计划无法按期实施以及软件开发费用超支等问题出现。
1.3软件质量保证体系尚待完善
针对我国很多软件开发企业来说,往往都处于“软件质量管理”实施的最初阶段,甚至是试行阶段,很多科研制作部门对应的标准化软件质量管理体系还都不完善,甚至有一些科研部门对应的软件质量管理制度和体系还没有形成[3]。另外,一些企业虽然设立了软件质量管理的专有部门,但相应的体系文件却还不完善,需要经过大量的实践来完善。在软件开发项目研制部门质量管理普通较低的情况下,软件开发工作者的综合素质低下,也会影响软件产品的最终质量。
2软件质量管理的优化对策分析
2.1加强需求工程有效管理
在实际的软件开发当中,如果相应需求模糊,会出现需求随意变更的现象,导致时间被白白浪费。对于该问题来说,必须针对相关需求活动,加强统一化的需求管理。要在落实好软件需求开发工作的基础上加强需求管理,这样不但能够限制需求变更的实际次数,还能促进工程师对质量管理需求的深入理解。总之,软件需求开发与软件需求管理的重要性同等重要,必须实现两者的有效结合,才能保证最终产品的质量。
2.2加强软件测试流程有效管理
在软件测试的各个环节,都可能会出现一些问题,必须不断优化软件测试流程,加强对软件测试流程的有效管理。具体来说:(1)软件测试相关部门人员,必须加强需求知识学习,开展深入的需求探讨。(2)对有疑虑的需求者,研发设计工作者要做出及时而准确的解答。对于研发设计工作者也不能有效解答的问题,要让他们联系用户来有效解答。在明确需求的基础上,根据软件系统的作用以及性能,专门的测试工程师要科学合理地设计软件测试测用例,具体要结合两大方面的内容来设计:第一,针对测试工程师来说,必须结合实际需求,科学合理地编写测试用例;第二,针对测试工程师来说,要在结合实际用户反馈情况的基础上,做好分析汇总工作[4]。要大力引入和合理应用QC功能测试设备以及工具,加强对软件以及实际操作系统兼容性能的合理性测试,才能充分发挥软件测试工具使用的功能与作用,落实好软件兼容性测试工作。此外,要加强自由软件测试,适当补充软件测试用例,了解软件测试用例没有涉及的问题以及问题产生的原因;要采取定期研究和分析的方法,明确缺陷库里面存在的问题,并深入研究问题成因,进而利用测试用例来解决问题[5]。
2.3加强项目进度质量有效管理
要保证软件开发项目的顺利完成,首先必须保证软件项目质量足够好。在软件项目开始实施之前,必须保证项目开发计划足够科学、合理。如果软件开发项目计划设计人员相关工作经验足够丰富、设计能力足够强,往往可以有效保证软件开发计划的合理性与完善性,有效预见软件开发计划当中的问题,消除相关阻碍和影响因素。在软件开发项目计划设计的开始,相关人应及时组织软件质量管理人员,开展软件项目计划讨论会与评审会,并请相关技术专家、真实用户等,针对软件项目计划的科学性和合理性进行探讨,分享个人意见和看法,由专门的记录人员总结相关意见,最终形成系统化的质量记录,再以书面或者文档的形式传送给相关工作人员进行意见修改整合,确保软件项目计划的完善性。
2.4提升工作人员的综合素质
在软件开发和质量管理过程中,技术人员和管理人员是核心主体。因此,要想有效保证软件质量管理有效性,必须保证管理工作人员和技术人员的综合素质足够高。让员工全面地了解企业,正确理解自身的工作性质和要求,并不断增强自身的责任感。即使工作人员已经对工作内容很熟悉,也可能没有深入理解企业经营战略以及相应的发展规划。企业外部环境条件变化幅度比较大,企业工作人员必须及时掌握内部战略和规划变化情况,及时调整自己的工作计划和方法。对于软件质量管理人员来说,不但要主动参与到企业发展规划设计工作中,还必须及时将相关信息传达给各个部门。通常来说,企业应当定期或者不定期地开展例会,介绍企业近期情况和之后的发展规划。在掌握全体例会内容的基础上,各个部门负责人员应当再次开展部门会议,根据部门工作开展情况,做好后期工作规划调整工作,使得每位员工都掌握企业发展动态,进行自身科学合理的工作调整与规划。软件质量管理者还必须基于企业内部软件质量问题,增强创新意识,提出可以有效解决软件质量问题的措施。
3结语
综上所述,软件开发成本管理不到位、软件质量管理不到位等问题仍然存在,导致这些问题产生的主要原因是管理者管理不到位,如:软件质量管理制度不完善、随意性较强。要有效解决这些问题,必须以完善的软件质量管理体系为依据,加强软件开发的全过程监控[6]。
参考文献
[1]翁婕,丁铁,乔扬,等.软件质量管理的优化对策[J].电子制作,2015(6):98-99.
[2]周波,钟小咪.铁路运输行业的供应商软件质量管理[J].科学与财富,2016(5):750.
[3]张沐辰.基于软件全面质量管理的团队建设[J].科教导刊,2014(16):45,55.
[4]方俊钗.数字超声检测仪软件的质量管理和软件测试[J].科技风,2014(13):238.
[5]李婷,朱接文.计算机信息化的影响及其软件质量管理分析[J].无线互联科技,2016(12):110-111.
关键词:企业实践 Java软件项目开发岗位 职业能力 教学改革
笔者积极响应学校号召,暑期期间到济南维库软件科技有限公司进行了一个月的企业实践,顺利完成企业的工作任务,现将一个月的实践收获总结如下。
一、转化角色,虚心、耐心、专心做一线有责任心的企业员工
1.遵守企业制度,认真承担并履行责任
在一个月的企业实训中,笔者谨记学校领导的嘱托,严格要求自己,认真遵守企业制度,从未发生迟到、请假、早退现象,进入公司后将自己由受人尊重的老师转变为一名初到公司的企业员工,做到慎独、慎微、慎初,强化工作责任心,主动处理好分内与分外的相关工作,勤奋扎实地工作,不敷衍应付,认真对待工作中的每一个问题,完成企业交给的每一个工作任务。
2.不畏工作困难,耐心解决项目开发中的各种问题
企业实训为真实软件开发项目:山东高速集团采购系统。由于项目庞大复杂,涉及知识点琐碎,项目开发工作困难重重,笔者认真细致学习企业教师讲解的知识点,分析需求说明书,钻研软件算法和代码的实现,面对项目中遇到的各种错误代码和异常,耐心查错排错,认真解决软件开发过程中出现的各种错误,并及时记录解决方案和问题,为下一步软件开发工作和教学实训积累了丰富的经验。
3.放下教师架子,虚心向企业有经验老师请教
学校主要工作是教书育人,企业工作是开发高质量软件产品。工作任务的不同,使笔者慢慢放下了教师的架子,主动地向实践操作能力较强的“小兄弟”请教。虽然他们年龄较小,学历不高,却有丰富的项目开发经验。笔者向他们虚心请教,反复讨教工作中不明白的问题,从他们那里学到了课本上没有的工作技巧和技术,更领略了他们一丝不苟、沉着耐心和认真细致的工作作风。
二、企业实践锻炼内容
企业实训内容主要基于目前软件公司的热点需求――Java软件开发岗位进行设计和选取,包括相关知识内容的培训和山东高速集团采购系统项目的实训两部分内容,具体知识包括:Java知识(JDK的安装配置、Myeclipse开发工具使用、数据类型和运算符、流程控制、面向对象开发)、HTML知识、MYSQL知识和SSM知识(JSP应用、Sevlet应用、Spring-MVC应用、Spring依赖注入、Mybats框架应用及整合)。
三、企业实践锻炼收获与心得
1.课程设置应与岗位需求相匹配
高等职业院校人才培养模式定位于技术技能型人才的培养,为地方区域经济服务,为地方社会经济发展提供人才保障和智力支持,因此专业课程的设置应该以岗位工作任务和岗位能力需求为出发点。以Java软件开发岗位为例,目前学校开设的都是传统的数据库知识和web前端知识课程,但是IT技术发展迅速,真正的软件开发大多通过相关框架实践,如SSM框架、SSH框架等,因此,学校要适应目前社会的需求,与时俱进,及时更新课程标准和授课内容。
2.教师实践操作水平是培养高素质技术技能性人才的重要因素之一
目前企业对参加职业技能大赛获奖学生毕业生比较青睐,所以企业高职院校的评价主要通过高职院校技能大赛进行,而学生技能大赛成绩的结果反映了教师的实践操作水平。俗话说“老师要给学生一杯水,自己首先要有一桶水”,因此教师应首先提高个人实践操作水平,而提高教师实践操作水平的主要方式之一就是通过企业实践锻炼。据悉,山东省在不久的将来将启动高职院校教师职业技能大赛,因此教师要将提高实践操作水平作为自己以后工作的努力方向。
四、未来的努力方向
1.基于企业岗位需求进行教学改革
(1)教学模式和教学方法遵循职业发展规律。高职院校推行“工学结合、知行合一”的人才培养模式,因此要基于企业工作岗位和工作任务进行教学改革。
第一,推行教、学、做一体化教学模式。在教学中,应该以培养学生的职业能力为主,师生双方边教边学边做,理论和实践交替进行,直观和抽象交错出现,理中有实,实中有理,突出学生动手能力和专业技能的培B,充分调动和激发学生学习的兴趣,使学生真正变成学习的主人。要培养学生的终生学习和持续发展能力,推行教、学、做一体化教学模式对加强学生的动手操作能力和解决实际问题的能力有很大好处。
第二,推行翻转课堂教学方法。为提高学生的主动性和创新能力,在教学过程中,推行翻转课堂的教学方法,将学习任务布置给学生课下完成。学生利用信息化技术查阅需要的材料,还可以在网络上与别的同学讨论,完成老师分配的任务,并在课上分享任务完成过程和心得体会。由老师进行评论,师生间还可以进行充分的交流,这样可以满足学生的个性需要,有利于学生创新能力的培养。
(2)教学过程基于软件开发工作过程。将教学过程与企业软件开发过程相结合,教学过程围绕企业真实的软件开发项目展开,将要学习和掌握的知识技能,转化为一项项工作任务,学生分组按照行动导向的六个步骤(资讯-计划-决策-实施-检查-评估)进行,使学习任务既是一个完整的学习过程,又是一个工作过程,教师成为学生学习的引导者和促进者。
2.技能操作的提升与社会岗位前沿技术的了解
(1)技能操作的提升。以后,笔者将会继续积极参加企业实践锻炼,参加省级培训,完成每5年必须累计不少于6个月到企业或生产服务一线实践的目标,通过企业真实工作过程提高自己的实践操作水平和职业能力,并将其应用到教学过程、实验实训过程和学生技能大赛中。
(2)社会岗位前沿技术的了解。为推导社会技术的变化和教学知识的更新,在以后的工作中要经常深入企业,了解企业的生产组织方式、工艺流程、产业发展趋势等基本情况,熟悉企业岗位职责、操作规范、技能要求、用人标准、管理制度、企业文化等,学习所教专业在生产实践应用中的新知识、新技术、新工艺、新材料、新设备、新标准等,及时更新人才培养方案、课程标准,适应社会岗位对教学知识的需求。
关键词: 敏捷开发; Scrum; 软件开发; 项目
中图分类号:G642 文献标志码:A 文章编号:1006-8228(2015)11-81-03
Abstract: Aiming at the problems in the teaching of comprehensive practice training course of software development for the waterfall model, the characteristics and advantages of agile development are analyzed. This paper explores the application of the Scrum agile development process in comprehensive practice training of software development. Through the project decomposition, sprint incremental iteration and frequent delivery of the working software, cultivate students' team spirit and initiative learning ability, so as to improve the quality of teaching.
Key words: agile development; Scrum; software development; project
0 引言
在软件技术专业和计算机应用技术专业中都会开设软件开发综合实训课程,让学生通过完成1-3个简化的企业项目掌握主流的开发方法和软件开发过程,为将来步入社会打下知识与技能的基础。为了更好更快的开发出符合客户要求的软件,开发过程中一般会采用某个开发模型,教学中为了实现学校与企业的无缝对接,在开发项目时也会采用某个开发模型。本文简要分析了目前软件开发综合实训课程采取的开发模型及其存在的问题,在简单了解敏捷开发模型的基础上,探索软件开发综合实训课程中采用Scrum敏捷开发的具体实施过程,研究利用Scrum敏捷开发的优势。
1 目前开发模型和存在的问题
在高校软件开发综合实训课程的教学中,大都仍采用传统的“瀑布模型”开发模式。该模型将项目分成需求分析、概要设计、详细设计、编码实现、软件测试和运行维护六个阶段。各个阶段严格按自上而下的线性顺序实施。每个阶段都需撰写大量详细文档,这占用了大量的实训时间,前一个阶段完成后才能开始下一阶段。虽然学生急于看到的软件运行效果带着尽早编程的急切心情,也必须等到需求分析、概要设计、详细设计三个阶段验收完成后才能开始,这极大挫伤了学生学习的积极性。
这种瀑布模型是解决上世纪六十年代软件危机的很好方案,也是开发模型中的经典。但是瀑布模型强调文档的作用,以文档为核心,用户只有等到整个过程结束才能见到全部成果,严重延迟的反馈信息无疑增加了项目延期或失败的风险。在当今的软件开发中,很难看到完全实施“瀑布模型”的企业,越来越多的公司采用了敏捷开发。
据VersionOne[1]公司2013年的调查显示,在全球收集的3501份调查报告显示有88%的公司采用敏捷开发方法,Google、华为等大型软件公司也采用了敏捷开发。越来越多的国内中小软件企业也通过敏捷开发提升自身竞争力,包括笔者顶岗实习的北京盛安德科技有限公司。与传统软件过程、开发方法、传统项目管理方法相比,敏捷开发方法具有以人为本、成本低、开销小、效率高、灵活和响应快等优势。为了与企业接轨,使学生学以致用,我们应该密切与行业企业合作,改革目前过时的实训开发模式。
2 敏捷开发模型
2001年Kent Beck等17名专家共同签署了“敏捷软件开发宣言”,敏捷软件运动随之产生和发展。“敏捷”代表了互联网时代软件开发过程模式的一种先进理念和价值观。与传统开发模式相比,“敏捷”更强调沟通性、快速灵活地响应,关键在于持续交付可工作的软件[2]。敏捷开发积极主动地迎接和适应客户变化,允许和支持需求的不断变化,主张软件开发人员应紧密与客户合作、沟通和交流,把客户作为开发组成员,它集合了一整套价值观、原则和实践方法。敏捷开发的价值观[3]:个人和交互胜过过程和工具;工作的软件胜过面面俱到的文档;与客户合作胜过合同谈判;响应变化胜过遵循计划。目前有许多敏捷开发过程可供选择:XP(eXtreme Programming,极限编程)、Scrum、水晶方法等。Scrum软件开发模型是敏捷开发中的一种,应用最为广泛。
3 Scrum敏捷开发简介
Scrum敏捷开发过程是以人为核心、迭代、增量、循序渐进的开发,整个开发过程由若干个短的迭代周期组成,每个迭代周期称为一个Sprint,每个迭代实现不同的任务,迭代中重大的、优先级高或风险高的任务优先实现,每个迭代周期都有明确的目标,每次迭代都经过测试,具备集成和可运行的特征[4]。每个Sprint周期结束后可以交付一个可运行的软件。
采用Scrum敏捷开发的项目参与人员主要分三种角色,即产品负责人(Product Owner)、Scrum Master、开发团队。其中Scrum Master对项目全过程负责,是项目的推动者和组织者,确保Scrum流程正常运转。开发团队成员一般不多于7人,主要有设计、开发和测试人员组成,团队成员不能只负责自己擅长的领域,需要有配合全局的合作意识,如开发人员不能只负责编写代码,还需要进行测试。
Scrum敏捷开发项目执行的流程[5]。首先在产品负责人的带领下筛选出产品的总需求条目(Product Backlog),通过全体人员共同讨论对总需求条目进行优先级别排序,供团队进行开发工作。然后以1-4个星期为一个开发周期Sprint,团队根据Product Backlog确定Sprint周期内的任务,生成Sprint Backlog(周期内任务列表,Sprint Backlog为Product Backlog的一部分),确定Sprint目标。每个Sprint周期(一次迭代)分为设计、实现、测试等工作,团队成员主动认领工作任务,每天在不超过20分钟的站立会议上讲述自己的昨天工作内容、今天工作计划和当前工作难点。在一个Sprint周期结束时,整个团队对照Sprint Backlog列表演示新功能,完成演示和Sprint回顾总结,一个可执行交付的有价值软件,才可开始下一个Sprint周期的循环。这样原本几个月甚至几年的开发周期缩短至一个星期到一个月,让用户可以尽早体验软件的应用并及时提出问题或调整需求。
4 Scrum敏捷开发具体设计过程
学校的实训环境和公司的工作环境,以及学生和员工的工作能力有很大的差别,因此高校软件开发综合实训教学中不能拘泥于Scrum过程的全部形式,教师应对Scrum开发进行修改和优化。
4.1 分组和角色分配
Scrum主要有三类角色,一是Product Owner(产品负责人),该角色可安排熟悉产品需求的教师承担,负责产品需求的提炼、优化和优先级排序。二是Scrum Master(团队负责人),有开发能力强的学生担任,主要负责本项目成员的沟通和协调,老师协助Scrum Master的工作,监控项目执行。三是开发团队成员,一般由3-4名学生组成。团队成员注意开发能力强弱分配、男女搭配等元素,另外项目是在课余进行开发,所以要考虑宿舍因素。
4.2 项目选题和项目启动会议
软件开发综合实训课程分成两个阶段,第一个阶段(2-3个月)是教师给出固定题目,如:公司网站;第二个阶段(2-3个月)由学生自主选择项目,征求教师认可,如:毕业生管理系统、大学生报到系统等。
在项目的启动会议上,介绍敏捷开发的思想和执行流程,约定统一的开发规范和流程,以便学生掌握团队开发方法,并养成良好的编码习惯。
4.3 Scrum敏捷开发的执行流程
如图1所示,教师和项目组成员将整个软件项目分解成多个子项目(Product Backlog),开发过程中选择优先级高和重大的子项目进行开发,一个子项目为一个Sprint迭代周期,子项目又可以分成若干个工作任务(Sprint Backlog)。在每个Sprint周期内,学生主动认领任务,进行计划、编码和测试。每日项目组有一个不超过20分钟的会议,主要汇报三个问题:上堂课到目前为止做了什么?有什么难点和问题?今天打算做什么?并更改自己的Sprint燃尽图(Sprint burn down)。通过该会议让项目组成员了解目前项目进度。每个Sprint 周期结束后,开一次Sprint评审和回顾会,对照Sprint Backlog演示软件的功能,看是否完成了本次Sprint目标,会上每位学生回顾自己所做工作以及需要改进的地方,教师给予点评和总结。会议的成果可以交付一个可运行的软件。下一个Sprint周期是现有软件的增量迭代,因此可以持续交付包含新功能的软件版本。总之,敏捷开发就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
4.4 结对编程
一个任务交给两个开发人员。两个开发人员同时坐在一台电脑前面,一个编程,另一个实时检查,然后互换角色。与传统一个人一个任务相比,两个人一起协作可以互相促进、相互学习,实现提高。
5 Scrum敏捷开发在软件开发综合实训教学中的优势
在软件开发综合实训教学中使用Scrum敏捷开发主要有以下优势。
Scrum提高了学生学习积极性和主动性。Scrum敏捷开发模型要求尽早编码这恰好迎合了学生软件开发实训时急切渴望进行编程的心理,激发学生学习的积极性。同时能够频繁交付可运行的软件,使学生有极大的成就感。同时在项目的开发中,开发成员主动认领开发任务,每日的站立会议会使落后的学生意识到自己的差距,这在团队中能够形成良好的竞争机制,主动学习和提高。
Scrum提高了学生的软件开发技能。瀑布开发模型在整个开发过程中都需要撰写大量的开发文档,比如在需求文档写出来后,开发人员根据需求文档来编写代码,一切以文档为依据。敏捷开发只写必要文档,这节省了大量的实训时间,使学生有时间专注于编码和测试工作,从而提高学生的开发技能。
6 结束语
作为一种新兴的开发模型,Scrum敏捷开发方法的理论和实践还在不断的完善创新之中。教师在教学中使用Scrum敏捷开发模型组织教学时,更应该根据实际情况进行修剪和完善。实践证明,在软件开发综合实训课程中,我们尝试采用修剪的Scrum敏捷开发模型能够激发学生学习兴趣,提高学生开发能力和团队协作精神。
参考文献(References):
[1] 资料来源:http:///.
[2] Robert C. Martin.敏捷软件开发-原则、模式与实践[M].清
华大学出版社,2003.
[3] 王敏.基于Scrum敏捷开发的软件过程管理研究 [D].昆明理
工大学,2010.
[4] 林晓宇.基于Scrum敏捷方法的软件工程实践教学探索[J].
电脑知识与技术,2011.19:4762-4765
关键词:软件工程;课程教学;教学内容;实践开发
1教学理念
随着互联网络和IT技术的快速发展,IT技术的服务无处不在,软件开发已经成为计算机专业的大学生掌握的必须技能,能够更好地运用当今流行的软件开发技术手段开发程序,已经成为计算机专业的学生在激烈的社会竞争中能够获胜的关键。所以,在当今的IT技术时代,特别是大数据和云计算快速发展的时代,对于计算机专业的本科生来说,系统地掌握软件开发技术的各个环节并使其有机结合,同时运用软件工程开发过程的技术来组织软件开发过程的所有资源并综合地处理软件开发过程已经成为计算机行业的基础需求技能。所谓软件工程,是指系统地运用工程管理的知识来组织、运行、开发和维护有用的、高效的和高质量的软件学科。软件工程主要包括人员管理、项目管理、可行性与需求分析、系统设计、程序设计、测试和维护等过程。因此,对于计算机专业的学生来说,掌握必要的软件开发过程,了解和掌握软件开发过程的建模和管理技术不仅能够使自己在未来可以更轻松地应付多种复合信息的工作需求,给自己带来更合理的处理方法,而且也可以提高自己的软件开发效率。所以,对一些计算机专业的学生来说,通过系统地学习掌握软件过程开发技术,特别是一些新的软件开发动向,如面向服务的软件开发和集中式计算架构开发等,是十分必要的一项教学内容。目前,软件工程课程是计算机专业教学中的一门必修课程。以作者所在的教学单位为例,软件工程是计算机专业高年级本科生的一门必修课。该课程主要从软件工程基本理论出发,将软件开发技术的各个环节有机结合,全面覆盖软件开发过程,注重培养学生软件开发中的综合职业技能。主要讲授的内容包括软件开发规律概述、软件开发方法、软件开发平台与工具、系统分析与建模、IT规划与咨询、软件开发项目管理、软件开发案例分析等。同时该课程引入云计算和大数据对软件开发的需求,重点分析实际软件开发案例,使学生掌握软件开发的基本规律与实际管理方法。因此,软件工程作为一门专业必修课程,计算机专业的学生不仅能够通过这门课程掌握软件过程的必要技能,如RUP模型和UML等,而且通过实践的项目分析与设计,学生能够系统地掌握需求分析和软件设计的必要技术,如数据流图DFD如何使用等,使得学生掌握的知识不再停留在理论学习和应付考试上,为学生未来就业后进入企业快速融入开发团队提供了必需的知识基础。同时,该课程通过对一些热门开发技术的学习,不仅可以提高学生的兴趣,激发学生的潜能,加深学生对软件开发技术本质的理解,而且可以提高其相关知识的洞察力与研究能力。[1]
2教学方法和手段
软件工程课程的特点是知识内容多、内容实践性强,没有实践难以掌握,例如软件过程中的用例模型是通过角色、行为和场景来描述和分析软件开发过程的模型,因此不仅要求学生在课堂上需要了解什么是用例,掌握用例设计的基本规则,而且也需要安排时间给学生对于复杂的场景使用用例模型进行设计分析,然后进行课堂讨论,讲解自己的设计思路如何满足用户的需求等。所以,根据软件工程课程的特点,作者认为在课堂上宜采用“知识细化”、“精讲讨论”、“详细分析”等多种多样的教学形式。以作者所讲授的软件工程课程为例,本课程以计算机投影开展教学,配以适量的理论教学和知识点讨论,并以上机课来培养学生的动手能力,如要求学生使用Powerdesinger软件进行需求建模。本课程其中投影、理论和讨论教学为24学时,上机实验课为8学时(不含课外上机)。在讲授过程中,考虑到该课程注重应用的特点,遵循深入浅出的原则,对概念、原理的解释和描述尽可能地以日常生活所接触到的案例和图示加以对比说明,引导学生掌握软件工程的开发过程,建立概念之间和应用之间的联系。在讨论和上机过程中,以任务驱动方式要求学生完成讨论题目和上机实验,然后及时找出学生上机时遇到的问题,并归纳总结,提高学生相应的能力(教学学时分配见表1)。另外,作者为了让学生更好熟练地掌握软件工程的相关知识,通过网络收集了一些教学视频和PPT课件,在完成每个学时教学任务的课后都拷贝给学生,让学生课后回去自学这些知识。
3教学培养目标
软件工程课程是一门要求实践性较高的课程,对从实际的工程开发中掌握知识有较强的要求。因此,本课程主要介绍当前最流行的软件开发技术与环境,目的是使学生了解软件开发过程与组织等技术,掌握当前流行的软件开发方法与环境。本课程的教学目的是让学生初步地掌握从宏观和微观两个方面如何去开发软件系统。使学生学会软件开发的原理、技术和方法,提高学生的软件开发和软件工程管理能力:[2,3](1)培养学生的思考和动手能力。软件工程课程包含大量的建模知识,同时提供了一些软件去实践这些知识,因此这要求学生不仅掌握建模的基本原则,同时对于实际的项目需求,能够运用建模知识去分析建模,然后运用相关软件进行建模概念的设计。(2)培养学生系统的组织和管理能力。软件工程课程是一门工程性的课程,它来源于实践,并用于实践。软件工程的复杂性在于它是涉及软件开发的各种环节和资源相互协调工作的知识。因此,培养学生掌握好软件工程的知识,对于学生今后职业规划有重要的帮助,能够为学生往高层次的IT人才发展提供必要的知识储备。
4总结
本文结合作者的实际教学工作和在教学改革方面的分析与探索,从教学理念、教学方法与手段、教学培养目标等方面,对计算机专业的软件工程课程的教学改革进行了分析与探讨,提出了以实际项目驱动和课堂知识点讨论作为课堂教学手段,把软件工程相关理论知识学习作为实践的教学内容,注重实践为主、理论为辅的理念。目前,对于计算机专业的学生来说,软件工程课程的本科生教学改革有着十分重要的意义与作用,其教学内容与教学手段也应该要适应社会需求的变化。
参考文献
[1]许波,陈晓龙.UML结合软件工程教学改革探讨[J].计算机教育,2011(2):34-37.
[2]崔寅生.谈谈软件工程教学改革的实践[J].成人教育,2009(12):85-86.
[关键词] 需求分析 需求变更 需求控制
一、问题的提出
什么是需求分析?
要知道需求变更是什么,首先要知道什么是需求分析。
需求分析是指理解客户需求,就软件功能与客户达成一致,估计软件风险和评估项目成本代价,最终形成开发计划的一个复杂过程。需求分析的成果形成需求说明书。
什么是需求变更?
根据软件工程思想定义,需求说明书一般要经过论证,如果在需求说明书经过论证以后,需要在原有需求基础上追加和补充新的需求,或对原有需求进行修改和削减,均属于需求变更。
二、需求变更的原因及影响
1.需求变更原因
一方面是用户:他们是项目需求的提出者。一个十分常见的现象是用户提出需求以后,在软件开发过程中用户改变了需求,这只能迫使开发工作返工,丢弃一些无法修正的部分。无疑这会造成一定的损失,但又无法完全避免。要求用户一次性把需求讲清楚,并且不允许此后需求有任何变更,这是不现实的。只能尽量减少需求变更,降低它所造成的影响。
二是系统因素:在系统内部,如计算机硬件、系统软件或数据的变更要求与其相适应。
三是外部环境因素:与软件运行相关的工作制度或法规、政策的变更,或是业务要求变更导致的需求变更。
四是需求分析阶段工作缺陷:需求调研、分析、定义和评审工作不够充分,致使需求规格说明中隐含着问题,在开发过程中才有所发现。或者需求开发中开发人员与用户沟通不够充分,如未能如实获得用户的潜在需求等。
软件需求一旦出现变更,它可能要涉及到一些相关的代码和文档的修改,为此要把这一变更通知到所有相关人员。提出需求变更有可能在开发的任何阶段,并且随着项目的进展,越晚的需求变更引起的损失越大。
2.需求变更给软件的开发工作带来的影响
需求变更对软件开发的影响是多方面的,概括的看,包括以下三个方面:
(1)增加项目的人员、费用开支,影响开发进度。需求变意味着原先的需求调研、分析的结果与预期的软件实现存在偏差,需要进行需求变更。这无疑要增加项目的人员、费用的开支,并对开发进度造成影响。更有甚者,如果变更频繁,可能对项目造成较大影响,严重时可能直接导致项目的失败。
(2)影响软件质量。在一个复杂的软件系统中,需求之间具有一定的联系,相关需求可构成需求链。如果由于需求变更导致需求链的某些环节脱节,就可能引起一些难以察觉的错误。当需求变更没能及时修改项目的设计、开发文档时,这些错误一般难以被测试人员发现,将直接影响系统质量,严重时可导致系统崩溃。
(3)影响开发者与用户之间的合作关系。需求变更的实施是用户和开发者相互协作的过程。开发者和用户在是否采用变更问题上常常产生分歧,如果没有恰当处理,影响双方的互信,从而影响项目开发进程。同时需求变更也会在项目开发人员之间产生分歧,影响合作关系。
三、采取的对策
1.首先是预防
尽量做好需求分析工作,以期减少需求变更的频次,为此在需求分析阶段着重处理好以下问题,力图使需求分析的结果更接近目标。
(1)培养正确的需求意识。优秀软件产品建立在优秀的需求基础之上,而高质量的需求又来源于客户与开发人员之间有效的交流与合作。因此,双方的参与者都需要认识到:要想获得成功,自己需要什么,合作方又需要什么。只有这样,才能建立融洽的合作关系。因此,培养正确的需求意识是双方都需要努力的,而开发人员在这个阶段应该发挥更加积极主动的作用。
首先,需求分析人员应该接受一定的正规培训,以提高与人沟通的能力、缓解矛盾的能力、善于倾听和询问的技巧,以及收集整理资料的能力等。在参与具体项目时,分析人员也应主动学习一些项目所涉及的具体应用领域的基本知识,以更好地理解用户的需求。
其次,开发单位应该对那些不想花时间在需求分析上的用户明确指出:如果用户不能充分地支持并参与,项目很可能会失败;开发单位还可以通过学习一些前车之鉴的真实案例警告用户:低质量的需求分析可能导致严重的后果。通过对用户代表和管理人员的培训,使他们真正理解需求分析的重要性和忽略需求带来的风险,并对计算机系统有一个大体的了解,这样用户才能够主动地参与需求分析。
同时,正因为不可能一次就完全了解用户的需求,而且在系统开发过程中还需要不断地请用户参与,因此与用户的沟通是需要贯穿始终的。需求分析中所采取的一些策略可能会让用户觉得意外和难以接受。因此,需求分析人员需要对用户解释一些做法的必要性和合理性,以得到用户最大的支持与合作。
(2)从业务需求入手。用户认识到了需求分析的重要性,但可能仍然不知道从何处入手表达自己的需求。这时可以从业务需求入手,任何企业对自己的经营运作目标应该是比较清楚的,这样的经营背景让用户不仅有话说,也让开发者有章可循。需求分析不可以完全与它所处的背景相脱离,只有当系统真正置身于它的社会和组织环境中,它的需求才能清晰地反映出来。
(3)充分利用需求来源。有了以上需求背景,就比较容易做到有的放矢了。需求分析人员可以直接与系统未来的操作者探讨他们希望有什么样的软件;观察系统的潜在用户当前的日常工作以获取有价值的信息;系统的使用者可能有很多,可以将他们分类以简化需求;最后一定要与真正的决定者达成协议:对于有冲突的需求如何权衡,对于直接用户的众多需求如何取舍等。
同时,用户往往对计算机期望过高,认为计算机可以解决当前存在的所有问题,因此会提出很多的功能需求,并且希望在很短的时间内看到成效。但是,由于技术、人力等资源的限制,并不一定能够在设定的时间期限内满足用户所有的期望,这时就应该尽早确定出交付的产品应具备的最重要功能,即设定需求的优先级。
在这个阶段,可以采用UML中的用例图帮助用户和需求分析人员之间的交流。一个用例图描述用户可以用软件产品执行的一个任务。它不是从软件的性能和系统的行为方面出发,而是从用户到底能够用这个软件产品干什么入手。这样的方式用户比较熟悉,容易沟通;而且不会在需求分析的一开始就陷入过于细节化的设计,也有助于避免分析人员添加一些与所需任务无关的自认为很好的功能。
(4)提供选择方案。由于用户对软件系统缺乏经验,或者由于用户的运作机制还未完善,或者由于其他种种原因,用户可能仍然不能对一些需求做出明确的说明,收集整理的需求中可能仍然存在一些不确定因素。这时可提出几份比较详细的方案。附带不同做法的优点,供用户选择或者启发用户确定需求。
如果需求分析做得好,文档清晰且又有客户签字,那么后期客户提出的变更就超出了合同范围,需要另外收费。这个时候,开发方一定要据理力争,此时这并非要刻意赚取客户的钱财,而是不能让客户养成经常变更的习惯,否则后患无穷。
2.分级管理客户需求
软件开发项目中,“客户永远是对的”和“客户是上帝”并不完全的正确,因为在已经签定的项目合同中,任何新需求的变更和增加除了影响项目的正常进行以外,还影响到了客户的投入收益,所以有的时候项目经理反倒应该为客户着想。
对于项目中的需求变更,可以实行分级管理,以达到对需求变更的控制。
一级需求变更是关键性的需求,这种需求如果不满足,意味着整个项目不能正常交付使用,前期工作也会被全部否定。这个级别的需求是必须满足的,否则就意味着否定自已的项目成员和成员的所有努力,所以定为“Urgent”。
二级需求变更是后续关键性需求,它不影响前面工作内容的交付,但不加以满足,新的项目内容无法提交或继续,所以是“Necessary”。一般新模块关键性的基础组件,属于这个级别。
三级需求是后续重要的需求,如果不被满足会令整体项目工作的价值下降,为了体现项目价值,也是开发人员自已的技术价值的证明,所以定为“Needed”。一般性的重大的有价值的全新模块开发,属于这个级别。
以上三个等级是应该实施的,但时间性上可以作优先级的排列。
四级需求是改良性需求,没有满足这类需求并不影响已有功能的使用,但如果实现了则会更好,定级为“Better”。界面和使用方式的需求,一般在这个档次。
五级需求是可选性需求,更多的是一种设想,以及一种可能,通常只是客户的的一种个人喜好而已,定级为“Maybe”。
对于四级需求,如果时间和资源条件都允许的话,不妨做下去。对于五级需求,正如对它的描述一样做与不做是“Maybe”。
3.加强需求变更的控制
在需求分析阶段工作完成后,需求变更仍可以会发生,因此就要加强对需求变更的控制,主要有以下原则:
(1)建立需求基线。需求基线是需求变更的依据。在开发过程中,需求确定并经过评审后(用户参与评审),可以建立第一个需求基线。此后每次变更并经过评审后,都要重新确定新的需求基线。
(2)制订简单、有效的变更控制流程,并形成文档。在建立了需求基线后提出的所有变更都必须遵循这个控制流程进行控制。同时,这个流程具有一定的普遍性,对以后的项目开发和其他项目都有借鉴作用。
(3)成立项目变更控制委员会(CCB)或相关职能的类似组织,负责裁定接受哪些变更。CCB由项目所涉及的多方人员共同组成,应该包括用户方和开发方的决策人员在内。
(4)需求变更一定要先申请然后再评估,最后经过与变更大小相当级别的评审确认。
(5)需求变更后,受影响的软件计划、产品、活动都要进行相应的变更,以保持和更新的需求一致。
(6)妥善保存变更产生的相关文档。
这六大原则看起来简单,但真正实施起来有难度,还需要依据理论知识配合开发项目组的实际工作情况,在实践中不断摸索总结。
四、总结
软件项目的需求变更是对软件产品的质量、成本、工期带来巨大的影响。通过预防性措施和加强需求变更的控制与管理,将需求变更的频次大幅度降低,从而为软件项目的顺利实施打下坚实基础。
参考文献:
[1]王 莉 吴洁明:软件项目中的需求变更管理的研究[J].计算机技术与发展,2007,17(1):120~121
[2]王 强:软件开发项目中的需求变更管理[J].电脑知识与技术(学术交流),2007,(11)
1.实践教学缺乏系统性和针对性目前许多高校“软件工程”课程除了理论讲解外,也加入了实践教学部分。往往受学时所限,实践分为软件项目若干设计文档的编写和软件工程工具的实验练习。前者受缺乏相应的开发环境、教师虚拟客户不能很好地反应现实需求、理工科学生的文字表达能力不足等因素的影响,设计文档的编写不能很好提高学生能力;后者在一定程度起到了一定的作用,但对于培养学生分析问题、解决问题、管理和团体协作能力方面仍显不足。
2.评分模式单一软件工程采用了传统的闭卷考试方式,平时成绩占总成绩的30%,期末考试占70%。平时成绩=上课出勤情况(10%)+实验完成情况(10%)+作业完成情况(10%)。任课教师通过对不同的考核内容赋予不同权重来评价学生对软件工程课程的掌握情况,主要考核学生对课程基本知识的理解。此方法不足以提高学生实际动手的能力,更不利于激发学生实际软件设计开发的兴趣。
二、现有的教学方法的分析
针对上述问题,从事软件工程的相关教师从不同角度,对软件工程课程进行了改革。归纳起来主要有如下几种教学方法改革:
1.自底向上教学法在“软件工程”课程中应用授课方式主要是用倒叙的方式贯穿完整案例(包含警戒案例),以启发、讨论、辩论的形式讲授软件工程的原理、方法及过程,使学生不觉生疏,易接受,又符合IT从业人员的工作进程。[2]
2.模块化教学法在“软件工程”课程中的应用在尊重教学规律和学生个性发展的原则上,根据课程体系和内容之间的关系,将教学部分划分为若干独立的模块,确定模块之间的关联,针对不同的教学计划要求,采用不同的模块组合有选择地进行讲授和学习。[3]
3.案例教学法在“软件工程”课程中的应用软件工程案例教学是根据“软件工程”课程的教学目的和学生培养目标要求,教师选用相应的案例作为基本素材,引导学生对案例进行调查、思考、分析、讨论、设计、开发和交流等相关活动,在活动中教授学生软件工程的原理、方法及过程,进而提高学生分析和解决问题的能力,加深学生对基本理论知识的理解和掌握。[4]
4.项目驱动教学法在“软件工程”课程中的应用项目驱动教学法是案例教学法的基础上采用“案例导向、项目驱动”的教学方法。首先,教师根据要讲授的理论知识预先准备一个或者多个小的软件开发项目;然后,将学生作为主体,以软件开发项目的研发过程为引导,采用学生小组团队合作和学生个人独立完成相结合的教学形式,组织学生开展集体讨论并完成相应的实践性活动,在研发过程中同学和老师要对每位学生所完成的每个阶段任务加以点评、督促改进、分享经验等;最后,学生将成功的软件给予演示。
5.三位一体式教学法在“软件工程”课程中的应用根据学生的认识特点和该课程自身的特点以及对“软件工程”课程在计算机科学专业的定位、教材的选取、课程培养目标的分析下,采取以综合能力培养为中心、项目实践为标准,模板、案例、指导说明为辅助的三位一体式的教学思路。[6]对目前在“软件工程”课程改革中应用的五种方法针对改革侧重点进行汇总发现(见表1),单一的教学方法只是在理论教学、实践教学和考核方式某一方面发挥了很好的作用,而不能从全面发挥效果,而对于“软件工程”课程来说三者同样重要。
三、基于多元教学法的课程改革新模式
某一种教学模式改革已经不能满足现代“软件工程”课程教学的要求,只有将多元教学模式组合在一起,充分考虑各自对课程教学的优势,避其缺点,找到一种既能使学生具有良好的理论基础,又能充分培养学生实践能力,还能准确地考核学生的教学模式。本次课程改革就是本着这样一种思想,从理论教学、实践教学和考核方式三个方面进行多样化改革。
1.理论教学内容多样化
理论知识的学习在学生以后软件项目开发过程中具有必要性和重要性,软件工程学习过程中要重视基础和基本技能的培养。学生要具有开发软件项目的能力,首先要熟悉掌握软件工程相关的理论知识,特别是对如何按照工程化的方法系统地设计、实现、测试和维护大型软件,内容包括:软件开发的基本理论、方法和技术;其次是了解目前已有系统、工具和技术。(1)授课内容引入案例。教师在教学过程中引入与理论知识相匹配的实际案例,将比较抽象的软件工程原理、方法和技术转为具体生动的案例进行诠释,增强理论教学的艺术性、科学性、趣味性、形象性,使学生能够在课堂上深刻领会和理解软件工程的思想和方法,教学效果收到了事半功倍。(2)适时更新教学内容。近几年,软件原理、方法和技术发展较快,许多适应时展的软件不断涌出,而目前的教材虽不断改版更新,但其更新的速度远远跟不上软件工程的发展。因此,教师在进行理论讲解时,除了要教授学生基本原理、技术和方法外,还要时刻关注新内容的出现。(3)制作丰富多彩的课件。采用多媒体教学手段,在课件中插入图片、动画、声音、视频等多媒体元素,使教学内容更加充实和生动。(4)课堂小组讨论。从小问题到大问题,让学生参与教学过程,有机会发表自己的看法。课堂讨论和分析试验,使理论有实践作支撑,抽象的知识变得看得见,用得着,大大激发学生学习的兴趣和自信。
2.实践教学内容多样化
软件工程理论的讲解是课程学习和技能培养的基础,而软件工程中许多理论内容如果只是教师讲解不加以实践,内容本身就会变得空洞和不可理解,例如:软件复杂性计算、软件可靠性与安全性的测量标准、结构化的实现方法等都需要学生动手实践才能更好地理解知识本身的内涵。掌握概念、原理、方法和技术,熟练应用软件开发实践中的方法和技术是“软件工程”课程对学生的培养目标。(1)课程角色扮演。教师预先选择若干小项目,班内学生根据自己对项目熟悉情况选择项目名称,划分项目小组,每组人数不超过6人,每个项目小组成员根据自身特长选择不同软件工程角色,例如项目负责人、需求分析负责人、设计负责人、编码负责人、测试负责人和用户代表,进行项目分工。项目组成员按时完成自己负责任务,撰写相应文档。教师帮助学生分析和解决所遇到问题。在整个开发过程可以体现“学以致用”的思想,实现理论与实践相结合。(2)课程设计。课程设计主要是针对高年级学生在学习软件工程课程时开展的专项训练。课程设计采取在学校内模拟IT企业环境下完成来自企业案例或开发一些具有应用价值项目或学校教师承担的开发项目的部分开发工作,也可以是学生自选项目,整个课程设计阶段严格按照工程实施的基本思想来实施。(3)加强校企合作。一方面经常邀请软件公司长期从事软件设计、开发和项目管理的工程师和项目经理,给学生讲解自己在软件设计、开发和管理中的经验,高质量软件产品需要经过怎样的开发过程,软件生命周期中标准文档如何撰写等相关内容;另一方面,利用寒暑假时间,让学生走出去,到软件产品的研发单位实地实习。
3.考试方式多样化
传统的考核方式已经不能反映学生实际软件开发的水平,也与多样化的教学模式不相匹配,为此多样化的考核方式才符合现实需求,主要包括:笔试、课后角色扮演、课程设计和项目总结。(1)笔试占总成绩的35%,主要考查学生理论知识的掌握情况和学习效果。(2)课后角色扮演占总成绩的15%。由教师根据每位学生在课后角色扮演中的具体表现进行打分,主要由3部分取平均值组成:1/3*(整个项目的成绩+自己负责完成的文档成绩+组内其他成员负责完成的文档的平均成绩)。(3)项目总结或心得体会占总成绩的15%。根据学生在软件开发过程中所撰写的经验和教训总结报告、每个小组成员建立的个人开发记录或日志的实际情况,相互打分。
四、基于多元教学模式课程改革方案
基于上述改革理念,按照软件工程开发原理、方法和技术,选用典型项目案例,将学生按照项目分成若干个小组,每组人数不超过6人。每个小组对应着一个具体的项目,每个人对应着一个具体工作过程,按照如下步骤进行多元教学。第一步,教师选用合适的教学内容,制作丰富多彩的课件,对学生进行基本理论和基本技能的讲解。在每一个软件生命周期结束后,教师进行案例场景描述。教师按照理论知识的内容,选择相应的案例进行描述,学生将所学内容运用到相关案例中。教师通过案例让学生明白理论知识如何应用,学生通过案例体会到小项目中所学的原理、方法和技术是如何实现的。第二步,课后角色扮演。学生通过分组讨论的方式,完成项目分工,明确自己在项目中所扮演的角色。所有的任务通过集体讨论的方式,决出所要完成的任务,并由相应的角色人实际操作完成。例如,需求分析一章内容,学生课后进行项目小组讨论,决定需求分析的内容,进行相应的需求分析,并由扮演需求分析人员的学生完成需求报告。软件开发过程需要整个团队的通力合作,根据学生的性格、表达能力、开发能力、理论基础掌握情况等方面进行人员分组,将具有不同特点的学生组成一个团队完成项目开发。这种团队合作的方式,既能发挥学生各自的特长,又能培养学生的团队合作精神。第三步,课程设计。当全部内容讲解完成,就可以开始长达2周的课程设计内容了。这段时间要求项目小组,彻底完成一个由教师虚拟的项目。此步骤中,主要培养学生良好的科研习惯,在开发过程中及时总结经验和教训,建立个人开发记录或日志,理论联系实际学着开发软件。第四步,学生总结,教师点评。学生经过多个教学环节后,每个团队在一定程度上完成了各自的项目任务,对各自团队的成果进行总结。教师听取每个团队的汇报后,从横向和纵向两个方面对项目成果之间进行比较,从而让每一位学生明白自己在团队中发挥了什么作用,自己哪些方面不足。第五步,请进来,走出去。通过学校和企业合作的方式,一方面经常邀请软件公司长期从事软件设计、开发和项目管理的工程师和项目经理,给学生讲解自己在软件设计、开发和管理中的经验,高质量软件产品需要经过怎样的开发过程,软件生命周期中标准文档如何撰写等相关内容;另一方面,利用寒暑假时间,让学生走出去,到软件产品的研发单位,实地实习。
五、结束语
关键词:计算机;软件开发;编程语言
一、引言
对于计算机应用软件的研究与开发来说,选择一项合适的编程语言对其影响十分深远,编程语言的适配度将决定计算机应用软件的优质度。其中编程语言是一项十分复杂的工作程序,它既影响着计算机应用软件的开发难度与开发效率,也影响着计算机应用软件后期的维护难度与维护效率。现阶段随着计算机技术的不断发展,编程语言也得到了大力研发,编程语言的种类也越来越多,每一种不同的编程语言都具有着其独特的性质与作用。
二、结合相关计算机应用软件的具体开发结构进行选择
一般情况下,在进行计算机应用软件的相关开发编程语言的选择过程中,往往都是一个具体的计算机应用软件对应一个固定的编程语言,但是在特殊情况之下,也会存在研究开发一个计算机应用软件时同时选择多个不同的编程语言的情况。出现这种现象的主要原因还是在于在一个具体的计算机应用软件的开发过程中,该应用软件的结构以及功能都会随着区域和时间的变化而不断发生变化,换言之,在一个应用软件中的不同区域所需要的编译效果也是不同的。因此,在进行计算机应用软件开发中的编程语言的选择过程中,一定要结合相关应用软件的具体需求与实际结构变化选择最合适的编程语言。除此之外,当一款计算机应用软件在开发过程中选择了一项或几项最合适的编程语言之后,并不意味之该应用软件在后期更新与维护过程中不会再选择或者替换其他的编程语言,也许在该应用软件开发的时候这几项编程语言十分适合该软件,但在两年或者更久的时间之后这项编程语言就不一定会适合该应用软件的更新与二次开发。因此,一个计算机应用软件的编程语言并不是一成不变的,在为计算机应用软件的开发选择编程语言的时候一定要结合应用软件的具体性质与结构变化进行实时选择与实时更新。比如,为了最大限度地提高所选的编程语言对相关计算机应用软件开发的适配度,相关软件开发人员可以遵循以下方式进行具体的编程语言的选择。首先技术人员需要对将要开发的应用软件的整体结构进行总体的把握与设计,其中不仅包括该应用软件所开发的主要功能以及属性,还包括该应用软件的延伸功能与后期维护等问题。其次软件开发人员还要在进行应用软件首次语言编写的过程中就将应用软件的所有功能以及延伸功能都充分挖掘出来,并结合应用软件的功能需求选择最佳的编程语言。比如相对于C语言与C++语言来说,JAVA语言更适合具有简单功能需求的应用软件开发,而C语言和C++语言则相对适合用于开发具有相对繁琐功能的计算机应用软件的开发。最后还要考虑所开发应用软件的数据规模,并根据不同的数据规模来选择合适的编程语言,比如如果是开发相对功能比较简易的计算机应用软件的话,则更加适合选择ACCESS语言。通过整体结构把握与具体功能把握相结合的方式来选择计算机应用软件开发的编程语言,一方面既有利于提高相关计算机应用软件的开发效率,另一方面也可以在一定程度上降低该应用软件的后期维护难度。
三、根据对相关计算机软件开发编程语言的熟悉程度进行选择
对于很多计算机软件开发人员来说,都希望能够在每一次的计算机应用软件的开发过程中进行勇敢的尝试与创新,从而实现自己的职业理想与自我完善。但是在实际的计算机应用软件开发项目中,尤其是对于非专业研究类的应用软件开发项目来说,开发人员在选择对应的编程语言的时候还是要尽量从自己知识范围内的熟悉掌握的编程语言入手。这主要是因为在计算机应用软件的开发过程总选择熟悉的编程语言能够在软件开发初期就帮助开发人员计算与估量出大概的项目进度表。一方面可以有效避免在计算机应用软件开发过程中出现其他的不必要的变数,使得整个项目完成得更加具有计划性与体系性;另一方面也可以有效提高计算机应用软件开发的效率与质量,最大限度地避免各种意外的发生概率。因此,软件开发人员的技术储备将决定一个计算机软件开发中所选用的编程语言的适配范围与选择广度,对于计算机应用软件的开发与后期维护来说,当然是所选择的编程语言范围越广,开发与后期维护的难度也就越低,效率也就越高。因此相应地软件开发人员的自身知识与技能储备在计算机应用软件开发的编程语言选择上就发挥出了至关重要的作用。只有不断提高软件开发人员的技能储备,才可以确保在相关应用软件开发编程语言的选择过程中拥有更多的选择,从而最大限度地避免在开发过程中可能会遇到的各种问题。比如,为了提高软件开发人员对相关编程语言的熟悉程度与掌握程度,从而在计算机应用软件开发时能够拥有更多的编程语言可以选择,相关计算机软件开发公司要提高对相关软件开发人员的技术储备与知识储备的考察强度与审核力度。首先针对于具有不同特长的软件开发人员,即可以十分熟练地掌握几项编程语言,但对于其他的编程语言都不太了解,这类技术人员其实已经十分优秀,但为了进一步提高与完善其综合水平,公司相关部门可以就这部分技术人员开展互助小组活动。换言之,掌握不同编程语言的两个或者三个技术人员可以结成学习对子或者学习小组,互相学习对方所熟练掌握的编程语言,从而切实达到互相进步的目的。其次还可以通过科普讲座的方式,让不同的软件开发人员对于不同的编程语言都能够有一个更加深入的了解,不断丰富软件开发人员的专业技能与综合水平。通过这种方式,软件开发人员所熟悉的编程语言将会得到一个质的提升,那么在进行计算机应用软件开发编程语言的选择时,也将会大大提高选择的广度与深度,有利于提升应用软件的开发效率与开发质量。
四、综合考虑不同编程语言的特性进行选择
每一种不同的编程语言都有其存在的理由与价值,这而在相关计算机应用软件开发中编程语言选择的过程中,具体应用软件编程语言的选择则要充分考虑到不同的编程语言的特点与性质。当前阶段比较常见的计算机应用软件开发所用的编程语言主要有以下几种,其中分别是C语言、C++语言、JAVA语言、ACCESS语言以及PESCAL语言等几种。以上这几种不同的编程语言都有着其独特的使用优势与适用范围。其中应用最广泛的是C语言,该编程语言是所有的计算机语言里最常用的一种,从开始出现截止到目前为止已经拥有四十几年的应用历史。而C语言最大的优势就是拥有十分丰富的运算符、数据结构,但是语法却十分简洁且语法要求也相对较低,功能十分强大。除此之外,C语言还是一种兼容能力很强的编程语言,通过C语言编程开发的计算机应用软件可以十分方便地移植到其他类型的计算机上。因此相关计算机软件开发人员在进行应用软件的编程过程中应该以提升工作完成质量为前提,以提升工作完成效率为目标,在结合实际应用软件开发需求的基础上,充分考虑不同编程语言的优势与特色,从中选择最合适的编程语言,选择最规范的软件开发程序,从而达到顺利完成工作任务,提高工作效率的目的。比如,以C++语言为例,作为C语言的拓展与延伸,C++语言在汇聚了C语言的众多优势与特点的基础上,又在应用软件的编程过程中注入了新的编程思想与编程模式,可以更加贴近与满足计算机应用软件的开发需求。作为一种全新的编程语言与编程形式,C++编程语言也在计算机编程领域得到了广泛的应用。结合C++语言的特色与优势,软件开发人员在计算机应用软件开发的过程中就可以做出更加合适与科学的选择。尤其是在大部分的计算机应用软件的开发过程中,针对于具体的硬件资源的使用是十分有限的,而且在很多时候收到运行环境与开发平台的限制,很多编程语言都无法实现很好的兼容,这时就完全可以选择C++语言作为应用软件的主要编程语言。C++语言可以在有限的外部环境与硬件资源条件下实现对环境与资源的最大化利用。
五、总结
综上所述,计算机应用软件的研究与开发是一项极其艰巨与复杂的工程,很多因素都会对其最终的研发效果与研发质量产生直接或间接的影响,其中编程语言的选择对于这项工程的完成则发挥着至关重要的作用。因此,计算机软件开发人员要不断提高自身素养与技能水平,充分掌握各种编程语言的应有优势与适用范围,在结合具体的计算机应用软件开发需求的基础上,选择最合适的编程语言,从而实现计算机应用软件的高效率与高质量开发。
参考文献
[1]王树琴.计算机应用软件开发中编程语言的选择研究[J].软件设计开发,2017(19):219.
关键词:软件项目;工作量;评估方法;单元库;功能点
1概述
在日常工作中,经常要对一系列开发项目(包括维护类合同、框架合同、基于工单驱动的临时需求开发等)进行工作量评估与核算。软件开发项目的工作量核实,工作量大、指标数量多,各类核减因子关系错综复杂,让核算专家或软件项目造价者战战兢兢、如履薄冰。软件项目工作量的估算,对项目的预算、成本控制、企业经费决策、项目审计等,具有重要影响。在进行软件项目工作量估算时,要掌握好5个要点:(1)工作量估算方法的选择:根据不同的应用场景进行估算方法的选择。(2)正确看待估算结果:估算结果应是一个范围值,而不是一个固定值。(3)交叉验证:同一个项目,可以选择多种方法进行估算,选择最有利于甲方的估算方法,但也应获得乙方的认可。(4)估算修正:对假设条件进行检查与修改,避免蝴蝶效应。(5)估算结果的沟通:工作量的估算,不是一项一蹴而就、一劳永逸的工作,需要不断沟通和多次迭代。结合日常生产中的工作经验,本文对软件项目工作量估算方法进行了初步分析与探讨,一是对前期的工作进行总结,二是为后期工作的开展做铺垫。本文研究的目的在于,让工作量的评估或估算,拥有更科学的方法,而不是继续拍脑袋。
2软件开发项目的工作量核算
2.1基于单元库的工作量核算
很多软件项目的费用,采用最简单最原始的计算方式:费用(单位:元)=工作量(单位:人天)*单价(单位:元/人天)。其中,总的费用预算由财务部制定;工作量由计划部规划,由应用部门或生产部门进行最终确认;单价由采购部谈判确定。各个部门各司其职,共同目的是将总费用控制在财务部所规定的预算内。所谓单元库,就是根据软件的目的,细化到不同的功能模块,为每个模块设置一个比例,从而实现对整个项目工作量的评估。如某小型软件项目,按照其规范,软件具有3个功能模块:通用界面(视图展示)、数据管理(后台数据分析)、告警监控(事件管理与推送),其单元库模型如表1所示。
2.2基于功能点识别的工作量核算
在软件总费用的逻辑模型中,软件的成本由4个部分组成:直接人力成本、间接人力成本、间接非人力成本、直接非人力成本,其中,直接人力成本指项目组成员的工资、奖金、福利等人力资源费用;间接人力成本指服务于研发管理整体需求的非项目组人员的人力资源费用分摊,如项目经理、管理人员的费用;间接非人力成本指服务整体人员而产生的非人力费用分摊,如房租、水电、物业等;直接非人力成本指服务于组员的相关费用,包括办公费、差旅费、培训费等。在该逻辑模型下,软件项目成本的计算公式为:SDC=(S*PDR)*SWR*RDF/176*F+DNC其中,SDC指软件的总成本;S指软件的规模,单位是功能点数;PDR指生产率,单位为人时/功能点;SWF指软件因素调整因子;RDF指开发因素调整因子;176指全月的小时数,每月工作22天,每天8小时,22*8=176;F指人类成本费率;DNC指直接非人力成本。在该公式里,规模S需要通过功能点的统计进行计算。常用的是预估功能点和估算功能点。所谓预估功能点,是指在计算功能点时,仅计算ILF和EIF,一般地,设置ILF=35FP、EIF=15FP。所谓估算功能点,是指在计算功能点时,全面计算ILF、EIF、EI、EO、EQ,一般地,设置ILF=10FP、EIF=7FP、EI=4FP、EO=5FP、EQ=4FP。这里,ILF和EIF属于数据功能类别,其中,ILF指内部逻辑文件(本系统内维护的业务数据),EIF指外部接口文件(本系统引用由外系统维护的业务数据);EI、EO、EQ归属于事务功能数据,其中,EI指外部输入(会带来本系统状态的改变,如增、删、改等操作),EO指外部输出(对数据加工后进行输出或呈现),EQ指外部查询(不进行任何加工)。
2.3其他估算方法的工作量核算
工作量的估算,不是一层不变的,可以根据实际情况采用不同的估算方法。除了常用的单元库、功能点工作量估算方法,还可以使用其他方法,说明如下:(1)方程法:将工作量描述成y=f(x1,x2,…xn)的形式,通过确定变量X,最终达到确定整个项目的工作量Y。方程法基于基准数据进行建模,常用于行业数据与企业数据相结合的项目开发场景。(2)类比法:寻找与当前项目高度相似的项目,如项目的功能、应用场所、应用范围、使用人员、使用人员的情况、厂商背景等均具有很大的相似性。该方法基于基准数据,对差异部分进行调整,通常以50百分位数(而非均值)为参考。(3)类推法:通过不同项目的某些相似性类推出其他项目的相似性,从而预测出项目之间在其他方面存在类似可能性的方法。说到底,类推法是基于量化的经验法,理论上,这是最可靠的估算方法。而现实中,估算的结果常常产生极大的偏差。(4)基于WBS的软件工作量估算方法:一种目标细化管理方法,也是一种经验法。WBS是WorkBreakdownStructure的简称,中文意思是工作分解结构,创建WBS是把项目按阶段可交付成果将项目工作分解成较小的,更易于管理的组成部分的过程。(5)DELPHI法:一种背靠背成本估算方法,即函询调查法,将提出的问题和必要的背景材料,用通信的方式向有经验的专家提出,然后把他们答复的意见进行综合,再反馈给他们,如此反复多次,直到认为合适的意见为止。
3结语
软件项目的工作量评审,一直是日常项目管理的重点。该项工作在我省项目管理工作中,获得了一致的支持和广泛的应用,取得了良好的效果。下一步将从两个方面开展工作。一方面,继续对现有的工作量评估方法进行优化,对不同的评估方法进行组合使用,检查评估效果;另一方面,在大数据和人工智能时代,引用新型技术,试图开发新的评估方法,让工作量评估手段更加智能化。
参考文献:
[1]顾逸宸,朱祯,史成霞,司小平.综合运用护理时数评估和工作量考核系统进行绩效改革的尝试与体会[J].中国继续医学教育,2018(04).
[2]朱明英,姚文胜,邢豫,陈春华.基于功能点法的软件工作量评估方法研究与应用探讨[J].现代计算机(专业版),2017(11).