软件项目管理活动

2024-07-26

软件项目管理活动(共11篇)

软件项目管理活动 篇1

1 引言

伴随科学技术的飞速发展, 人类社会的各个领域中越来越多地使用先进的计算机技术。特别硬件水平的提高, 对软件的研发提出了更高的要求。软件产品规模日益庞大, 复杂度越来越高, 开发周期越来越短, 质量要求越来越高。多年来许多大型软件项目研发失败的教训提示我们, 只有在软件研发过程中进行科学有效地管理才能确保软件项目成功。软件项目管理者要把握住管理活动中的关节点, 善于用现代管理学和软件工程的理论方法来管理软件项目。

2 软件项目管理

所谓管理就是通过计划、组织和控制等一系列活动, 合理地配置和使用各种资源, 以达到既定目标的过程。简单地说, 就是通过各项管理职能有效地组织各种管理要素, 达到组织的目标。由于软件工程是一门工程学科, 对软件项目按照管理学的要求进行管理也十分必要。软件项目管理先于任何技术活动之前开始, 并且贯穿于软件的整个生命周期之中。为了使软件项目能够按照预定的成本、进度、质量顺利完成, 必须对成本、人员、进度、质量、风险等进行分析和管理。

美国项目管理协会在项目管理知识体系中指出每个项目管理过程都是一系列活动, 要用项目管理过程来组织项目管理中的活动。由于软件项目的实现手段和涵盖内容与通常的项目有所不同, 综合考虑这些因素, 软件项目管理体系一般可分为立项、计划、实施、评估、推广和维护六个阶段。每个阶段又有不同的管理活动和内容, 本文侧重分析以下三项管理活动:项目规划、质量管理和软件成本估算, 只有处理好这些活动才能提高开发效率和保证软件的质量。

2.1 项目规划

对一个软件项目的有效管理取决于对该项目进展状况的全面规划[1]。规划过程从评估影响项目的各种约束条件 (项目的交付日期、现有的人员情况、总体预算等) 开始。对这些制约因素的评估要考虑项目的实际情况, 如项目的结构、规模和功能分布。

管理者要估算完成各项活动所需的时间和资源, 并按照一定的顺序把它们严密地组织起来。把一个项目所有的工作分解为若干个独立的活动, 并判断完成这些活动所需的时间。协调这些活动并使人力资源得到充分利用。正常情况下, 项目的活动要设置时间限制, 各项活动既不宜太细 (至少持续一个星期为佳) , 又不宜过长 (一般不超过八至十个星期) 。项目规划中还要定义分隔任务的里程碑和可交付的文档。接下去规划过程进入一个循环:拟定项目进度表;各种活动按照进度进行;在一段时间之后 (2~3周) 检查项目的进展状况, 注意项目进度是否明显偏离既定的进度, 并不断修改计划。管理者要根据本单位制定的项目管理规程确定需要编写各个计划, 通常包括项目计划、质量计划、有效性验证计划、配置管理计划、维护计划和人员开发计划等。根据需要其中部分计划可归入项目计划中。项目计划通常由项目经理编写, 主要包括可用的资源、工作分解、完成工作的进度安排及项目里程碑和交付的文档, 等等。

2.2 质量管理

2.2.1 质量管理概念与影响质量的因素

软件质量是“软件与明确和隐含定义的需求相一致的程度”[2]。软件质量管理就是对软件开发过程进行的独立的检查活动, 贯穿项目开发的各阶段。

从管理角度来看, 影响软件质量的主要因素可根据产品活动分为三类:

1) .产品运行

a) 正确性;

b) 健壮性;

c) 效率;

d) 完整性;

e) 可用性;

f) 风险。

2) .产品修改

a) 可理解性;

b) 可维修性;

c) 灵活性;

d) 可测试性。

3) .产品转移

a) 可移植性;

b) 可再用性;

c) 互运行性。

2.2.2 质量管理的主要活动

软件公司的质量管理通常包括三个主要活动:

1) .质量保证。建立起机构质量规程和标准的整体框架。这些标准包括产品标准和过程标准。产品标准用于待开发的软件产品, 包括文档标准和编码标准。过程标准定义了软件开发必须遵循的过程, 包括对描述、设计和有效性验证过程的定义、以及对在这些过程中产生的文档的描述。

2) .质量规划。选择适当的质量规程和标准, 改写使之适用于某一特定的项目。

H u m p h r e y提出质量规划的结构框架, 包括:产品介绍、产品计划、过程描述、质量目标以及风险和风险管理。

3) .质量控制。定义并设计质量过程, 确保软件开发团队严格遵守项目质量规程和标准。

可以通过监督检查整个软件开发过程来确保质量。此外用质量评审和自动化的软件评估来检查项目可交付的质量, 也是对质量控制的有益补充。

2.2.3 质量测量

鉴于质量评审昂贵、耗时并不可避免地推迟软件系统完成时间, 因此可以利用工具来处理软件设计或程序, 并对软件质量进行自动评估。这种方法就是软件测量, 即对软件产品或软件过程的某种属性进行量化, 在得到的数据之间以及数据和机构的通用标准之间进行比较, 从而得出有关软件或软件过程质量的结构。对软件系统、过程或相关文档的任何类型的测量称为软件度量。

2.3 软件成本估算

2.3.1 软件成本估算基本内容

软件成本估算的目的是要客观地、精确地预测软件研制单位的开发成本。估算通常要确定完成一个活动的工作量、时间和总成本。开发总成本有三个方面, 一是包括维护在内的软硬件费用;二是差旅费和培训费;三是工作成本。目前软件公司中主要参照工作成本作为报价的主要依据, 当然它不仅包括支付员工的薪水, 还包括机构动作的管理费用等。

2.3.2 生产率及工作量估算技术

在估算过程中, 首先要评估软件工程师的生产率, 可以使用以下两种方法来度量:

1) .面向规模的度量。根据活动输出的量来度量。通常是计算源程序代码行数。

2) .面向功能的度量。根据移交软件总的功能数来度量。功能点和对象点是最为常用的两种度量指标。

对软件系统所需工作量估算可采用以下几种技术:

1) .算法成本模型。用与一些软件度量相关的历史成本信息建立项目成本模型, 由度量到估计值, 预测所需工作量;

2) .专家评判。通过领域专家和软件开发技术专家进行估算, 并进行比较和探讨, 反复进行估算直至一致。

3) .类比估算。类比相同应用领域的其他项目进行估算。

4) .帕金森法则。规定所有可用的时间都工作, 由可用的资源而不是客观的估算来决定成本。

5) .根据客户预算报价。估算出的工作量依赖于顾客的预算, 而不是软件的功能性。

基于项目的规模、软件工程师的数量以及其他的过程和产品要素的估算, 用数学公式预测项目的成本, 就是算法成本建模。COCOMO模型是世界上应用最广泛的一个软件成本估算模型, 这是一个比较经典的经验模型。其基本思想是, 以一系列输入量作为基础 (与软件的规模和生产率相关的因素) , 导出软件开发所需的人力费用。其改进的CO CO M O 2模型公式为:

其中, E是开发工作量 (以人月为单位) , a是模型系数, KLOC是估计的源代码行数 (以千行为单位) , b是模型指数, fi (i=1~17) 是成本因素。其中成本因素包括:

1) .产品因素

a) 要求的可靠性

b) 数据库规模

c) 产品复杂程度

d) 要求的可重用性

e) 需要的文档量

2) .平台因素

a) 执行时间约束

b) 主存约束

c) 平台变动

3) .人员因素

a) 分析员能力

b) 程序员能力

c) 应用领域经验

d) 平台经验

e) 语言和工具经验

f) 人员连续性

4) .项目因素

a) 使用软件工具

b) 多地点开发

c) 要求的开发进度

3 结束语

软件项目是一项系统工程, 对实用性和可靠性有着现实的要求, 这一特殊性决定了管理工作的复杂性。软件项目管理者既要掌握科学的管理方法, 又要注重在实践中总结经验, 从而形成一套符合本单位特点的切实可行的管理方法, 为软件项目的成功研发奠定坚实的基础。

摘要:善于把握软件项目管理活动中的关节点, 是确保软件项目成功的关键。介绍了软件项目管理的基本内容, 分析了软件项目管理活动中的项目规划、质量管理和软件成本管理三项主要活动, 以及这些活动中相关的方法和手段。

关键词:项目管理,项目规划,质量管理,软件成本估算

参考文献

[1]Ian Sommerville;程成译.软件工程[M].北京:机械工业出版社.2007.

[2]张海藩.软件工程导论 (第四版) [M].清华大学出版社.2005.

软件项目管理活动 篇2

一、活动背景

当今是信息时代,我们的生活也逐步信息化。而计算机是迅速获取大量信息的平台,计算机丰富了我们的生活,使我们的生活变得多姿多彩。所以对计算机方面的知识进行一定的了解显得相当必要,尤其是作为高校的研究生来说,更为重要。在学习的过程中我们需要上网查找资料学习;生活中我们上网和朋友聊天,网上购物;使用FLASH制作动画,处理图片和声音,看新闻国家关注国家大事。丰富了我们的知识,开阔了我们的视野,令我们了解到世界之大,知识之广。为了进一步提高我们生活的质量与便利,得加强学习计算机方面的知识,提高师大学子的风采。

二、活动目的通过计算机软件技术知识的培训,力求以信息部成员的软件技术知识和学习经验,激励在校研究生积极学习一些自身常用的软件技术,特别是能让研一新生更好的培养学习积极性,提高学习效率。同时我们也想通过这种方式,挖掘软件技术方面的精英,为在校研究生分享你所精通的软件技术。希望通过此次的培训,提高研究生的生活的质量,促进广大研究生的综合素质全面发展,成为现代社会需要的人才。

三、活动主题

技术在手,衣食无忧

四、活动时间

2011年11月 底

五、活动地点

数理与信息工程学院报告厅

六、活动内容

于11月底,将初次开展此次活动。主要培训的软件有:光影+PS(主要用于处理图片等),flash(用于制作课件,动画等),此次活动结束后,若还想继续学习的同学,还可以参加信息部每个星期天的内部人员互相学习的课程。

七、活动对象

在校研究生

八、宣传方面:

1.宣传部准备节目单与宣传稿,于活动前发布于浙江师范大学研究生院网站首页(或活动通知栏);

2.宣传展板、海报,粘贴于研究生公寓门口;

3.活动过程邀请宣传部拍照摄像,并及时将活动总结发布于浙江师范大学研究生院网站首页。

九、预期效果

软件项目管理活动 篇3

【关键词】计算机音乐软件 幼儿教育 应用分析

一、引言

21世纪,随着信息技术与网络技术的不断发展,引发了人们对教育事业的高度重视。幼儿教育是对于儿童实行的第一阶段教育,也是国民教育最重要的一部分。近年来,人们将计算机音乐软件应用到幼儿的教育中受到好评,因此计算机音乐软件在开发与利用上也越来越多。计算机音乐软件就是电脑音乐软件,它是一种专门为制作音乐而设计的计算机程序,计算机音乐是电子音乐的延伸与改进,也是计算机进入音乐领域的一种创新技术。它对幼教活动中的作用也是很大的,其中包括:第一,对社会发展有积极的作用,也对幼儿创新能力的提高起至关重要的作用;第二,对幼儿园教学模式的改革有优化作用,也可以在音乐教育活动中提高教育的质量;第三,对幼儿综合音乐素养有促进作用,利用音乐软件辅助幼教让音乐教育更加生动。本文就计算机音乐软件在幼教活动中的应用进行详细的阐述。

