制造激情第一招,改变并制造危机:
变化能让人心理上有新鲜感,新鲜带来好奇,没有人不图新鲜,新的东西对老人不能躺在原有的功劳簿上睡大觉,他为了维持自己的权威不得不奋勇争先,新人可算有了颠覆格局的机会,一马当先,激情澎湃,都是常见的现象。很多创业团队的人,既没有股份,也不是什么经理,依然那么强的归属感,那么拼命,反而是公司发展起来后,待遇好了,激情却褪了。所以要改变,并在改变的时候制造出危机来,让核心团队成员生活在市场竞争和市场危机中,不过注意一点,大家辛辛苦苦干半天,生于忧患了,不要太吝惜金钱,该奖励就要奖励点,以免心力交瘁时还要考虑家庭生活负担,那他极有可能就真得不玩了。
制造激情第二招,制造势均力敌的竞争:
在日常生活和工作中设置竞争的组织机构职责和评价方法,让经理之间竞争去。注意两个问题:竞争者之间要势均力敌,差得太多也就没近了;对放弃竞争的要处理,对竞争成的要精神奖励;让受奖励的是70%以上的人,寒碜的是小部分人,千万不要做反了,人都有从众心理,奖励人多的,差的小部分会努力往上靠,少数优秀的被奖励,优秀的往庸人堆里扎,切记。
制造激情第三招,让我干的管理模式改成我要干的模式:
刘绍勇董事长发现飞行员缺乏激情,于是开启了自费学飞行的先河,符合条件的人都可以报名,缺钱公司可以贷款,飞行员是公司的资源,最难管,老人躺着睡大觉也不敢把他怎么样,刘先生的一招使许多具备专业素质的年轻人积极参与进来,后备梯队就有了,以积极的后备梯队给老的人制造了无形的压力。原来是公司认为需要必须把某人派去,这是让我干,现在是通过放开,成了我要干。你不干,别人干,原来比你下一层次的人要干,上一层的人就坐不住了。
制造激情第四招,强压并有让其有成就:
下属不能主动进取,就强行加压,让他加班,频繁检查,并让他有短期的成就,几个要素缺一不可。
维持激情第五招,不断发展自己的组织
对下属最大的激励是不断发展你的组织,不断膨胀的规模,不断增加的市场份额,忙不过来的业务让员工会有很强的受感染力,究竟是为什么我也不知道原因。
创造激情第六招,选择认同这个业务并能在执行中发现乐趣和知识点的人:
有的人就从来不缺乏激情,只是能否找到宣泄的窗口,所以一定要找到这种人,他认同这个业务,并能在这个业务的执行中发现很多的学习点和乐趣,然后他才能执行好。天生缺乏激情的人,不能感染他人,有激情但没在您所希望他负责的岗位职责上的人,通过描述业务的点看能否点燃他的激情,因为有的年轻人可能接触某类业务少,不了解细节的学问,一旦深入可能会沉迷其中,这时候就需要引路人指给他。
维持激情第七招,领导者个人感染力和管理方法:
以上都是外围的因素,领导者本身也是有文章可做的,激情的创造和维持基本上来自于中上层管理者,基层经理如果被授权足够多,也能起到一点作用,比如个人的激情能感染周围的人,再加上一些具体方法,让团队的气氛和谐,争论但不诋毁。具体的术方面的方法和工具未来会有专门的文章讲述,不再细化了。
内因决定外因,外因通过内因起作用,激情是内心的表现,是内因,攻心为上,有了内因,外因的条件再艰苦,都将无往而不胜。泥腿子赶走了日本鬼子,土八路打败了蒋正规军,靠的是激情,革命歌曲大比赛,连队之间大比武,支部建在连上,严明的纪律,整齐划一的生活规矩等等细节都是创造和维持激情的战术。激情的人、激情的方法将创造出激情的事业。
自我训练
1.程序
(1)训练员询问成员,怎样才算自我肯定的人?摘要写在海报纸上。
(2)说明坚定者与软弱者的特质,请成员三人一小组讨论其影响。
(3)说明妨碍自我肯定的内在恐惧,请成员三人一小组填表,并分享填写内容。
(4)说明反应类型表,请成员阅读资料(之二)的情境,并填入自己的反应,三人小组
并核对反应类别。
(5)说明权利的意义与重要性,请成员填写“我有哪些权利”,三人小组分享,并推派一
人报告填写的内容。
(6)三人小组讨论、练习资料的例子,训练员检核成是否确实了解自我肯定行为的做法。
(7)请成员回想自己在生活中有哪些不能自我肯定的行为,填入资料(之五),并斟酌自我肯定反应的行为,由三人小组讨论,直到满意为止。
(8)团体统整,训练员检核成员不能自我肯定的行为,进行讨论或演练。
2.注意事项
(1)训练员于活动中应多联系,例如成员间相似的软弱点、权利与成就,须以客观的角度观察,不能自我肯定的原因是否来自文化、角色或社会阶层,引发成员信任、开放的气氛 ,促成行动改变的意愿。
(2)注意传统规范所造成的不能自我肯定行为,不必急于要求成员改变,让成员体验这些规范他的关系,协助成员了解这些规范对他的意义与影响。
(3)三人小组于活动开始即成立,全部活动组内人员不变动,以增加安全感,组成三人小组时,训练员可鼓励成员,主动邀请自己关心的组员。
3.资料
[之一] 妨碍自我肯定的内在恐惧
1.害怕伤了别人的感情
例:_________________________________________________________
2.害怕被拒绝
例:_________________________________________________________
3.害怕失败
例:_________________________________________________________
4.害怕被伤害
例:_________________________________________________________
5.害怕有经济困难
例:_________________________________________________________
[之二] 分辨你的行为反应模式
1.情境
你正搭高速列车到纽约途中,邻座男士抽起烟来,于是空气变得很差,使你难以忍受。在这种情况下,你会如何反应?阅读下面的反应,并找出最接近你自己反应的句子。
2.我的反应是
(1)我觉得生气、愤怒,可是我不会有什么反应。
(2)我觉得生气、愤怒,而且会用攻击性字眼和声调告诉对方他不应该在车上抽烟。
(3)我觉得生气,但我会用平静的语调告诉他,请他不要在车上抽烟。
(4)我觉得生气、愤怒,但不对他说什么,而是去对乘务员抱怨这个人抽烟,看看她以 做什么。
3.反应类型
(1)非肯定型。
(2)直接攻击型。
(3)自我肯定型。
(4)间接攻击型。
[之三] 我有哪些权利?
1、生涯计划与事业选择方面
(1)我有没有权利去要求别人帮助?
(2)我有没有权利决定是否继续进修?
(3)那些对我很重要的选择,我有没有权利不同意父母的意思而自己决定?
(4)我有没有权利不接受别人给我的忠告?
(5)我有没有权利决定如何利用我自己的时间?
(6)--------------------------------------------------------------
(7)--------------------------------------------------------------
(8)--------------------------------------------------------------
(9)--------------------------------------------------------------
(10)-------------------------------------------------------------
2.人际关系方面
(1)我有没有权利让别人知道我很生气?
(2)我有没有权利选择与谁做朋友,不与谁做朋友?
(3)我有没有权利拒绝人情请托?
(4)与朋友交谈,当不想继续时,我有没有权利停止这个谈话?
(5)我有没有权利请邻座的人不要吸烟?
(6) ------------------------------------------------------------
(7) ------------------------------------------------------------
(8) ------------------------------------------------------------
(9) ------------------------------------------------------------
(10)------------------------------------------------------------
3.感情婚姻方面
(1)在男女朋友之间,我有没有权利拒绝对方的亲密举动?
(2)我有没有权利主动追求我喜欢的异性朋友?
(3)我有没有权利让对方了解我的感觉?
(4)我有没有权利决定自己的终身伴侣?
(5)我有没有权利决定自己什么时候结婚?
(6) ----------------------------------------------------------
(7)----------------------------------------------------------
(8)----------------------------------------------------------
(9)----------------------------------------------------------
(10)---------------------------------------------------------
[之四]:我肯定行为练习
1.主管对部属说:“你必须更努力工作,我们需要的是一个在这个领域中的哈佛经理,而不是一个跟随者,我实在很怀疑你是不是有这个能力?”
如果你是部属,你是反应是:
_______________________________________________________________
请对照“反应型表”,看看你的反应是属于哪一型?
如果不是自我肯定型,请修改成自我肯定型的反应:
_______________________________________________________________
2你排队买票,要看七点的电影。这是一部精采的得奖影片,所以观众很多,排在你
前面的人不少,你耽心若是买不到票,又得排两小时等下一场。但这时候,却有人在你面前
插队。你的反应是:
_______________________________________________________________
请对照“反应类型表”,看看你的反应是属于哪一型?
如果不是自我肯定型,请修改成我肯定型的反应:
________________________________________________________________
[之五] 我不能自我肯定的行为
请你想一想,在生活中有哪些你觉得不甘心 、委屈、挫折或误解的经验?在这些经验中是不是有些你重视的权利被侵犯被压抑了?请把这些经验写下来,并尝试将自我肯定的反应方式写出来。
经验一:________________________________________________________
自我肯定的反应:________________________________________________
经验二:________________________________________________________
自我肯定的反应:________________________________________________
[之六] 自我肯定量表
姓名: 性别: 日期:
评分标准:1.从来没有 2.很少 3.偶尔 4.大多是 5.经常是
1.当一个人对你非常不公平时,你是否让他知道? 1 2 3 4 5
2.你是否容易作决定? 1 2 3 4 5
3.当别人占了你的 位置时,你是否告诉他? 1 2 3 4 5
4.你是否经常对你的判断有信心? 1 2 3 4 5
5.你是否能控制你的脾气? 1 2 3 4 5
6.在讨论或辩论中你是否觉得很容易发表意见? 1 2 3 4 5
7.通常你是否表达你的感受? 1 2 3 4 5
8.当你工作时如果有人注意你,你是否不受影响? 1 2 3 4 5
9.当你和别人说话时,你是否能轻易地注视对方的眼睛?1 2 3 4 5
10.你是否易于开口赞美别人? 1 2 3 4 5
11.你是否因很难对推销售员说不,而买些自己实在不需要或并不想要的东西? 1 2 3 4 5
12.当你有充分的理由退货给店方时,你是否迟疑不决? 1 2 3 4 5
13.在社交场合你是否觉得没有困难去保持交谈? 1 2 3 4 5
14.你是否觉得别人在言行中很少表示不欢迎你? 1 2 3 4 5
15.如果有位朋友提出一种无理要求,你能拒绝吗? 1 2 3 4 5
16.如果有人恭维你,你知道说些什么吗? 1 2 3 4 5
17.当你和异性谈话时,你是否感到紧张? 1 2 3 4 5
18.当你生气时是否会严厉地责骂对方? 1 2 3 4 5
[之七]:自我肯定量表计分与解释
1.高度自我肯定:分数相加,得分在77分以上者,表示非常自我肯定,经常能适当、时地表露自己的意见与感受。
2.中偏高度自我肯定:分数相加,得分在52—76分之间,表示大多数时候能表露自己的意见与感受,但偶尔做不到。
3.中偏低度自我肯定:分数相加,得分在26—51分之间,表示偶尔能自我肯定,但大多数时候不能表达自己的意见和感受。
4.低度自我肯定:分数相加,得分在26分以下者,表示非常不自我肯定,经常不能表露自己的意见与感受。
80后可望迅速挤满IBM光板凳
“80后这一代非常渴望学习,渴望为自己的职业生涯做出更好的规划。现在每个人都是知识工作者,如果今天企业不对他们做一些投资,他们马上就会找另一家愿意做投资的人。”
IBM大中华区人力资源总监郭希文说,IBM为员工提供了一个不断学习和进步的环境,具有一整套完善而创新的体制。在和IBM共事的时间,员工可以学习到很多东西,展现自己的能力,同时我们还可以帮助他们挖掘潜能,在这样双赢的情况下双方会有很好的伙伴关系。
“不学习的人呆不下去”
庞大全面的培训系统一直是IBM的骄傲。
进入IBM的新员工首先会按照职属不同进行相应的集中培训,考核合格后,进入实习期,每个新员工都会有一位指定的师傅一对一进行帮带。师徒共同制定一个实习计划,定期反馈实习情况。实习结束后,员工可以提出还需要哪些培训内容,也可以要求继续有一个师傅。
对老员工也有非常完备的员工培训制度,有传统的教师培训和网上培训等多种方式。员工还可以提出公司外部的培训要求,只要要求合理,公司都会同意并给予经费。
对一些优秀有潜力的员工,IBM提供了经理培训,即将升职的员工在升任之前有本地化培训;升任后有为期一年、全球统一的e-learning或其他培训,同时也会为参加这类培训的经理各自指定辅导员。
另外,IBM每个主管级以上员工在上任伊始都有一个硬性目标:确定自己的位置未来由谁接任。接班人的成长关系到主管自己的位置和未来,也作为业绩进行考核,所以经理层员工会尽力培养他们的接班人,这就是著名的“长板凳计划”。它使IBM有备无患,每个重要的管理职位都有“替补队员”。
在IBM,培训从来都不会停止。鼓励员工学习和提高,是IBM培训文化的精髓。
将传统培训融入现代游戏
在虚拟学习的趋势日渐兴起时,IBM大中华区人力资源总监郭希文开始着手推动IBM的培训方式变革。
今年7月IBM人力资源部门主导开发的“Sales Quest”培训游戏正式面向400名销售人员试推行。在“Sales Quest”中,参与游戏的玩家(员工),需要在限定的时间内,了解客户、代理和竞争对手的情况,建立整体的销售策略,维护客户关系,满足客户的需求,最后完成项目目标,虚拟完成整个销售过程。IBM培训部门将一些真实案例加入游戏中,通过智能引擎对玩家(员工)表现做出判断。游戏过后,会给出玩家一份报告,指出优点和不足,督促下次改进。
据调查有80%的受试者玩了这个游戏,其中有1/3的人玩了两次,1/6以上的人玩了三次或更多。IBM大中华区人力资源部学习总监Lauge Sorensen说,这一代年轻人从小就生活在电子游戏、电脑游戏的环境中,因此“Sales Quest”这个环境对于他们来说非常自然。在第一个试点成功推出后,IBM计划把受众进一步扩大到IBM中国的1500人,同时准备面向印度销售人员推行这款游戏培训方式。除了销售人员外,IBM也在考虑为项目经理人和新员工等提供以游戏为基础的虚拟环境学习。
此前,IBM已经通过Second Life上的虚拟岛屿,帮助新员工尽快熟悉和适应工作,他们在这个虚拟岛上沟通交流,解决他们在业务中遇到困难。
CMM描述了五个级别的软件过程成熟度(初始级可重复级已定义级已管理级优化级 ,成熟度反映了软件过程能力(Software Process Capability)的大小,任何一个软件机构的软件过程必定属于其中某个级别。除了第一级以外,每级成熟度又由若干关键过程域(Key Process Area)构成。五个成熟度及其关键过程领域如图所示:
图中的每个关键过程域分别针对软件过程的某一方面,具体描述了某级成熟度下软件过程在该方面所应达到的的一组目标和实现这些目标的一组关键活动(Key Practice)。所有关键活动被划分为五类,分别为完成该组目标所需的承诺(Commitment to Perform)、前提条件(Ability to Perform)、实际动作(Activities performed)、度量分析(Measurement and Analysis)以及验证(Verifying Implementation)。上述五方面被称为五个Common Features。
CMM的结构如图所示:
需要提出的是,任何一个成熟度级别的关键过程域集都是本级描述的关键过程域集和所有下级的关键过程域集的并集。如3级的关键过程域就应有13个不同的域,其中7个是3级自己包含的,6个属于2级成熟度,而4级应有15个域。
第一级:初始级( The Initial Level )
初始级的软件机构缺乏对软件过程的有效管理,其软件项目的成功来源于个人英雄主义而非机构行为,因此它不是可重复的。
第二级:可重复级( The Repeatable Level )
概述:
第二级软件机构的主要特点是:项目计划和跟踪的稳定性,项目过程的可控性和以往成功的可重复性。更具体的说:
- 机构建立了管理软件项目的策略和实现这些策略的过程。
- 新项目的计划和管理基于类似项目的经验。
- 过程能力的增强基于以各个项目为基础的有纪律的基本过程管理。
- 不同的项目可有不同的过程,而对机构的要求是具有指导项目建立适当管理过程的策略。
- 每个项目都确定了基本的软件管理控制,包括:
- 基于前面项目的经验和新项目特点,做出现实的项目承诺(如预算、交付期、软件质量等);
- 软件项目管理者要跟踪开支、日程、软件功能;
- 满足承诺的过程中的出现的问题要及时发现,妥善解决;
- 定义了软件项目标准,且机构确保其被遵守。
构成:
本级的关键过程领域(KPA)包括:
客户的需求是软件项目的基础。软件需求管理的目的是在客户和软件项目之间达成对客户需求的一致理解。
为软件工程和项目管理建立一个合理的计划。
使管理者对实际的软件项目进展过程有足够的了解,以在项目效能偏离计划太多是采取有效措施。
选择合格的分包商,并有效管理之。
对软件项目过程及其间生产的各个产品进行监管以保证最终软件质量。
在整个软件生命周期里建立并维护软件项目的工作产品的完整性。
第三级:已定义级( The Defined Level )
概述
第三级的主要特征在于软件过程已被提升成标准化过程,从而更加具有稳定性、可重复性和可控性。处于第三级的企业具有如下一些特征:
- 机构采用标准的软件过程,软件工程和管理活动被集成为一个有机的整体。标准化的目的是使之可使管理者和技术人员有效工作。
- 有一组人员专门负责机构的软件过程,并且在机构中有培训计划来确保 stuff 和 manager 有知识和技能完成所赋予的角色。
- 标准的软件过程结合项目的特点即形成定义的软件过程,它包括一组集成的定义良好的软件工程和管理过程。
- 一个定义良好的过程包括就绪准则、输入、完成工作过程、验证机制、输出和完成准则。
- 在已建立的产品线上 cost, schedule, functionality 均可控制,软件质量被加以跟踪。
- 过程能力体现在在机构范围内对一个定义的软件过程活动、角色和责任的共同理解。
构成
第三级主要处理以下的 KPA:
确立机构对于改进机构的软件过程能力的软件过程活动的责任。
开发和维护一组有用的软件过程assets和提供一个用于定义定量过程管理的有意义的数据的基础
开发个体的技能和知识以使他们能够更加有效的完成他们的角色
基于业务环境和项目的技术需要,从机构的标准软件过程和相关的过程assets经过剪裁,将软件工程和管理活动集成为一个有机的定义的软件过程。
一致地完成定义良好的工程过程。它描述了项目的技术活动,如需求分析,设计,编码和测试。
确立软件工程组主动介入其它工程组以便项目能更好满足客户要求的手段
早而且有效的排除软件工作产品中的缺陷。它可通过 inspection,structured walkthrough等手段进行。
概括来说,第三级企业的重点是 Engineering processes and organizational support 。
第四级:已管理级( The Managed Level )
概述:
第四级的软件机构中软件过程和软件产品都有定量的目标,并被定量地管理,因而其软件过程能力是可预测的,其生产的软件产品是高质量的。具体地说,第四季的机构具有如下特征:
- 软件过程和产品有定量质量目标。
- 重要的软件过程活动均配有生产率和质量度量;
- 数据库被用来收集和分析定义软件过程的数据;
- 项目的软件过程和质量的评价有定量的基础;
- 项目的产品和过程控制具有可预测性。
- 缩小过程效能落在可接受的定量界限内的偏差;
- 可区分过程效能的有效偏差和随机偏差;
- 面向新领域的风险是可知并被仔细管理;
构成 :
本级的关键过程领域包括:
定量地控制软件项目的过程效能。
定量了解项目软件产品的质量,并达到既定的质量目标。
第五级: The Optimizing Level
概述
概括来说,第五级的主要特点是技术和过程改进被作为常规的业务活动加以计划和管理。处于第五级的企业具有如下一些特征:
- 机构集中于连续的过程改进
- 具有标识弱点和增强过程的手段。
- 采用过程数据分析使用新技术的代价效益并提出改进。
- 项目队伍能够分析出错原因并防止其再次出现。
- 防止浪费是第五级的重点。
- 改进的途径在于已有过程的增量改进和使用新技术和新方法的革新
构成
识别出错原因,防止错误再现 (通过改变定义的软件过程)
识别有益的新技术 (工具、方法和过程),并按有序的方式将其转移至机构之中。其重点在于在变化的世界中有效的完成革新。
连续改进机构所采用的软件过程,以改进软件质量,提高生产率和减少产品开发时间
概括来说,第五级企业的重点是连续的过程改进 。
纵观整个 CMM,软件企业提高自身成熟度的历程是一个从无序到有序,从特殊到一般,从定性到定量,最后不断自我完善的过程。
从第一台计算机出现至今,计算机的发展速度令人瞠目。在应用方面,计算机从由少数科学家从事数学计算到今天遍及社会生活的各个领域,人们可以通过它对弈,也可以通过它预测天气。在技术方面,计算机硬件的发展是日新月异,例如中央处理器(CPU)的速度是每隔6个月翻一倍,而成本则是每隔6个月减少一倍。但在计算机软件方面,其发展却是差强人意,虽然也有很多新的软件开发方法和技术不断提出,但软件无论在生产率还是在质量方面总是达不到预期效果。
计算机软件开发的问题一直是困扰软件企业的关键问题。随着时代的发展人们开始意识到这些企业的基本问题不在于新技术是否使用,而在于软件过程的管理问题。软件过程包括两个方面,其一是软件开发的管理过程(Software Management Process),其二则是软件开发的工程过程(Software Engineering Process)。软件企业的开发机构在形成一套完整而成熟的软件过程后,软件的开发才能够步入正轨,才能保证在约定的期限内以固定的成本生产出客户满意的产品。
软件机构形成一套完整而成熟的软件过程不是一蹴而就的,它需要一个从无序到有序,从特殊到一般,从定性到定量,最后再从静态到动态的历程,或者说软件机构在形成成熟的软件过程之前必须经历一系列的成熟阶段(Maturity Level)。软件机构首先要判断自己属于哪一个成熟阶段,然后再根据自身的实际情况决定应该重点采取哪一些活动(Activity)来更有效地改进自己的软件过程。其他企业在同软件企业订立软件开发合同时也可以根据该企业机构所处的成熟阶段判断其软件开发能力,进而判断相关的软件风险。所有这些都需要一个理论指导来作出相关判断,能力成熟度模型(CMM)就是这样一个理论模型,它规定了机构成熟阶段的框架,以及如何据之判断软件机构所处的成熟阶段和机构为改进自己的软件过程应该采取的办法。
CMM产生背景
主要问题
在过去的二十年里,新的软件开发方法和技术的使用并未使软件生产率和生产质量得到有效的提高。软件生产商开始意识到他们的基本问题在于对软件的生产过程管理不力,主要体现在:软件产品不能按时完成、超出预算的成本、以及采用新的技术和工具后其好处难以体现。
主要作用
CMM可以指导软件机构如何控制软件产品的开发和维护过程,以及如何向成熟的软件工程体系演化,并形成一套良性循环的管理文化。具体说来,一个企业要想改进其生产过程,应该采取如下策略和步骤:
- 确定软件企业当前所处的过程成熟级别;
- 了解对改进软件生产质量和加强生产过程控制起关键作用的因素;
- 将工作重点集中在有限几个关键目标上,有效达到改进机构软件生产过程的效果,进而可持续地改进其软件生产能力。
CMM的基本概念
人们在开发和维护软件及其相关产品时所涉及的各种活动、方法、实践和改革等。其中软件相关产品包括软件项目计划、设计文档、程序代码、测试用例和用户手册等。
当遵循某个软件过程时所能达到的期望效果,它可以有效预测企业接收新的软件项目时可能得到的结果。
当遵循某个软件过程时所达到的实际效果。它可以用于验证软件过程能力。
指一个特定的软件过程被显式定义、管理、度量、控制和能行的程度。成熟度可以用于指示企业加强其软件过程能力的潜力。 当一个企业达到了一定的软件过程成熟级别后,它将通过制定策略、建立标准和确立机构结构使它的软件过程制度化。而制度化又促使企业通过建立基础设施和公司文化来支持相关的方法、实践和过程。从而使之可以持续并维持一个良性循环。
企业要通过选择最关键的目标来进行过程改进,应该搞清成熟的软件过程和不成熟的过程之间的差异。
不成熟的企业有如下标志:
- 缺乏确定的软件过程和相应的管理和控制;
- 即使给出了软件过程,也不严格的遵循和强制执行;
- 管理是完全被动的,管理者采用的策略是救火式的,即出了事才去解决,解决的时候也难以纵观全局,往往只顾眼前;
- 由于缺乏有依据的估算,制订软件预算和生产计划时往往跟着感觉走,实际生产时则常常超标;
- 如果强制在预定期限内完成,那么软件的功能和质量肯定是得不到保证;
- 缺乏评价软件产品质量和解决产品缺陷和过程问题的客观基础。
成熟的企业则有如下标志:
- 具有在企业范围内管理、控制软件开发和维护过程的能力;
- 现有人员和新进人员均了解所遵循的软件过程,且工作活动均按照事先的计划完成;
- 在定义好的软件过程中,所有项目和机构中的角色和责任分明;
- 制定的计划是有效的且与实际的工作进展一致;
- 软件过程在必要时可按照一定规则和程序加以修改;
- 软件产品和过程的具有一定的可控性。这主要体现在:
- 管理者能够监督软件产品的质量和生产过程;
- 具有客观的和定量化的措施来判断产品质量并分析产品与生产过程中的问题;
- 计划和预算有章可循,它是基于历史数据的,从而是实际可行的;
- 预算的结果,包括成本、时间表、产品功能和质量等,通常能够达到;
- 有关的参与者完全理解遵循软件过程的价值并认真地遵循之;
- 具有支撑软件过程的基础设施,如标准过程库、历史数据库等。
CMM的五级成熟度
基本前提
- 软件质量在很大程度上取决于产生软件的软件过程的质量和能力;
- 软件过程是一个可管理、可度量并不断改进的过程;
- 软件过程的质量受到用以支撑它的技术和设施的影响;
- 企业在软件过程中所采用的技术层次应适应于软件过程的成熟度。
基本原理
- CMM强调连续的软件过程改进。该连续的改进基于多个演化步骤。CMM将这些演化步骤划分成五个级别。这种分级结构的理论依据是软件质量原理。
- 每一级别都包括若干目标。当满足某一目标后,软件过程的相应部分便确定下来。
- 五级成熟度定义了一个标准,用以度量机构的软件过程成熟度和评价其软件过程能力。
基本内容
CMM的成熟度理论目前主要涉及如下内容:
- 机构和资源的管理: 涉及机构本身的责任,人员和其它资源设施。
- 软件工程过程及其管理: 涉及软件工程过程,即软件过程的深度、范围和完整性以及如何度量、管理和改进这样的过程。
- 工具和技术: 软件工程过程中使用的开发工具和技术。
五个成熟度级别
- 初始级
- 可重复级:有规章的过程
- 定义级:标准化、一致的过程
- 管理级:可预测过程
- 优化级:可持续改进的过程
成熟度的行为刻划
第一级:初始级
- 成功来源于个人英雄主义而非机构行为,因此它不可重复,更换人员后成功便难以维持。
第二级:可重复级
- 针对特定软件项目建立管理该项目的策略和实现这些策略的过程。
- 新项目的计划和管理基于类似项目的经验。
- 软件过程能力主要通过管理单个项目的软件生产过程来得到提高和增强。
- 不同的项目可有不同的软件过程,机构应当建立一定的方针和策略以针对具体的项目选择合适的软件生产过程并进行管理。
可重复级的主要特点在于确定了基本的软件生产管理和控制,具体来讲,有:
- 结合已有项目的经验和新项目的特点来确定本项目的责任和承诺;
- 软件生产成本、时间表和实现的功能被有效跟踪;
- 识别实现承诺所需解决的关键问题;
- 定义软件项目过程标准,机构要确保其被遵守。
概括来说,第二级的主要特点是项目计划和跟踪是确定且有效的,项目的软件过程是可控的,以及已有的成功经验是可重复的。
第三级:定义级
- 有一个机构范围内标准的软件过程,软件工程活动和管理活动被集成为一个有机的整体。标准化的目的是使高层管理者和软件技术人员能够有效合作。
- 有一个组例如软件工程组(SEPG)专门负责订立机构的标准软件过程,并且在机构中制定培训计划来确保相关人员和管理者有足够的知识和技能完成标准过程所赋予的角色。
- 标准的软件过程结合具体项目的特点经过裁剪即形成项目定义软件过程,它是一组集成的完善定义的软件工程和管理过程。
- 一个完善定义的软件过程应包括就绪准则、输入、工作过程、验证机制、输出和完成准则。
- 对于已建立的产品生产线,其成本、时间表和实现功能均可跟踪和控制,软件产品的质量可以得到保证。
- 软件过程能力的实现主要基于在机构范围内对一个定义软件过程的活动、角色和责任的共同理解。
概括来说,第三级的主要特征在于软件过程已被提升成标准化过程,从而更加具有稳定性、重复性和可控性。
第四级:管理级
- 软件的过程和产品有定量的质量指标。
- 重要的软件过程活动均配有生产率和质量方面的度量指标;
- 应用数据库来收集和分析定义软件过程中涉及的各种数据;
- 对项目软件过程和软件质量的评价有定量的基准。
- 软件项目的产品和生产过程的控制具有可预测性。
- 将软件过程性能可能出现的偏差控制在可接受的量化界限内;
- 具体区分影响过程性能发生偏差的有效因素和偶然因素;
- 向新领域拓展的风险是可预知的并被仔细管理和权衡。
概括来说,第四级的主要特征是定量化、可预测、异常控制和高质量。
第五级:优化级
- 机构集中于持续的过程改进
- 具有标识过程缺陷和增强过程能力的有效手段。
- 利用试验数据分析使用新技术所需的代价和带来的效益,然后再有选择地采用。
- 当出现偏差时,软件项目人员能够分析出错原因并采取有效手段防止其再次出现。
- 防止不必要的浪费是第五级的重点。
- 改进的途径有两个,一个是对已有过程的渐进式改进;另一个则是有选择地使用新技术和新方法所带来的革新。
概括来说,第五级的主要特征是新技术的采用和软件过程的改进被作为日常的业务活动来加以计划和管理。
1.到www.eclipse.org上下载SWT.
我这里用的是1.1.0.1,并且页面上就有推荐的Eclipse3.1.1,EMF,GEF。都下载了!
2.按照Eclipse安装插件的方法,安装SWT,EMF,GEF。
3.如果不出意外,就可以正常使用了!
这里有一个建议:最好使用纯的Eclipse,我开始用WTP版的,怎么配置也不行。
可以建立Visual Class,但是不能可视化添加控件,或者看不到控件的属性,或者Text,TextArea控件无法添加。后来按照以上方法,重新来了一次,OK了!
二打包发布SWT程序
1.因为需要SWT的jar.但是Eclipse3.1.1配合的的SWT不是通过SWT.jar发布的!是org.eclipse.swt.win32.win32.x86_3.1.0.jar。里面包括了JINI的DLL和SWT类文件。
需要下载
http://www.eclipse.org/downloads/download.php?file=/eclipse/dow ... 09290840/swt-3.1.1-win32-win32-x86.zip
这里有SWT.jar,和3个DLL,把他们解压缩出来,备用!
2.通过Eclipse的导出功能,生成一个可执行的jar,MANIFEST.MF文件选择由Eclipse生成,并且保存到项目中。
3.上面2的步骤,只是为了得到MANIFEST.MF文件。下面修改一下这个文件。
加上 Class-Path: SWT.jar
如果还有其他的jar,用空格分开,加到后面
4.再生成一次jar,MANIFEST.MF选择修改后的。
5.将打包的jar,SWT.jar,3个DLL放到一个文件夹下,双击可执行的jar,程序运行!
三jar转EXE
1.打开JSmooth0.9.9-7。http://www610.fixdown.com/jsmooth-0.9.9-7-setup.exe
2.选择skeleton,在skeleton properties中先把Launch java app in the exe process,Debug console选中。可以查看生成EXE文件执行过程信息。
3.选择Executable.
选择生成的EXE文件存放位置。
选择EXE文件图标
设置当前路径,选择要转换的jar文件所在文件夹
4.选择Application
设置Main Class,可执行jar中的Main Class注意写类全名
设置Application Argument,如果需要传入参数,写到这里
设置Embedded jar: 可执行的jar
设置Classpath:SWT.jar 如果有其他的继续添加
5.选择JVM Selection。默认吧。
6.JVM Configuration:
可以设置java properties,内存使用
7.点齿轮。生成!看是否有错误。
8.EXE执行需要的文件:EXE,3个DLL,SWT.jar
把他们考到其他目录,一样可以执行!
9.去掉skeleton properties中的Launch java app in the exe process,Debug console选项。
重新生成。应该OK了!
-----
看了这个,终于完成了SWT程序打包,太爽了
Ant在eclipse中的build.xml的配置
<?xml version="1.0" ?>
- <project name="webmodulebuilder" default="deploy" basedir=".">
- <!--
set global properties for this build
-->
- <!--
发布WEB路径
-->
<property name="DEPLOY_PATH" value="C:\Tomcat 5.5\webapps\jieshengda" />
- <!--
源WEB路径
-->
<property name="WEB_PATH" value="D:\EclipseWork\jiedasheng\WebRoot" />
- <!--
源编译的jar包路径
-->
<property name="JAR_PATH" value="D:\EclipseWork\jiedasheng\WebRoot\WEB-INF\lib" />
- <!--
源java文件路径
-->
<property name="SCR_PATH" value="D:\EclipseWork\jiedasheng\src" />
- <!--
源class文件路径
-->
<property name="CLASS_PATH" value="D:\EclipseWork\jiedasheng\WebRoot\WEB-INF\classes" />
- <!--
定义classpath
-->
- <path id="LIB_CLASS_PATH">
<fileset file="${JAR_PATH}/*.jar" />
<pathelement path="${CLASS_PATH}" />
</path>
- <!--
初试化
-->
- <target name="init">
<mkdir dir="${DEPLOY_PATH}" />
<mkdir dir="${DEPLOY_PATH}/WEB-INF" />
<mkdir dir="${DEPLOY_PATH}/WEB-INF/classes" />
<mkdir dir="${DEPLOY_PATH}/WEB-INF/lib" />
</target>
- <!--
编译类
-->
- <target name="compile" depends="init" description="compile the source files">
<mkdir dir="${CLASS_PATH}" />
- <javac srcdir="${SCR_PATH}" destdir="${CLASS_PATH}">
<classpath refid="LIB_CLASS_PATH" />
</javac>
</target>
- <!--
Copy发布
-->
- <target name="deploy" depends="init,compile">
- <copy todir="${DEPLOY_PATH}">
- <fileset dir="${WEB_PATH}">
<include name="**/*.*" />
<exclude name="**/jsp_servlet/*.class" />
<exclude name="**/build.xml" />
<exclude name="**/deploy.xml" />
<exclude name="**/build.properties" />
<exclude name="**/servers.xml" />
<exclude name="**/targets.xml" />
<exclude name="**/*.war" />
</fileset>
</copy>
</target>
</project>
内容摘要:
ANT是一个基于Java的自动化脚本引擎,脚本格式为XML。除了做Java编译相关任务外,ANT还可以通过插件实现很多应用的调用。
1)ANT的基本概念:
2)ANT的安装:解包,设置路径
3)ANT的使用:最好的学习只不过是一个简单实用的例子起步……
ANT的基本概念:Java的Makefile
当一个代码项目大了以后,每次重新编译,打包,测试等都会变得非常复杂而且重复,因此c语言中有make脚本来帮助这些工作的批量完成。在Java中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。除了基于JAVA是平台无关的外,脚本的格式是基于XML的,比make脚本来说还要好维护一些。
每个ant脚本(缺省叫build.xml)中设置了一系列任务(target):比如对于一个一般的项目可能需要有以下任务。
任务1:usage 打印本脚本的帮助信息(缺省)
任务2:clean <-- init 清空初始化环境
任务3:javadoc <-- build <-- init 生成JAVADOC
任务4:jar <-- build <-- init 生成JAR
任务5:all <-- jar + javadoc <-- build <-- init 完成以上所有任务:jar javadoc
而多个任务之间往往又包含了一定了依赖关系:比如把整个应用打包任务(jar)的这个依赖于编译任务(build),而编译任务又依赖于整个环境初始化任务(init)等。
注:我看到很多项目的ant脚本中的命名基本上都是一致的,比如:编译一般叫build或者compile;打包一般叫jar或war;生成文档一般命名为javadoc或javadocs;执行全部任务all。在每个任务的中,ANT会根据配置调用一些外部应用并配以相应参数执行。虽然ANT可调用的外部应用种类非常丰富,但其实最常用的就2,3个:比如javac javadoc jar等。
ANT的安装
解包后在系统可执行路径中加入指向ant的bin的路径就可以了,比如可以在GNU/Linux上把以下配置加入/etc/profile中:
export ANT_HOME=/home/ant
export JAVA_HOME=/usr/java/j2sdk1.4.1
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
这样执行ant 后,如果不指定配置文件ant会缺省找build.xml这个配置文件,并根据配置文件执行任务,缺省的任务设置可以指向最常用的任务,比如:build,或指向打印帮助信息:usage,告诉用户有那些脚本选项可以使用。
ANT的使用
最好的学习过程就是看懂那些open source项目中的build.xml脚本,然后根据自己的需要简化成一个更简单的,ANT和APACHE上很多非常工程派的项目:简单易用,而且适应性非常强,因为这些项目的建立往往来源于开发人员日常最直接的需求。
参考资料: http://www.javafan.net/article/20041207142012728.html
|
以前在写作业时曾经尝试用过Ant去编译和运行Java程序,不过后来好久没用,都不怎么会用了。下边是前几天写的一个build.xml文件的例子,以后可以拿来当参照了,不过有点小问题还不知道怎么改!以前忘了Jar包的正确运行方式,导致不能正确运行打包以后的jar包,现已更正!
说明:lib目录存放第三方类库,src目录存放待编译的Java源文件!
<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE project>
<project name="JavaMailClient" default="usage" basedir=".">
<property name="project-name" value="JavaMailClient"/>
<property name="build" value="build"/>
<property name="lib" value="lib"/>
<property name="src" value="src"/>
<property name="build.classes" value="${build}/classes" />
<property file="build.properties"/>
<property name="jar.dir" value="jar"/>
<property name="jar-file-name" value="${project-name}" />
<path id="Third-Part Lib">
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="usage" description="Build file usage info (default task)">
<echo message=" " />
<echo message="${project-name} " />
<echo message="-------------------------------------------------------" />
<echo message="Available Targets:" />
<echo message=" ***" />
<echo message=" Compiling:" />
<echo message=" compile - Compiles the source code" />
<echo message=" ***" />
<echo message=" Cleaning up:" />
<echo message=" clean - Delete class files" />
<echo message=" ***" />
<echo message=" JAR:" />
<echo message=" jar - Generate an .jar for source code" />
<echo message=" ***" />
<echo message=" Executing:" />
<echo message=" run - Execute the JavaMail client ! Get email of the latest two days from server" />
<echo message=" ***" />
<echo message="-------------------------------------------------------" />
</target>
<target name="prepare" >
<mkdir dir="${build.classes}" />
<mkdir dir="${jar.dir}" />
</target>
<target name="clean" >
<delete dir="${build}" />
<delete dir="${jar.dir}" />
</target>
<target name="compile" depends="clean,prepare">
<echo message="Compiling the source code!"/>
<javac
srcdir="${src}"
destdir="${build.classes}"
deprecation="true"
failonerror="true" debug="true"
>
<classpath refid="Third-Part Lib"/>
</javac>
</target>
<!-- <target name="run" description="Receive email! " depends="compile"> -->
<!-- 已经可以正确运行!注意:classpath="${build.classes}" 一定要加上,否则会报"java.lang.NoClassDefFoundError"的错误!-->
<!--
<target name="run" description="Receive email! ">
<java classname="POP3MailReceiver" classpath="${build.classes}" fork="true" maxmemory="256m">
<classpath refid="Third-Part Lib"/>
</java>
</target>
-->
<target name="run" description="Receive email! ">
<java jar="${jar.dir}/${jar-file-name}.jar" fork="true" maxmemory="256m"/>
</target>
<target name="jar" depends="compile">
<jar destfile="${jar.dir}/${jar-file-name}.jar" basedir="${build.classes}">
<manifest>
<!-- 此处需要根据需要进行修改 -->
<attribute name="Main-Class" value="POP3MailReceiver"/>
<attribute name="Class-Path" value="../${lib}/commons-email-1.0.jar ../${lib}/mail.jar ../${lib}/activation.jar"/>
</manifest>
</jar>
</target>
</project>
附:Jar包的正确运行方法(转)
-jar参数运行应用时classpath的设置方法
你是否在使用java -jar参数运行打包好的jar应用程序的时候发现应用程序无法找到classpath下设置好的第三方类库的内容?无论怎么设置classpath参数都无济于事,总是会报ClassNotFound的错误?那么本篇帖子可以帮助你摆脱烦恼 :)
当用java -jar yourJarExe.jar来运行一个经过打包的应用程序的时候,你会发现如何设置-classpath参数应用程序都找不到相应的第三方类,报ClassNotFound错误。实际上这是由于当使用-jar参数运行的时候,java VM会屏蔽所有的外部classpath,而只以本身yourJarExe.jar的内部class作为类的寻找范围。
解决方案
一 BootStrap class扩展方案
Java 命令行提供了如何扩展bootStrap 级别class的简单方法:
-Xbootclasspath: 完全取代基本核心的Java class 搜索路径.
不常用,否则要重新写所有Java 核心class
-Xbootclasspath/a: 后缀在核心class搜索路径后面.常用!!
-Xbootclasspath/p: 前缀在核心class搜索路径前面.不常用,避免
引起不必要的冲突.
语法如下:
(分隔符与classpath参数类似,unix使用:号,windows使用;号,这里以unix为例)
java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar
二 extend class 扩展方案
Java exten class 存放在{Java_home}\jre\lib\ext目录下.当调用Java时,对扩展class路径的搜索是自动的.总会搜索的.这样,解决的方案就很简单了,将所有要使用的第三方的jar包都复制到ext 目录下.
(自评:不推荐使用,自适应性很差!)
三 User class扩展方案
当使用-jar执行可执行Jar包时,JVM将Jar包所在目录设置为codebase目录,所有的class搜索都在这个目录下开始.所以如果使用了其他第三方的jar包,一个比较可以接受的可配置方案,就是利用jar包的Manifest扩展机制.
步骤如下:
1.将需要的第三方的jar包,复制在同可执行jar所在的目录或某个子目录下. 比如:jar 包在 /usrhome/yourJarExe.jar 那么你可以把所有jar包复制到/usrhome目录下或/usrhome/lib 等类似的子目录下.
2.修改Manifest 文件
在Manifest.mf文件里加入如下行
Class-Path:classes12.jar lib/thirdlib.jar
Class-Path 是可执行jar包运行依赖的关键词.详细内容可以参考:http://java.sun.com/docs/books/tutorial/ext/index.html
以上三种方法推荐第一种,扩展性好,操作起来也最方便.
另外编写自己的ClassLoader,来动态载入class,是更加复杂和高级技术.限于篇幅,不赘述.有兴趣了解可以去google一下custom classloader
Java的安全机制随不同的JDK版本有不同的变化,会影响很多核心CLASS,比如Thread,所以很多大型商业软件,要求JDK的版本很严格.部分原因也在此.这也要求在发布自己编写的应用时候,不管大小,都要说明开发和测试的JDK版本.
本文所述方法测试基于j2sdk 1.4.2_04-b05
----------------------------------------------------------------------------------------------
附:背景知识
自JDK 1.2以后,JVM采用了委托(delegate)模式来载入class.采用这种设计的原因可以参考http://java.sun.com/docs/books/tutorial/ext/basics/load.html
归纳来讲:是基于JVM sandbox(沙盒)安装模型上提供应用层的可定制的安全机制.
Java虚拟机(JVM)寻找Class的顺序
1. Bootstrap classes
属于Java 平台核心的class,比如java.lang.String等.及rt.jar等重要的核心级别的class.这是由JVM Bootstrap class loader来载入的.一般是放置在{java_home}\jre\lib目录下
2. Extension classes
基于Java扩展机制,用来扩展Java核心功能模块.比如Java串口通讯模块comm.jar.一般放置在{Java_home}\jre\lib\ext目录下
3. User classes
开发人员或其他第三方开发的Java程序包.通过命令行的-classpath或-cp,或者通过设置CLASSPATH环境变量来引用.JVM通过放置在{java_home}\lib\tools.jar来寻找和调用用户级的class.常用的javac也是通过调用tools.jar来寻找用户指定的路径来编译Java源程序.这样就引出了User class路径搜索的顺序或优先级别的问题.
3.1 缺省值:调用Java或javawa的当前路径(.),是开发的class所存在的当前目录
3.2 CLASSPATH环境变量设置的路径.如果设置了CLASSPATH,则CLASSPATH的值会覆盖缺省值
3.3 执行Java的命令行-classpath或-cp的值,如果制定了这两个命令行参数之一,它的值会覆盖环境变量CLASSPATH的值
3.4 -jar 选项:如果通过java -jar 来运行一个可执行的jar包,这当前jar包会覆盖上面所有的值.换句话说,-jar 后面所跟的jar包的优先级别最高,如果指定了-jar选项,所有环境变量和命令行制定的搜索路径都将被忽略.JVM APPClassloader将只会以jar包为搜索范围.
有关可执行jar有许多相关的安全方面的描述,可以参考http://java.sun.com/docs/books/tutorial/jar/ 来全面了解.
这也是为什么应用程序打包成可执行的jar包后,不管你怎么设置classpath都不能引用到第三方jar包的东西了.