个人软件过程的概述
随着软件工程知识的普及,软件工程师都知道,要开发高质量的软件,必须改进软件生产的过程。
目前,业界公认由CMU/SEI开发的软件能力成熟度模型SW-CMM是当前最好的软件过程,并且CMM已经成为事实上的软件过程工业标准。
但是,CMM虽然提供了一个有力的软件过程改进框架,却只告诉我们应该做什么,而没有告诉我们应该怎样做,并未提供有关实现关键过程域所需要的具体知识和技能。
为了弥补这个欠缺,Humphrey又主持开发了个体软件过程(Personal Software Process,PSP)。
在CMM1.1版本的18个关键过程域中有12个与PSP有关,据统计,软件项目开发成本的70%取决于软件开发人员个人的技能、经验和工作习惯。
因此,一个单位的软件开发人员如能接受PSP培训,对该单位软件能力成熟度的升级是一个有力的保证。
CMM侧重于软件企业中有关软件过程的宏观管理,面向软件开发单位,PSP则侧重于企业中有关软件过程的微观优化,面向软件开发人员。
二者互相支持,互相补充,缺一不可。
按照PSP规程,改进软件过程的步骤首先需要明确质量目标,也就是软件将要在功能和性能上满足的要求和用户潜在的需求。
接着就是度量产品质量,有了目标还不行,目标只是一个原则性的东西,还不便于实际操作和判断,因此,必须对目标进行分解和度量,使软件质量能够测量。
然后就是理解当前过程,查找问题,并对过程进行调整。
最后应用调整后的过程,度量实践结果,将结果与目标做比较,找出差距,分析原因,对软件过程进行持续改进。
就象CMM为软件企业的能力提供一个阶梯式的进化框架一样,PSP为个体的能力也提供了一个阶梯式的进化框架,以循序渐进的方法介绍过程的概念,每一级别都包含了更低一级别中的所有元素,并增加了新的元素。
这个进化框架是学习PSP过程基本概念的好方法,它赋予软件人员度量和分析工具,使其清楚地认识到自己的表现和潜力,从而可以提高自己的技能和水平。
个人软件过程的介绍
个人软件过程(Personal Software Process,PSP)是一种可用于控制、管理和改进个人工作方式的自我持续改进过程,是一个包括软件开发表格、指南和规程的结构化框架。
PSP与具体的技术(程序设计语言、工具或者设计方法)相对独立,其原则能够应用到几乎任何的软件工程任务之中。
PSP能够说明个体软件过程的原则; 帮助软件工程师作出准确的计划;确定软件工程师为改善产品质量要采取的步骤;建立度量个体软件过程改善的基准;确定过程的改变对软件工程师能力的影响。
程序员,在开发的过程中应该注意哪些安全方面的问题
可忽视的误区 企业的软件开发能力取决于该企业的软件过程能力。
如果一个企业软件过程能力越成熟,那么该企业的软件开发能力就越有保证。
大量的实践经验表明,在体现企业软件开发能力的因素中,技术或工具并不是第一位的。
其实,许多问题不是出在不懂怎么做,而是没有安排做,做的次序不对,或不知道怎样做得更好。
目前,比照软件过程管理模型(如图一),中国的软件企业中还存在各种影响过程改进的因素和误区,主要表现在个体和组织两个方面。
在组织方面,首先,中国软件企业实施CMM往往缺乏高级管理者的支持。
其次,没有足够的SEPG资源。
从很多情况考虑,SEPG成员要比其他CMM相关组综合素质高一个层次,CMM相关组的管理素质需要比技术类组高一个层次,才能顺利开展工作。
第三,没有合适的先行者或者没有适当全局观的项目经理配合。
被组织选为先行者的人员经常说自己没有时间,由于这些人都是从各个项目中抽出来的,一般人很难有足够的权力让他们为配合CMM做工作。
最后,软件组织缺乏足够详细的项目计划和监督调整机制。
在个体方面,首先,手工作坊式的个人英雄主义情结成为实施CMM的制约。
其次,某些软件开发人员错误地认为过程管理会影响或压抑专业人员的创造性,其实这是不清楚过程的定义造成的。
第三,由于软件项目的成功更多地依赖于少数人员的杰出技术能力和项目管理能力,成功项目的经验不能得到最大限度的继承,软件生产的可重复性相对比较差。
最后,软件企业人员变更相对频繁也增加了实施CMM的难度。
“三七”法则 在过程改进总体建议方面,应该从三个方面做准备,分七步走。
首先,在组织方面的准备上,除了要求高层经理出资支持CMM改善软件过程,委托具有管理职责的人员负责CMM实施之外,须成立软件工程过程组(SEPG),研究CMM、编写/修改必要的文档并推广文档;成立软件质量保证组(SQAG),研究软件质量保证技术及过程,编写/修改必要的SQA文档并推广已编写的文档,测量和分析项目进展情况,反馈项目过程状态,准备和评审过程、计划和标准,审计指定的软件工作产品以检验其遵从性,审计软件工作过程的符合性;成立软件配置管理组(SCMG),研究软件配置管理技术及过程,编写/修改必要的SCM文档并推广已编写的文档,建立必要的工具支持。
在知识准备方面,要加强培训工作,建立内部过程评估队伍和庞大的过程改善队伍。
对各角色人员进行专项培训,普遍开展软件工程基础及CMM的培训,使每个岗位的人员都具备过程改进的意识,并掌握所必需的过程改进知识和技能。
此外,要重视对软件工程的研究,包括方法、工具和过程,加速培养过程改进的骨干队伍。
在能力准备方面,建立有效的软件项目管理,文档化且遵循软件项目管理过程,在建立管理过程中,使用组织的方针来指导项目,建立基本软件工作产品完成准则和检查单,并迅速实施,然后根据反馈意见及时修改。
坚持适当的监控机制,例如对项目进度进行跟踪而建立的例会制度,制度化的日报和周报活动。
做好实际数据收集、测量与分析工作等。
重复成功的以前项目的开发经验。
改进过程总体可以分为以下七个步骤。
确定目标:确定在一段时间内达到的改进等级。
状态诊断:把过程改进要达到的状态与目前的状态作比较,找出存在的差距。
制定计划:“凡事有计划,按计划办”不仅是CMM强调的,也是软件开发过程中应该注意的。
规程制定:过程改进的一个重要的地方就是“事事有规程,时时有记录”,这样,即使关键人走了,原来的事也能继续而不致产生过多的停顿。
过程试点:制定了规程后,要对行动计划按执行过程的情况进行适当调整。
其中,尤其要注重评审和验证,实现定期监控,注意采集度量数据。
反馈修正:总结过程试点的经验,修订规程。
过程推广:扩大应用范围。
软件过程改进实施步骤 公司的过程改进活动也是一个项目,并且是很大的项目,涉及的人员、技术和资源都很多,还要平衡现有产品或项目的进度等。
同时,它也是一个不断往复,螺旋上升的一个过程。
第一个步骤为高级经理下定决心,提供足够的资源来主持并完成前期的准备工作,这个阶段核心是评价SEPG组长的资格和资质,还包括评估培训、购买工具的预算及相应资金能否及时到位。
无论是软件商业化的过程或CMM实施的过程之中,建立规范化的易于操作的软件开发行为规范都是首先要做的工作。
但是,切记,编制规范的时间一定不能长,以10到12个工作日为宜,文档不宜过多,以5~6个规程为好(对应5个或6个关键过程域),这是第二个关键阶段。
评价标准可以是SEPG组长能够顺利、流畅地讲解其制定的规程。
在规程编制阶段必须有老板或常务副总直接领导CMM工作。
但是一定要记住,制定的过程要遵从“从实践中来,到实践中去”,同项目经理、有经验的开发人员研究、讨论,从而使SEPG组长能够及时反映工作中的问题,并且问题能够得到及时解决。
第三个步骤是制定并发布公司的评估方针和方案,包括开发体系重组过程中的激励措施,中层在此阶段必须介入,这关系着过程改进...
软件工程中的cmm是什么,有哪五个层次
CMM是指“能力成熟度模型”,其英文全称为Capability Maturity Model for Software,英文缩写为SW-CMM,简称CMM。
它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。
CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。
CMM是是一种用于评价软件承包能力并帮助其改善软件质量的方法,侧重于软件开发过程的管理及工程能力的提高与评估。
CMM分为五个等级:一级为初始级,二级为可重复级,三级为已定义级,四级为已管理级,五级为优化级。
CMM是由美国卡内基梅隆大学软件工程研究所1987年研制成功的,是目前国际上最流行最实用的软件生产过程标准和软件企业成熟度等级认证标准。
目前,我国已有软件企业通过了CMM标准认证 。
SW-CMM(Capability Maturity Model For Software 软件生产能力成熟度模型,以下简称"CMM"),是87年由美国卡内基梅隆大学软件工程研究所(CMU SEI)研究出的一种一种用于评价软件承包商能力并帮助改善软件质量的方法,其目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。
其所依据的想法是:只要集中精力持续努力去建立有效的软件工程过程的基础结构,不断进行管理的实践和过程的改进,就可以克服软件生产中的困难。
CMM它是目前国际上最流行、最实用的一种软件生产过程标准,已经得到了众多国家以及国际软件产业界的认可,成为当今企业从事规模软件生产不可缺少的一项内容。
CMM目前通用流行的版本是1.1(Version1.1)。
《按照软件工程研究所(SEI)的原来计划,CMM的改进版版本2.0(V2.0)是要在1997年的11月完成的。
但是,美国国防部办公室要求软件工程研究所(SEI)延迟发放公布CMM版本2.0,直至他们完成另一个更为紧迫的项目-CMMI。
CMMI(Capability Maturity Model Integration能力成熟度模型集成),是美国国防部的一个设想。
他们希望把所有现存的与将被发展出来的各种能力成熟度模型,集成到一个框架中去。
这个框架用于解决两个问题:第一,软件获取办法的改革;第二,从集成产品与过程发展的角度出发,建立一种包含健全的系统开发原则的过程改进。
CMM为软件企业的过程能力提供了一个阶梯式的改进框架,它基于过去所有软件工程过程改进的成果,吸取了以往软件工程的经验教训,提供了一个基于过程改进的框架;它指明了一个软件组织在软件开发方面需要管理哪些主要工作、这些工作之间的关系、以及以怎样的先后次序,一步一步的做好这些工作而使软件组织走向成熟。
一、CMM的诞生 信息时代,软件质量的重要性越来越为人们所认识。
软件是产品、是装备、是工具,其质量使得顾客满意,是产品市场开拓、事业得以发展的关键。
而软件工程领域在1992年至1997年取得了前所未有的进展,其成果超过软件工程领域过去15年来的成就总和。
软件管理工程引起广泛注意源于20世纪70年代中期。
当时美国国防部曾立题专门研究软件项目做不好的原因,发现70%的项目是因为管理不善而引起,而并不是因为技术实力不够,进而得出一个结论,即管理是影响软件研发项目全局的因素,而技术只影响局部。
到了20世纪90年代中期,软件管理工程不善的问题仍然存在,大约只有10%的项目能够在预定的费用和进度下交付。
软件项目失败的主要原因有:需求定义不明确;缺乏一个好的软件开发过程;没有一个统一领导的产品研发小组;子合同管理不严格;没有经常注意改善软件过程;对软件构架很不重视;软件界面定义不善且缺乏合适的控制;软件升级暴露了硬件的缺点;关心创新而不关心费用和风险;军用标准太少且不够完善等等。
在关系到软件项目成功与否的众多因素中,软件度量、工作量估计、项目规划、进展控制、需求变化和风险管理等都是与工程管理直接相关的因素。
由此可见,软件管理工程的意义至关重要。
软件管理工程和其它工程管理相比有其特殊性。
首先,软件是知识产品,进度和质量都难以度量,生产效率也难以保证。
其次,软件系统复杂程度也是超乎想象的。
因为软件复杂和难以度量,软件管理工程的发展还很不成熟。
软件管理工程的发展,在经历了从70年代开始以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征的结构化生产时代,到90年代中期,以CMM模型的成熟模型和日益为市场接受为标志,已经进入以过程成熟模型CMM、个体软件过程PSP和群组软件过程TSP为标志的以过程为中心的时代,而软件发展第三个时代,及软件工业化生产时代,从90年代中期软件过程技术的成熟和面向对象技术、构件技术的发展为基础,已经渐露端倪,估计到2005年,可以实现真正的软件工业化生产,这个趋势应该引起软件企业界和有关部门的高度重视,及早采取措施,跟上世界软件发展的脚步。
软件生产转向以改善软件过程为中心,是世界各国软件产业或迟或早都要走的道路。
软件过程改善是当前软件管...
软件测试中“CMI”是什么...???
别说那么复杂嘛,不复制百度知道哈,全称缩写是CMMI(先纠正,呵呵)是一个质量评估体系,你可以看做是评估一个公司的规范性达到多高的标准,评定级别越高,市场认可度就越大,当然,这也不是唯一体现一个公司真实水品的标准,呵呵通常口述某级别都是:达到CM3或CM4这样,呵呵
软件工程入门应该买什么书
加粗的书籍用来入门不错,其他的有的也行,有的偏难,还有学软件工程,程序设计一定要过关哦! 《统一软件开发过程》,Ivar Jacobson,James Rumbaugh,Grady Booch 著,周伯生 译,机械工业出版社,2002年1月。
《J2EE平台上的EJB组件开发》,Vlada Matena,Beth Stearus著,翟裕中 译,机械工业出版社,2001年8月。
《个体软件开发过程》,Watts S. Humphrey著,人民邮电出版社,2001年10月。
《CVS:开源软件开发技术》,Karl Fogel著,肖虎勤 等译,机械工业出版社,2001年6月。
Concurrent Versions System,版本协作控制系统。
《软件工程-理论与实践》(影印版),Shari Lawrence Pfleeger,高等教育出版社,2001年6月。
《能力成熟度模型(CMM):软件过程改进指南》,SEI编著,刘孟仁 等译,电子工业出版社,2001年7月。
《UML用户指南》,Grady Booch,Ivar Jacobson,James Rumbaugh著,邵维忠等译,机械工业出版社,2001年6月。
书里的Use case翻译成“用况”... 《软件测试自动化技术与实例详解》,Mark Fewster & Dorothy Graham 著,舒智勇 等译,电子工业出版社,2000年1月。
《测试流程管理》,Rex Black著,Microsoft Press,北京大学出版社,2001年。
《面向对象系统的测试》,Robert V.Binder著,华庆一等译,人民邮电出版社,2001年4月第一版。
《J2EE构建企业系统专家级解决方案》,Paul J. Perrone等著,张志伟 等译,清华大学出版社,2001年。
《系统分析与设计方法》(影印版)(System Analysis and Design Methods, fifth Edition),Jeffrey L.等著,高等教育出版社,2001年6月。
《UML面向对象设计基础》,Meilir Page-Jones著,包晓露等译,人民邮电出版社,2001年4月第1版。
《软件能力成熟度模型CMM方法及其应用》,杨一平等著,人民邮电出版社,2001年4月第1版。
《软件创新之路--冲破高技术营造的牢笼》,英文原书名: The inmates are running the asylum,Alan Cooper著,翻译: 刘瑞挺 刘强 程岩,电子工业出版社,2001。
介绍:这不是一本教你如何编程的书,但却是软件工程师不可不读的书。
本书作者Cooper被誉为“VB之父”。
他针对基于电脑的产品难学、难用、难以理解的弊病,提出了软件设计应分为两部分:交互设计与编码设计。
本书通过大量的商务案例,“透彻地描述了我们面临的挑战,并从方法学上提供了逃离我们自己热心营造的技术牢笼的指南。
” 《软件工程-实践者之路》 (第五版,影印),Roger S. Pressman,清华大学出版社,2001。
前面版本的中文译本见下。
《面向对象分析与设计》,杨正甫,中国铁道出版社,2001。
台湾人写的,每个方面都泛泛而谈了一下。
想知道布什、雅寇森、云豹是谁吗,看看这本书就知道了。
《面向对象设计的UML实践》(影印版),Mark Priestley,清华大学出版社,2000。
《UML对象设计与编程》,刘润东,北京希望电子出版社,2001。
《UML参考手册》,Ivar Jacobson,James Rumbaugh,Grady Booch。
姚淑兰,唐发根译。
机械工业出版社,2001。
《UML Programming Guide 核心设计技术》,希望出版社,2001。
此书一般。
已有热心人将此书上载至: http://www.smiling.com.cn/upload/files/9986/UMLGuid1.ziphttp://www.smiling.com.cn/upload/files/9986/UMLGuid2.zip( 需要登录到小组才能正确下载!) 《Web可用性设计》,Jakob Nielsen著,人民邮电出版社,2000年。
《软件能力成熟度模型》,何新贵等著,清华大学出版社,2000年11月。
《复杂系统的面向对象建模、分析与设计》,范玉顺、曹军威编著,清华大学出版社、施普林格出版社,定价38.00,软件较旧、光盘带有欺骗性,但也有其自己的特色。
马成长推荐。
《Oracle 8 UML对象建模设计》,机械工业出版社,2000年4月。
很实用。
已有热心人将此书上载至: http://www.smiling.com.cn/group/file/files.ecgi?group_id=9986 (需要登录到小组才能正确下载!) 《软件需求》,Karl E.Wiegers 著,陆丽娜 王忠民 王志敏译,机械工业出版社,2000。
已有热心人将此书上载至: http://www.smiling.com.cn/group/file/files.ecgi?group_id=9986 (需要登录到小组才能正确下载!) 《程序设计实践》,Brian W.Kernigham 著,裘宗燕译,机械工业出版社,2000。
已有热心人将此书上载至: http://www.smiling.com.cn/group/file/files.ecgi?group_id=9986 (需要登录到小组才能正确下载!) 《小组软件开发过程 TSPi》,Watts s Humphrey 著,人民邮电出版社,2000。
《软件工程-- 实践者的研究方法》 ,Roger S. Pressman 著,黄柏素、梅宏译,机械工业出版社,1999。
“Design Pattern: Elements of Reusable Object-Oriented Software”的中文译本《设计模式 可复用面向对象软件的基础》已有热心人将此书上载至: http://www.smiling.com.cn/group/file/files.ecgi?group_id=9986 (需要登录到小组才能正确下载) 《软件工程Java语言实现》,袁兆山翻译,机械工业出版社 。
《UML with Rational Rose从入门到精通》,电子工业出版社。
《Software Reuse》,Ivar Jacobson等著,1997...
请问你知道应用程序的发展史吗
第一个写软件的人是Ada(Augusta Ada Lovelace),在1860年代她尝试为 Babbage(Charles Babbage)的机械式计算机写软件。
尽管他们的努力失败了,但他们的名字永远载入了计算机发展的史册。
她的父亲就是那个狂热的,不趋炎附势的激进诗人和冒险家拜伦。
她本身也是一个光彩照人的人物—数学尖子和某种程度上的赌徒。
她最重要的贡献来自于与发明家Charles Babbage的合作,从而设计出世界上首批大型计算机—Difference Engine和Analytical Engine。
她甚至认为如果有正确的指令,Babbage的机器可以用来作曲,这是一个多么疯狂的想法,因为当时大多数人只把它看成是一个机械化算盘,而她却有渲染力和感召力来传播她的思想。
20世纪50年代,软件伴随着第一台电子计算机的问世诞生了。
以写软件为职业的人也开始出现,他们多是经过训练的数学家和电子工程师。
1960年代美国大学里开始出现授予计算机专业的学位,教人们写软件。
在计算机系统发展的初期,硬件通常用来执行一个单一的程序,而这个程序又是为一个特定的目的而编制的。
早期当通用硬件成为平常事情的时候,软件的通用性却是很有限的。
大多数软件是由使用该软件的个人或机构研制的,软件往往带有强烈的个人色彩。
早期的软件开发也没有什么系统的方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程。
而且,除了源代码往往没有软件说明书等文档。
从60年代中期到70年代中期是计算机系统发展的第二个时期,在这一时期软件开始作为一种产品被广泛使用,出现了“软件作坊”专职应别人的需求写软件。
这一软件开发的方法基本上仍然沿用早期的个体化软件开发方式,但软件的数量急剧膨胀,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,而失败的软件开发项目却屡见不鲜。
“软件危机”就这样开始了!“软件危机”使得人们开始对软件及其特性进行更深一步的研究,人们改变了早期对软件的不正确看法。
早期那些被认为是优秀的程序常常很难被别人看懂,通篇充满了程序技巧。
现在人们普遍认为优秀的程序除了功能正确,性能优良之外,还应该容易看懂、容易使用、容易修改和扩充。
1968年北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机”(software crisis)这个名词。
概括来说,软件危机包含两方面问题:一、如何开发软件,以满足不断增长,日趋复杂的需求;二、如何维护数量不断膨胀的软件产品。
1968年秋季,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。
在那次会议上第一次提出了软件工程(software engineering)这个概念。
软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。
软件工程包括两方面内容:软件开发技术和软件项目管理。
软件开发技术包括软件开发方法学、软件工具和软件工程环境。
软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。
为迎接软件危机的挑战,人们进行了不懈的努力。
这些努力大致上是沿着两个方向同时进行的。
一是从管理的角度,希望实现软件开发过程的工程化。
这方面最为著名的成果就是提出了大家都很熟悉的“瀑布式”生命周期模型。
它是在60年代末“软件危机”后出现的第一个生命周期模型。
如下所示:分析 → 设计 → 编码 → 测试 → 维护 后来,又有人针对该模型的不足,提出了快速原型法、螺旋模型、喷泉模型等对“瀑布式”生命周期模型进行补充。
现在,它们在软件开发的实践中被广泛采用。
这方面的努力,还使人们认识到了文档的标准以及开发者之间、开发者与用户之间的交流方式的重要性。
一些重要文档格式的标准被确定下来,包括变量、符号的命名规则以及原代码的规范式。
软件工程发展的第二个方向,侧重与对软件开发过程中分析、设计的方法的研究。
这方面的重要成果就是在70年代风靡一时的结构化开发方法,即PO(面向过程的开发或结构化方法)以及结构化的分析、设计和相应的测试方法。
软件工程的目标是研制开发与生产出具有良好的软件质量和费用合算的产品。
费用合算是指软件开发运行的整个开销能满足用户要求的程度,软件质量是指该软件能满足明确的和隐含的需求能力有关特征和特性的总和。
软件质量可用六个特性来作评价,即功能性、可靠性、易使用性、效率、维护性、易移植性。
软件不是纯物化的东西,其中包含着人的因素,于是就有很多变动的东西,不可能像理想的物质生产过程,基于物理学等的原理来做。
早期的软件开发仅考虑人的因素,传统的软件工程强调物性的规律,现代软件工程最根本的就是人跟物的关系,就是人和机器(工具、自动化)在不同层次的不断循环发展的关系。
面向对象的分析、设计方法(OOA和OOD)的出现使传统的开发方法发生了翻天覆地的变化。
随之而来的是面向对象建模语言(以UML为代表)、软件复用、基于组件的软件开发等新的方法和领域。
与之相应的是从企业管理的角度提出的软件过程管理。
即关...
实名了没节操