二、计算机音乐软件在幼教活动中的应用

(一)音乐软件中剪辑功能的应用

在以往传统幼儿园教学过程中,教师可以采用的教学方法很少,在教学实践中常用的教学方式主要包括:语言指导法、教师示范法、游戏娱乐法等。这些方法在利用计算机音乐进行辅助教学提高幼儿音乐的能力,教学效果更好。计算机音乐软件的应用,适合于一些歌唱类、音乐欣赏等活动。这些都容易被幼儿接受,也能够很好地吸引幼儿的注意力。在音乐软件的帮助之下,对幼儿教育过程中出现的问题就可以得到有效的解决。音乐软件中剪辑功能是音乐软件中最常见的功能之一,在音乐软件中有很多软件都可以进行剪辑操作,比如在歌唱活动的时候,可以将教师演唱的部分录制下来重复地放给幼儿听,也可以对演唱的音乐进行分句剪辑,然后再将分句后的句子与伴奏结合起来,就能让教师节省很多的精力,将录制的歌曲重复播放,让幼儿更好地学习演唱歌曲,教师就能有充足的时间对幼儿唱歌进行细致的指导。教师应用剪辑功能,使幼儿在学习歌曲时更加快捷与方便。

(二)音乐软件中录音功能的应用

对幼儿实行音乐教育,可以在一定程度上提高幼儿的创新能力与审美能力,让幼儿真实地感受到来自音乐世界的力量。利用音乐软件来辅助幼儿的音乐教育,能让音乐教育更加丰富、生动。音乐软件中录音功能的应用,可以让教师对幼儿演唱时的声音进行分别录制,这样有效地帮助幼儿良好地分辨自己与其他同伴的声音区别。幼儿的好奇心是高于成年人的,他们对自己的声音很陌生,并且想要知道自己的声音和别人的不同之处。因此,录制幼儿歌唱时的声音不但能够满足幼儿的好奇心,也能在一定程度上提高幼儿对音乐学习的兴趣,还能充分训练幼儿的听力与专注力。同时,利用音乐软件中录音的功能,可以让幼儿在课余时间听自己喜欢的歌曲,如在活动时可以听一些较为欢快的歌曲,在睡眠时听一些柔和的歌曲。教师还可以录制幼儿日常生活中的歌曲作为课堂的训练作业,让幼儿能对唱歌感到快乐而不是产生压力与恐惧,并且作为一种爱好去对待。

(三)音乐软件中自动伴奏功能的应用

自动伴奏软件在专业意义上讲,是针对演艺行业中艺人专业的软件,它提供演艺视频与伴奏的下载。目前这种音乐软件也应用到了幼儿教育的活动中。在计算机音乐软件中,有很强大的自动伴奏功能。教师可以通过一些自动伴奏软件来对教学的歌曲进行伴奏配置,可以利用这些软件对歌曲的伴奏进行编辑,同时还能够改变歌曲的速度与节奏等等,让幼儿对歌曲的认识达到更高水平,从不同的歌曲中体会不同伴奏风格带来的感受。例如,对于较为欢快的儿童歌曲,能够在计算机音乐软件上找到各类不同风格的歌曲伴奏。如果教师想要为幼儿提供独特的歌曲形式,就可以下载这类音乐伴奏,让幼儿对音乐有新的认识与理解,对幼儿以后接触与适应新事物的能力也有很大的帮助。

三、结束语

综上所述,通过利用计算机音乐软件对幼儿音乐教育进行辅助教学,是一种实用、有效的教学方式。在音乐的情境中开展教育活动已经成为目前的主要形式,也有很广阔的发展前景。我们相信只要充分合理地利用计算机音乐软件,就能够培养幼儿积极、独立、自主的习惯,也对幼儿成长中的情绪和性格有所帮助,同时也对幼儿的记忆力、理解力更有帮助。综上所述,在幼儿教育中开展音乐教育,不仅仅是教育的需要,也是社会发展的需要,相信未来计算机音乐软件会有更好的发展。

【参考文献】

[1]彭鸿.浅谈计算机音乐软件在幼教活动中的应用与研究[J].音乐时空,2015(09) .

[2]姚琛.幼儿园音乐教学游戏化研究.学科教学(音乐)[D].湖南师范大学,2014(学位年度).

[3]杜亦林.幼儿园音乐教学游戏化研究[J].课程教育研究,2014(04).

软件项目管理活动 篇4

一、支部党建工作现状及存在问题

软件与艺术设计学院学生党支部, 目前有成员4人, 都是由辅导员兼职。因为都是辅导员, 所以在工作中我们把党建工作结合学生工作共同开展, 一直遵循“志愿服务常态化, 感恩教育全面化, 社团活动精细化, 技能培训普及化, 就业指导人性化”这样的工作要求。由于党员质量工程的推进, 目前党支部的发展任务比较少。因为工作分工的问题, 成员又都是兼职, 所以支部工作大部分压在支部书记一个人的肩膀上, 因而创新工作的开展、精品项目的创建推进的比较缓慢。

个人认为这些问题的产生是由于成员的认知造成的, 因为有的人认为“党建工作任务较轻、内容较虚, 完全就是为了应付性的工作”;有的人认为“党建工作就是发展几个学生党员, 没有什么其他工作”。当然还有成员因为是兼职的原因, 不会把分到的任务当作一项主要工作来抓。也有是因为支部人数的原因, 有些成员确实能力不足素质不够。

二、在党建品牌活动建设中引入项目化管理的可行性分析

1. 项目化管理与党建活动对象目的的契合。

在高职院开展党建活动主要对象是高职学生, 主要目的是培养学生的爱国情操、职业道德、专业素养、人文精神。项目化管理采用多层次目标管理, 充分利用党建活动开展时间短的特点, 项目负责人及其成员在目标的指导下, 分工合作、相互配合, 共同完成总体目标

2. 项目化管理与党建活动管理过程的契合。

党建活动一般经历活动策划、申报、审批、实施、总结和评价这几个阶段。而项目化管理的开展则包括规划、执行、监督、收尾阶段, 这些过程相互影响、相互协调, 具有综合性, 要求项目管理者对项目过程与过程之间配合得当、衔接自然, 才能实现项目的最终目标。

3. 项目化管理与党建活动组织机构的契合。

高职院党建活动的主体是学生, 同时也是校园文化活动的设计者、参与者、组织者和传承者。在项目化管理当中, 完全可以将学生培养为项目负责人, 将项目化管理模式在学生管理工作中拓展。

三、党建品牌活动中引入项目化管理取得的成效

为切实践行党的十八大和十八届三中、四中全会精神, 软件与艺术设计学院党总支组织成立了以学生党支部为主体的“同心·志愿”团队, 积极开展服务学校中心任务、服务师生、服务社会的各类志愿服务活动, 推动服务型党组织的建设。2014-2015学年第一学期主要开展了服务学生学业的“同心同力, 学业远航”志愿活动。

1.“一帮一”结对活动。

召开重修学生会议, 树立正确心理预期。2014年10月, 全体学生补考成绩公布后, “同心·志愿”团队召开了全体重修学生会议, 通过PPT深入浅出的介绍学籍管理办法的相关内容, 分析重修考试无法通过的几种因素, 强调了通过重修考试对学业困难学生的重要性, 帮助他们确立对重修正确的心理预期, 树立通过重修的信心。

区分专业辅导, 强化先锋模范作用。“同心·志愿”团队依照专业特点, 为每位重修学生安排一名入党积极分子, 入党积极分子在日常学习当中负责督促并帮助各自的辅导对象, 同时定期向培养联系的党员同志汇报情况。“同心·志愿”团队召开全体重修学生及入党积极分子会议, 公布结对情况, 并分发给每位入党积极分子志愿服务记录本, 要求将重修安排等信息记录到志愿服务记录本上, 以便持续开展志愿服务。通过“一帮一”结对活动, 强化了党员及入党积极分子的先锋模范作用, 增强了责任意识。

2.“英语三级”助学活动。

精心筹备, 短期提升。未通过英语等级考试的学生人数较多, 而这部分学生已无相关英语课程, 短期内要想有提升并突破考试, 提高学生们对英语等级考试的重视程度, 主要是营造氛围。提高“同心·志愿”团队的组织能力与服务意识, 将服务同学做到实处, 切实践行社会主义核心价值观。

成立“同心·志愿”团队后, 更加旗帜鲜明的开展志愿服务活动, 推动了服务型党组织的建设。通过“一帮一”结对活动, 拉近了优秀学生与学业困难学生之间的距离, 使重修学生感受到了同学的关心, 增强了学生自主学习的积极性和突破考试的自信心。通过“英语三级”助学活动, 营造了良好的迎考氛围, 大幅提高了英语等级考试的通过率, 通过此次活动, 未通过英语等级考试的学生由原来的98名减少至16名。

引入项目化管理后, 软件与艺术设计学院学生党支部在党建品牌建设活动中发挥了党员与入党积极分子的先锋模范作用, 将党性锻炼具体到立足校内, 服务学生, 以实际行动检验入党积极分子的党性修养。

参考文献

[1]季冬晓.用品牌效应提升基层党的建设水平[J].理论学刊, 2010 (3) :24.

[2]刘晔.高职院校校园文化活动项目化管理的研究[D].湖南农业大学, 2013 (12) :15.

论软件项目的进度管理 篇5

关键词医保通系统项目进度管理

2013年6月,笔者作为项目经理参加了某保险公司医保通系统建设,主要职责是项目管理。“医保通系统”是指保险公司通过信息化手段和医院之间搭建的信息平台。医保通系统在省级公司建立医保通中心端,搭建数据库和应用服务平台,医保通前端设在医院。系统的主要功能包括:客户入院申报;探访核实的信息录入;处方信息采集和上传;处方审核;理赔金结算;统计分析功能。医保通项目历时6个月,于2013年12月成功上线。

该系统开发中,我主要担任项目管理工作。软件开发进度管理是一项软件开发项目管理的一个重要内容,有效的进度管理是保证软件开发项目如期完成的重要环节,在医保通系统开发过程中,我采用合理估算项目工期、工作量和技术难度,制定出项目的进度计划表;制作项目周报,及时了解项目进度,适时进行调整和动态控制;采用CPM法,识别关键任务,允许一些任务并行以及组件的复用等方法来保证项目如期完成。

一、合理估算项目工期、工作量和技术难度,制定出项目的进度计划表

首先制定项目日程主计划,内容包括项目在定义阶段、实现阶段、验证阶段、确认阶段的里程计划及主要成果物。

其次制定详细的进度表,先进行项目的工期的精确估算。在工期估算方面,我们主要采用基于公司项目估算参考表,如模块复杂度划分参考表、功能点代码行转换参数表、功能点生产率参数表、缺陷参考基准表、工作量分布参数表,对项目所需要实现的每一个功能模块在项目生命周期的每个阶段的基准规模、需求定义/设计/测试占阶段人天比例、评审占阶段人天比例、bug修复占阶段人天比例、模块规模(FP)、模块规模(LOC)进行详细的估算,同时估算出项目组每一位成员在项目生命周期的每个阶段以人天为单位的工作量,形成项目估算明细表。依据项目估算明细表,汇总统计出每一阶段/任务工作量、缺陷、详细的进度安排(包含每一阶段的开始时间、结束时间)、人员投入安排,制定出项目进度计划表。

最后在project中参照项目进度计划表相关数据填写各阶段工时值时形成项目甘特图。

二、制作项目周报,及时了解项目进度,适时进行调整和动态控制

在project中项目的计划开始、完成时间就是比较基准时间,它在项目计划做好后即可保存起来。项目开始、完成时间随项目成员反馈的任务进度进行更新,两者比较形成项目进度偏差。因此利用project的任务视图和资源视图可以随时看出目前项目进度、资源、成本与计划是否存在偏差。

每周利用project采集项目进度数据填写入度量计划表所列项目进度、里程碑进度差异等内容,按照《标准度量指标定义》中制定的度量方法和度量公式,计算度量结果,并对度量结果进行分析形成度量分析表,寻找偏差,采取行动调整偏差。综合project中反映出的项目的风险和问题形成项目周报,项目周报的主要内容有:项目进展概况、本周任务工作完成情况、下周任务计划、项目目前存在的问题和风险、度量分析表。每周举行项目例会,分析项目周报列出的进度风险和问题。

三、采用CPM法,识别关键任务

允许一些任务并行以及组件的复用采用CPM法,识别出项目的关键任务,允许关键任务以外的其他任务在机动期内收缩。而关键任务的收缩不得超过一周。当遇到关键任务延期时,就会召集大家开会,讨论找出项目延期的原因,并由主要责任人签字,把这种责任作为业绩考核的依据与工资挂钩。

四、结束语

刍议心理学对软件测试活动的影响 篇6

随着电子元器件硬件技术的飞速发展,计算机软件技术也日趋丰富和规模化。人们对计算机软件的需求和依赖也随着经济和科技的发展与日俱增[1]。借助强大的计算机软件技术,人们早已经不再局限于早期的加减法运算和科学研究,军事、医疗、生活、商业、教育……每个领域都能看到计算机软件技术带来的革新化应用和影响。伴随着规模和复杂性急剧增加的成M上G比特的计算机应用软件,软件开发成本以及由于软件故障造成的经济损失和经济风险也逐年增加。软件质量问题已然成为很多人思考和关注的焦点。因此,很多科学家在展望21世纪科学发展方向和策略时,把软件质量放在优先于提高软件功能和性能的位置上[1]。

软件测试是对软件需求分析,设计规格说明和编码的最终复审,是软件质量保证的关键步骤。从行为的角度来讲,它实际上是一种或一系列过程,用来确认计算机代码完成了其因该完成的功能,不执行其不该有的操作。随着软件系统规模和复杂性的增加,进行专业化高效软件测试的要求越来越严格,软件测试职业的价值逐步得到认可和重视,据最近10年的计算机各行业领域发展研究的有关统计,软件测试在整个软件开发中占据了一半或一半以上的工作量,软件测试从业人员急剧增长,软件测试评测中心如雨后春笋般成长[1]。

作为一门新兴并且日渐发展的技术,软件测试有其特有的理论基础和技术研究范畴,从早期的非基于计算机的“人工测试”,如代码检查、走查和评审,到后来较为传统的基于计算机的测试技术(白盒测试,黑盒测试等)和测试过程(单元测试、集成测试、系统测试、验收测试)[2],再到近期逐渐发展起来的基于敏捷开发模式下的测试,如敏捷测试、极限测试等等,软件测试技术理论变得日趋完善。测试技术的飞速发展,也大大加快了提高计算机软件技术发展水平的步伐。诚然,这些基于技术层面的软件测试理论,在指导人们从事软件开发活动的过程中,为保障软件质量,降低开发风险,提高劳动生产率上,都发挥了重要的指导作用。但软件测试是一项涉及面宽广的,复杂而又不可完全量化的高级脑力活动,人们在研究软件测试领域的时候,往往只注重其技术层面的理论和方法,而忽略了非技术因素对软件测试活动所带来的影响。毕竟,从事测试活动的主体是人而不是动物,也不是机器,所以很多软件测试活动的成败与否,往往不是单纯的靠解决技术层面的问题就能决定的。人为的因素往往也是成功与否的关键。而与人类活动密切相关的研究领域就是心理学,所以,研究跟软件活动相关的心理学问题对提高软件测试的质量具有非凡的意义。本文在探讨软件测试过程中心理学相关问题的同时,意在帮助人们提高对心理学给软件测试会带来正负影响的认识,为整体提高软件测试质量,教育和培养新一代软件测试人才,起到推波助澜的作用。

2 与软件测试活动密切相关的心理学问题( T h epsychology issues closely related with software testing activities)

心理学自兴起到发展至今,由最初的基本理论,已经发展和衍生出了多种分支,涉及的领域也越来越宽广。本文不是一篇以介绍心理学为主题的专业性文章,因此也不会在广度和深度上对心理学进行尽善尽美的详细阐述。本文只从三个主要的涉及软件测试工作的心理学领域进行分析和举例,以期帮助大家更好的认识软件测试工作中涉及到的心理学问题。

2.1 定势心理学对软件测试的影响

心理定势指一定的心理活动所形成的倾向性准备状态,通常意识不到。它是多种心理内容和心理形式整合而成的一种整体状态或效应,它引导或决定后继活动的产生倾向,使认知、思维、心理保持一种持续的惯性[3]。

在软件工程学里,对软件测试工作产生重要影响的是定势理论里的注意定势和思维定势。所谓注意定势,是指由于刚刚发生过的刺激或目标的影响,使注意处于一种准备状态,决定后继注意的趋势。所谓思维定势,就是按照积累的思维活动经验和已有的思维规律,在反复使用中所形成的比较稳定的定性化了的思维路线、方式、程序或模式[3]。

软件开发人员是软件产品的作者,他们掌握着自己软件产品的所有核心技术,熟悉所有的技术细节。这一点上,他们在软件测试上具有很大的优势。所以很多行业的软件领域,软件产品初期的单元测试用例都是由软件开发人员在开发软件产品过程中自己一并开发且参与到测试中的。但是,事物往往是一分为二的,优势换另外的角度来说就是劣势。越是熟悉的事物,越无法对开发者们造成具有显著特征的奇异刺激,因而也会自然地降低了他们关于刺激驱动的注意捕捉,产生“选择性看”和“未注意盲视”的效果[4,5]。既开发者在测试过程中,由于定型化的思维模式和处理问题的方式,往往只关注跟自己设计相关的局限视角问题,而却忽视了以用户角度进行相关软件使用的方方面面。很多时候,非开发人员测试过程中很容易看到或发现的问题,在这些开发者本人眼里却成为了“测试盲点”。

而且,从潜意识里,开发者本人是不情愿看到或承认自己开发出的产品存在缺陷或问题的。由于他们对自己开发的产品存在“符合设定需求的完美开发产品”的心理定势,造成他们对自己软件的测试往往有失客观和公正,无法发现软件缺陷也成了顺理而然的窘况。

基于以上种种关于心理定势对软件测试的影响,在如今的很多软件测试工作里,都会采取尽量避免在一个软件产品开发完后由开发者本人来进行测试的决策,换而代之的是尽可能安排非开发团队的技术人员来负责产品的质量监测。不少大公司,对于一些影响公司利益的重要产品,为了更好或更多的发现软件产品中的问题,甚至会不惜成本的专门成立不懂技术的非技术人员测试小组来进行测试。可见越来越多的人,开始意识到定势心理对软件测试的巨大影响了。

2.2 思维心理学对软件测试的影响

思维心理学主要研究人类思维的本质特点,人类思维的过程和机制,人类思维的特点和偏向,人类思维能力的发展和提升。软件测试是一种跟软件开发类似的,对智力水平要求较高的高级脑力活动。个体思维能力的高低,往往会直接或间接决定软件测试的质量与效果。思维心理学的研究领域大体包括:知识的表征,概念的掌握、推理、问题解决、创造性思维和决策等[6]。这里主要谈讨一下问题解决与创造性思维对软件测试的影响。

2.2.1 问题解决

问题解决是人类的一种基本认知能力,也是人类思维的一种重要形式[6]。软件测试人员在进行软件测试项目的时候,必然会遇到各种各样的问题,如何快速,高效的解决他们手头遇到的问题,是衡量他们测试能力的一个重要标准。是什么会对测试人员的问题解决造成影响呢?

首先是知识经验的影响[6]。在软件测试领域,测试专家和测试新手的解决问题能力的差异,很多时候并不取决于他们的智力水平,而是取决于他们对某一测试领域的相关知识的积累程度。比如一个新的测试项目,测试专家可以在很短的时间内,掌握该测试产品的技术细节,如果是在软件开发初期,他们甚至可以为一些开发人员提供建议或指出不足。越早的融如这个项目和开发团队,为后期的测试就越早的铺平道路。在遇到测试问题的时候,比如说测试环境搭建,比如说对测试失败后的问题分析,以及BUG问题的专业性描述,他们可以通过对技术文档的深入学习和掌握,自己解决或跟开发人员进行很好的沟通获得帮助而解决。

案例一:

在甲骨文公司Solaris Core OS QE部门里,曾经有这么一个项目,叫Analytics。它实际上是基于Java Web页面的,可以对Solaris的系统性能进行监测和分析的一个工具。这个项目从设计到开发并最终集成进Solaris12操作系统前后超过两年多的时间!就工具本身而言,开发工作并不是非常复杂和难以实现,但因为没有能够承接这个项目测试工作的小组及个人,该项目一拖再拖,进展缓慢。Solaris Core OS测试团队的工程师们最擅长的是系统工具集和系统指令集的功能测试,通常使用CTI/TET进行自动化测试。TET工具在进行系统测试的时候具有非常丰富的接口,但是在互联网领域应用甚少。在遇到基于Web界面的自动化测试脚本的开发问题上,很多人都不知道从何下手。后来,领导找来刚调来不到四年但SUN/Oracle工作年限将近20年的老工程师,由于他在以前IT系统维护组的时候参与过一些基于互联网的测试工作,知道一些用于Web自动化测试的工具,比如Selenium、QTP等等。通过跟开发人员的顺利沟通与短期合作,不仅有效的协助他们完成了项目的开发与测试,还利用Selenium和Framebuffer技术,成功的将自动化测试脚本整合到了CTI/TET工具中,解决了很多人多年不能处理的棘手问题。

在这个案例里,那位老工程师虽然在Core OS组里算不上资深,但他在Web测试领域的经验对胜任这项众人望而却步的测试工作的时候发挥了重大的作用。

其次,就是功能固着。所谓功能固着,就是指个体会产生一种认为物体只能发挥它传统意思的固有功能的一种心理倾向,结果导致其不能以一种新异的方法来使用这些物体。最终物体功能的固着倾向阻碍了人们对某种物体产生多种功能的表征的可能性[6]。

在软件测试中,测试资源往往是测试人员非常关注的事情。为了达到好的测试目的,测试人员往往喜欢追求高配置,高数量的测试节点,已期达到最高效的测试效果。但是,每个测试人员获得的测试资源都是有限的。如何利用有限资源完成任务繁多的测试工作,就成了测试人员经常需要面临的问题。

案例二:

给一个测试者一台Solairs SPARC T4机器,让他每周测试五个基于Solaris的应用服务软件puppet/js2ai/sysconfig-cli/distro-const/installadm.这五个测试必须在全新安装的Solaris系统上单独跑测试,也就是说,在五个装有相同版本Solaris的系统上分别跑着五个不同的软件测试。假如这名测试者是一个新手,他会选择在半天时间在这台T4机器上装一个Solaris系统,然后,用三天时间分别跑那五个应用服务测试,这样在周四就可以完成任务。但是第二周,要求在两个不同的版本的Solaris上进行这五个服务的测试,规定每个版本的Solaris上都要跑遍这五个服务软件的测试。对这位测试新手来说,恐怕很难按时完成。但是,换作一个测试老手,他是这样安排的:用半天时间写自动化脚本,然后这个脚本可以在半天时间里重装两遍系统,并且可以不分昼夜的分别跑测试,也就是说,用头1.5天昼夜跑一个版本Solaris的五个服务测试,再用后1.5天跑另外一个版本的测试。这样,周五之前,测试老手可以按时完成测试任务。但是到了第三周,疯狂的测试任务来了:要在五个不同版本的Solaris上分别跑这五个服务的测试,也就是说要跑5*5=25轮单一服务测试。这样的测试,测试新手要用四周,测试老手也要至少用2.5周。现在轮到测试专家了,他是这样安排的:在这台T4机器上搭建一个LDOM环境,并创建五个Guest,每个Guest安装一种版本的Solaris,五个Guest就是五种系统!之后就可以在这五个系统各跑那五个应用服务测试了。由于Guest是彼此独立的,所以它们可以并行跑测试且互不影响。时间汇总算下来,可能就是测试启动初期和收尾的时候会比较费时间。由于测试前期的准备和后期的测试结果汇总,都可以通过编写自动化脚本来自动完成。所以,理想情况下一天写脚本,半天环境搭建,三天自动化测试,这基本上是可行的。这样,周五之前在新手和老手眼里“不可能1周内完成的任务”在这个测试专家的统筹安排下,居然神奇地完成了。

在这个例子里,这位测试专家没有受“功能固着”现象的影响,没有局限于Baremetal System(裸设备系统)“单机单用进行测试”这一局限性思维,开创性的借用VM技术实现了一机变五机,奇迹般的解决了测试资源不足造成的测试效率低下的问题。

2.2.2 创造性思维

从广义上看,创造性思维是思维活动的高级过程,是在已有经验的基础上,通过多角度思维产生出的新颖独特的,有社会价值的产品的思维过程。从狭义上说,凡是对某一具体的思维主体而言,具有新颖的,独特意思的任何思维,都可称之为创造性思维。创造性思维在软件开发和软件测试中,都具有重要的影响作用[6]。

(1)创造型思维是集中思维和发散思维的统一

集中思维也称聚合思维,指思维过程中对信息进行抽象、概括,使之朝着一个方向集中、聚敛,从而形成一种答案、结论和规律。软件开发,很多时候要用到集中思维[6]。

发散思维又称求异思维、扩散思维,是指沿着各种不同的方向思考问题,重组眼前的信息和记忆系统的信息,从而产生大量独特的新思想。从事软件测试的时候,大部分需要发散思维发挥作用[6]。

例如,在软件开发的时候,开发人员一般是沿着用户需求的方向进行软件设计,然后再沿着设计框架和思想,通过编写代码进行实现。他们会为了达到某项功能需求,不分昼夜进行开发与调试,直到该项功能顺利实现。世界知名的民营大企业华为公司,为了给员工创造更好的集中思维的工作环境,专门成立的封闭式的研发基地,员工衣食住行都被封闭在近乎与隔绝的空间里。这就是最大限度发挥集中思维的典型管理方式的例子。

而软件产品功能实现以后,需要测试人员进行功能测试。作为一个成熟的测试人员,他并不会着急验证这个功能是不是按照需求规约设定的那样去实现的,而是静下心来,想想跟这个测试功能相关的操作都有可能由哪些,哪些是需求规约里没有定义的,有没有一些非常规操作会造成这项功能出现异常,有没有一些不在需求规约里定义的功能在这个软件中贸然出现等等。测试者需要考虑到跟被测试功能相关的各种测试可能性,仅仅考虑这个功能是否实现能够实现是完全不够的。因此,测试人员需要动用他的发散思维,多元化这个在开发者看来是个比较单一的功能实现问题。

(2)创造型思维是分析思维和直觉思维的统一

分析思维是严格遵守逻辑规约,逐步分析和倒推,最后得出合乎逻辑的正确答案和结论的思维活动[6]。软件测试人员,在得到测试失败的结果的时候,需要遵循分析思维的原则,对遇到的失败现象,进行技术分析。通常情况下,首先需要是否有问题存在于测试环境或测试脚本。因为在进行自动化测试的时候,尤其是新开发出来的测试脚本,很多时候会由于测试脚本的缺陷或者测试环境的变更造成跟软件产品本身没有任何关系的失败或者误判,这是软件测试人员首先需要排除的可能性。如果这种可能性不排除,为开发人员提交的测试报告就变得没有意义了。其次,需要对测试的失败进行划分(黑盒测试通常是领域划分,白盒测试是模块划分)。有些时候,需要借助DEBUG调试工具进行重现,以期望对问题的结症进行定位和跟踪,力争在测试报告里进行详细精准的问题描述。这样才能得出一份高质量的合格的测试报告。

直觉思维是一种没有完整的分析过程与逻辑程序而获得答案的思维,它是非逻辑的,跳跃方式的,无需主体做出有意识努力的,或然性的[6]。经验少的测试者依赖于分析思维进行软件测试,经验丰富的测试专家则喜欢运用直觉思维协助他们进行测试。比如还是刚才测试失败的例子,经验浅的工程师通过分析思维,也许只能止步到对当前的失败进行问题表述,然后就只能提交给开发组已期得到解决了。而经验丰富的专家,会想到跟目前专注的测试区域无关的其他区域问题出现的可能性。这也许找不懂任何逻辑上的联系,但他们就是能这样认为。依仗他们独特固有的直觉思维能力,往往能绕过繁琐的分析步骤直接快速的命中问题的结症。这样处理问题,不光可以避免给开发人员带来问题误区,也极大的提高了他们的测试质量和测试效率。

(3)创造性思维是横向和纵向思维的统一

纵向思维,是指在一种结构范围内,按照有顺序,可预测,程式化的方向进行的思维方式。软件测试中的按照软件测试规格说明设计测试用例,然后进行测试的过程实际上就是一个纵向思维的过程[6]。

横向思维,是指突破问题的结构范围,从其他领域(或科学)的事物,事实知识中得到启示而产生新设想的思维方式,它试图从别的方面,方向入手,其广度大大增加,有可能从其他领域中得到解决问题的启示[6]。这就好比之前讨论的发散思维,在设计测试否项软件功能的时候,不能仅仅局限于需求规约或软件使用手册上,还需要考虑一些非常规操作的情况,软件测试里的鲁棒测试,就是借助横向思维催生出来的一种非常规极限测试。

单纯利用纵向思维,固然可以设计出严谨的,逻辑清晰分明的测试用例,然而却无法顾及到一些非常规情况下的测试,而某些非常规的偏向意外性质的软件使用和操作,往往就是造成软件运行发生崩溃甚至数据丢失的根源。加入一些基于横向思维的测试用例,在丰富了的测试内容的同时,也帮助了测试人员更容易的发现一些不易发现但是又事关重大的潜在问题。

(4)创造性思维是逆向思维和正向思维的统一

逆向思维,与一般的正向思维想反,它要求思维活动时,从想法方向去观察和思考,避免单一正想思维和单向度的认识过程的机械性[6]。

软件测试理论里,有一个重要的测试过程叫单元测试,也叫模块测试。它是一种白盒测试技术,要求将软件划分成不同的模块,逐个模块进行单一测试。通常情况下,按照正常的逻辑思维,人们进行单元(模块)测试的时候,喜欢自顶向下进行测试,既从第一个模块开始累加模块,逐层进行测试。但是专家分析,这种模块测试方式存在七种缺点。而有人通过逆向思维的考虑方式,推出了自底向上测试,既从最后一个模块开始往前逐层累加模块测试,在具备跟前者相同测试优点数目(三个)的前提下,这种逆向测试模块的方式只存在两种缺点。可见,逆向思维在软件测试中往往会达到意想不到的出奇效果。

以下两个表格是两种测试方式的优缺点对照[3]。

2.3 管理心理学对软件测试的影响

管理心理学在西方又称工业与组织心理学,是研究组织管理活动中人的行为规律及其潜在心理机制的一门科学,是心理学的一个重要分支。它的研究内容包括动机管理,认知管理,情绪管理,行为管理和组织管理[7]。在软件测试工作中,与测试者关系密切的当属动机管理和情绪管理了。

2.3.1 动机管理

动机是人类一切行为的出发点和原动力。在软件测试活动中,测试者做什么或不做什么,是主动积极的做还是被动消极的做,愿意投入多大精力和坚持多长时间来完成测试任务和实现测试目标,无不取决于他的动机。它具备激发,导向,维持和调整的功能[7]。

通常情况下,正确的、强烈的测试动机,会带来很多令人吃惊的工作效率,达到理想的测试效果和测试质量。

例如,刚分配下来一个新的软件产品的测试任务,由于该产品还处于开发初期,需要测试人员重新编写新的测试用例和测试脚本。同时,为了保证不影响测试进度,在测试脚本编写之前,需要手工去执行大量枯燥和繁琐的测试,并且尽量保证在开发组将该开发版本整合进产品库之前完成第一轮的测试。时间紧迫,费时费力。如果测试人员没有正确的测试观念和测试指导思想,他们也许不会想到越早的完成第一轮测试和测试用例的编写,越会为以后的测试工作铺平道路。因而有可能一些动机性不强的测试人员会因为对测试目的和进度不明确而在早期工作拖拉舒散,造成后期时间安排不合理而潦草收尾。这样的工作,大大降低了工作效率和测试效果。相反,如果测试人员在任务之初就具备强烈的测试责任和合理的测试动机,他们就会想方设法在规定时间内(甚至加班加点利用周末假日)尽量高质量地完成第一轮的测试任务,避免为将来带来不可预期的误工麻烦。

但正如之前谈到的辩证理论,事物都是一分为二的,人们通常认为,动机越强,测试工作的热情越高,测试的次数越频繁,测试的效果越好。事实并非全如此。就拿刚才的例子,原则上讲,很多软件产品的在进行黑盒测试的时候,手动测试要比自动化脚本的机器测试准确的多,发现问题也更容易定位和分析。因为手动测试可以最大限度的模拟用户操作。这也是为啥首次测试一个新的软件产品的时候,原则上讲推荐进行人工操作的测试。但它最大的缺点就是效率低下。所以我们提出了后期采用编写测试脚本进行机器自动化测试。软件测试过程里的“回归测试”通常就是由机器来完成的。机器测试最大的好处就是效率极高,而且可以不分昼夜和节假日。但机器测试的弊端就是无法最真实的模拟人机互动的操作活动,而且由于编写测试脚本的人能力参差不齐,很多自动化测试的失败往往不是产品的问题,而是脚本自身的问题。但如果一个测试人员对测试目标太过苛刻,从测试策略上就抵触机器化测试,只相信人工测试的结果,则他很容易被茫茫的测试大海所淹没,延误了测试进度,从而影响了测试质量。而且,长时间高强度的重复的测试工作,会给测试人员带来一定的“定势心理”,就如前文介绍过的,反而不容易发现软件产品中的问题了。

2.3.2 情绪管理

情绪劳动是指人际交往中为了表达组织所期望的情绪,员工必须进行的努力,计划和控制活动。它可以被划分为四个维度:情绪的表达频率,表达规则,多样性和情绪失调[7]。软件测试跟软件开发一样,不仅仅是一个体力,脑力的付出,更是一种情绪资源的付出。从软件测试任务的启动到软件产品成功发布,软件测试人员要经历也许比软件开发人员更多的心理适应与心理挑战。比如说测试初期,需要经历短期内熟悉和适应新产品的过程;同时在与开发人员协同工作的时候需要适应开发人员的工作节奏和沟通方式;在测试遇到困难的时候,需要自己去面对测试障碍和难题;在发现Bug的时候,需要考虑如何以合理与正确的方式跟领导和开发人员进行汇报和沟通;在时间紧迫的时候,又需要能及时调整工作状态,时刻保持旺盛的工作精力和劳动激情等等。举个简单的例子,有一些软件测试人员,在部门里就经常不受软件开发部门人员的待见,就是因为他们经常会发现出一些大大小小来自开发部门的软件产品的问题或缺陷,并且直接或间接地反映到了开发组的上层领导那里,造成了不少来自领导的负面压力。在与开发人员工作相处中,很多软件测试人员都曾面临过两难的抉择,或多或少的承受着一些不明事理的开发人员的抵触情绪与负面评价。

面对种种工作问题带来的压力,测试人员除了要利用好“沟通”这一重要的工作技巧外,还需要具备良好的情绪自我控制和管理的能力,需要学会利用自主调节,表面扮演,深层扮演以及失调扮演者四种自我管理策略[7],避免由于工作中遇到的困难而造成自身的心理健康问题和工作倦怠问题,力求高效,圆满地完成好软件测试工作。

案例三:

2000年初的时候曾经在北京的中软村科技园附近有这么一家规模较小的民营软件企业X公司,公司内部的员工普遍都很年轻,是一个富有朝气的年轻创业企业。当时新近招来一批刚毕业的大学生,被分派到测试组进行软件测试。新来了一个项目,时间紧迫,所有测试组和开发组的员工都比较紧张,经常加班加点。开发组完成的一组模块,送到测试组,很快就完成了测试。但是测试结果不是很理想,发现了很多BUG。两个小组针对产品BUG专门开会进行了探讨。结果对某个BUG是否需要修复,年长的开发组和年轻一些的测试组人员产生了意见分歧。会议从早晨一直开到晚上,由于是夏天,天气炎热,空调又不是很给力,与会的人开始有些心情躁动。几个年轻的员工,由于言语用词过激,开始产生了争执。由于领导未能及时制止,最终两个小组发生了群架事件。事情过后,有的人选择辞职,有的人申请调离了该项目。不得已,大领导只能从其他小组临时抽调人手,并继续从社会上招聘新人,结果项目被拖延了很长时间。X公司也因此蒙受了不小的损失,在跟其他公司的招投标项目竞争上败下阵来。

这个案例给我们的教训就是没有良好的情绪管理和沟通技巧,不仅不会带来好的质量保证,还会影响软件测试的工作进度,为软件产品的发布带来更高的潜在风险。

3 结论(Conclusion)

软件测试既是一门高脑力活动的经验型技术,又是一个汇集各种非技术因素的讲求艺术性和实践性的社会活动。在信息爆炸,软件产品膨胀发展的今天,人们迫切需要提高软件产品的测试质量和测试效率。本文对软件测试以心理学的角度进行了分析和案例描述,意在帮助人们摆脱单纯的依靠纯技术手段解决测试瓶颈问题的理念,以非计算机技术的角度分析了影响软件测试质量的心理学相关的种种因素,并指导人们如何扬长避短的发挥心理学在软件测试活动的作用,为软件测试领域提供了更加宽广的技术规范和研究范畴。

摘要:随着计算机软件行业的发展,越来越多的人开始意识到软件质量的重要性。软件测试的需求越来越大,测试的标准也越来越高。如何提高软件的测试效果和测试效率已然成为很多人研究和讨论的内容。本文抛开传统的计算机技术领域,从心理学角度对软件测试进行探究,力求更好的帮助人们完成软件测试工作,更好的提高软件产品的质量。

软件项目管理活动 篇7

数控系统是现代制造装备的核心。可重构数控系统具有在一定范围内迅速调整其结构和功能的能力,能够快速适应市场的迅猛变化和系统自身的改变,从20世纪90年代开始已成为数控技术研究的一个热点[1,2]。

数控系统的重构包括硬件可重构和软件可重构。目前对数控系统软件可重构的研究主要有:①将数控软件的功能封装并抽象成标准“软件芯片”,以“软件芯片”库为基础,通过库中的“软件芯片”组合实现系统可重构[3];②以开放式体系结构为基础,将功能模块设计成标准组件,组件通过标准接口通信实现系统的可重构[4];③以标准总线为基础,通过总线的易扩展性实现系统的可重构[5,6]。

以上研究的特点是,采用将功能和数据封装成一个对象,通过对象的复用实现系统的重构。但是这些对象均为被动对象,每次重构都需要设计所有对象的调用才能运行。数控系统是个行为复杂的系统,当对象的数目增多时,调用方法和顺序将会变得十分复杂,从而导致数控系统的重构变得繁琐和低效。

本文提出面向活动对象的可重构数控系统软件设计。活动对象之间无需设计相互的调用。通过“订阅”外部事件,以事件驱动其执行。通过“出版”事件,以事件同外部进行通信。在该模式下,活动对象耦合性小、可复用程度高,系统集成简单、重构能力强。

1 面向活动对象的设计

活动对象(active object)是“一个拥有其自己的控制线程的对象”[7],它不被外部的对象所调用,通过异步事件交换的方式同其他活动对象通信,以RTC(run-to-completion)的方式执行事件处理。图1所示是一个活动对象,它包含一个控制线程(事件循环)、一个事件队列和一个状态机,即“活动对象=(控制线程+事件队列+状态机)”[8]。

1.1活动对象RTC事件处理

在图1右侧显示了事件循环的流程。queue.get ()从事件队列中取出事件,通过dispatch()派送到状态机进行处理。在处理完成后返回queue.get (),并从事件队列中取出下一个事件,重复上面的过程,如此循环。事件循环保证了每个活动对象处理事件的RTC形式。RTC形式固有地排除了内部并发问题,在第二个事件被处理前,dispatch()操作必须完成并且返回到事件循环。这里的RTC指的是单个活动对象内部的事件处理。在优先级抢占的多任务系统中,当高优先级的活动对象有事件需要处理时,低优先级的活动对象会被挂起,将CPU的控制权让给高优先级的对象。在高优先级的活动对象处理完后,CPU控制权重新归还当前悬挂对象,使其继续执行。

RTC形式可以进行有效堵塞。当事件队列为空时,活动对象会堵塞在queue.get ()上(此时不占有CPU),直到有新事件出现,才会继续执行,从而提高了CPU的利用率。

1.2活动对象异步事件交换

活动对象与其他对等实体的事件交换采用异步方式。每个活动对象拥有一个自己的事件队列,所有的事件异步地投递到事件队列中,活动对象通过事件队列唯一地接收事件。一方面,当活动对象在忙碌时,可以自动地对输入事件进行排队。另一方面,事件生产者仅需将事件投递到活动对象的事件队列中,而不必一直等待其处理完成。除此,活动对象可以不区分事件来源地接收事件并统一处理。事件可以是其他活动对象产生,也可以是中断产生,还可以是自身产生。

1.3活动对象的状态机行为规划

数控系统根据输入的信息(如数控程序、操作面板的输入、传感器的反馈信息)控制机床移动,实现加工操作(如轴运动、换刀、停止机床等),属于典型的反应式系统[9]。反应式系统(reactive system)是一个对外部和内部刺激做出响应的事件驱动系统(event-driven system)。在确定性的反应式系统中,系统输入的顺序和数值决定了系统的响应顺序和数值[10]。因此,需要专门的方法来描述系统的行为。状态机(state machines)是说明和实施事件驱动系统最有名的形式,先进的UML状态机代表着状态机理论和表示法的当前艺术状态[8]。本文以UML状态机(Statecharts,也称状态图)来表示并规划活动对象的行为。

图2所示是一个简单的状态图,图中包含A、B、C、D 4个状态,处于某一状态意味着系统只响应所有允许输入的一个子集(如处于D状态只响应a输入和c输入),只产生可能响应的一个子集(转移到A状态或转移到B状态),并且改变状态也只是可能状态的一个子集(对于输入事件除了可以发生状态改变还可以有其他的输出)。C状态是一个父状态,包含A和B两个子状态,子状态可以继承父状态的响应(如在A状态遇到d输入会转移到D状态)。Statecharts相关信息及优点请参考文献[7,11]。

1.4活动对象“出版-订阅”事件投递

面向活动对象的设计将应用分解成若干功能专一的活动对象,它们通过异步事件交换进行通信。因此,如何将事件投递到目标对象至关重要。

最简单的方法是活动对象彼此直接发送事件。然而,它们要求活动对象密切“知道”彼此。不仅需要拥有一个指向对应实体对象的指针或引用,而且还必须知道对方可能感兴趣的事件类型。这种密切的“知识”存在于所有参与的活动对象之间,使得系统难以改变和扩展。例如,加入一个新的活动对象是困难的,因为已经存在的活动对象不了解新来的对象,并且不会向其发送事件。

观察者(OBSERVER)模式(又称出版-订阅(publish-subscribe)模式)定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。中介者(MEDIATOR)模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

图3所示的“出版-订阅”框架结合了观察者和中介者两种设计模式。“出版社”是一个观察者,同时又是一个中介者,活动对象是观察者。活动对象从“出版社”订阅自己感兴趣的事件,并将自己要出版的事件投递到“出版社”。“出版社”收到事件后按照订阅列表一一投递给所有的订阅者(活动对象)。

“出版社”除了接收活动对象投递的事件外,同时还接收中断投递的事件。

在这种方式下,所有事件被公众所知,活动对象无需相互“知道”,只向“出版社”“订阅”自己想要的事件。系统内部活动对象之间具有松的耦合性。一个活动对象可以不用知道其他活动对象是如何运行的,而只需知道系统中具有哪些事件,根据这些事件,自己该如何运行。一个活动对象的行为逻辑发生了改变,不会影响到其他活动对象的运行。一个新活动对象的加入可以很好地融入系统,又不影响系统其他部分的运行。

2 活动对象的实现

图4所示为活动对象的实现类图。活动对象继承基类CActive,CActive联合了3个基本要素:状态机(来自CHsm类)、事件队列和执行线程。

2.1执行线程的实现

执行线程具有平台依赖性,不同的操作系统具有不同的执行方式。图5所示为创建及执行线程的伪代码。首先在CActive::Start () 内创建好事件队列及执行线程,在CActive::run ()内通过for(;;)循环从事件队列中获取事件,并将其投递到状态机进行处理。

2.2事件队列的实现

很多实时操作系统天生具有自己的消息队列(有时称为邮箱或消息邮箱),此时可以将消息队列映射成所需要的事件队列,从而实现对事件的排队和堵塞。对于不具备消息队列的操作系统,需要设计自己的事件队列来处理事件排队、回收、堵塞等机制。事件队列的实现可参考文献[8]。

2.3状态机的实现

活动对象的状态机是通过继承CHsm类实现的。CHsm类是一个能够处理层次状态转移的状态机抽象类,它封装了状态机的状态转移机制等。通过这种方式,活动对象对状态机的实现只需编写所有状态的状态处理函数。图6所示为一段事件处理代码,在状态处理函数内,根据事件类型进行状态转移或进行相应的事件处理。

2.4事件“出版-订阅”的实现

图7所示为事件的“出版-订阅”订阅者列表,在该列表中,每个事件对应一个清单,清单中保存着订阅该事件的所有活动对象的优先级编号(每个活动对象对应唯一的一个优先级编号)。当有事件出版时,根据该事件的清单对订阅者一一进行投递。通常活动对象在初始化内部状态机时通过PB::subscribe(CActive *a,Signal sig)接口订阅该活动对象感兴趣的事件,在运行的任何时候通过接口PB::publish(Event *e)出版自己的事件。

3 D-Max ENC数控系统应用

D-Max ENC是以Windows CE6.0为软件平台的可重构嵌入式数控系统,按照设计要求它需具有快速重构能力,可以根据客户需求重构出具有不同联动轴数,或不同刀库,或不同用户界面,或增加其他功能(如,增加机械手或增加远程监控)的数控系统。

3.1D-Max ENC M3数控系统硬件结构

图8所示为D-Max ENC M3铣削加工中心的硬件结构。该系统具备三轴联动,自动换刀等功能。 系统采用主从式多CPU结构,X86工业主板具有主CPU,通过PC/104总线分别与FPGA运动控制卡及PC/104数据采集卡相连,通过串口总线与刀库PLC相连。

3.2D-Max ENC M3数控系统软件实现

D-Max ENC M3系统共包含IO活动对象、TC活动对象、MC活动对象、Core活动对象和HMI活动对象5个活动对象(图4)。

IO活动对象:主要检测I/O信号,管理MDI键盘的按键输入。该对象的状态机只有一个状态,其简化状态图如图9所示。在该状态下,活动对象不断检查是否有键按下。当有键按下时,创建一个该按键的事件,并将该事件出版。

TC活动对象:负责与刀库的PLC通信,从而控制刀库选择相应的刀具。该活动对象简化状态图如图10所示,活动对象有Idle和Busy两个状态。在Idle状态,可以接收选择刀具的事件(SELECT_TOOL),并进入Busy。此时,若再收到选择刀具的事件,将不会进行处理(可以有效防止破坏换刀的控制逻辑),直到收到刀库处理完成事件(TM_PROCESSED)后,重新转移到Idle状态。

MC活动对象:管理运动控制卡的行为。根据所控制的运动控制卡有批处理和立即处理两种模式,且在批处理模式有数据缓存区、允许暂停和取消功能,其简化状态图如图11所示。在Idle状态和Hungry状态可以接收插补指令事件,而在Full状态不会处理接收的插补指令。进入Suspend状态后,插补会暂停,在收到START事件后,又会恢复到上一个状态。

Core活动对象:编译程序,并将编译后的指令通过事件出版出去。由于指令具有多种类型以及单次处理的指令长度有限,为了保证事件出版后其他活动对象能够进行处理,需要将编译后的指令按类型及长度分成多个指令段,并订阅运动控制卡数据处理完成事件(MC_PROCESSED)、运动控制卡数据饥渴事件(MC_HUNGRY)和刀库处理完成事件(TM_PROCESSED)。在这些事件的驱动下,将分段指令出版。除此,该活动对象还订阅了插补、急停、复位、进给保持、启动等事件,从而控制整个过程的执行。其简化状态图如图12所示。

HMI活动对象:负责程序的编辑、参数设置、显示以及自动或手动的数据准备等。其简化状态图如图13所示。该活动对象订阅了所有的按键事件,通过模式选择事件进入不同状态,不同的状态只处理固定的按键事件。如,在Auto状态收到START按键事件后会出版带有零件程序参数的编译事件,在JOG状态会处理X+等轴控制按键事件,而不会处理START按键事件。

3.3D-Max ENC M5E数控系统软件重构

图14所示为面向活动对象软件设计的重构流程。

首先,根据新的系统需求,分析判断已有活动对象的行为是否发生了改变,包括其状态图及事件的处理方式是否需要发生改变;其次,在已有活动对象修改完成后,对比新系统,查看已有活动对象无法完成的功能,设计并添加新的活动对象;然后,重新对所有活动对象检查,检查是否有出版的事件漏处理或未出版等;最后,整合所有活动对象进行验证、仿真、测试等,最终得到新的系统。

D-Max ENC M5E系统是一五轴联动数控系统,该系统除具有五轴联动外,还具有网络监控功能。通过互联网可以远程监视其运行状况,或传送数据控制机床运行(在Online模式)。表1及图15、图16所示为D-Max ENC M3重构为D-Max ENC M5E系统的软件重构内容。

从上述重构过程可以看出:

(1)活动对象通过事件出版进行通信,没有相互的调用,避免了重构过程“牵一发而动全身”。如,IO的改变并没有影响到TC活动和MC活动对象的行为;加入Monitor活动对象,并没有干涉到IO活动对象、TC活动对象、MC活动对象、Core活动对象的活动。通过减小相互间的耦合,从而可以降低重构难度,提高活动对象的复用程度。

(2)活动对象以一状态机来控制其行为,通过状态图将控制逻辑图形化。使得重构的分析和设计更加便捷和清晰。避免了阅读控制逻辑复杂代码和大量描述文档的繁复和耗时,从而可以节省时间,提升效率。

(3)活动对象的实现采用了抽象和继承(图4),复杂的逻辑运算均已被抽象的CActive类实现,活动对象只实现通过状态处理函数实现对事件的处理(图6)。从而使得重构后创建新的活动对象和修改已有活动对象更加容易。

摘要:为使数控系统软件可重构,提出一种面向活动对象的软件设计方法,给出设计原理、实现方法;以实际应用为例,阐明设计方法、重构流程及重构结果。该方法基于面向对象设计,并给每个对象赋予一个独立执行线程、事件队列和状态机。活动对象相互独立、不共用资源、能够独立执行,通过事件队列与其他对象通信,以“出版-订阅”的方式投递和接收事件。在该方式下,数控系统的重构复杂程度低、修改便捷、重构效率高。

关键词:活动对象,数控系统,软件重构,嵌入式数控

参考文献

[1]Koren Y,Heisel U,Jovane F,et al.ReconfigurableManufacturing Systems[J].Annals of the CIRP,1999,48(2):527-540.

[2]王涛,刘清建,王太勇,等.具有3层重构能力的可重构数控系统[J].中国机械工程,2011,22(2):197-201.Wang Tao,Liu Qingjian,Wang Taiyong,et al.Re-search on Three-ply Reconfigurable CNC System[J].China Mechanical Engineering,2011,22(2):197-201.

[3]魏仁选,周祖德,陈幼平,等.可重用面向对象数控软件及其开发环境研究[J].华中理工大学学报,1999(3):19-21.Wei Renxuan,Zhou Zude,Chen Youping,et al.Study on Reusable Object-oriented CNC Softwareand Its Development Environment[J].Journal ofHuazhong University of Science and Technology,1999(3):19-21.

[4]文立伟,王永章,路华,等.基于开放结构控制器的可重构数控系统[J].计算机集成制造系统-CIMS,2003,9(11):1483-1489.Wen Liwei,Wang Yongzhang,Lu Hua,et al.ReconFigurable CNC System Based on Open ArchitectureController[J].Computer Integrated ManufacturingSystems,2003,9(11):1483-1489.

[5]齐继阳,竺长安,王欢.基于USB和组件技术的可重构数控系统的研制[J].制造技术与机床,2007(12):17-20.Qi Jiyang,Zhu Changan,Wang Huan.Developmentof Reconfigurable CNC System Based on USB andComponent Technologies[J].Manufacturing Tech-nology&Machine Tool,2007(12):17-20.

[6]王太勇,李波,万淑敏,等.基于现场总线的可重构数控系统的研究[J].计算机集成制造系统,2006,10(12):1662-1667.Wang Taiyong,Li Bo,Wan Shumin,et al.Reconfig-urable CNC System Based on Field Bus[J].Comput-er Integrated Manufacturing Systems,2006,10(12):1662-1667.

[7]OMG.OMG Unified Modeling Language(OMG UML),Superstructure(v2.4.1)[EB/OL],(2011-08-06)[2011-10-01].http://www.omg.org/spec/UML/2.4.1/Super-structure/PDF

[8]Miro Samek.PRACTICAL UML STATECHARTSIN C/C++,Second Edition[M].Burlington:Ne-wnes,2008.

[9]李霞,王永章,梁宏斌,等.有限状态机在开放式数控系统中的应用[J].计算机集成制造系统-CIMS,2005,11(3):428-432.Li Xia,Wang Yongzhang,Liang Hongbin,et al.Fi-nite State Machine Application in Open CNC[J].Computer Integrated Manufacturing Systems,2005,11(3):428-432.

[10]Chito S,Michael J,Wang Shige,et al.SpecifyingReconfigurable Control Flow for Open ArchitectureControllers[J].Proceedings 1998 Japan-USASymposium on Flexible Automation,1998,7(2):659-666.

软件缺陷度量与软件过程管理 篇8

软件产品的生产过程是软件质量的形成过程, 所以只有在过程中实现良好的管理和质量控制, 才能得到一个质量合格的软件产品。软件缺陷就是其中的软件质量的负面影响因素。虽然所有的软件系统都不是尽善尽美的, 但是严重的质量问题会危及用户的使用, 从而危及企业的软件生产。

软件的开发阶段的缺陷管理和预防是非常重要的, 因为一旦制定了有问题的软件的设计方案, 会直接导致软件的质量隐患, 所以, 我们在研发阶段要尽可能的防止这种情况的发生, 将隐患扼杀在初始阶段。一般的做法是, 在软件研发的过程中要形成一个严谨的缺陷分析报告, 将关于软件的性能的各个方面的具体数据和资料综合整理出来, 对于存在安全隐患和易出现问题的环节做好一定的预防措施和预防方案。

2 问题描述

缺陷度量的技术的一个重要的指标和重要的作用就是对于软件系统中存在的问题的显示, 也就是对具体问题的描述。一般情况下, 软件的缺陷会分为大致的几种常见类型, 我们也可以根据这些类型, 做出不同的缺陷显示方法。正交分类方法ODC (Orthogonal Defects Classification) 作为一种常见的问题显示方法, 能够准确的显示问题, 一直被业内广泛的使用, 但是它也存在着技术上的缺陷, 就是解读方式比较复杂。另一种常见的方式是Thayer, 有点是比上一种方式的结果更精确, 但是解读起来也更加复杂。这两种方式的共同点在于都忽略了对于软件的过程的监控和分析, 这是一个非常严重的技术问题, 因为软件的研发过程才是质量问题的形成的重要阶段, 要控制质量问题, 就必须控制软件的研发过程, 所以, 我们想要找出新的监管和缺陷度量方法, 就要从控制过程的角度来分析。现在市场上的已经开发了几种缺陷管理系统工具, 例如Mercury公司的Quality Center, IBM公司的Rational系列管理工具, 微软公司的VSTS等。上述的几种技术都没有解决缺陷的分类问题, 导致了在软件过程的管理中的缺陷分类的薄弱。也直接导致了现有的缺陷管理工具在实用性和综合性方面的不完善, 上述的两种管理工具只是提供一些缺陷属性数量的简单统计结果, 要想得到一些更精确和更综合全面的分析结果, 用户不得不借助其他的统计方式。基于该目前市面上的工具的这样一种缺陷, 和软件过程管理的实际需要的不协调, 笔者制定了一种新的管理模型, 如图1。该模型可根据需要设计缺陷属性度量分类标准。在软件开发过程中通过缺陷管理系统采集缺陷数据, 运用缺陷分析方法实施缺陷分析, 把握缺陷发展趋势, 对软件项目开发过程进行综合评价。实施缺陷预防方案, 提高软件产品的开发质量。通过缺陷分析结果的反馈, 改进缺陷度量分类标准和分析目标, 提高缺陷分析结果的准确性。本文重点研究了缺陷分类方法和缺陷数据的分析方法, 并结合某项目中的缺陷数据实例进行了分析。

3 缺陷分类方法研究

3.1 缺陷分类的目的和原则

将软件的缺陷问题分类, 可以更好的管理和击破软件的缺陷问题。并且有益于分析缺陷产生的原因, 可以早到有计划的预防。缺陷分类方法应满足以下要求:准确地对发现的缺陷类型进行分类;缺陷分类类型之间应无重叠, 并尽可能多的覆盖开发过程中出现的分类;分类要与软件生命周期有机结合, 从软件过程的角度对软件缺陷进行分类。

3.2 缺陷度量属性分类

实施度量分析的最终目的是为了服务软件的研发和试验的各个阶段的顺利进行, 一旦发现问题可以及时纠正, 以免影响软件的研发和生产。在引言中曾提到, 软件缺陷的范围很广, 它贯穿于整个软件研发和生产试验的各个阶段, 是一种伴随着软件的整个过程的始终的应用, 所以它的重要程度也可想而知。一个缺陷需要记录许多相关的度量属性, 如何划分这些度量属性也是缺陷分类研究领域的一个热点。传统的分类方法主要目标是消除软件缺陷, 而不是对缺陷出现的原因进行一个正确的评估和解决方案的分析, 这样的分类方法是不利于软件的完善和发展的。所以, 一个全方位多角度的缺陷度量方式就应运而生。下面本文中将从缺陷度量属性设计的三个方面, 即描述属性、统计属性和控制属性来进行具体阐述。a.缺陷描述属性。缺陷描述属性是指:缺陷信息描述, 对于缺陷的各个方面和各个角度的描述, 既包括缺陷的时间, 产生原因也包括具体的解决方案的策划。b.缺陷统计属性。缺陷统计属性是指:缺陷生命周期状态, 缺陷流出的开发阶段, 缺陷流出的部门, 缺陷流出的功能模块, 缺陷表现类型, 缺陷的严重等级等基于缺陷数量统计其分布的属性。并且缺陷统计属性参考正交缺陷分类方法划分, 属性间没有相关性。c.缺陷控制属性缺陷控制属性是指:处理缺陷的角色, 缺陷的分配, 处理缺陷的时间, 缺陷数据之间的关联关系等基于缺陷分配流程管理的属性。

4 缺陷度量过程管理

4.1 处理缺陷的角色

在软件开发过程中处理缺陷的四个负责人和所负责的任务的具体情况:报告人:将发现的缺陷登录到缺陷管理系统, 描述缺陷的表现形式和再现方法, 对缺陷进行简单分类, 由项目经理、组长对缺陷进行再分配, 缺陷修正完成后, 对其进行回归测试审核。负责人:负责缺陷的调查和修正工作, 分析缺陷引入的原因。组长:分配缺陷到负责人, 并对负责人已修正缺陷进行复查, 确保不会因为修正而引入新的缺陷产生, 分析缺陷流出原因。项目经理:分配缺陷到项目组, 定期总结缺陷分析报告, 把握缺陷发展趋势, 采取应对措施保证项目的进度及开发质量, 根据缺陷分析结果改进缺陷度量属性分类。

4.2 缺陷生命周期

缺陷生命周期是指缺陷从被报出之后, 到开始修正, 再测试直到该缺陷被完全消除的时间段。缺陷生命周期是影响软件研发的一个重要的指标和因素, 定期对缺陷各种状态信息的变化趋势进行总结, 是项目经理计划开发周期, 调整开发进度的重要依据。

4.3 缺陷分配管理流程

整个的缺陷的周期主要是指从发现到完全消灭的时间, 在这个时间内, 缺陷的分配管理流程主要包括:a.报告人登陆缺陷;b.管理人员分配缺陷给相关责任人;c.责任人调查并修正缺陷, 分析缺陷引入的原因;d.管理人员对修正结果进行复查, 分析缺陷流出的原因;e.报告人验证缺陷是否被正确。

结束语

软件的研发是一项非常复杂和严谨的工程, 所以在这个阶段要对软件的质量作出各个方面的监测和试验, 这样才能最大程度上减少软件的质量问题的发生概率, 而软件缺陷度量作为软件质量监测的一个重要方式, 应该引起我们有关的工程人员的足够重视, 不断在缺陷度量的技术上提升, 这样才更好的服务于我们的软件研发工作。

参考文献

[1]何荣勤.CRM原理.设计.实践[M].北京:电子工业出版社, 2006.

论软件项目管理 篇9

软件项目的生命周期管理

所谓软件项目的生命周期管理主要是利用相关理论以及手段方法来协调软件项目中的各子项目, 以便用来为软件项目正常进行提供可靠的方式方法。对于软件项目的生命周期管理作为一种项目管理的纪律为软件项目管理列出了一定的标准来保证软件项目的正常进行。

软件项目的生命周期有若干阶段组成或者是一些重复出现的周期构成。软件项目自身具有一定的特殊性, 同时软件项目也是随着客户的具体需求和要求而进行改变, 相对于传统的项目管理生命周期来讲, 软件项目生命周期的标准与考核就变得较为复杂, 在进行项目管理的过程中需要根据不同的软件项目具体制定相应的生命周期管理计划, 比如包括一些版本控制标准、技术文档管理或者是系统开发等方面。

软件项目的合同与采购管理

基于软件项目管理的特殊性, 现在大多数公司或者项目的管理力量很难与软件项目良好融合, 可能会出现管理目标无法实现或者其他一些非技术性的问题。为了提高公司软件项目管理的有效性, 项目外包就变得十分必要。外包在一定程度上能够减轻公司的管理压力, 但同时会增加公司项目管理的难度和风险。对于项目外包的合同以及合作的细节需要全面而细致。在这个阶段公司需要请专业的机构来起草合同, 并且对外包项目的采购流程进行严格的把控, 为了能够保证项目的顺利进行, 要确认和明确双方的职责, 对合同所有要求尽力做到明晰化。

软件项目的风险管理

针对软件项目的风险管理具有十分重要的意义, 风险管理需要贯穿于整个软件项目过程, 也是软件项目规划阶段的重要环节。风险管理的目的就是要充分考虑项目各方面的因素、找到潜在的风险项以及制定全向的项目规划, 同时就风险的规避或者是解决进行全面的讨论。风险分为很多种, 软件项目风险分析需要全员参与并群策群力才能保证软件项目正常进行。

软件项目的质量管理

质量管理是软件项目工程实施结果的有力保障, 同时软件项目的质量管理是主要的控制过程。全球质量标准体系和公司层面的项目内部质量标准体系是软件项目质量标准的两个层次, 但是不论软件项目或者执行的是哪个标准都要遵守一定的程序来进行, 在制定相应的标准后, 所有人员需要保持统一的节奏来遵守这个标准, 避免出现意见不统一, 朝令夕改的状态。国际上主要的质量标准体系比如六西格玛体系等, 这些国际标准都具有成熟的指导措施和流程性文件。具体到某一公司项目的时候, 公司层面在建立质量管理体系的时候可以参考相关的国际标准进行编制, 这样科学性以及可行性会大大提升。

基于软件项目管理自身的性质, 质量管理体系在建立时还要结合客户的具体需求来制定, 市场调查、客户访谈以及标杆分析等过程都十分必要, 这些工作流程也是用来评估和记录用户需求的质量标杆。在项目执行过程中对于客户强调的质量需求可以予以加强, 进而使得公司的产品质量得到控制。

软件项目的决策管理

决策是一个管理活动中最重要的环节之一。能够快速和准确的做决策对于项目管理的控制与发展来说是十分关键的, 软件项目管理过程中的决策不只是由一个领导者确定的, 在项目的发展过程中会因为一些不可控因素或者其他原因引起争议, 这些争议也会增加软件项目管理组织决策的难度。基于以上分析, 完美的决策需要组织各成员共同参与和制定, 针对不同的因素这样才能达到项目决策的最佳效果。当项目双方的决策意见不统一时, 需要重新制定和建立统一的决策流程进行解决, 对于意见统一的决策可以简化流程来提升决策的效率。

软件项目的信息管理

论软件项目的质量管理 篇10

关键词:软件项目质量;软件项目质量管理;需求;测试

1.软件项目质量管理相关背景

1.1 相关案例

美国项目管理专家资质认证委员会主席Paul Grace说过,在当今社会中,一切都是项目,一切也将成为项目。项目管理学科的发展,不管在国内还是国外,都进入了一个以超乎寻常的速度发展的阶段。软件项目管理作为一个新兴领域随着软件产业的蓬勃发展而愈发受人瞩目。而软件项目的质量如何对于这个软件而言是尤为重要的,所以想要提高软件项目的质量,就必须在项目的质量管理上狠下功夫。

在2005年的时候,日本东京证券交易所当时发生了一次非常严重的系统事故,导致所有的证券交易全部崩溃,在很短的时间里就造成了几千亿元的亏损。后来经过仔细调查,导致事故的原因竟然是当月交易系统的更新出现了问题。耗资如此巨大的软件系统本来就是为了进一步提高企业的工作效率,为企业创造更大的价值,更多的利润,但没想到因为一个小小的系统更新问题导致了如此惨重的损失,这一切都源于一个问题,就是项目的软件质量,如果软件质量出现了一点小问题,那么它造成的将是大后果。

1.2 相关概念

说到软件项目的质量管理,首先要弄清楚什么是质量。国际标准组织ISO9000对质量的定义是“一个实体的性能总和,它可以凭借自己的能力去满足对它的明示或暗示的需求”。所谓软件项目的质量,就是“软件项目能够满足已确定的全部需求的特征集合”,是能够满足软件项目在项目开始阶段确定的功能、性能等特点的总和[1]。它反映在一下三方面的信息特点:能达到客户的所有需求;运用合理的质量标准体系,来引导软件的开发;能否满足客户的隐性需求[2]。质量是构成社会财富的物质内容,没有质量就没有数量,也没有经济价值。

软件项目的质量管理的主要目的就是确保项目满足它所应满足的需求。从用户需求出发,保证最终交付的软件要满足客户的期望。质量管理的重点在事前的预防,而不是时候的检查,这就需要管理者在项目执行的全过程中持续坚持质量管理的理念,不断改进,使最终交付的软件产品满足客户明确需求、隐含需求的所有特性。

2.提高项目质量管理的方法

2.1加强人员的执行力和技术

对软件的项目质量造成影响的有这么几个原因,分别是技术、过程、人,而人大影响在这几个因素里是最大的很多时候导致企业缺乏核心竞争力的原因是执行力太差。对质量管理目的的偏差,是造成执行力低这一问题的很大因素。我们总是常常提到利润最大化这个词,如果开发公司不断盲目强调收益,而且是"用最小的投入获得最大的利益"。这会导致开发团队不得不最大限度地、甚至不择手段地去取得财务的增长,从而大大降低了他们的执行力。质量的目的只是为了解决销售,质量管理真正实现的根基就不存在。我们应当逐步让公司企业选择一种更和谐的盈利方式。使自己的开发团队去注重用户的感受,选择与客户、合作伙伴的长远利益。

人员的技术永远是质量过硬的最高保障,企业应当鼓励和奖励内部员工多去参加软件类的培训以及各种认证资格的考试,形成一个良性的竞争和学习环境,优胜略太,可以很大程度的提高企业员工的技术水平。

2.2清晰客户需求

清晰把握客户的需求是尤为重要的,在很多不成功的案例当中,很大程度就是由于企业不能清晰把握客户的需求。软件项目的需求决定了软件项目的功能和目标,目标不明确就没法制定下一阶段的工作计划,从而不能按质量完成整个软件项目。所以,如何真正把握客户的需求,是提高和确保软件项目质量的重中之重。

此外,软件项目负责人和需求的提出者应该尽可能早地分析项目的相关业务逻辑、明确软件项目的需求。项目需求明确的越早,就能够越早的制定开发计划,软件项目的开发质量就越容易得到保证。在项目的实施阶段,还需要对每个阶段的需求进行进一步明确,制定每个阶段的子计划,从而使得软件项目的开发得以分解。保证了每个子计划的开发质量,就能够保证整个项目的开发质量。

2.3 实施软件检测

在软件项目的质量管理工作当中,对于软件的检测是对软件的质量又有效的保障和最后的屏障。因为很多项目在实行的过程当中并不是十分规范,所以对于软件检测这一环节就更为重要[3]。检测一个软件项目在实行过程能否达到需求的逆向过程,是在整个软件开发过程中非常重要的环节。通过不同的检测环节,检测出各种错误环节来确保整个软件项目的质量,从而交付一个满意的项目成果给客户。

然而软件检测并不能发现所有的潜在问题,有些小的操作或功能方面的问题也许会在后期使用过程中出现,这是难以避免的,应该向使用人员提前说明,但是大的操作或功能性的问题绝不应该出现在正式运行过程中,是质量管理应当解决的问题。

2.4 进行代码走查

代码的质量很大程度上决定的软件的质量。编程人员在编写代码的时候,要高度认真负责,思路清晰明确,高质量的程序必须是高内聚,低耦合,同时也要结构合理,条理清晰。但由于在工作组中每个编程人员的编写代码习惯不同,能力差异,所编写出来的代码质量也有差异。所以,在软件开发过程中引入代码走查是相当重要的环节。在严格规定的时间内,让编程人员对其所编写的代码进行讲解和分析,不仅能促进编程人员提高编程水平,而且也可以经常内部交流,相互学习,更好的配合,从而提高和促进软件质量的提高。

3.结论

本文通过介绍了软件项目质量管理的重要性以及软件项目质量管理的内容, 重点研究了如何提高软件项目质量管理的方法,包括加强企业员工的的技术和执行力、清晰客户需求、实行软件测检测和进行代码走查这四种方法。近年来, 项目质量管理逐渐得到企业的重视, 但是要将项目质量管理更好的运用在实际的项目中,还有待于软件行业的不断发展和规范。加强软件质量管理的做法还有很多,质量管理的内容与执行也要时刻紧跟时代步伐,我们应当针对不同的项目采取不同的最适合本项目的方法,从而达到最好的效果。(作者单位:贵州财经大学MBA中心)

参考文献

[1]吴吉义.软件项目管理理论与案例分析 [M] .北京:中国电力出版社,2007:165.

[2]陈淦.也谈软件项目管理中的质量保证[J].福建电脑, 2006 (10): 4. http: //www cnki com cn/Article/CJFDTotal-FJDN200610027 htm.

软件项目管理探析 篇11

1.1 预测软件规模

为了估算软件项目的工作量和完成期限, 首先需要预测软件规模。度量软件规模的常用方法有代码行技术和功能点技术。

代码行技术 (LOC) 是依据以往开发类似产品的经验和历史数据, 估计实现一个功能所需要的源程序行数。把实现每个功能所需要的源程序行数累加, 就可得到实现整个软件所需要的源程序行数。但是源程序仅是软件配置的一个部分, 用它来代表整个软件的规模似乎不大合理。为了克服代码行技术的缺点, 人们提出了功能点技术。

功能点技术 (FP) 依据软件信息域特性和软件复杂性, 用功能点 (FP) 为单位度量软件规模。这种方法的计算公式是:FP=UFP×TCF。UFP包括各种输入、输出、查询、主文件数、外部接口数等;TCF包括高处理率、性能标准、联机更新、可重用性等复杂性因子。功能点数与所用的编程语言无关, 因此在判断信息域特性复杂级别和技术因素的影响程度时, 存在着相当大的主观因素。

这两种方法各有优缺点, 应该根据软件项目的特点选择适用的软件规模度量方法。

1.2 工作量估算

根据项目的规模可以估算出完成项目所需的工作量。表示工作量和影响工作量因素之间关系的模型有很多, 我们可以从中选择一个或多个方法进行估算。这类模型的总体结构形式:E=A+B× (ev) C (1) 其中, A、B和C是常量, E是以人月为单位的工作量, ev是估算变量 (KLOC或FP) 。

(1) Walston和Felix开发的模型是首批此类模型中的一个, 他们根据IBM的60个项目数据得出以下的方程式:

E=5.2× (KLOC) 0.91 (2)

这种规模用代码行数来测量, 其中还包括注释 (当然注释不能超过代码行总数的50%) 。

(2) Bailey和Basili提出了一种元模型的建模技术, 他们用一个由18个科学性项目构成的数据库证明了他们的技术, 首先把标准误差估算降到最小, 产生一个非常精确方程式:

E=5.5+0.73× (KLOC) 1.16 (3)

然后根据误差比率调整这个初始估算。

(3) Boehm在其经典着作“软件工程经济学”中, 介绍了一种软件估算模型的层次体系, 称为COCOMO, 它代表了软件估算的一个综合经验模型。COCOMOII是软件成本估算模型, 是软件决策中成本和进度关系模型, 涉及软件开发工作量、预算、进度、软件质量。COCOMOII给出了3个层次的软件开发工作量估算模型:第一阶段是应用系统组成模型, 用于估算构建原型的工作量;第二阶段是早期设计模型, 适用于体系结构设计阶段;第三阶段是后体系结构模型, 适用于完成体系结构设计之后的软件开发阶段。

当使用COCOMOII和功能点估算时, 虽然两者是估算方法中比较科学的方法但也存在一些主观判断, 一般存在很大主观判断时采用此方法。

软件成本中最大的部分是工作量, 还包括设施、方法和工具等预算。项目的各个阶段都要进行工作量及成本的估算, 且随着项目的开展, 工作量估算更加准确。

2 制定项目计划

项目进度通过列举项目的各个阶段, 把每个阶段分解成离散的任务或活动, 来描述特定项目的软件开发周期。进度还描绘这些活动之间的交互, 并估算每项任务或活动将花费的时间。为此, 项目管理者必须制定一个足够详细的进度表, 以便监督项目进度并控制整个项目。

常用的制定进度计划的工具主要有Gantt图和项目网络图两种。Ganntt图通过日历形式列出项目活动及其相应的开始和结束日期。在进度报告中很有效, 容易于读懂和使用。但是作为计划编制工具不是太强, 没有表示活动间的逻辑关系。项目网络图是项目的所有活动以及它们之间逻辑关系或排序的图形显示, 表明活动和事件间的相互关系。具有识别关键路径、项目历程和活动排序、表明工作流程、帮助编制计划和组织工作等优点。因此, 工程网络图是制定进度计划的强有力的工具。通常, 联合使用Gantt图和工程网络这两种工具来制定和管理进度计划, 使它们互相补充、取长补短。

进度安排是软件项目计划的首要任务, 而项目计划则是软件项目管理的首要组成部分。与估算方法和风险分析相结合, 进度安排将为项目管理者建立起一张计划图。

3 人员组织

3.1 人员角色和特性

软件项目管理应该以人为本, 有效管理人力资源, 合理配置人力资源。决定项目团队成员的角色, 要了解每个人员的特性, 比如完成工作的能力、开发类似应用的经验、使用类似技术的经验、与他人交流的能力及管理技能等特性。充分发挥每位成员的技术专长, 做到人尽其能。在软件开发或维护项目中, 开发团队成员会彼此相互交流, 也会与用户以及客户交流。人员背景和交流能力也能对项目的成本和进度产生很大影响, 很多项目都要求几个人必须共同承担完成一项或多项活动的责任, 项目经理在选择同哪些人在一起工作时, 应该了解每个人的兴趣和能力。

3.2 项目人员组织

在软件工程项目中, 人员组织方式有民主制程序员组和主程序员负责制组。

在民主制程序员组里每个小组成员完全平等, 过程和个人是分开的, 批评只针对产品或结果, 并不涉及个人。不论讨论的是设计问题还是测试技术, 小组成员投票产生决策。这种态度有助于更快速地发现错误, 从而导致高质量的代码。不足的地方在于没有明确的权威指导, 组员间缺乏必要的协调, 最终可能导致工程失败。

在主程序员负责制组中, 有一个人总体负责系统的设计和开发, 其他的小组成员向该主程序员汇报, 主程序员对每一个决定有最终决策权。同时, 组内分工, 给主程序员提供充分支持, 所有通信都通过一两个人进行。副主程序员 (也称后备程序员) 是一名候补人员, 其主要工作是在必要时替代主程序员。资料员负责维护所有的项目文档, 编译和链接代码, 并对提交的所有模块进行初步测试。这种工作划分使得程序员能集中精力做编程。

当然, 还有许多其它组织开发或维护项目的方式, 上面介绍的两种组织结构代表了两种极端的情况。在给定的条件下怎么选择最合适的结构呢?在有着高度确定性、稳定性、一致性和重复性的项目中, 使用像主程序员负责制这样的等级组织结构会更有效。这些项目成员之间的交流很少, 强调规章、专业、正式以及组织层次的清晰定义。

另一方面, 当项目中涉及大量的不确定性时, 采用更为民主的方法可能会更好。因为项目的不确定性比较高, 参与决策和鼓励开放式交流可能会更为有效。

在适当的时候把两种类型的组织结构组合起来。例如, 可以要求程序员独立自主地开发一个子系统, 在层次结构内部使用民主制;或者可以为一个结构松散型项目的测试小组规定一个层次结构, 指派某人负责所有主要的测试决策。

4 风险管理

在软件开发过程中, 经常会碰到对需求的误解、关键人员流失、测试时间不充分、实时性能达不到要求、外部提供的环境达不到要求等风险事项。所以项目经理必须确定在开发或维护过程中是否会出现这些风险事项, 并制订计划以避免这些事件。如果这些事件不能够避免, 也要把伤害降到最低。风险管理包括识别风险、分析风险、为每个风险分配优先级、降低风险、风险管理计划及风险化解。

首先, 评价项目的风险, 以便了解在开发或维护过程中可能发生什么。可以通过类似系统的检查清单, 以确定新项目是否可能受到清单中风险的影响。其次, 分析已经识别的风险, 以便能尽可能多地了解风险事项的性质。有很多技术可以增加对风险的了解, 包括成本模型、性能模型、网络分析等。最后给所有的风险分配优先级。优先级能够利用有限的资源集解决最有威胁的风险。

可以通过改变性能或功能需求, 避免风险;也可以把风险分配到其他系统中, 或者购买保险, 转移风险。要是风险发生, 接受并用项目资源控制风险。在风险管理计划中做好记录, 以便他人查阅。随着项目的进展, 定期地重新评估风险、风险出现的概率以及风险可能造成的影响。

综上所述, 成本估算应当在早期进行并且经常进行。可以将成本估算和风险管理结合起来, 通过成本估算, 我们在对预算内完成工作表示担忧时, 风险管理技术可以用来减少甚至消除风险。

摘要:软件项目管理从一组项目计划活动开始, 对软件开发的各个阶段进行管理, 增强软件开发的控制能力, 提高软件开发质量。可见软件项目的有效管理对项目有着至关重要的作用。主要讨论如何在项目生命周期的早期给出一个好的成本估算和项目进度计划, 从而知道如何决定项目人员的任务以及如何组织项目人员, 最后讨论如何预测和降低风险。

关键词:软件项目,项目人员,成本估算,风险管理

参考文献

[1]张海藩.软件工程导论[M].北京:清华大学出版社, 2011.

[2]R S.PRESSMAN.软件工程-实践者的研究方法[M].北京:机械工业出版社, 2011.

上一篇:Linux系统管理下一篇:铁路隧道施工风险评估