<?xml version="1.0" encoding="gb2312"?>

<!-- RSS generated by oioj.net on 4/16/2004 ; 感谢LeXRus提供 RSS 2.0 文档; 此文件可自由使用，但请保留此行信息 --> 
<!-- Source download URL: http://blogger.org.cn/blog/rss2.asp       -->
<rss version="2.0">

<channel>
<title>fancy_zh的博客</title>
<link>http://blogger.org.cn/blog/blog.asp?name=fancy_zh</link>
<description>fancy_zh的博客</description>
<copyright>blogger.org.cn</copyright>
<generator>W3CHINA Blog</generator>
<webMaster>webmaster@blogger.org.cn</webMaster>
<item>
<title><![CDATA[《较量》杂志：两岸空空导弹大比拼]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=3026</link>
<author>fancy_zh</author>
<pubDate>2005/2/22 15:12:10</pubDate>
<description><![CDATA[绪言<BR><BR>　　早在十年前，以研究中国军事问题见长的美国传统基金会高级研究员理查德·D·费舍尔曾经大胆预言：2005年将是台湾海峡两岸军事力量对比发生决定性变化的一年。费舍尔认为，由于中国从俄罗斯大量购买了先进的军事装备，加上中国国防工业在改革开放后日新月异的变化，历史的天平最终将倾向中国大陆一边。特别是解放军的空中武力，在完成了第三代战斗机的换装后，将牢牢地控制住台海上空的制空权，对台独势力无疑是一把高悬在头上的"达摩克利斯"之剑。<BR><BR>　　众所周知，现代空战的主角是多用途战斗机和高性能的空对空导弹，而空对空导弹的主导作用正日益凸现。回顾空对空导弹的发展历史，最初只是作为战斗机火力的一种延伸，用来弥补机炮和无制导火箭射程不足的缺点。但由于空对空导弹满足了飞行员"先发制敌"的作战需求，且具备相当精确的追踪能力，因此在短短的几年内一跃成为现代战斗机的必备利器。伴随着科技的进步和实战经验的丰富，空对空导弹更是为超视距空战这一全新作战样式的诞生奠定了物质基础。当前，任何一架第三代战斗机都能够携带多枚中距空对空导弹在数十公里外同时拦截多个空中目标，因此把空对空导弹看成为推动空战革命的主要动力一点也不为过。<BR><BR>　　空对空导弹虽然起源于欧美，却很早就传入了海峡两岸的空军。祖国大陆于20世纪50年代末从前苏联获得了K-5导弹的蓝本并仿制成功，从此走上自主研制的道路，目前已经形成了颇具规模的"霹雳"导弹家族。进入20世纪90年代后，伴随着苏-27系列战斗机的引进，又陆续装备了R-27、R-77和R-73等具备世界先进水平的空对空导弹。台湾空军也几乎于同一时间获得了美国的"响尾蛇"导弹并率先用于实战，后来为了配合IDF战斗机的研制又自主开发了"天剑"系列空对空导弹。1993年从美国和法国订购F-16和"幻影"2000-5战斗机时，又附带引进了数量不菲的AIM-7、AIM-9、MICA和"魔术"导弹，直至2001年获准从美国购买最新型的AIM-120先进中程空对空导弹，成为世界上为数不多的装备该种导弹的空军之一。<BR><BR>　　诚如上文所述，空对空导弹为现代空战带来了革命性的变化，也为原本处于劣势的一方带来了挑战强手的手段。2004年2月，美国和印度空军的主力战机在印度瓜里尔地区举行了代号为"对抗印度2004"的模拟空战演习，这次演习迫使美国空军重新审视其自越战以来保持的空中优势。来自埃尔门多夫空军基地的F-15C战斗机被印度空军的苏-30MKI和米格-21UPG战斗机打败，这个结果极大地震惊了五角大楼的决策者。尤其是F-15败于米格-21UPG这样一种有隔代之感的战斗机，更是出人意料。美国空军认为，导致这场失败的原因并不是因为F-15C本身的性能比印度空军的战机差，而在于苏-30MKI和米格-21UPG上装备了性能出众的R-77和R-73空对空导弹。这些先进的空对空导弹弥补了印度战机性能上的缺陷，最终造成了戏剧性的战果。<BR><BR>　　无独有偶，英国国防部和北约空军也曾在1996年以德国的F-4E和美国的F-15C战斗机作为对抗的双方进行过类似的作战模拟，并得出了相同的结论。如果限定双方都装备类似AIM-7这样的半主动雷达制导空对空导弹，F-4E的作战能力稍逊一些。不过大多数情况下，F-15C的雷达虽然先发现F-4E并抢先发射了导弹，但由于被主动雷达制导导弹需要载机火控雷达不断照射目标，最终还是不能逃脱被F-4E发射的导弹击落的命运。如果F-4E改进了雷达系统并装备了主动雷达制导空对空导弹，而F-15C依然装备被主动雷达制导导弹，则F-4E和F-15C的胜出比接近1.4:1。如果双方都装备了类似AIM-120这样的主动雷达制导导弹，则F-15C勉强与F-4E打个平手。<BR><BR>　　上述两个例子的结果能够给我们带来什么样的启示呢？那就是：对于一个财力和技术有限的国家来说，提高空中作战能力的途径并非只有依靠研制和装备更先进的作战飞机。众所周知，研制新一代战斗机需要大量的金钱和技术储备作为支撑，这绝非是势单力薄的小国所能玩得起的游戏。放眼全球，只有美国、俄罗斯、法国和中国具备独立研制下一代战斗机的能力，其他国家不是中途放弃就是委身于这些航空大国。但即便是财大气粗的美国，在第四代作战飞机的研制上也慎之又慎，可见这条道路若是走错一步，付出的代价有多么昂贵。而先进的空对空导弹则能够在一定程度上弥补己方飞机与对手在性能上的差距，且研制空对空导弹的成本和代价远小于研制新一代飞机，技术上的门槛也并非高不可攀。即便因自主研发能力一时不济而决定引进国外的空对空导弹，也不见得是蚀本的买卖。特别是冷战结束后，国际政治格局的变化引发了空对空导弹市场激烈的竞争，各个供应商为了维持生计，殚精竭虑地寻找吸引客户的手段，由此带来了产品档次和服务水准的大幅提高。因此，对于那些想尽快提高制空能力的空军来说，进口先进空对空导弹的确是一条行之有效的捷径。<BR>
<P>放眼海峡两岸，祖国大陆为了维护国家主权，威慑台独势力，急需加强台海上空的制空权；而台湾当局为了以武拒统、拖延时间也竭尽全力希望维持海峡两岸的空中军事平衡。于是双方自然把竞争的焦点聚集到获得先进空对空导弹上来。本文将在全方位介绍海峡两岸现役空对空导弹的基础上，结合世界空对空导弹市场的现状和趋势分析未来10年海峡两岸空对空导弹的力量对比，并从另外一个视角探讨我国空军现代化所应该走的道路。<BR><BR>　　"霹雳"四杀手<BR><BR>　　我国的空对空导弹事业创立于20世纪50年代末，早年师从苏联，打下了扎实的基础。80年代后对外开放，通过几代人的聪明才智和辛勤努力，使得中国的空对空导弹进入了跨越式发展的阶段。90年代末，主动追踪国外先进技术，加强与俄罗斯、以色列和西欧诸国的技术合作，进一步提高了导弹科研水平和制造工艺，很好地满足了空军现代化的需要。众所周知的"霹雳"导弹家族目前已经发展到了两位数，多种导弹在国际上都享有盛誉。<BR><BR>　　霹雳-8近距格斗导弹<BR><BR>　　霹雳-8近距格斗导弹是我国第一种引发世界关注的空对空导弹，这种导弹是在以色列"怪蛇"3导弹的基础上发展而来的。根据外电的报道，以色列在20世纪80年代末向我国提供了少量"怪蛇"3导弹并转让了相关技术，弥补了我国在高机动性近距格斗导弹方面的空白。很长时间以来，霹雳-8导弹一直处于严格保密的状态，外界极少了解其装备部队的状况，直到1995年后才逐渐撩开神秘的面纱。说来也怪，霹雳-8的首次亮相居然是以地对空导弹的形式展现在世人面前。在1991年3月举行的新加坡亚洲防务展上，CATIC展出了由霹雳-8H和715-I双管37毫米高炮组成的弹炮合一系统。展会上的材料把霹雳-8H描述为一种高机动性的红外线制导导弹，携带10千克的高爆破片战斗部，最小射程500米，最大射程15000米。<BR><BR>　　90年代初期，根据当时我国空军的发展规划，将用歼-8C和歼-7E、歼-10战斗机实现"高低搭配"，霹雳-8即是歼-8C和歼-7E的主要近距格斗武器。和当时的"响尾蛇"导弹相比，霹雳-8具备三大优势：一是使用了推力更大的火箭发动机，机动性更强；二是安装了高性能红外线导引头，具备大离轴角发射能力；三是能够与头盔瞄准具相连接，飞行员可以"指哪打哪"，增强了赢得空战的几率。目前，根据公开的图片和影视信息，我国空军和海军航空兵都装备了霹雳-8近距格斗导弹，具体机型有歼-7E、歼-8B和歼-8D。<BR><BR>　　霹雳-9近距格斗导弹<BR><BR>　　霹雳-9可以看作是我国近距格斗导弹的代表作。虽然整个导弹的外型似乎又回到了霹雳-2的年代，但霹雳-9绝对是一种科技含量较高的近距格斗空对空导弹。霹雳-9导弹的整体构造与美国的"响尾蛇"导弹十分相似，弹体前端有4片双三角形活动控制舵面，尾部则有4片固定式尾翼。霹雳-9导弹的弹径为157毫米，相较于霹雳-3和霹雳-5要稍大一些。其红外线成像制导头、激光近炸引信、破片战斗部和火箭发动机都采用了我国目前最先进的技术。霹雳-9导弹有3种不同的型号，最新型的霹雳-9C其射程超过12海里（22千米），它不光具备较佳的机动能力，而且能够与我国自行研制的头盔瞄准具共同使用。<BR><BR>　　从公开的图像资料上来看，霹雳-9导弹可以装备歼-7、歼-8战斗机家族中的所有飞机，并且人们在成都飞机工业公司研制的FC-1"枭龙"和歼-10战斗机上也看到了它的身影。我国一直致力于将霹雳-9导弹推向国外市场，如果不出意外的话，第一个装备霹雳-9导弹的国家将是采购了"枭龙"战机的巴基斯坦。<BR><BR>　　霹雳-11中距拦射导弹<BR><BR>　　早在越南战争时期，中国就打算研制一种类似于美国AIM-7"麻雀"的半主动中距拦射导弹。当时经常能够在内部刊物上见到这两种编号为霹雳-10和霹雳-11导弹的概要介绍。20世纪80年代，我国和西方国家的关系进入蜜月期，意大利在AIM-7基础上自行研制的"阿斯派德"（意为"蝮蛇"）导弹进入了我国空军的视线。意大利阿列尼亚公司证实，在天安门事件之前，大约有数十枚"阿斯派德"被运送到了中国进行相关的试验。霹雳-11导弹的研制计划从1987年开始，当时计划在2000年装备沈阳飞机制造公司的歼-8C战斗机。正如上文所述，霹雳-11的计划最终被更加先进的SD-10取代，并且一度陷入停滞不前的境地。不过，在90年代末的多次国防装备展上，中国精密机械进出口有限公司多次展示了代号为FD-60的地空导弹系统，这种导弹就是由霹雳-11发展而来。中国精密机械进出口有限公司打算将这种导弹推向国际市场，不过前途如何尚难论断。<BR><BR>　　SD-10中距拦射导弹<BR><BR>　　SD-10是我国自行研制的第一种主动雷达制导空对空导弹，它的出现代表着我国空对空导弹的研制水平达到了一个新高度。我国曾经一度在上世纪80年代开始研制半主动雷达制导的中程拦射导弹，但后来直接跨越了这个技术门槛，开始致力于研制主动雷达制导导弹。根据外电报道，这种导弹在的内部编号是霹雳-12（不过这个编号尚未得到官方的确认），SD-10只不过是为了出口而取的代号，意为"闪电"。SD-10的研制工作起自20世纪80年代中期，在1990年完成了关键技术的研究，随后便转入各子系统的研制和集成工作。进入21世纪后，SD-10开始一系列的地面和空中试验，并且由一架经过改装的歼-8B战斗机在2002年成功进行了首次发射试验。根据CATIC的说法，SD-10已经在2004年中期完成了定型试验，它不光是我国空军下一代战斗机歼-10的主要超视距空对空武器，更是我国和巴基斯坦联合研制的FC-1"枭龙"战机的主要武器装备。根据英国简氏防务集团的报道，SD-10在未来5年内还将有第三个应用平台，那就是我国从俄罗斯采购的苏-27SK战斗机。我国急切地希望用国产武器系统来装备这种进口战机，以简化后勤维护，减少战时对外界的依赖性。SD-10也可以挂载在经过改装的歼-8B和歼-7PG战斗机上，使得这些已经落后的战斗机具备有效的中距拦射能力。</P><BR>
<P>不知是出于巧合还是由于科学的规律总是普适的，SD-10的外型和美国的AIM-120十分相似，不过比后者尺寸稍微大些。唯一的区别在于SD-10的尾翼根部有箭尖似的缺口。洛阳空空导弹研究院的工作人员声称这样做的好处是提高了导弹的机动性。SD-10具备4种作战模式，既可以采用中途惯性＋末端主动雷达制导的典型作战模式，也可以采用全程主动雷达制导的"发射后不管"模式；此外还可以采用发射到预定点再转换到主动雷达制导的"待机接敌"模式和全程被动寻的的作战模式，后者对攻击诸如预警机这样的强辐射源最具效果。<BR><BR>　　SD-10是否吸收了国外的先进技术呢？由于最近10年中俄之间军事技术合作的深入，产生这种联想是十分正常的事情。根据英国简氏防务集团出版的《简氏机载武器年鉴》报道，SD-10从俄罗斯那里得到了三项关键技术，分别是主动雷达制导头、舵机控制技术和捷联惯导系统。事实究竟如何，尚且不得而知。<BR><BR>　　命运多舛的"天剑"<BR><BR>　　台湾从20世纪80年代开始研制空对空导弹及其相关先进技术，用来装备其自行研制的IDF"经国"战斗机。整个计划都是在美国的协助下进行，并且在早期有韩国的加盟。负责空对空导弹研制的是位于台北的中山科学技术研究院（CSIST），在20年的时间内，CSIST先后研制了多种空对空导弹，主要的两种型号是"天剑"I和"天剑"II。<BR><BR>　　"天剑"I是一种类似于美国AIM-9L的近距格斗导弹，最初是应台湾空军和韩国空军的共同要求而研制的。可以使用"天剑"I导弹的平台有台湾空军的IDF和韩国空军的F-5E战斗机。"天剑"I近距格斗导弹在1986年进行了首次发射试验，并于1993年加入现役。其性能和基本的"响尾蛇"导弹相比并没有什么不同的地方，只不过红外线成像导引头更加精密。美国军方一直宣称"天剑"I完全拷贝了"响尾蛇"的技术，根本谈不上自行研制，充其量只是把AIM-9L放大了一号。<BR><BR>　　台湾民间一直质疑"天剑"II是一种半主动雷达制导的空对空导弹，不过英国简氏防务集团的《简氏机载武器年鉴》还是将"天剑"II归类为主动雷达制导的超视距导弹。"天剑"II只能由IDF"经国"战斗机发射，于1996年进入台湾空军服役。中山科学院的工程师声称"天剑"II导弹是一种具备世界先进水平的中距空对空导弹，其技术水平即使和AIM-120C相比也各有春秋。不过，"天剑"II导弹存在的问题不少：首先是其制造工艺极其复杂，每年只能勉强生产30余枚，被戏称为"手持榔头敲打出来的导弹"。台湾空军前后共订购了210枚"天剑"II，这意味着130架IDF连每架携带2枚的最低要求都无法实现。其次，"天剑"II的性能究竟如何尚且不得而知，如果的确不同凡响的话，台湾军方又为何要花大价钱从美国进口AIM-120呢？<BR><BR>　　中山科学院目前正在酝酿"天剑"II导弹的后续改进计划，由于IDF"经国"战斗机不能使用AIM-120，为了维持战力平衡，台湾当局不得不继续展开空对空导弹的研制计划。中山科学院已经推出了名为"天剑"IIA的空对空导弹模型，这种导弹具备了完全的主动雷达制导功能，据说可以用来攻击预警飞机。台湾还打算将正在研制中的火箭冲压喷气发动机安装在"天剑"II导弹上，以提高这种导弹拦截远距离目标的能力。为了改善投入与产出比，台湾当局长久以来就渴望将自行研制的武器系统出口到岛外。不过，没有国家敢于冒政治风险去购买台湾的武器，况且即使单纯从技术角度来考虑，购买台湾武器也是得不偿失，很可能会面临后勤维护上的瓶颈。<BR><BR>　　海外后援团<BR><BR>　　除了自行研制的空对空导弹外，海峡两岸的空军还分别装备了来自俄罗斯、美国和法国的多种导弹系统，而且其中有若干达到了世界顶尖水平，由此可见两岸军事技术较量的激烈程度。<BR><BR>　　中国大陆<BR><BR>　　R-27中程空对空导弹<BR><BR>　　俄罗斯"三角旗"设计局研制的R-27空对空导弹家族是前苏联空军第三代战斗机苏-27和米格-29的主要超视距武器。该导弹自20世纪70年代开始研制，30余年来衍生了不少型号，成为一种广泛使用的空对空导弹。最早的三种型号是半主动雷达制导的R-27R、红外线制导的R-27T和被动无线电制导的R-27P。后来为了适应现代超视距空战的需要，设计师又增大了R-27导弹的射程，衍生出R-27ER和R-27ET。冷战结束后，"三角旗"设计局还打算研制一种使用主动雷达制导的R-27AE，但迄今为止这种导弹尚处于概念阶段，不知何时能装备俄罗斯空军或是出口到国外。<BR><BR>　　R-27中程空对空导弹随着苏-27和米格-29战斗机出口到世界上很多的国家。根据外电报道，中国在购买苏-27SK战斗机的时候，就随飞机订购了大批半主动雷达制导的R-27R，随后又购买了R-27ER。2004年初，俄罗斯武器出口部门为R-27P导弹颁发了出口许可证，此前这种R-27家族中较为先进的导弹只装备了俄罗斯空军，一直未获允许出口到其他国家。R-27P安装了9B-1032（PRGS-27）反辐射寻的头，可锁定空中早期预警与控制飞机。虽然外界无法知晓这种导弹的实际性能究竟如何，但西方导弹制造商尚未能开发出一种与之相对应的导弹，这或许就是俄罗斯科技的一种领先优势。出口型R-27P有两种型号：基本型R-27P1、增程型 R-27EP1，后者安装了一个推力更大的火箭发动机，能更有效地攻击远程目标。人们或许还能依稀记得，在2000年的珠海航展上，中航一集团下属的沈飞在其展示的歼-8IIM战斗机的翼下就挂载了两枚R-27导弹，白色的弹体上赫然印有红色的P-27P1字样。如果歼-8IIM携带的P-27P1就是R-27P1的话，那我们或许可以从这一个侧面来分析发展歼-8IIM的真实目的。</P><BR>
<P>R-73短程格斗导弹<BR><BR>　　与R-27一样,R-73也是俄罗斯空军现役战斗机的主要空对空导弹。可以毫不夸张地说，上世纪80年代才首次露面的R-73改写了整个短程格斗导弹的发展历史。她的高机动性、大离轴角发射能力以及能与头盔瞄准具相结合的特性使得她看起来俨然是一个高贵的妇人。以至于西方国家的任何一种导弹在她面前，都如半老徐娘那样显得寒酸。<BR><BR>　　不过令人扼腕叹息的是，由于俄罗斯经济崩溃、社会动荡，这种先进的空对空导弹诞生20余年来却从未进行过改进。由于俄罗斯无力发展新型的短程格斗导弹，R-73注定还要再服役至少十余年。"三角旗"设计局目前已经提出了若干改进的建议，主要集中在更换精密的红外线成像导引头上。R-73导弹的出口同样也受到了载机平台的限制，因此在数量上甚至不能和法国的"魔术"导弹相媲美。我国空军在引进苏-27SK战斗机的同时也进口了大批R-73短程格斗导弹，这使得台湾空军在近距格斗上捞不到一点好处。<BR>　　R-77中程空对空导弹<BR><BR>　　R-77是一种主动雷达制导的超视距空对空导弹，研制这种导弹最初的目的是为了抗衡美国的AIM-120。苏联解体对这种导弹的研制进度造成了很大的影响，一度使R-77处于下马的边缘。"三角旗"设计局在R-77的项目上一直处于走走停停的状态，直到20世纪90年代末，在得到了外国客户支付的发展经费后才最终完成了所有的定型试验。根据英国《简氏防务周刊》的报道，R-77已经随着苏-30MKK一起进入中国空军服役，并且已经在2002年中由驻扎在安徽芜湖的苏-30MKK进行了测试性的发射试验。此举最终导致美国下决心出售AIM-120导弹给台湾，以平衡两岸的空中战力。<BR><BR>　　"三角旗"设计局目前也推出了多项R-77导弹的衍生型，这些导弹的模型频频出现于世界各大航空展。R-77M是R-77的增程型，使用了一台推力更强劲的火箭冲压喷气发动机，具备更大的射程和更快的飞行速度，已经进入俄罗斯空军服役。R-77M-PD（俄罗斯编号为RVV-AE-PD）类似于欧洲MBDA导弹集团研制的"流星"导弹，射程达到80海里（150千米），使用一台火箭冲压喷气发动机。这个项目最近的进展鲜为人知，但"三角旗"设计局表示，如果有国外客户对R-77M-PD感兴趣的话，"三角旗"设计局能以最快的速度完成整个设计试验计划，提供给外国客户使用。简氏集团据此猜测，P-77M和P-77M-PD未来也有可能进入中国空军服役。<BR><BR>　　台湾<BR><BR>　　AIM-120先进中程空对空导弹（AMRAAM）<BR><BR>　　AMRAAM是美国研制的第一种主动雷达制导视距外空对空导弹，十几年来衍生了A、B、C、D四种型号，成为世界各国空军争相采购的对象。1991年9月，AIM-120A就已经开始装备美国空军的F-15重型战斗机，翌年2月又装备在F-16战斗机上。美国海军的F/A-18"大黄蜂"则在1993年10月首次换装这种先进空对空导弹。1992年12月，AIM-120取得了服役以来的首次战果，击落了伊拉克空军的一架米格-25"狐蝠"战斗机。此后，又相继在伊拉克和南斯拉夫战争中取得多次战果。目前，美国正在生产的AMRAAM型号已经由AIM-120B演进到AIM-120C。AIM-120C采用了更加紧凑的外型设计，缩短了弹翼的长度，使得其能装载在F/A-22和F-35战斗机的内置式弹舱内。<BR><BR>　　AMRAAM已经被出口到澳大利亚、巴林、比利时、丹麦、芬兰、德国、瑞典、以色列、意大利、日本、韩国、荷兰、挪威、西班牙、希腊、瑞士、泰国、土耳其、英国和我国的台湾地区。已经明确要采购的还有埃及、波兰、沙特阿拉伯、新加坡和阿联酋。最近刚加入北约的捷克共和国打算购买一批AIM-120C来装备其JAS-39"鹰狮"战斗机，匈牙利也正在为购进AIM-120C导弹而修改现役战机的软硬件设备。<BR><BR>　　雷锡恩公司目前正在不断地升级AIM-120的硬件和软件系统，使得整个导弹的发展处于开放式的螺旋上升阶段中。目前处于生产线上的AMRAAM导弹的型号是AIM-120C-5，这种在AIM-120C基础上衍生出来的导弹具有前者所不具有的大离轴角发射能力（英文缩写为HOBS）。HOBS技术使得导弹能够突破导引头万向节的方向调节限制，以更大的离轴角飞向目标。紧随其后于2004年下半年走上生产线的另外一种改型是AIM-120C-7，由于采用了紧凑化的制导系统，制导舱段的长度缩短了15厘米，导弹得以换装一台长度更长，推力更大的火箭发动机，大大提高了飞行机动性和有效射程。此外，更新的AIM-120C-8也即将于2005年初从幕后走向前台。这项由美国海军主导，旨在提升AIM-120压制远距离空中目标能力的升级计划将为AMRAAM家族增添第4个成员--AIM-120D。AIM-120D将安装一条双向数据链路，使得其更好地与AESA雷达进行通信。此外，导弹的射程也将比AIM-120C大为提高。根据预定的计划，AIM-120D将在2006财年开始小批量生产，2008财年装备美国海军航空部队。<BR><BR>　　台湾究竟购买了何种AIM-120？台湾空军对此讳莫如深。综合外电的报道，从美国在此一采购项目的谨慎程度上来看可以断定是比较新型的型号，比如AIM-120C。理由有三：首先，整个导弹的运送过程由美国海军的大型军火船运输，全程有驱逐舰、护卫舰和补给船护航，行程十分诡秘，在海上兜了好几圈才抵达台湾；其次，美国原本打算在台湾进行发射试验，但最终出于电子参数的保密考虑还是移师美国本土；再者，这批AIM-120早已经在美国组装完毕，却要先暂存关岛，也体现出小心翼翼的态度。台湾空军司令李天羽在召开新闻发布会时把这批AIM-120导弹比喻为"彩电"，甚至有些自吹自擂地说，如果以此导弹为标准，周边邻居装备的空对空导弹都是"黑白电视机"。由此可见这批导弹对于台湾空军，不啻为一支强心针。<BR><BR><BR>　　"米卡"中程空对空导弹<BR><BR>　　"米卡"导弹是法国玛特拉公司于1982年开始研制的一种复合型导弹。所谓复合型是指其本身是一种中距拦射弹，却又同时具备了近距格斗导弹的特性，因此有利于简化弹药体系。"米卡"导弹有两种型号：末端采用主动雷达制导的"米卡"EM和采用红外线制导的"米卡"IR，二者在发射后至导引头开始工作这段时间内皆采用惯性＋数据链更新的制导方式。正所谓"成也萧何，败也萧何"，"米卡"导弹在继承了两种不同类型导弹优点的同时，缺点也增加了一倍。无论从近距格斗导弹还是从中距拦射导弹的标准来衡量，"米卡"都是失败的作品。作为近距格斗导弹，过重的发射质量制约了其机动性；作为中程拦射导弹，发动机推力过小又限制了其射程。于是，"米卡"导弹从一开始就陷入了自相矛盾的境地。<BR><BR>　　玛特拉公司可能从来没有想到，"米卡"导弹的第一个用户居然是台湾。1996年，台湾向玛特拉公司订购了960枚"米卡"EM导弹，这着实让法国人赚了一笔。1998年5月和2000年3月，台湾空军的"幻影"2000-5战斗机接连进行了两次"米卡"导弹的发射试验。2002年12月，台湾国防部的新闻发言人黄穗生表示，台湾空军在"汉光"演习中首次进行了"米卡"导弹的全射程全制导实弹射击，一架参演的"幻影"2000-5战斗机同时发射了2枚"米卡"EM导弹，成功摧毁了30千米外模拟苏-27的靶机。<BR><STRONG><FONT color=#ff0000>明基文化出版社《较量》杂志供稿<BR><BR></FONT></STRONG>　　可能的选择<BR><BR>　　进入21世纪后，世界空对空导弹市场新品辈出，两岸空军熟练了第三代战斗机的操作后，对于未来空中力量的发展都有了自己的打算。中国大陆一贯强调国防自主，加之具备扎实的科研和生产水平，在下一代空对空导弹的发展上倾向于自行研制或改进现有导弹。但研制一种空对空导弹毕竟耗时很长，正可谓"十年磨一剑"，因此进口新一代空对空导弹依然是热门的话题。特别是最近欧盟有可能解除1989年以来的军售禁令，使得欧洲目前正在研制的多种空对空导弹成为媒体竞相追逐的焦点。不过，欧盟的军售禁令何时能够取消尚且是未知数，特别是在美国的干预下事件是否又会产生逆转尚待观察。即便取消了禁令，笔者认为中国大量购买某种欧洲空对空导弹的可能性是很低的。空对空导弹是一种特殊的武器装备，它必须有相应的发射平台，因此，买什么导弹就先要买能发射这种导弹的飞机。我国空军不可能大量装备欧洲产的战斗机，于是也就断然没有装备欧洲产空对空导弹的可能。不过，小批量购买一些用以研究，获取核心技术，缩短自主研制周期还是有可能的。关键看供应商是否愿意做这一笔蚀本买卖。<BR><BR>　　而对台湾来说，研制"天剑"II之后就再也没有下文，虽然中山科学院也打算研制采用火箭冲压喷气发动机的"天剑"III空对空导弹，但毕竟"巧妇难为无米之炊"，没有扎实的基础是换不来国防自主的。台湾当局一向把军售看作政治上的砝码，以此博得所谓国际空间的扩大。于是，外购新一代空对空导弹就成为台湾空军唯一一条可供选择的道路。正如上文所述，空对空导弹的特殊性使得台湾势必要在整个过程中付出难以估量的隐性成本，甚至会影响到岛内经济的良性发展。<BR><BR>　　AIM-9X"响尾蛇"<BR><BR>　　早在20世纪80年代，美国就打算研制一种更加先进的近距格斗导弹，来对抗苏联研制的R-73。最初的计划被命名为AIM-9R，后来美国又主动提出与欧洲部分国家联合研制"先进短程空对空导弹"（ASRAAM）。虽然这两个项目最后都胎死腹中，却留下了大量宝贵的技术成果。于是美国空军于90年代初决定在现役AIM-9M和上述两个项目的基础上研制新型的近距空对空导弹--AIM-9X。AIM-9X使用了AIM-9M一样的火箭发动机，战斗部和引信，区别在于更换了一个更加先进的红外线成像制导头，加固了弹体并增添了推力矢量控制系统。1996年，美国空军对AIM-9X在内的数种先进短程空对空导弹进行了对比试验。虽然参加竞争的导弹中有很多种提出了更加先进的设计思想，但AIM-9X最终凭借着低廉的成本技压群芳，成为美国空军下一代短程空对空导弹。<BR><BR>　　AIM-9X于1999年完成了首次发射试验，并于2003年11月13日开始装备美国空军的F-15C战斗机。第一支换装AIM-9X的部队是位于阿拉斯加埃尔门多夫空军基地的第12和第19战斗机中队。这些F-15C已经预先改装了APG-63(V)2主动电子扫描相控阵雷达（AESA），AIM-9X的到来使得它们成为美国空军战斗序列中最强大的空中优势战斗机。美国海军和海军陆战队的F/A-18C/D也于2004年2月开始使用AIM-9X。雷锡恩公司宣称其生产线已经于同年5月达到全速生产状态。<BR><BR>　　AIM-9X尽可能地保持了与美军及其盟友现役装备的通用性，因此是一种费效比很高的武器。AIM-9X最大的优点在于能够和美国空军计划大量装备的联合头盔瞄准系统（JHMCS）相融合，这使得其先进的导引头和敏捷的机动性能得到最大的发挥。不过AIM-9X也不是完美无暇，由于沿用了AIM-9M上的火箭发动机，使得其射程和推力稍嫌不足。为了降低成本，简化后勤维护，AIM-9X也刻意保持了和现役"响尾蛇"在尺寸和质量上的一致性。但不管怎样，AIM-9X有望成为短程空对空导弹市场的赢家之一。在国内，美国空军和海军分别打算采购5100和5000枚；在国外，确定采购AIM-9X导弹的国家已经有韩国、波兰、瑞士、芬兰和丹麦，这一数字将随着F-35国外订单的增加而进一步攀升。台湾有意把F-35作为下一代战斗机，将来必定会购买AIM-9X，这在政治和技术上都不存在问题。<BR><BR>　　"流星"超视距先进空对空导弹（Meteor BVRAAM）<BR><BR>　　"流星"超视距先进空对空导弹是欧洲目前正在进行的最重要的一项导弹研制计划，标志着欧洲防务一体化由"纸上谈兵"逐渐转化为现实行动。"流星"导弹由英国、德国、法国、意大利、瑞典和西班牙6国联合研制，是一种使用火箭冲压喷气发动机的超视距空对空导弹。"流星"导弹的最大射程达到了54海里（100千米，1海里＝1.852千米），最大飞行速度超过4倍音速，是一种完全为21世纪超视距空战设计的先进导弹。按照MBDA导弹集团的说法，"流星"导弹的不可躲避区是现役和正在研制中的任何一种空对空导弹中最大的。<BR><BR>　　"流星"导弹具有独特的外型结构，特别是两个非对称式可节流进气道，成为区分"流星"与其他导弹最醒目的标志。由于"流星"挂载在"台风"战斗机腹部挂架下时旋转了45度，使得原本安装在弹体下部的两个进气道看起来似乎偏于弹体的一侧。2003年6月，MBDA导弹集团又为"流星"导弹设计了一种更新的"无翼式"外型结构。设计师取消了原本安装在火箭冲压喷气发动机进气道前方的4片制导控制舵面，只保留了弹体尾部的4片控制舵面。<BR>　由于"流星"导弹是专门为欧洲战斗机"台风"量身订做的，因此将会陆续装备英国、德国、意大利和西班牙等国空军的"台风"战斗机。除此之外，法国空军计划为"阵风"战斗机配备"流星"中程空对空导弹，而瑞典空军也打算将"流星"导弹作为JAS-39C/D"鹰狮"战斗机的标准中程空对空武器加以大量采购。这意味着任何一个采购了上述三种战斗机之一的空军都将成为"流星"空对空导弹的必然客户。目前，"流星"导弹虽然完成了关键技术的研制和样弹的制造，却还从未进行过正式的空中发射试验。根据MBDA导弹集团的日程安排，"流星"导弹的首次实弹发射试验将于2005年下半年进行，届时瑞典空军的"鹰狮"战斗机将成为首个试射"流星"导弹的战斗机。如果一切顺利的话，"流星"将于2010年开始装备英国皇家空军的"台风"战斗机。曾经有外电报道台湾也把"台风"战斗机纳入了"三代战机"的候选阵容，不过根据目前中国大陆和欧洲之间日益紧密的政治经贸关系，欧洲不太会冒险把"台风"战斗机出售给台湾，因此台湾获得"流星"导弹和下述ASRAAM的可能性微乎其微。而对于中国大陆来说，"流星"导弹最吸引人的地方在于其先进的火箭冲压喷气发动机。<BR><BR>　　先进短程空对空导弹（ASRAAM）<BR><BR>　　20世纪80年代，为了应对苏联日益增长的空中威胁，美国和欧洲共同发起了合作研制下一代重要武器系统的计划。先进短程空对空导弹（ASRAAM，当时也称为AIM-132）就是当时众多合作项目中最引人瞩目的一个。根据双方签署的合作备忘录，美国和欧洲将致力于提高下一代空对空导弹的兼容性和共享性。这样，欧洲的战斗机能发射美国研制的AMRAAM，而美国的战斗机则能使用欧洲主导的ASRAAM。不幸的是，合作研制ASRAAM的计划最终被宣判了死刑，美国单方面宣布退出ASRAAM计划，自行研制下一代"响尾蛇"近距格斗导弹。不过，ASRAAM的生命并没有就此终结，英国宇航动力公司在势单力薄的情况下继续进行这种短程导弹的研制计划。由于项目进度被大大拖后，使得英国皇家空军不得不于20世纪90年代早期又向美国订购了一批新型的AIM-9"响尾蛇"导弹。<BR><BR>　　ASRAAM采用了和美国AIM-9X相同的红外线成像导引头，因此很多人认为这两种导弹本质上没有太大的区别。不过，MBDA导弹集团认为，ASRAAM的绝大多数软硬件技术远比AIM-9X来得先进，特别是其精心设计的空气动力外型，使得ASRAAM成为第一种"无翼式"短程空对空导弹。ASRAAM导弹总体上呈圆柱型，除了尾部的4片尾翼外，弹体显得异常光滑，这使得导弹的运动特性十分出色。很多军事专家认为，ASRAAM是一种兼容了近距格斗和中距拦射能力的复合式导弹，这种设计思想和法国的"米卡"不谋而合。区别在于，"米卡"最初就是作为中距拦射导弹研制的，而ASRAAM本质上还是着眼于近距格斗。<BR><BR>　　2002年底，在克服了研制和试验中的重重困难后，ASRAAM导弹最终交付英国皇家空军使用。第一种装备ASRAAM导弹的战斗机是经过升级的"狂风"F.3，截止到2004年底，所有4个战斗机中队都装备了ASRAAM导弹。在2003年的伊拉克战争中，"狂风"战斗机携带ASRAAM导弹安全飞行了7000小时，证明了这种导弹完全适应实际飞行的要求。但英国皇家空军的技术人员也发现：虽然经过技术改良，由于机载雷达和电子设备性能的局限，"狂风"F.3还不能完全发挥ASRAAM这一种全数字式空对空导弹的卓越性能。这种窘况将伴随着欧洲战斗机"台风"的陆续服役而彻底改变。ASRAAM是"台风"战斗机和尚在研制中的JSF的制式武器，因此具有广阔的市场前景。2004年8月，澳大利亚皇家空军正式宣布成为ASRAAM的第二个用户，MBDA导弹集团将为澳大利亚经过改进的F/A-18"大黄蜂"战斗机提供全数字控制的ASRAAM导弹。澳大利亚此举给装备F/A-18攻击机的国家带来了一定的示范作用，加拿大目前也倾向于用MBDA的ASRAAM而不是雷锡恩的AIM-9X来装备其空军的CF-18机群。可见，在未来短程空对空导弹市场上，ASRAAM和AIM-9X之间免不了一场短兵相接的"战斗"。<BR><BR>　　IRIS-T<BR><BR>　　IRIS-T其实是英文"红外线成像系统-推力矢量控制"的缩写。BGT公司研制这种导弹的灵感来自于前苏联的R-73(AA-11)。德国统一后，民主德国储存的大批R-73导弹成为新成立的德国空军的宝贵财产。在经过一系列发射试验和对比研究后，西方的空对空导弹设计师不得不承认这样一个现实--R-73的性能远胜于当时北约大量装备的AIM-9L/M"响尾蛇"导弹。对R-73的深入研究使得BGT公司对下一代短程空对空导弹的研制有了更新的想法，并最终促成了IRIS-T的诞生。德国空军打算用IRIS-T来替换其现役的AIM-9导弹，并借机开拓国外市场。<BR><BR>　　IRIS-T的空气动气外型和R-73有着几分神似。弹体中段有4片梯形控制舵面，为导弹提供升力，延长飞行距离；尾部的4片融合式尾翼和推力矢量发动机则为导弹提供高机动能力。除此之外，弹体前端制导装置后也有4片小型的稳定翼，用以改进导弹的飞行性能。IRIS-T由德国、希腊、意大利、挪威、西班牙和瑞典6个国家共同研制，由于BGT没有加入MBDA导弹集团，使得IRIS-T得以作为一个独立的项目保留了下来。IRIS-T将装备德国、意大利、西班牙和希腊空军的"台风"战斗机，并将装备瑞典的JAS-39C/D"鹰狮"战斗机（瑞典编号为Rb 98）、西班牙的F/A-18和希腊的F-16战斗机。由于台湾将轻易获得美国的AIM-9X导弹，因此不会另起炉灶从德国购买IRIS-T。<BR>　KS-172远程空对空导弹<BR><BR>　　20世纪80年代末开始，"彩虹"设计局一直在研制一种名为KS-172的远程重型空对空导弹，用来装备苏霍依设计局的"侧卫"战斗机家族。KS-172导弹的理论射程在160-215海里之间（约为300-400千米），主要用来攻击AWACS、J-STARS和空中加油机这类的高价值目标。90年代初，KS-172首次在公开场合展示，并被赋予AAM-L的出口编号。但自从那次短暂的展示后，KS-172便从公众的视线中消失了。西方的军事专家分析认为，这种导弹很可能与前苏联遗留下来的其他武器研制项目一样由于资金问题或是俄罗斯空军需求的转变而被迫终止。<BR><BR>　　90年代初展示的KS-172导弹采用"无翼式"设计思想，弹体外表从前至后过渡自然，没有明显的棱角，只在弹体后端安装了4片用于调节飞行方向的小型控制舵面。导弹尾部是圆柱型的火箭助推器，能够把导弹加速到超高音速。KS-172全重达750千克，战斗部重50千克。由于导弹尺寸巨大，重量惊人，使得KS-172和其他空对空导弹相比是一个不折不扣的另类，即使是苏-30和苏-35这类的大型战斗机也只能在机腹中线挂架上勉强挂载一枚KS-172。<BR><BR>　　KS-172已经在90年代初完成了风洞吹风试验并进行了多次地面和空中的发射试验。2003年底，人们在莫斯科航展上展示的一架苏-35战斗机的模型上发现了沉寂多时的KS-172导弹的身影。和最初展示的KS-172相比，新露面的KS-172进行了大幅度的修改，并被"彩虹"设计局命名为KS-172S-1。俄罗斯设计师在航展上透露：由于得到了一个外国客户的资金援助，使得原本被冻结的KS-172导弹项目起死回生，新研制的KS-172S-1正是为了适应外国客户的需要而在原型上修改得来的。这个神秘的外国客户其实就是南亚次大陆的印度，在90年代初，印度就对KS-172产生了浓厚的兴趣。近几年，经济上颇有成就的印度频频与俄罗斯设计局组建联合科研团队，由印度提供资金，把前苏联遗留下来的"超级武器"项目一一解封。对于印度这样缺少自主国防科研能力的国家来说，这样的做法的确不失为符合国情的一条捷径。<BR><BR>　　外电曾经认为，对于中国大陆来说，KS-172是一种极其诱人的武器。从作战使用上来说，万一台海上空爆发空战，中国空军可以用苏-30战斗机发射KS-172敲掉台湾的E-2T预警机，使台湾的战斗机群失去预警飞机的电子情报支援，从而被迫和在指挥管制上较为落后的解放军空军进行一场"公平的较量"。在这次珠海航展上，CATIC的工作人员表示，中国将研制装备火箭冲压喷气发动机的新型空对空导弹，以适应未来空战的需求。由此体现出军方决策层已经敏锐地意识到未来战争将向何处去。不过，笔者坚持认为，中国直接从俄罗斯购买KS-172的可能性微乎其微，至多引进其若干先进技术。但俄罗斯在对我国军售时一直有所保留，是否会提供这种导弹的技术尚难以确定。其实，诸如KS-172这类导弹的最核心部分就是适合空对空导弹使用的火箭冲压喷气发动机，如果我国能突破这一技术瓶颈，研制出类似KS-172的导弹简直易如反掌。而且根据我国装备制造业的现状，在生产工艺上将能远胜KS-172，至少可以缩小尺寸、减轻发射重量。<BR><BR>　　"怪蛇"4/5近距格斗导弹<BR><BR>　　以色列的国防工业在全球都享有盛誉，其研制的武器系统不光性能出众而且颇能引领时代潮流。这与以色列扎实的科技、工业基础和在历次中东战争中获得的经验教训密不可分。以色列建国五十余年来，一直面临着阿拉伯国家强大的空中威胁，这使得装备先进的空对空导弹成为以色列国防军的首要目标之一。以色列研制的第一种威震全球的空对空导弹是拉斐尔公司的"怪蛇"4，这是西方阵营中第一种超高机动性的、具备大离轴发射角能力的近距格斗导弹。拉斐尔公司随后又在"怪蛇"4的基础上研制出了"怪蛇"5，它能够挂载在JSF的内置式弹舱内，并被五角大楼默许为外国客户购买JSF时可供选择的武器系统之一。<BR><BR>　　拉斐尔公司研制的"怪蛇"系列空对空导弹完全是战争的产物，因此其性能也最能贴近实战的需要。从"怪蛇"3开始，直到最新的"怪蛇"5，可以说集东西方两种导弹设计思想之大成，既有美国的烙印，又带有苏联的痕迹。"怪蛇"5和"怪蛇"4相比，外型结构几乎没有什么差异，但却使用了经过改进的导引头、控制软件、微型计算机系统与火箭发动机。因此，"怪蛇"5是一种不折不扣的数字化导弹，射程也比"怪蛇"4有所提高。由于"怪蛇"5与"怪蛇"4的外型十分接近，使得人们还无法确定这种新型导弹是否已经在以色列空军中服役。"怪蛇"4的国外用户有智利、泰国、印度、厄瓜多尔和巴西，这些国家自然也成为"怪蛇"5潜在的采购对象<BR><BR>　　海峡两岸空对空导弹发展历程都获深或浅地受到以色列的影响。台湾早年从以色列获得了"谢里夫"2近距格斗导弹，并在以色列的援助下建立起空对空导弹的研制体系。中国大陆在天安门事件后，与以色列保持了紧密的高科技合作关系，从以色列获得了"怪蛇"3导弹的核心技术并自主研制出了霹雳-8导弹。由于以色列在国际上一向天马行空，特立独行，因此，未来两岸从以色列获得先进空对空导弹的可能性相当大。不过，以色列国防工业参与国际空对空导弹市场的竞争依然受到三个因素的制约：首先是政治上的原因，很多国家为了不伤害阿拉伯民族的感情，长久以来在与以色列的军火贸易上谨小慎微。其次是价格上的原因，由于海外犹太人财团实力雄厚，加上有美国的支持，以色列在研制任何一项武器系统时首要考虑的是性能指标而不是价格。这使得大部分以色列产的武器系统价格不菲，在国际市场上缺乏足够的竞争力。再者，"怪蛇"家族能否继续延续下去，衍生出"怪蛇"6、"怪蛇"7？结论尚且不得而知。从近期以色列主动取消"德比"中程空对空导弹研制计划来看，以色列空对空导弹的发展前景的确不容乐观。因此，即使两岸在未来10年内有意采购，以色列也很可能处于无货可卖的境地。<BR>"达特"导弹家族<BR><BR>　　南非虽然是非洲南部一个不太引人瞩目的国家，但在国际军火市场上却占有一席之地。在曼德拉领导的民族民主解放运动之前，南非独裁政府穷兵黩武，甚至偷偷地研制原子弹。独裁政府垮台后，新政府致力于改善国民经济和人民生活，南非的国防工业瞬间从政府拨款的首位下降到最末。一些尖端的武器研制计划，如火箭冲压喷气发动机、战术弹道导弹都被迫取消。原本打算研制的A-Darter高机动性空对空导弹也任其自生自灭，只有R-Darter获得了南非政府的准生证。和以色列一样，南非的空对空导弹工业也是在战争中成长起来的，因此研制的产品往往较贴近实战的需要。20世纪80年代，南非和以色列拉斐尔公司达成协议，共同研制"德比"超视距空对空导弹。南非也从以色列购买了"怪蛇"3近距格斗导弹，来装备其空军的"幻影"F1战斗机。因此，南非的空对空导弹工业与以色列有着千丝万缕的联系。<BR><BR>　　V3 A-Darter的含义就是高机动性"达特"导弹的缩写。V3是南非空军研制的第一种近距格斗导弹，后来又研制出了U-Darter（意为改进型"达特"导弹）来代替早期的V3。V3家族最新的成员是A-Darter，它于20世纪80年代末开始研制，其参照的蓝本是苏联空军的R-73。虽然A-Darter已经完成了地面试验，其研制计划最终还是被南非民主政府取消了。目前A-Darter仅仅作为一项科技储备计划存在，其使用的推力矢量技术和红外线成像技术将移植到其他武器系统中去。南非空军将在未来接收瑞典研制的JAS-39"鹰狮"战斗机并打算为其装备国产的防区外发射武器，A-Darter的技术能为这种武器系统的研制带来便利。负责空对空导弹研制的南非丹尼尔公司公开宣布，如果有外国客户愿意支付足够的经费的话，该公司将重新启动A-Darter的研制计划并保证导弹以最快的速度交付用户使用。<BR><BR>　　V4 R-Darter导弹是南非与以色列共同研制的项目之一，R-Darter中的字母R代表雷达制导的意思。20世纪90年代南非革命之前，这个项目一直处于严格的保密状态中，鲜为外人所知。R-Darter的孪生兄弟是以色列的"德比"导弹，这种导弹目前已经被取消了。幸运的是，R-Darter被南非民选政府保留了下来，这种导弹将具备类似美国AIM-120的性能。这种导弹将装备南非空军的JAS-39C/D"鹰狮"战斗机，并将出口到巴西。不过由于南非特殊的地理位置和在国际政治格局中所处的地位，R-Darter的出口前景并不令人看好。<BR><BR>　　笔者认为，台湾很有可能从南非获得先进空对空导弹的技术。由于南非与台湾在90年代末以前一直保持外交关系，政治、经贸、军事、文化往来十分紧密，台湾的"敦睦舰队"每次出访必造访南非，台湾也帮助南非训练军事人员。虽然现在台湾与南非断绝了外交关系，但台湾与南非的贸易和人员往来依然密切，各种沟通管道依然照常运作。在南非政府的眼中，虽然中国在国际上的影响力日益增加，但两国毕竟相隔千山万水，没有直接的利益联系；而台湾不同，不光在南非有大量投资，更是舍得一掷千金。南非出于经济上的考虑，很有可能通过某种途径向台湾出售导弹或转让导弹技术，即使这样做遭到中国大陆的抗议，也无损南非的毛发，顶多在外交上费一番口舌。特别需要指出的是，由于南非本身不生产作战飞机，因此台湾购买南非的导弹或导弹技术没有任何的隐性成本，南非可以帮助台湾把新型导弹整合到IDF、"幻影"2000-5或是F-16战斗机上，从而实现台湾空军目前梦寐以求的愿望。所以，我国在未来10年必须密切关注台湾与南非的军事技术往来。<BR><BR>　　"阿斯特拉"中程空对空导弹<BR><BR>　　1982年，印度政府提出了一项名为"综合制导导弹发展项目"（IGMDP）的计划，这项雄心勃勃的计划意图在未来的20余年内为印度军队研制出多种战略和战术导弹，以增强印度在国际社会上的影响力。我们所熟知的诸如"普里特维"（又称"大地"）战术弹道导弹和"阿格尼"战略弹道导弹都是这个计划下的产物。IGMDP也承担了为印度空军研制一款主动雷达制导的空对空导弹的任务。这种在90年代末经常被印度用来宣传其自主国防能力的导弹就是赫赫有名的"阿斯特拉"（Astra）。<BR><BR>　　印度空军目前已经装备俄罗斯研制的R-77主动雷达制导导弹，并且还有大量法国研制的"玛特拉"超530空对空导弹在印度空军中服役。印度空军深刻地意识到，如此复杂而不成系统的装备体系，不光平时增加了后勤维护的成本，战时更有可能由于与武器供应国的政治意愿相左而失去稳定的零部件和技术支持。如果能够自行研制一种主动雷达制导的空对空导弹，则可以在一定程度上减少这种风险，并且有利于推动印度自身科研和制造水平的进步。"阿斯特拉"的首次地面发射试验于2003年5月顺利进行，预计在2005年初就可以实现首次空中发射试验。<BR><BR>　　"阿斯特拉"虽然被印度称为是自主研制的导弹，其实在整个设计过程中始终得到了俄罗斯和法国设计人员的帮助，这从其空气动力外型上就可见一斑。"阿斯特拉"导弹看上去像R-77和"玛特拉"超530导弹的混合体。在弹体后段，有类似于R-77一样的4片颀长的固定式弹翼，尾部没有采用R-77的栅格式尾翼，而是采用了"玛特拉"超530的普通尾翼。"阿斯特拉"的动力装置是一台单级无烟火箭发动机，它使导弹的最大射程可以达到43海里（80千米）。导弹的战斗部是重15千克的预制成型破片战斗部，可以有效杀伤来袭的空中目标。<BR>　不过，"阿斯特拉"最终能否顺利装备印度空军还很成问题。首先在于其实际性能并非如宣传得那样先进，不能满足印度空军的作战需求；其次，俄罗斯和法国目前都在争先恐后地帮助印度改进现有的空对空导弹，以图稳住这一块难得的市场。俄罗斯允许印度以获得生产许可证的方式在国内生产R-77导弹，法国也计划把超530和R550"魔术"II导弹的生产线搬到印度。在这样的双重夹击下，一贯朝秦暮楚的印度国防部很可能又会作出一个见好就收的决定。<BR><BR>　　H-4中程空对空导弹<BR><BR>　　谈到印度就不能不提巴基斯坦，这两个南亚邻国的军备竞赛已经是世人皆知。和印度空军相比，巴基斯坦空军规模小，但飞行员的水平更加专业。不过，在超视距空对空导弹的发展和装备上，巴基斯坦已经被印度远远地甩在了后面。由于欠缺必要的科研资金和技术力量，巴基斯坦不可能自行研制出类似"阿斯特拉"这类的空对空导弹；再加上美国对巴基斯坦长久的武器禁运与印度阻挠俄罗斯向巴基斯坦出售武器，使得巴基斯坦不可能从国外获得先进的超视距空对空导弹。不过，这种情况将随着巴基斯坦和中国联合研制的FC-1"枭龙"战斗机的交付使用而大为改观。这种被巴基斯坦命名为JF-17的战斗机将装备SD-10主动雷达制导空对空导弹，其整体性能已经达到AIM-120早期型号的水平。<BR><BR>　　对于巴基斯坦来说，虽然受到诸多政治因素和技术障碍的限制，自行研制空对空导弹始终是其最优先的国防技术政策之一。人们注意到，在巴基斯坦的媒体上经常能看到一种名为H-4的机载武器系统发展计划。根据媒体的描述，这种H-4武器系统就是先进的中程空对空导弹。南非丹尼尔公司的雇员曾经在公开场合暗示，巴基斯坦目前正在进行的H-4导弹发展计划得到了南非的协助。南非已经把其积累的防区外导弹技术、红外线成像技术和火箭发动机技术转移给了巴基斯坦。巴基斯坦新研制的近距格斗导弹很可能将以南非的U-Darter作为蓝本，而超视距导弹将类似于R-Darter。<BR><BR>　　据说H-4不仅可以接受来自载机的数据，还可以接受来自其他的平台的数据，例如同一空域的友机，这对未来的空战来说是相当有意义的。载机只需将目标的大概位置输入H-4导弹，发射后，载机就可以机动寻找新的目标，导弹在飞行途中接受其他作战飞机的控制，这样不仅隐藏了载机的坐标位置，而且相当于为战机编队提供了隐身能力。凭借巴基斯坦与中国的良好关系，H-4导弹的相关先进技术很有可能被中国科学家吸收借鉴。<BR><BR>　　东瀛AAM家族<BR><BR>　　用"雾里看花，水中望月"来形容日本的防务技术水平是再也恰当不过了。长久以来，虽然外界对于日本自主国防工业发展的关注一直没有中断过，却始终无法详尽地了解其发展现状与整体水平。日本的空对空导弹研制计划也是如此，人们只能从一些细枝末节的资料中去把握整个计划发展的速度。三菱重工是日本国产空对空导弹的主要研制和制造商，此外还有一些有名的公司如NEC、索尼、松下都多多少少参与其中。<BR><BR>　　日本自行研制的第一种空对空导弹是AAM-3（日本称为90式），这是一种在"响尾蛇"导弹基础上研制出来的导弹。早在上个世纪70年代，三菱重工就获得美国政府的授权生产"响尾蛇"空对空导弹，因此在近距格斗导弹的技术上积累了不少经验。90式导弹于1991年进入日本航空自卫队服役，主要装备F-4EJ、F-15J和F-2战斗机。这种导弹采用了常规的空气动力外型，只不过增加了4个犬齿状的控制舵面。<BR><BR>　　日本目前正在研制的两种导弹是XAAM-4（也称为99式）和XAAM-5。前者是一种超视距空对空导弹，后者是在90式导弹基础上发展出的高机动性近距格斗导弹。XAAM-4导弹的研制计划起始于20世纪90年代初，整个导弹可以说抄袭了美国AIM-120的设计方案。XAAM-4于1997年开始进行了首次发射试验，并一直挂载在航空自卫队的F-15J上进行各种试验。XAAM-4使用一个与众不同的双模式导引头，既可以采用主动雷达制导，也能使用半主动无线电制导。最初XAAM-4计划于1999年就装备部队使用，可由于航空自卫队大量地采购了AMRAAM，使得这种导弹的前景顿时迷茫起来。再加上生产成本过高，使得这种导弹即使装备部队也不可能大批量地进行生产，这似乎成为日本国产武器系统的通病。<BR><BR>　　XAAM-5也是由三菱重工负责研制，采用了各项先进技术。和90式相比，XAAM-5具备更高的机动性，更远的射程和更加精密的红外线成像设备。XAAM-5的外型与德国研制的IRIS-T有几分神似，弹体中段是4片长条形的固定翼面，使用推力矢量发动机，安装了由NEC公司生产的红外线制导头。2003年底，XAAM-5已经开始挂载在F-15J上进行发射试验，不过日本防卫厅迄今为止也没有给XAAM-5赋予一个制式编号，说明离定型还有一段距离。这种先进的空对空导弹最早也要到2010年才能装备部队。<BR><BR>　　最近一段时期，由于日本允许李登辉访日造成中日关系紧张，引发人们对日台关系的新思考。由于曾经在台湾进行了长达50年的殖民统治，日本对台湾的态度相当暧昧，不过即使日本如何在政治上打擦边球，近期也不可能向台湾出售先进的武器装备，台湾空军也不太可能获得日本的空对空导弹。<BR><BR>　　剑指何方？<BR><BR>　　未来十年，以美国和西欧为代表的一些国家将陆续装备第四代作战飞机，并装备新型的空对空导弹。美国目前正在研制一种使用火箭冲压喷气发动机的远程空对空导弹，以尽可能发挥F-22和F-35上的电子相控阵雷达的作战效能。西欧和俄罗斯则已经先行一步，无论是"流星"还是R-77M-PD，射程都在150千米以上，KS-172更是超过了400千米。印度、南非、日本和中国等国家也纷纷打算研制新型的远程空对空导弹。这标志着远程空对空导弹将成为各国第四代空对空导弹的首选，引领未来空对空导弹发展的潮流。由此可见，未来空对空导弹的主要特点可以概括如下：<BR><BR>　　--采用两级火箭冲压喷气发动机，尽可能增大导弹射程；<BR>　　--能够攻击诸如巡航导弹、甚至洲际导弹这样的高空目标；<BR>　　--可靠的复合制导技术，保证导弹在远程飞行后准确锁定目标；<BR>　　--具备高机动性，使用过载可以超过50g，平衡攻角超过50度；<BR>　　--外形简洁紧凑，具备隐身功能，本身又能有效攻击隐形飞机。<BR><BR>　　如果这样的设想最终成为现实，空对空导弹将在未来空战中发挥更大的作用。届时，现有的作战飞机将成为一种单纯的发射平台，卓有成效的航空电子设备而不是高超的机动性将成为决定战斗机优劣的首要因素。<BR><BR>　　我国空军目前装备的作战飞机在性能上与潜在对手的有相当的差距，如何弥补这样的差距？举全国之力研制新型空对空导弹是一种颇有远见卓识的选择，具有十分重要的战略意义。不过，发展空对空导弹虽然比研制一型作战飞机要省钱的多，却仍然需要大量投入来开发关键技术，风险同样存在。因此，我国除了加紧攻克冲压发动机、复合制导技术等关键技术外，借鉴国外的发展思路，引进国外的先进技术，能够缩短研制周期，节省资金。此外，在现有空对空导弹的基础上使用最新的技术也能够达到事半功倍的效果。目前，我国的空对空导弹装备体系，近程格斗有霹雳-8、霹雳-9、R-73，中距拦射有霹雳-10、霹雳-12、R-27和R-77，相信在不久的将来，还有更新更先进的导弹系统会出现在世人面前，承担起维护祖国统一、捍卫领土主权完整的历史使命。<BR>　　 </P><BR>
<CENTER><IMG alt=12119830_2005022109512347455100.jpg src="http://military.china.com/zh_cn/head/83/20050221/images/12119830_2005022109512347455100.jpg" border=0></CENTER><BR>
<P><BR>　　 </P><BR>
<CENTER><IMG alt=12119830_2005022109512352643200.jpg src="http://military.china.com/zh_cn/head/83/20050221/images/12119830_2005022109512352643200.jpg" border=0></CENTER>]]></description>
</item><item>
<title><![CDATA[MDA，开创大时代]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=2105</link>
<author>fancy_zh</author>
<pubDate>2005/1/20 11:43:15</pubDate>
<description><![CDATA[
<TABLE height=65 cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD class=title vAlign=center align=middle height=56><B>MDA，开创大时代</B></TD></TR>
<TR>
<TD class=content height=65>
<DIV>
<TABLE cellSpacing=0 cellPadding=0 width="95%" align=center border=0>
<TBODY>
<TR>
<TD class=hui vAlign=top height=20>
<DIV class=hui24 align=center>来自：Yesky 作者：Alex.W [2004/05/17]</DIV></TD></TR>
<TR>
<TD class=hui14 background=../../Images/14.gif>　　C语言花费了二十年从蛮荒之中杀出一条血路，Java苦心耕耘了近十年方成大气，C#在Beta版本推出两年前就开始通过各种途径营造气氛，砸下了数不清的美金，直到现在还未被主流应用所完全接受。而MDA（Model Driven Architecture 模型驱动架构）自从2002年被OMG（Object Management Group 国际对象管理集团）提出以后，"随风潜入夜，润物细无声"，未见轰轰烈烈宣传，各大厂商却惊人一致地争相跟进，关于MDA的话题转眼之间在网络上也如火如荼地繁荣起来了。 <BR>　　然而MDA是什么？究竟是什么带来了MDA？究竟MDA为IT业带来了什么？MDA又揭开了一个怎样激动人心的大时代的序幕呢？ <BR>　　挑灯看剑<BR>　　Michael Guttman，CORBA的创始人，他在为《应用MDA》（国内第一本关于MDA技术的译著）写的序言中说道： <BR>　　 "是什么使得MDA同其它无数泛滥于软件社区的三字母缩写相比显得如此与众不同？第一个理由，MDA是由OMG推动的，OMG是软件产业界最大的联盟，OMG拥有令人羡慕的光辉的过去--它发布并维护了业界一些最成功的标准，比如CORBA和UML。" <BR>　　OMG是一个独立于各厂商的非盈利性组织，其主要宗旨是要统一不同的商业产品和标准之间的数据交换及相互操作，从而改善各厂商的软件产品之间不兼容的情况。CORBA是OMG在中间件层次上一个显著的工作成果，然而，这个技术上的成功的作品在商业应用上却称不上成功，数年之间，J2EE和DotNet相继在中间件的层面上异军突起。OMG的工程师们开始把眼光放到更远的地方，他们希望在更高的层面上一统这兵荒马乱的局面，因此，基于OMG另外一个非常成功的作品--UML，他们提出了MDA的概念。 <BR>　　OMG的构想是将目前的开发行为提升到更高的抽象层级--分析模型级，把针对特定计算平台的编码工作交由机器自动完成，这样的情况下，业务逻辑与实现技术被成功地解耦，二者相对独立变化，因此模型的价值在包容已有技术的条件下被最大化。这种目的根源于软件开发的现状，在传统的软件开发方法中，随着项目的进展，设计阶段产生的UML模型和代码之间的同步变得越来越困难--代码为了应付新增加的需求和新产生的想法而不断变化，模型却一直停留在原地不动，这是的模型在一段时间之后就失去了它的价值。OMG提出了一个最根本的解决方案--在MDA中，模型不再是一种辅助工具，而是开发过程的产品。一个完整的MDA应用程序包含： <BR>　　一个权威的PIM；<BR>　　一个或者多个PSM；<BR>　　一个或者多个完整的实现 － 开发人员决定支持的所有平台上的应用程序实现。 <BR>　　MDA在目前技术的基础上，分离出了两个抽象级别的模型：PIM（Platform Independent Model 平台无关模型）和（Platform Specialize Mode 平台相关模型），PIM是一个纯粹的不考虑实现技术的分析模型，而PSM可以视为一个基于特定实现技术，比如J2EE的设计模型。工程师们只需要建立表达业务逻辑的PIM，剩下的工作都将由MDA引擎自动完成。描述业务逻辑的PIM将具有长久的价值，而针对特定平台的PSM则可能会随着平台技术的进步而快速地迁移。在MDA开发过程中，系统的开发工作的最终产品是PIM，从PIM到PSM及至代码实现都是由第三方的自动化工具来完成的。 <BR>　　为了实现MDA这一宏大构想，OMG制定了一系列的标准： <BR>　　 UML：UML被MDA用来描述各种模型。它并不是为MDA而生，但是作为目前最为风行的建模语言，UML已经占据了全球建模语言领域90％的市场份额，成为了建模语言事实上的标准，因此OMG将它作为MDA技术的基础是自然而然的明智选择。它是MDA的基础，也是MDA最有力的武器。 <BR>　　 MOF：MOF（Meta Object Facility 元对象机制）是比UML更高层次的抽象，它的目的是为了描述UML的扩展或者其它未来可能出现的类UML的建模语言。由此我们可以看到OMG的"野心"，虽然MOF也不是为MDA而生的，但是我们可以体味到OMG的工程师们良苦的用心和长远的目光。 <BR>　　 XMI：XMI（XML-based metadata Interchange）是基于XML的元数据交换。它通过标准化的XML文档格式和DTDs（Document Type Definitions）为各种模型定义了一种基于XML的数据交换格式。这使得作为最终产品的模型可以在各种不同的工具中传递，这一点是非常重要的，它保证了MDA不会在打破了一种束缚之后再被加上一层新的束缚。 <BR>　　 CWM：CWM（Common Warehouse Metamodel 公共仓库元模型）提供了一种数据格式变换的手段，在任意级别的模型上都可以使用CWM来描述两种数据模型之间的映射规则，比如将数据实体从关系数据库变换为XML格式。在MOF的框架下，CWM使得通用的数据模型变换引擎成为可能。 <BR>　　在OMG的蓝图中，UML、MOF、XMI、CWM等一系列标准分别解决了MDA的模型建立、模型扩展、模型交换、模型变换这几个方面的问题。OMG试图通过标准化的定义，扩大MDA的应用范围。同时通过这样一个可扩展的建模语言环境，IT厂商可以自由实现自己的建模语言，以及语言到可执行代码的映射，然而不管怎么样，都必须处于OMG的标准化框架之下。 　　烽烟再起 <BR>　　"中间件战争已经结束，下一个战场是模型转换！"<BR>　　　　--来自于中国第一个MDA研究组织MDAChina.net的这条标语明确地阐释了软件开发的下一个重心。 <BR>　　嗅觉灵敏的IT巨头们比谁都先看到这一点，OMG的MDA思想推出不久，IBM、Oracle、IONA等等都急忙宣称将在自己的企业级软件解决方案中融入MDA的思想，两大建模工具厂商Rotional和Together也声明自己的产品开始加入对MDA的支持，甚至连国内ERP软件领袖企业之一的金蝶软件也不甘寂寞，在其BOS基础平台的发布会上说BOS系统成功实现了MDA。且不管各位巧舌如簧的发言人是如何滔滔不绝的，单从MDA这个词越来越频繁地从他们口中出现这一点，就可以看出MDA已经成为了引发下一轮竞争的导火线，下一个战场的制高点。 <BR>　　对于计算市场的商业个体来说，技术领域的竞争就是没有硝烟的战场，从计算机被发明IT产业兴起以来就从来没有停止过激烈的竞争，时至今日，人们已经在计算的战场上征战了五十多年。 <BR>　　50年前，计算机的历史还停留在石器时代的时候，人们用把指令和数据以0/1序列的形式输入计算机，因为那些真空管组成的庞然大物只能识别原始的机器码。不但如此，人们还不得不为每个字节的内存绞尽脑汁，为每个时钟周期冥思苦想--高昂的硬件成本使得机器成为计算的重心。 <BR>　　随后，汇编语言的出现把人们从0和1的比特流中解放了出来，简单的指令集代码却彻底地避免了人脑的思维方式二进制化。但是，不得不承认在这同时，它也延续了以机器为中心的计算方法的寿命。 <BR>　　20世纪60年代到70年代，硬件技术的巨大进步带来的晶体管、超大规模集成电路、随机存储技术使得人们不需要再为了几个字节的内存空间和几个周期的时间片而花费大量精力，这使得第三代编程语言（3GL）的出现成为可能，程序员们放下了手工敲入汇编代码这个庞大的包袱，开始花费更多的精力在应用逻辑上，之后结构化程序设计几乎完全统治了第二次计算机浪潮后软件开发的黄金时代。 <BR>　　结构化编程带给人集中于创造性思考的快感的同时，也带给程序员们松散凌乱的代码和难循其踪的复杂流程，人们还是不得不更多地从计算机的角度考虑问题，直到面向对象技术的出现。OO思想使得人们终于可以从尽可能自然的角度计算这个世界，直到现在，OO思想依然是整个程序开发行业的支柱。 <BR>　　最近的十年，企业级的分布式应用飞速成为主流，带来了对系统性能、可伸缩性的严格要求，大量分布式系统的出现，大量异构平台的整合需求，引发了中间件战争的爆发，过去的十年，是企业应用系统和中间件技术的十年。人们不再像汇编的时代那样关心一点一滴的内存得失，而开始把更多的精力用于搭建灵巧的架构、实现变化多端的业务逻辑，因此Java得以大行其道，设计模式、AOP等等更高抽象层级的软件理论方兴未艾。 <BR>　　五十年的计算之路写满了这样的事实，那就是人所需要考虑的计算的层面越来越抽象，越来越集中于业务逻辑而非在计算平台上的实现细节，从另一方面来说，借用《应用MDA》一书的观点：计算渐渐地从打孔机和汇编时代的以机器为中心转移到现在的以人为中心。 <BR>　　抽象的根本原因是软件越来越复杂，复杂到人脑已经不能同时把握原有抽象层面上所有的细节，而软件的复杂性根源于软件所解决的问题的复杂性，而且随着计算机越来越多地应用，这种问题也将越来越复杂，因此软件的复杂化是计算机的自然趋势，抽象也渐渐成为不可逆转的方向，甚至连停滞都不可能，五十年的计算之路就是这样走过来的，MDA思想只是迈出了新的一步而已。 <BR>　　就MDA本身来说，虽然MDA正朝气蓬勃地走来，但是冷静的人们还是会很快看出它所存在的问题。MDA最大的好处就是业务模型的持久价值，但是付出的代价是增加了抽象层，而目前看来，层之间的转换并不是我们所期待的那样顺畅，至少，从PIM到PSM，从PSM到代码，这个实现的过程要远比从3GL生成机器代码来得困难，我们要面对比指令集复杂得多得东西，而MDA的终极梦想--可直接执行模型的虚拟机，虽然已有厂商号称推出了可执行UML模型的平台，但是实际上看来炒作的成分居多。在建模技术方面，UML正在暴露其固有的缺陷，它需要扩展更多的机制来支持精确建模和分析模型，虽然目前OCL为精确建模提供了一定的支持，但是这种支持离可执行模型的理想还很遥远。此外，不得不考虑的是性能问题，每当我们工作的抽象层级提高的同时，必然要求硬件技术的巨大进步，这样才能保证增加抽象层所带来的更复杂的计算的顺利执行，而现在的硬件速度能保证执行模型的虚拟机所需要的开销么？Java虚拟机已经足以搞砸目前的主流配置的机器，更惶论UML虚拟机。 <BR>　　但是站在历史的高度看来，MDA所面临的问题，或许只应该被称为"成长的烦恼"罢了。对于程序员来说，新的思想意味着新的机遇，新的思想也意味着新的挑战。MDA将帮助新一代的程序员摆脱编码的桎梏，多少年来的软件理想已经近在眼前。对于IT厂商，为中间件市场的硝烟都还没有熄灭，一个新的战场已经出现在地平线了，不管是否有人觉得残酷，新一轮征战都是不可避免的，从中将会站起下一个二十年的巨人。<BR>　　跃马扬鞭 <BR>　　数风流人物，还看今朝！ <BR>　　MDA预示着下一个软件开发黄金时代的到来，传统的手工代码将如同现今的汇编语言一样，只是在极少数特别场合才有其用武之地，模型驱动架构会遍及从客户端到服务器端的每一个角落。大浪淘沙，如同以前的每一次变革，MDA带来的全新的机遇将会造就一批新的领袖，今天跟随人后亦步亦趋的毛头小伙，也许就将在未来二十年里引领潮流。而你，是不是准备好了呢？ <BR>　　工业进步的历史就是机器代替人工的历史，机械重复的工作是计算机的擅长，而人的最重要在于其创造性的活动。MDA将威胁那些只会将设计模型翻译为代码的Coder，下一个黄金时代的IT人，只有从事创造性工作的那一部分才不会被淘汰。 <BR>　　在MDA开创的时代，代码将被认为是重复而机械的工件，各种各样的模型翻译工具将会层出不穷，它们可以在极短的时间内产生大量的代码。在即将过去的3GL的时代，年轻的Coder们快速穿梭于层出不穷的各种平台和语言当中，他们得意洋洋地在"老家伙"面前宣称自己又掌握了多少种语言，又在项目中使用了多少个新出现的框架，然而Coder的盛世即将就此终结--代码生成器的成本将比Coder便宜万倍，市场将根本上抛弃Coder。曾经尘嚣日上的"软件蓝领论"，在MDA面前自然而然地成为了无稽之谈。 <BR>　　至此你是否找到了你的方向呢？ <BR>　　你可以努力成为一名领域专家。深入学习某一个领域的业务知识，牢固地掌握业务分析方法，你也许不需要设计太多的程序，但是模型设计者会从你的工作成果中获益。 <BR>　　你可以深入钻研系统分析和建模技术，在当前计算机理论框架下，现实中的系统不可能无偏差地实现在计算机系统上，通过对系统的分析，在计算机上建立其运行模型是用计算机来解决问题的一个必不可少的步骤。建立标准形式的系统模型之后，代码生成器可以从你的模型中生成代码，虚拟机甚至可以直接执行你的模型。 <BR>　　你也许还可以看出，MDA技术本身并不是编码工作的终结者，它的架构中包含了PIM（平台独立模型）和PSM（平台相关模型）两个重要的部分，对于实际的应用来说，从PIM生成PSM的工作是必不可少的，因此你可以致力于平台技术，制定其转换规则，顺便还可以继续享受一点编码的乐趣。 <BR>　　也许最后你还可以尝试一下另类的职业--"传教士"。MDA提升了软件开发的抽象层次，软件工业的最终产品将不再是代码，而是独立于计算平台的模型。产品的变化必然带来工程化方法的变化，你可以努力尝试新的开发方法和流程，你的成果将会影响其它人的工作，因为你就是新方法论的"传教士"。 <BR>　　但是无论如何，最根本的一点就是：机遇只垂青于有准备的人！ <BR>　　大时代 <BR>　　你以为MDA本身就是终极之道么？ <BR>　　本文的前面就说过，MDA只不过是已经延续了50年之久的计算之路上的一小步而已，它只是战场上的一声冲锋号，远不是出鞘的军刀、前进的马蹄和冷兵器的碰撞。它开创了一个时代，在这个令人激动的时代里，人们关注分析胜过关注编码，关注模型胜过关注实现，关注业务胜过关注平台，关注模型转换胜过关注平台迁移。借用敏捷联盟的宣言，"虽然后者也具有价值，但是我们认为前者更有价值"。 <BR>　　"这是最好的时代，这是最坏的时代，我们就要上天堂了，我们就要下地狱了！" <BR>　　大作家狄根斯的这句话用来描述MDA所开创的时代是最合适不过了。MDA带来了新的变革，而MDA远远不是变革的终点，它开创了一个新时代，却还无法摆脱旧时代的影子。MDA最重要的意义是向人们昭示了这样一个方向，沿着这个方向走下去，就是软件工业的伊甸园。 <BR>　　大幕已经拉开，或为舞者，或为看客，身为程序员的你会怎么办呢？ </TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE>]]></description>
</item><item>
<title><![CDATA[中国历代疆域图]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=2050</link>
<author>fancy_zh</author>
<pubDate>2005/1/18 10:58:46</pubDate>
<description><![CDATA[
<TABLE style="BORDER-RIGHT: #326deb 1px solid; BORDER-TOP: #326deb 1px solid; BORDER-LEFT: #326deb 1px solid; BORDER-BOTTOM: #326deb 1px solid" cellSpacing=0 cellPadding=0 width="95%" bgColor=#c3d4f9 border=0>
<TBODY>
<TR>
<TD></TD></TR>
<TR>
<TD align=middle>
<TABLE width="90%">
<TBODY>
<TR>
<TD height=40><PRE></PRE>
<CENTER>
<TABLE width="100%" border=0>
<TBODY>
<TR>
<TD width="100%" wrap><FONT size=4><BR><IMG src="http://www.zipchina.com/uploadfile/200431517395517.jpg"><BR><BR><IMG src="http://www.zipchina.com/uploadfile/200431517395316.jpg"><BR><BR><IMG src="http://www.zipchina.com/uploadfile/200431517395315.jpg"> <BR><BR><IMG src="http://www.zipchina.com/uploadfile/200431517395214.jpg"><BR><BR><IMG src="http://www.zipchina.com/uploadfile/200431517395113.jpg"><BR><BR><IMG src="http://www.zipchina.com/uploadfile/200431517395112.jpg"> <BR><BR><IMG src="http://www.zipchina.com/uploadfile/200431517394711.jpg"> <BR><BR><IMG src="http://www.zipchina.com/uploadfile/200431517394610.jpg"><BR><BR><IMG src="http://www.zipchina.com/uploadfile/20043151739459.jpg"> <BR><BR><IMG src="http://www.zipchina.com/uploadfile/20043151739448.jpg"> <BR><BR><IMG src="http://www.zipchina.com/uploadfile/20043151739447.jpg"><BR><BR><IMG src="http://www.zipchina.com/uploadfile/20043151739436.jpg"> <BR><BR><IMG src="http://www.zipchina.com/uploadfile/20043151739425.jpg"><BR><BR><IMG src="http://www.zipchina.com/uploadfile/20043151739414.jpg"><BR><BR><IMG src="http://www.zipchina.com/uploadfile/20043151739413.jpg"> <BR><BR><IMG src="http://www.zipchina.com/uploadfile/20043151739402.jpg"><BR><BR><IMG src="http://www.zipchina.com/uploadfile/20043151739361.jpg"> <BR></FONT></TD></TR></TBODY></TABLE></CENTER></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><B><BR></B>]]></description>
</item><item>
<title><![CDATA[Rational开发过程]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=1999</link>
<author>fancy_zh</author>
<pubDate>2005/1/17 14:45:46</pubDate>
<description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD><SPAN class=atitle>Rational开发过程</SPAN></TD>
<TD width=8><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=8 border=0></TD>
<TD align=right width=180><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=180 border=0><BR><NOBR></NOBR></TD>
<TD width=6><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=6 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=5><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=100 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=5><IMG height=8 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=100 border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width=5><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=5 border=0></TD>
<TD width="100%">
<TABLE cellSpacing=0 cellPadding=0 width=168 align=right border=0>
<TBODY>
<TR>
<TD width=8><IMG height=21 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=5></TD>
<TD width=160>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=160 bgColor=#000000 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD align=middle background=/developerworks/cn/i/bg-gold.gif height=5><B>内容：</B></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#IDA0RC4">1. 引言 </A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#IDAFSC4">2.总体软件生命周期</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#IDAHXC4">3. Rational 过程的各个阶段</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#IDAN1VDB">4. Rational过程中的活动</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#IDA22VDB">5. 生命周期工件</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#IDAH4VDB">6. Rational过程的例子</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#IDAR5VDB">7. 结束语</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#IDAY5VDB">更进一步的读物</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#IDAOAWDB">术语表</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR><!--Standard links for every dw-article-->
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#resources">参考资料 </A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#author1">关于作者</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#rating">对本文的评价</A></TD></TR>
<TR>
<TD><IMG height=10 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=160 bgColor=#000000 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD align=middle background=/developerworks/cn/i/bg-gold.gif height=5><B>订阅:</B></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=1 width=160 border=0>
<TBODY>
<TR>
<TD><A href="http://www-900.ibm.com/developerworks/cn/newsletter/index.html">developerWorks 时事通讯</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerworks/cn/subscription/index.shtml">developerWorks 订阅<BR xmlns:fo="http://www.w3.org/1999/XSL/Format">(订阅CD 和下载)</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerworks/rational/rationaledge/admin/subscribe.html">The Rational Edge</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=150 bgColor=#000000 colSpan=2 height=2><IMG height=2 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD width=150 bgColor=#ffffff colSpan=2 height=2><IMG height=2 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<P><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/index.shtml#author1"><NAME>Philippe Kruchten</NAME></A> （<A href="mailto:pbk@rational.com">pbk@rational.com</A>） <BR>IBM<BR>2004 年 12 月 </P>
<BLOCKQUOTE>本文对 Rational 软件开发过程（Rational Software Development Process）的原理和结构给出了高度的描述, 它具有足够的普遍性，可以在规模与应用领域方面，为各个软件产品和项目量身订做。</BLOCKQUOTE>
<P><A name=IDA0RC4><SPAN class=atitle2>1. 引言 </SPAN></A><BR>本文对 Rational 软件开发过程（Rational Software Development Process）的原理和结构给出了高度的描述，它是：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>迭代的、增量的开发过程 
<LI>面向对象的开发过程 
<LI>管理和控制的开发过程 </LI></UL>
<P>它具有足够的普遍性，可以在规模与应用领域方面，为各个软件产品和项目量身订做。</P>
<P><A name=IDAFSC4><SPAN class=atitle2>2.总体软件生命周期</SPAN></A><BR></P>
<P><A name=IDAKSC4><SPAN class=atitle3>2.1 两种视角</SPAN></A><BR>Rational 过程可以从两种不同而又密不可分的视角来观察：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>从管理的视角来看，涉及财务、战略、商业和人文方面 
<LI>从技术的视角来看，涉及质量、工程和设计方法方面</LI></UL>
<P><A name=IDATSC4><SPAN class=atitle3>2.2 周期和阶段</SPAN></A><BR></P>
<P><A name=IDAZSC4><B></B></A><BR><IMG height=165 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/images/image002.jpg" width=553 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>从管理的角度，即从业务和经济的角度来看，对应项目的进展，软件的生命周期包含四个主要阶段:</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>起始阶段（Inception）-- 有一个好的想法：详细构想出最终产品的设想和它的业务案例，确定项目的范围 。 
<LI>细化阶段（Elaboration）--计划必要的活动和所需资源，详细确定功能并设计构架 。 
<LI>构建阶段（Construction）-- 构建产品， 发展最初的设想、构架和计划，直到一个可以交付给用户的产品（完成后的设想）完成。 
<LI>移交阶段（Transition）-- 将产品移交用户使用，包括：制造、交付、培训、支持、维护，直到用户满意。</LI></UL>
<P>完成这4个阶段称为一个开发周期, 它产生的软件称作第一代（generation）。 除非产品的生命结束， 一个现有产品可以通过重复下一个相同的起始、细化、构建和移交四阶段，各个阶段的侧重点与第一次不同，从而演进为下一代产品。 这个时期我们称之为演进(evolution)。最后伴随着产品经过几个周期的演进，新一代产品也不断被制造出来。</P>
<P>例如，演进周期的启动可能由以下这几项触发：用户建议增强功能、用户环境的改变、重要技术的变更，以及应对竞争的需要。</P>
<P><A name=IDAOTC4><B></B></A><BR><IMG height=184 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/images/image004.jpg" width=553 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>实际中，周期之间会有轻微重叠：起始阶段和细化阶段可能会在上一个周期的移交阶段未结束时就开始了。</P>
<P><A name=IDA1TC4><SPAN class=atitle3>2.3. 迭代</SPAN></A><BR>从技术的角度来看，软件开发可以视为一连串的迭代过程，通过这些迭代被开发的软件得以增量演进。 每次迭代都以一个可执行的产品的发布而结束， 该产品可能是完整版本的一个子集，但从工程的或用户的角度来看是有用的。 每次发布都伴随一些支持性工件：版本描述、用户文档和计划等。</P>　 
<P><A name=IDADUC4><B></B></A><BR><IMG height=278 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/images/image006.jpg" width=553 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>一次迭代包括以下活动： 计划、分析、设计、实施和测试。 根据迭代在开发周期中所处位置的不同，这些活动分别占不同的比例。</P>
<P>管理角度和技术角度之间是协调的， 而且各个阶段的结束还和各次迭代的结束保持同步。</P>
<P>换句话说，每个阶段可以分为一次或多次迭代过程。</P>
<P><A name=IDATUC4><B>(注意：本图中每阶段的迭代数目仅为示意) </B></A><BR><IMG height=312 alt="(注意：本图中每阶段的迭代数目仅为示意) " src="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/images/image008.jpg" width=554 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>但是，这两个角度（管理角度和技术角度），不仅仅只是保持同步，它们还具有一些完全相同的里程碑，它们共同贡献出一些随时间演进的产品和工件。 一些工件更多地处于技术方面控制之下，另一些工件更多地处于管理方面的控制之下。见第五节。</P>
<P>这些工件的可用性、工件是否满足所建立的评估标准，是构成里程碑的主要具体元素，比日历牌上的日期提供了多得多的内容。</P>
<P>像周期一样，迭代之间也会有轻微重叠。即第N次迭代的计划和构架在第N-1次迭代还未结束时就开始了。有时候，迭代也会平行进行：一个工作于系统某一部分的小组，可能在某个迭代内没有可交付的工件。</P>
<P><A name=IDADVC4><SPAN class=atitle3>2.4.区别</SPAN></A><BR>对于不同的项目而言，每个阶段的侧重点，入口和出口准则，一个开发周期的各个工件，以及各次迭代的数目和长度都会不同。这主要取决于作为过程判别式的的四个主要项目特征。按照影响程度降序排列，它们是：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>业务环境 
<UL>
<LI>契约性工作，开发者基于给定的客户规格说明只为该客户开发软件。 
<LI>推测性开发或商业开发，开发者开发软件以推向市场。 
<LI>内部项目， 开发者和客户在同一个机构中。</LI></UL>
<LI>软件开发工作量的规模:<BR>按照一些度量标准来确定，比如 Delivered Source Instructions，或功能点、人-月数，或者只按照成本。 
<LI>新颖程度：<BR>对于软件开发组织，这个软件新颖程度如何有多新，尤其是该软件是否为第二次或更后面的周期。这项区别包括了组织和过程的成熟度、资产、技术水平，当前的技状况，以及诸如组建并培训团队、获取工具及其他资源这样的问题。 
<LI>应用类型，目标领域：<BR>MIS，命令和控制系统, 嵌入式实时系统, 软件开发环境工具等等, 尤其时具体的应用领域会给开发提出特殊的约束条件：安全性、性能、国际化、内存限制等。<BR>本文首先描述适用所有类型软件开发的通用过程，然后描述了一些有区别价值的特定过程实例，并列举了几个例子。</LI></UL>
<P><A name=IDA4VC4><SPAN class=atitle3>2.5工作量和日程安排</SPAN></A><BR>各阶段在工作量和时间安排上是不同的。尽管由于不同项目类型之间相差会很大，一个典型的中等规模项目的最初开发周期可以预计为下面的比率：</P>
<TABLE border=1>
<TBODY>
<TR>
<TD>&nbsp;</TD>
<TD>起始阶段</TD>
<TD>细化阶段</TD>
<TD>构建阶段</TD>
<TD>移交阶段</TD></TR>
<TR>
<TD>工作量</TD>
<TD>5%</TD>
<TD>20%</TD>
<TD>65%</TD>
<TD>10%</TD></TR>
<TR>
<TD>日程安排</TD>
<TD>10%</TD>
<TD>30%</TD>
<TD>50%</TD>
<TD>10%</TD></TR></TBODY></TABLE>
<P>可以用下图表示：</P>
<P><A name=IDA0WC4><B></B></A><BR><IMG height=126 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/images/image010.jpg" width=554 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>但是对于一个演进周期来说，起始阶段和细化阶段可能大大缩减。使用特定工具和技术（如应用程序构建器），构建阶段可以远远小于起始阶段和细化阶段的总和。</P>
<P><A name=IDAHXC4><SPAN class=atitle2>3. Rational 过程的各个阶段</SPAN></A><BR></P>
<P><A name=IDAMXC4><SPAN class=atitle3>3.1. 起始阶段</SPAN></A><BR>这个阶段产生一个预测产品的最初设想，并将其转换为一个实际的项目。本阶段的目的是建立一个新产品或一次大的更新的业务案例，并且指定项目的范围。</P>
<P>对于一个新产品的开发，本阶段的主要结果是得到一个"做还是不做"的决定以进入下一阶段，并投入一定的时间和资金来详细分析构建什么、能否构建，以及如何构建。 </P>
<P>对于一个现有产品的演进，这会是一个简短的阶段， 主要看用户或客户的要求、问题报告，或是新的技术动态。</P>
<P>对于一个契约性的开发，是否进行项目的决定取决于在特定领域的经验、以及组织在此领域的竞争力和市场情况。这里起始阶段可以归结为一个参加投标的决定，或投标活动本身。该决定可能是基于一个现有的研究原型，其结构对最终软件可能合适，也可能不合适。</P>
<P>入口准则:</P>
<P>对于一项需要的描述，可以采用以下形式：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一份最初的设想 
<LI>一个遗留系统 
<LI>一份建议请求（An RFP --request for proposal) 
<LI>先前一代的产品和一个增强要求清单 
<LI>一些资产(软件, 专门技能, 财务资产) 
<LI>一个概念原型或实物模型</LI></UL>
<P>出口准则：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一个初始的业务案例至少要包含以下内容: 
<UL>
<LI>对产品设想的明确表达即核心需求，表述为功能、范围、性能、容量和技术等。 
<LI>成功标准 (如收入的数目) 
<LI>最初的风险评估 
<LI>完成细化阶段所需的资源估算</LI></UL></LI></UL>
<P>通常在初试阶段结束时，我们将得到：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一个最初的域分析模型(完成大约10%-20%), 确定最关键的用例, 并且足以进行进构架工作。 
<LI>一个最初的构架原型，在这个阶段可以是一个一次性原型</LI></UL>
<P><A name=IDAOYVDB><SPAN class=atitle3>3.2. 细化阶段</SPAN></A><BR>本阶段的主要目的是更彻底地分析问题域，定义构架并使之稳定，确定项目的最大风险。这样在本阶段结束时，我们可以得到一个关于下2个阶段如何工作的综合计划：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一个基于分析模型的基线产品设想（即最初的需求集合）。 
<LI>至少对第一次构建迭代的评价准则。 
<LI>一个基线软件构架。 
<LI>开发和部署产品的必需资源，尤其是人员和工具。 
<LI>一份日程安排。 
<LI>足以对构建阶段的成本、日程安排和质量做出"精确"的评估的一份风险决议。</LI></UL>
<P>在这个阶段，建立了一个可执行的构架原型；它至少实现了初始阶段识别出的最关键的用例 ，解决了项目的最大技术风险；根据范围、规模、风险和项目新颖程度的不同构架原型需要一次或多次迭代。这是一个生成高质量代码（这些代码成为架构基线）的演进原型，但是也不排除开发出一个或几个试探性的、一次性原型，以降低开发的风险：对需求、可行性、人机界面研究、向投资者演示等的精化。在本阶段的结束时，仍然会产生一个"做还是不做"的决定， 以确定是否要真正投资构建这个产品（或参与合同项目的竞标）。</P>
<P>此时产生的计划一定要足够详细，风险也必须充分降低，可以对开发工作的完成进行精确的成本和日程估算。</P>
<P>入口准则：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>前一阶段出口准则所描述的产品和工件 
<LI>被项目管理者和投资者认可的计划，和细化阶段所需的资源</LI></UL>
<P>出口准则：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一份详细的软件开发计划，包含： 
<UL>
<LI>更新后的风险评估 
<LI>一份管理计划 
<LI>一份人员配置计划 
<LI>一份显示迭代内容和次数的阶段计划 
<LI>一份迭代计划，详细计划下次迭代 
<LI>开发环境和所需的其他工具 
<LI>一份测试计划</LI></UL>
<LI>一个基线设想，以对最终产品的一个评估准则的集合的形式 
<LI>用于评估构建阶段最初的迭代结果的客观、可测量的演进标准 
<LI>一个域分析模型（80%完成），相应的构架可以称之为是"完整的" 
<LI>一个软件构架描述（说明约束和限制） 
<LI>一个可执行的构架基线</LI></UL>
<P><A name=IDASZVDB><SPAN class=atitle3>3.3. 构建阶段</SPAN></A><BR>本阶段可以划分为数次迭代，不断充实构架基线，向最终产品逐步演进或增量演进。在每次迭代过程中，上个阶段（细化阶段）的工件得到扩充和修正， 但它们最终将随着系统向正确和完整的方向的演进而稳定下来。在这个阶段，除了软件本身，还生成一些新的工件：文档（既有内部使用的文档，也有面向最终用户的文档）、测试床及测试套件、部署附件，以及用于支持下一阶段的部署辅助（例如销售辅助）。</P>
<P>对每次迭代，都具有：</P>
<P>入口准则：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>上次迭代的产品和工件。 迭代计划必须阐明迭代的特定目标： 
<UL>
<LI>将要开发的新增功能，覆盖了哪些用例或场景 
<LI>本次迭代过程中减少的风险 
<LI>本次迭代过程中修改的缺陷</LI></UL></LI></UL>
<P>出口准则：</P>
<P>更新后的产品和工件，另外还有: </P>　 
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一个版本描述文档，记录了迭代的结果 
<LI>测试用例和根据产品得出的测试结果 
<LI>一个详细描述下一次迭代的计划 
<LI>对下一次迭代的客观度量标准</LI></UL>
<P>到构建阶段的后期，必须完成以下工件，及本阶段最后一次迭代额外的出口准则：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一个部署计划，指定必需的事项： 
<UL>
<LI>打包 
<LI>定价 
<LI>演示 
<LI>支持 
<LI>培训 
<LI>移交策略 (例如一个现有系统的更新计划) 
<LI>产品 (软盘和手册)</LI></UL>
<LI>用户文档</LI></UL>
<P><A name=IDAW0VDB><SPAN class=atitle3>3.4. 移交阶段</SPAN></A><BR>移交阶段是将产品交付给最终用户的阶段。 它涉及销售、打包、安装、配置、支持用户社区和做出修正等. </P>
<P>从技术角度来看，伴随本阶段迭代的是一次或多次发布：`beta' 版发布、正式版发布、修补bug , 或增强版发布。</P>
<P>当用户对产品满意时，本阶段即告结束。 例如，契约性开发时正式验收， 或者产品有关的所有活动都已结束。 此时，某些积累的资产可以加以整理，以为下一个周期或其他项目重用。</P>
<P>入口准则：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>上一次迭代的产品和工件， 尤其是足够成熟可以交付给用户的软件产品</LI></UL>
<P>出口准则：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>前一阶段某些文档的更新，以及必要时根据原始及修订后的成功标准，进行"事后"项目性能分析，从而替换原有计划。 
<LI>一个简短的清单，列出本次开发周期给组织带来的新的资产</LI></UL>
<P><A name=IDAF1VDB><SPAN class=atitle3>3.5. 演进周期</SPAN></A><BR>对于重要的演进，我们应用整个过程递归，仍从起始阶段开始一个新的周期。因为我们已经有了一个产品，所以比起一个初次开发的产品，起始阶段可能大大缩短。细化阶段也可能缩小范围，而在计划方面的关注程度要大于分析或构架的演进方面。需要指出：周期之间可以略有重叠。</P>
<P>较小的演进可以通过延长移交阶段或增加一两次迭代来完成。</P>
<P>移交阶段可以以一个终结过程而结束，即产品不再演进了，但是为了终结它，需要采取一些特定的动作。</P>
<P><A name=IDAN1VDB><SPAN class=atitle2>4. Rational过程中的活动</SPAN></A><BR>Rational 过程中各个阶段的名称(如起始、细化、构建、移交)与描述高级活动的术语（如分析、设计、测试等）相差甚远。 因此我们容易理解某种活动的进行并不局限于某个特定阶段，也与其他作者、标准及特定领域的所使用的术语无关。这些活动确实发生，但它们在每个阶段和每次迭代中的程度有所不同。下图表明了活动重点如何随时间的推进而发生演进。 </P>　 
<P><A name=IDAV1VDB><B></B></A><BR><IMG height=336 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/images/image012.jpg" width=554 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>图中活动重点的变化也说明尽管每次迭代在形式上都是"相似"的，但它们的性质和内容却是随时间而改变的。</P>
<P>这还表明，一项活动的结束并不总意味着另一项活动的开始，即并不是分析完成了才开始设计，而是这些活动相关的各种"工件"在随着开发者对问题或需求的理解的加深也不断得到更新。</P>
<P>最后，在一个迭代过程中，计划、测试和集成这些活动不是集中堆积在开发活动的开始和结束阶段，而是增量地分布在整个开发周期的各个阶段、每次迭代之中。 它们并不表现为开发过程的某个独立的阶段或步骤。</P>
<P>尽管具体的项目有具体的区别，但对于一个中等规模、初次开发的典型项目来说，其开发周期中各种活动的比例如下：</P>
<TABLE border=1>
<TBODY>
<TR>
<TD>计划与管理</TD>
<TD>15%</TD></TR>
<TR>
<TD>分析/需求</TD>
<TD>10%</TD></TR>
<TR>
<TD>设计/集成</TD>
<TD>15%</TD></TR>
<TR>
<TD>实施/功能测试</TD>
<TD>30%</TD></TR>
<TR>
<TD>度量/评估/验收测试</TD>
<TD>15%</TD></TR>
<TR>
<TD>工具/环境/变更管理</TD>
<TD>10%</TD></TR>
<TR>
<TD>维护（开发过程中的修补）</TD>
<TD>5%</TD></TR></TBODY></TABLE>
<P><A name=IDA22VDB><SPAN class=atitle2>5. 生命周期工件</SPAN></A><BR>开发过程不是文档驱动的：它的工件中必须一直包括软件产品自身。文档应该十分精简，数目不能太多，应只保留那些确实从管理或技术的角度有真正价值的文档。 Rational 建议保留以下典型的文档集。</P>
<P><A name=IDAC3VDB><SPAN class=atitle3>5.1管理工件</SPAN></A><BR>管理工件不是产品，而是用来驱动或监控项目进展、估计项目风险、调整项目资源，以及使客户或投资者对项目保持一定的"可见性" 的。</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一份机构策略文档，是机构开发过程的明文规定。 它包含一个此类项目的实例。 
<LI>一份远景文档, 描述系统级需求，质量要求和优先级。 
<LI>一份业务案例文档, 描述财务环境、合同，以及项目的投资回报等等。 
<LI>一份开发计划文档, 包括总体的迭代计划和当前及近期迭代的详细规划。 
<LI>一份评估标准文档，包括需求、验收标准及其他特定的技术目标，它们由各个阶段演进的主要"里程碑"组成。包含迭代的目标和验收水平。 
<LI>每次发布的版本描述文档。 
<LI>部署文档, 包含对交付、培训、安装、销售、制造和交割相关的有用信息。 
<LI>状态评估文档: 项目状态的阶段性"快照"， 具有进展、人力、开销、结果、关键风险、活动等的度量标准。</LI></UL>
<P><A name=IDAR3VDB><SPAN class=atitle3>5.2技术工件</SPAN></A><BR>它们或者是交付的产品，可执行的软件及手册，或者是一些用于制造产品的蓝图，这些产品包括软件模型、源代码和其他有助于理解和演进产品的工程信息。</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>用户手册, 在生命周期早期开发。 
<LI>软件文档, 最好以源代码自建文档和模型的形式，其中模型是用合适的CASE工具捕获并维护的这些模型包括用例、类图和过程图等。 
<LI>一个软件构架文档, 描述软件的整体构架，及它的主要组成元素的分解说明： 类的分组、类、过程、子系统、关键接口的定义和关键设计决策的依据。</LI></UL>
<P>本文第3部分中列举的入口准则和出口准则可以映射到这11类文档之中。</P>
<P>上面介绍的这套文档可以依照具体项目的类型进行扩充和删减，一些文档可以合并。 文档不必一定是纸张形式---也可以是电子表格、文本文件、数据库、源代码的注释、超文本文档等等---但相应的信息资源必须被清楚地识别，易于访问，也要保存一些历史记录。</P>
<P><A name=IDA33VDB><SPAN class=atitle3>5.3需求</SPAN></A><BR>Rational 软件开发过程也不是需求驱动的。 在产品演进的周期中，需求表现为不同的形式：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>业务案例给出了主要约束，多是些可用的资源。 
<LI>远景文档从用户角度仅描述了系统的关键需求，它在开发过程中将缓慢演进。 
<LI>更详细的需求在第二阶段（细化阶段）以用例和场景的形式进行阐明，并在第三阶段（构建阶段）随着对产品和用户需求了解的加深进一步精化。这些更详细的需求记录在评估标准文档中，它们驱动了构建阶段和移交阶段迭代内容的定义， 并在迭代计划中引用。 </LI></UL>
<P><A name=IDAH4VDB><SPAN class=atitle2>6. Rational过程的例子</SPAN></A><BR>按照2.4节中所述的区别，Rational 过程采用不同的形式。 这里有两个极端的例子。</P>
<P><A name=IDAN4VDB><SPAN class=atitle3>6.1大型契约性软件开发的Rational过程</SPAN></A><BR>对这个软件开发项目，Rational 过程分为3个阶段建立招标, 对应3个不同类型的合同。</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一个研究与设计阶段, 包含了生命周期的起始阶段和细化阶段, 通常以风险分担方式投标，举例来说，成本加奖金合同（ cost plus award fee contract ，CPAF）。 
<LI>一个生产阶段，包含了生命周期的构建和移交阶段, 通常作为一个公司、固定的价格合同（a firm, fixed price contract ,FFP）来投标。 
<LI>一个维护阶段，对应生命周期的演进阶段，通常作来工作量水平合同（ a level of effort contract ，LOE）来投标。</LI></UL>
<P>因为用户需要更高的可视性来评估项目，还因为项目涉及大量人员和组织，开发过程应更加正规化，要比小型、内部的项目更加重视书面工件。第5部分列出的11类文档都以某种形式或名称存在。</P>
<P><A name=IDAZ4VDB><B></B></A><BR><IMG height=321 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-rudp/images/image014.jpg" width=444 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P><A name=IDAF5VDB><SPAN class=atitle3>6.2小型商业软件产品的Rational过程</SPAN></A><BR>在按规模分类的过程家族的另一端，是小型的商业软件开发。它的流动性更强一些，只有有限的正规性， 表现为一些主要的里程碑和有限的文档集：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>一个产品远景 （A product vision）。 
<LI>一份开发计划，显示资源和日程安排 
<LI>版本描述文档，在每次迭代的开始指明本次迭代的目标，在迭代结束时 作为版本说明（release notes）进行更新。 
<LI>必要的用户手册</LI></UL>
<P>软件结构、软件设计、开发过程可以通过代码本身或软件开发环境来进行文档化。</P>
<P><A name=IDAR5VDB><SPAN class=atitle2>7. 结束语</SPAN></A><BR>Rational 过程强调通过快速开发出一个定义了构架的系统的初始版本，从而尽早处理风险问题。它并没有假设您在项目的初试阶段就有一个固定不变的需求集合，而是允许随着项目的演进不断精化需求。它认可并支持需求的变化。 过程不过分倚重文档或"仪式"， 它自身就解决了与软件开发相关的那些繁杂任务的自动化。重点主要放在软件产品本身及产品质量上，即最终用户对它的满意程度，以及它要满足的投资回报目标。 </P>
<P>一个从本文描述的Rational过程所派生的软件开发过程完全能够符合ISO 9000标准的要求。</P>
<P><A name=IDAY5VDB><SPAN class=atitle2>更进一步的读物</SPAN></A><BR>B. W. Boehm, "A Spiral Model of Software Development and Enhancement," IEEE Comp., 21 (5), May 1988, pp. 61-72.<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">G. Booch, Object Solutions: Managing the Object-Oriented Project, Addison-Wesley , Redwood City, California, 1996.<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">M. T. Devlin, and W. E. Royce, Improving Software Economics in the Aerospace and Defense Industry, Technical paper TP-46, Rational Software Corp., Santa Clara, CA, 1995.<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">T. Gilb, Principles of Software Engineering Management, Addison-Wesley, Wokingham, UK, 1988.<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">W. Humphrey, Managing the Software Process, Addison-Wesley, Reading MA, 1989.<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Ph. Kruchten, "Un processus de dévelopment de logiciel itératif et centré sur l'architecture," Proceedings of the 4th International Conference on Software Engineering, Toulouse, France, December 1991, EC2.<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">D. L. Parnas, &amp; P. C. Clements, "A Rational Design Process: How and Why to Fake It," IEEE Trans. on Soft. Eng., SE-12 (2), February 1986, pp. 251-257</P>
<P><A name=IDAOAWDB><SPAN class=atitle2>术语表</SPAN></A><BR>工件（Artifact）：软件产品本身之外的任何文档或者软件。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">基线（Baseline ）：从属于变更管理和配置控制的版本发布。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">构建（Construction）： 过程的第三个阶段，在该阶段软件从可执行的架构基线进入准备交付给用户的状态。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">周期（Cycle）：包含四个阶段的完整的过程，这四个阶段是起始阶段，细化阶段，构建阶段和移交阶段。时间跨度为从起始阶段的开始到移交阶段的结束。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">细化（Elaboration ）：过程的第二个阶段，在这个阶段定义产品远景及其构架。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">演进（Evolution）：初次开发周期之后的一个软件生命阶段；产品进行演进的任何一个后续周期。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">代（Generation） 一次软件开发周期的成果。 <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">起试（Inception）： 过程的第一个阶段，在该阶段，构思、RFP、前一代作为进入细化阶段的开始。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">迭代（Iteration） ：使用基线规划和评估标准的一个清晰的活动序列。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">里程碑（Milestone）：采取一个事件来正式初始化并总结一次迭代过程。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">阶段（Phase ）：在一个过程的两个主要的里程碑之间的时间，在此期间，定义的目标集合与预期相吻合，工件也完成了，并且要做出决定是否进入下一个阶段。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">产品（Product）：包括作为开发结果的软件，和一些与之相关的工件（文档，发布媒体，培训）<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">原型（Prototype）：不必从属于变更管理和配置控制的一次发布。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">发布（Release）：最终产品的子集，它是一个主要里程碑的评估目标。（参见：原型，基线）<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">风险（Risk）：正在发生的或者将要发生的一些利害关系，在很大程度上可能阻碍成功地达到主要里程碑。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">移交（Transition ） ：过程的第四个阶段，在该阶段软件将交付到用户手中。<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">远景(Vision )：从用户的角度来看，将要开发的产品。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>您可以参阅本文在 developerWorks 全球站点上的 <A href="http://www.software.ibm.com/ibmdl/pub/software/rational/web/whitepapers/2003/xtalk.pdf" target=_blank xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">英文原文</A>。<BR></LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>Philippe Kruchten,Philippe Kruchten,Vancouver，BC,pbk@rational.com</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>]]></description>
</item><item>
<title><![CDATA[用例建模指南]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=1997</link>
<author>fancy_zh</author>
<pubDate>2005/1/17 14:34:37</pubDate>
<description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD><SPAN class=atitle>用例建模指南</SPAN></TD>
<TD width=8><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=8 border=0></TD>
<TD align=right width=180><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=180 border=0><BR><NOBR></NOBR></TD>
<TD width=6><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=6 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=5><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=100 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=5><IMG height=8 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=100 border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width=5><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=5 border=0></TD>
<TD width="100%">
<TABLE cellSpacing=0 cellPadding=0 width=168 align=right border=0>
<TBODY>
<TR>
<TD width=8><IMG height=21 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=5></TD>
<TD width=160>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=160 bgColor=#000000 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD align=middle background=/developerworks/cn/i/bg-gold.gif height=5><B>内容：</B></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/index.shtml#IDADCO0C">1. 什么是用例？</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/index.shtml#IDADFO0C">2. 建立用例模型</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/index.shtml#IDAL1T0C">3. 系统需求</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/index.shtml#IDA13T0C">4. 调整用例模型</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/index.shtml#IDAYDU0C">5. 管理用例模型复杂度</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR><!--Standard links for every dw-article-->
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/index.shtml#resources">参考资料 </A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/index.shtml#author1">关于作者</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/index.shtml#rating">对本文的评价</A></TD></TR>
<TR>
<TD><IMG height=10 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=160 bgColor=#000000 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD align=middle background=/developerworks/cn/i/bg-gold.gif height=5><B>订阅:</B></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=1 width=160 border=0>
<TBODY>
<TR>
<TD><A href="http://www-900.ibm.com/developerworks/cn/newsletter/index.html">developerWorks 时事通讯</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerworks/cn/subscription/index.shtml">developerWorks 订阅<BR xmlns:fo="http://www.w3.org/1999/XSL/Format">(订阅CD 和下载)</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerworks/rational/rationaledge/admin/subscribe.html">The Rational Edge</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=150 bgColor=#000000 colSpan=2 height=2><IMG height=2 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD width=150 bgColor=#ffffff colSpan=2 height=2><IMG height=2 alt="" src="http://www-900.ibm.com/developerworks/cn/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<P><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/index.shtml#author1"><NAME>傅纯一 </NAME></A><BR>IBM中国有限公司软件部Rational中国区技术销售经理<BR>2004 年 12 月 </P>
<BLOCKQUOTE><ABSTRACT-EXTENDED>用例(Use Case)是一种描述系统需求的方法，使用用例的方法来描述系统需求的过程就是用例建模。用例方法最早是由Iva Jackboson博士提出的，后来被综合到UML规范之中，成为一种标准化的需求表述体系。用例的使用在RUP中被推崇备至，整个RUP流程都被称作是"用例驱动"(Use-Case Driven)的，各种类型的开发活动包括项目管理、分析设计、测试、实现等都是以系统用例为主要输入工件，用例模型奠定了整个系统软件开发的基础。请点击文章顶部或底部的<B>讨论</B>，参与<A href="http://www.rational-club.org/index.php?showtopic=270" target=new>论坛讨论</A>，与其他读者分享您对本文的看法。</ABSTRACT-EXTENDED></BLOCKQUOTE>
<P><A name=IDADCO0C><SPAN class=atitle2>1. 什么是用例？</SPAN></A><BR>在介始用例方法之前，我们首先来看一下传统的需求表述方式-"软件需求规约"(Software Requirement Specification)。传统的软件需求规约基本上采用的是功能分解的方式来描述系统功能，在这种表述方式中，系统功能被分解到各个系统功能模块中，我们通过描述细分的系统模块的功能来达到描述整个系统功能的目的。一个典型的软件需求规约可能具有以下形式：</P>
<P><A name=IDAKCO0C><B></B></A><BR><IMG height=294 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/1.gif" width=315 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>采用这种方法来描述系统需求，非常容易混淆需求和设计的界限，这样的表述实际上已经包含了部分的设计在内。由此常常导致这样的迷惑：系统需求应该详细到何种程度？一个极端就是需求可以详细到概要设计，因为这样的需求表述既包含了外部需求也包含了内部设计。在有些公司的开发流程中，这种需求被称为"内部需求"，而对应于用户的原始要求则被称之为"外部需求"。</P>
<P>功能分解方法的另一个缺点是这种方法分割了各项系统功能的应用环境，从各项功能项入手，你很难了解到这些功能项是如何相互关联来实现一个完成的系统服务的。所以在传统的SRS文档中，我们往往需要另外一些章节来描述系统的整体结构及各部分之间的相互关联，这些内容使得SRS需求更象是一个设计文档。</P>
<P><A name=IDAYCO0C><SPAN class=atitle3>1.1 参与者和用例</SPAN></A><BR>从用户的角度来看，他们并不想了解系统的内部结构和设计，他们所关心的是系统所能提供的服务，也就是被开发出来的系统将是如何被使用的，这就用例方法的基本思想。用例模型主要由以下模型元素构成：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>参与者(Actor)<BR>参与者是指存在于被定义系统外部并与该系统发生交互的人或其他系统，他们代表的是系统的使用者或使用环境。 
<LI>用例(Use Case)<BR>用例用于表示系统所提供的服务，它定义了系统是如何被参与者所使用的，它描述的是参与者为了使用系统所提供的某一完整功能而与系统之间发生的一段对话。 
<LI>通讯关联(Communication Association) <BR>通讯关联用于表示参与者和用例之间的对应关系，它表示参与者使用了系统中的哪些服务（用例），或者说系统所提供的服务（用例）是被哪些参与者所使用的。</LI></UL>
<P>这大三种模型元素在UML中的表述如下图所示。</P>
<P><A name=IDANDO0C><B></B></A><BR><IMG height=89 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image006.gif" width=341 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>以银行自动提款机(ATM)为例，它的主要功能可以由下面的用例图来表示。ATM的主要使用者是银行客户，客户主要使用自动提款机来进行银行帐户的查询、提款和转帐交易。</P>
<P><A name=IDA1DO0C><B></B></A><BR><IMG height=230 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image008.gif" width=261 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>通讯关联表示的是参与者和用例之间的关系，箭头表示在这一关系中哪一方是对话的主动发起者，箭头所指方是对话的被动接受者；如果你不想强调对话中的主动与被动关系，可以使用不带箭头的关联实线。在参与者和用例之间的信息流不是由通讯关联来表示的，该信息流是缺省存在的（用例本身描述的就是参与者和系统之间的对话），并且信息流向是双向的，它与通讯关联箭头所指的方向亳无关系。</P>
<P><A name=IDAIEO0C><SPAN class=atitle3>1.2 用例的内容</SPAN></A><BR>用例图使我们对系统的功能有了一个整体的认知，我们可以知道有哪些参与者会与系统发生交互，每一个参与者需要系统为它提供什么样的服务。用例描述的是参与者与系统之间的对话，但是这个对话的细节并没有在用例图中表述出来，针对每一个用例我们可以用事件流来描述这一对话的细节内容。如在ATM系统中的"提款"用例可以用事件流表述如下：</P>
<P>提款-基本事件流</P>
<P>1. 用户插入信用卡</P>
<P>2. 输入密码</P>
<P>3. 输入提款金额</P>
<P>4. 提取现金</P>
<P>5. 退出系统，取回信用卡</P>
<P>但是这只描述了提款用例中最顺利的一种情况，作为一个实用的系统，我们还必须考虑可能发生的各种其他情况，如信用卡无效、输入密码错、用户帐号中的现金余额不够等，所有这些可能发生的各种情况（包括正常的和异常的）被称之为用例的场景(Scenario)，场景也被称作是用例的实例(Instance)。在用例的各种场景中，最常见的场景是用基本流(Basic Flow)来描述的，其他的场景则是用备选流(Alternative Flow)来描述。对于ATM系统中的"提款"用例，我们可以得到如下一些备选流：</P>
<P>提款-备选事件流</P>
<P>备选流一：用户可以在基本流中的任何一步选择退出，转至基本流步骤5。</P>
<P>备选流二：在基本流步骤1中，用户插入无效信用卡，系统显示错误并退出信用卡，用例结束。</P>
<P>备选流三：在基本流步骤２中，用户输入错误密码，系统显示错误并提示用户重新输入密码，重新回到基本流步骤2；三次输入密码错误后，信用卡被系统没收，用例结束。</P>
<P>…</P>
<P>通过基本流与备选流的组合，就可以将用例所有可能发生的各种场景全部描述清楚。我们在描述用例的事件流的时候，就是要尽可能地将所有可能的场景都描述出来，以保证需求的完备性。</P>
<P><A name=IDA1EO0C><SPAN class=atitle3>1.3 用例方法的优点</SPAN></A><BR>用例方法完全是站在用户的角度上（从系统的外部）来描述系统的功能的。在用例方法中，我们把被定义系统看作是一个黑箱，我们并不关心系统内部是如何完成它所提供的功能的。用例方法首先描述了被定义系统有哪些外部使用者（抽象成为Actor），这些使用者与被定义系统发生交互；针对每一参与者，用例方法又描述了系统为这些参与者提供了什么样的服务（抽象成为Use Case），或者说系统是如何被这些参与者使用的。所以从用例图中，我们可以得到对于被定义系统的一个总体印象。</P>
<P>与传统的功能分解方式相比，用例方法完全是从外部来定义系统的功能，它把需求与设计完全分离开来。在面向对象的分析设计方法中，用例模型主要用于表述系统的功能性需求，系统的设计主要由对象模型来记录表述。另外，用例定义了系统功能的使用环境与上下文，每一个用例描述的是一个完整的系统服务。用例方法比传统的SRS更易于被用户所理解，它可以作为开发人员和用户之间针对系统需求进行沟通的一个有效手段。</P>
<P>在RUP中，用例被作为整个软件开发流程的基础，很多类型的开发活动都把用例作为一个主要的输入工件(Artifact)，如项目管理、分析设计、测试等。根据用例来对目标系统进行测试，可以根据用例中所描述的环境和上下文来完整地测试一个系统服务，可以根据用例的各个场景(Scenario)来设计测试用例，完全地测试用例的各种场景可以保证测试的完备性。</P>
<P><A name=IDADFO0C><SPAN class=atitle2>2. 建立用例模型</SPAN></A><BR>使用用例的方法来描述系统的功能需求的过程就是用例建模，用例模型主要包括以下两部分内容：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>用例图(Use Case Diagram)<BR>确定系统中所包含的参与者、用例和两者之间的对应关系，用例图描述的是关于系统功能的一个概述。 
<LI>用例规约(Use Case Specification)<BR>针对每一个用例都应该有一个用例规约文档与之相对应，该文档描述用例的细节内容。</LI></UL>
<P>在用例建模的过程中，我们建议的步聚是先找出参与者，再根据参与者确定每个参与者相关的用例，最后再细化每一个用例的用例规约。</P>
<P><A name=IDATFO0C><SPAN class=atitle3>2.1 寻找参与者</SPAN></A><BR>所谓的参与者是指所有存在于系统外部并与系统进行交互的人或其他系统。通俗地讲，参与者就是我们所要定义系统的使用者。寻找参与者可以从以下问题入手：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>系统开发完成之后，有哪些人会使用这个系统？ 
<LI>系统需要从哪些人或其他系统中获得数据？ 
<LI>系统会为哪些人或其他系统提供数据？ 
<LI>系统会与哪些其他系统相关联？ 
<LI>系统是由谁来维护和管理的？</LI></UL>
<P>这些问题有助于我们抽象出系统的参与者。对于ATM机的例子，回答这些问题可以使我们找到更多的参与者：操作员负责维护和管理ATM机系统、ATM机也需要与后台服务器进行通讯以获得有关用户帐号的相关信息。</P>
<P><A name=IDABGO0C><B></B></A><BR><IMG height=178 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image010.gif" width=456 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2.1.1 系统边界决定了参与者</B></P>
<P>参与者是由系统的边界所决定的，如果我们所要定义的系统边界仅限于ATM机本身，那么后台服务器就是一个外部的系统，可以抽象为一个参与者。</P>
<P><A name=IDARGO0C><B></B></A><BR><IMG height=91 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image012.gif" width=341 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>如果我们所要定义的系统边界扩大至整个银行系统，ATM机和后台服务器都是整个银行系统的一部分，这时候后台服务器就不再被抽象成为一个参与者。</P>
<P><A name=IDA5GO0C><B></B></A><BR><IMG height=104 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image014.gif" width=370 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>值得注意的是，用例建模时不要将一些系统的组成结构作为参与者来进行抽象，如在ATM机系统中，打印机只是系统的一个组成部分，不应将它抽象成一个独立的参与者；在一个MIS管理系统中，数据库系统往往只作为系统的一个组成部分，一般不将其单独抽象成一个参与者。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2.1.2 特殊的参与者――系统时钟</B></P>
<P>有时候我们需要在系统内部定时地执行一些操作，如检测系统资源使用情况、定期地生成统计报表等等。从表面上看，这些操作并不是由外部的人或系统触发的，应该怎样用用例方法来表述这一类功能需求呢？对于这种情况，我们可以抽象出一个系统时钟或定时器参与者，利用该参与者来触发这一类定时操作。从逻辑上，这一参与者应该被理解成是系统外部的，由它来触发系统所提供的用例对话。</P>
<P><A name=IDAQHO0C><B></B></A><BR><IMG height=88 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image016.gif" width=262 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P><A name=IDA2HO0C><SPAN class=atitle3>2.2 确定用例</SPAN></A><BR>找到参与者之后，我们就可以根据参与者来确定系统的用例，主要是看各参与者需要系统提供什么样的服务，或者说参与者是如何使用系统的。寻找用例可以从以下问题入手（针对每一个参与者）：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>参与者为什么要使用该系统？ 
<LI>参与者是否会在系统中创建、修改、删除、访问、存储数据？如果是的话，参与者又是如何来完成这些操作的？ 
<LI>参与者是否会将外部的某些事件通知给该系统？ 
<LI>系统是否会将内部的某些事件通知该参与者？</LI></UL>
<P>综合以上所述，ATM系统的用例图可表示如下，</P>
<P><A name=IDAMYT0C><B></B></A><BR><IMG height=279 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image018.gif" width=403 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>在用例的抽取过程中，必须注意：用例必须是由某一个主角触发而产生的活动，即每个用例至少应该涉及一个主角。如果存在与主角不进行交互的用例，就可以考虑将其并入其他用例；或者是检查该用例相对应的参与者是否被遗漏，如果是，则补上该参与者。反之，每个参与者也必须至少涉及到一个用例，如果发现有不与任何用例相关联的参与者存在，就应该考虑该参与者是如何与系统发生对话的，或者由参与者确定一个新的用例，或者该参与者是一个多余的模型元素，应该将其删除。</P>
<P>可视化建模的主要目的之一就是要增强团队的沟通，用例模型必须是易于理解的。用例建模往往是一个团队开发的过程，系统分析员在建模过程中必须注意参与者和用例的名称应该符合一定的命名约定，这样整个用例模型才能够符合一定的风格。如参与者的名称一般都是名词，用例名称一般都是动宾词组等。</P>
<P>对于同一个系统，不同的人对于参与者和用例都可能有不同的抽象结果，因而得到不同的用例模型。我们需要在多个用例模型方案中选择一种"最佳"（或"较佳"）的结果，一个好的用例模型应该能够容易被不同的涉众所理解，并且不同的涉众对于同一用例模型的理解应该是一致的。</P>
<P><A name=IDA1YT0C><SPAN class=atitle3>2.3 描述用例规约</SPAN></A><BR>应该避免这样一种误解――认为由参与者和用例构成的用例图就是用例模型，用例图只是在总体上大致描述了系统所能提供的各种服务，让我们对于系统的功能有一个总体的认识。除此之外，我们还需要描述每一个有例的详细信息，这些信息包含在用例规约中，用例模型是由用例图和每一个用例的详细描述――用例规约所组成的。RUP中提供了用例规约的模板，每一个用例的用例规约都应该包含以下内容：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>简要说明 (Brief Description)<BR>简要介绍该用例的作用和目的。 
<LI>事件流 (Flow of Event)<BR>包括基本流和备选流，事件流应该表示出所有的场景。 
<LI>用例场景 (Use-Case Scenario)<BR>包括成功场景和失败场景，场景主要是由基本流和备选流组合而成的。 
<LI>特殊需求 (Special Requirement)<BR>描述与该用例相关的非功能性需求（包括性能、可靠性、可用性和可扩展性等）和设计约束（所使用的操作系统、开发工具等）。 
<LI>前置条件 (Pre-Condition)<BR>执行用例之前系统必须所处的状态。 
<LI>后置条件 (Post-Condition)<BR>用例执行完毕后系统可能处于的一组状态。</LI></UL>
<P>用例规约基本上是用文本方式来表述的，为了更加清晰地描述事件流，也可以选择使用状态图、活动图或序列图来辅助说明。只要有助于表达的简洁明了，就可以在用例中任意粘贴用户界面和流程的图形化显示方式，或是其他图形。如活动图有助于描述复杂的决策流程，状态转移图有助于描述与状态相关的系统行为，序列图适合于描述基于时间顺序的消息传递。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2.3.1 基本流</B></P>
<P>基本流描述的是该用例最正常的一种场景，在基本流中系统执行一系列活动步骤来响应参与者提出的服务请求。我们建议用以下格式来描述基本流：</P>
<P>1) 每一个步骤都需要用数字编号以清楚地标明步骤的先后顺序。</P>
<P>2) 用一句简短的标题来概括每一步骤的主要内容，这样阅读者可以通过浏览标题来快速地了解用例的主要步骤。在用例建模的早期，我们也只需要描述到事件流步骤标题这一层，以免过早地陷入到用例描述的细节中去。</P>
<P>3) 当整个用例模型基本稳定之后，我们再针对每一步骤详细描述参与者和系统之间所发生的交互。建议采用双向(roundtrip)描述法来保证描述的完整性，即每一步骤都需要从正反两个方面来描述:(1)参与者向系统提交了什么信息；(2)对此系统有什么样的响应。具体例子请参见附录。</P>
<P>在描述参与者和系统之间的信息交换时，需指出来回传递的具体信息。例如，只表述参与者输入了客户信息就不够明确，最好明确地说参与者输入了客户姓名和地址。通常可以利用词汇表让用例的复杂性保持在可控范围内，可以在词汇表中定义客户信息等内容，使用例不至于陷入过多的细节。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2.3.2 备选流</B></P>
<P>备选流负责描述用例执行过程中异常的或偶尔发生的一些情况，备选流和基本流的组合应该能够覆盖该用例所有可能发生的场景。在描述备选流时，应该包括以下几个要素：</P>
<P>1) 起点：该备选流从事件流的哪一步开始；</P>
<P>2) 条件：在什么条件下会触发该备选流；</P>
<P>3) 动作：系统在该备选流下会采取哪些动作；</P>
<P>4) 恢复：该备选流结束之后，该用例应如何继续执行。</P>
<P>备选流的描述格式可以与基本流的格式一致，也需要编号并以标题概述其内容，编号前可以加以字母前缀A(Alternative)以示与基本流步骤相区别。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2.3.3 用例场景</B></P>
<P>用例在实际执行的时候会有很多的不同情况发生，称之为用例场景；也可以说场景是用例的实例，我们在描述用例的时候要覆盖所有的用例场景，否则就有可能导致需求的遗漏。在用例规约中，场景的描述可以由基本流和备选流的组合来表示。场景既可以帮助我们防止需求的遗漏，同时也可以对后续的开发工作起到很大的帮助：开发人员必须实现所有的场景、测试人员可以根据用例场景来设计测试用例。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2.3.4 特殊需求</B></P>
<P>特殊需求通常是非功能性需求，它为一个用例所专有，但不适合在用例的事件流文本中进行说明。特殊需求的例子包括法律或法规方面的需求、应用程序标准和所构建系统的质量属性（包括可用性、可靠性、性能或支持性需求等）。此外，其他一些设计约束，如操作系统及环境、兼容性需求等，也可以在此节中记录。</P>
<P>需要注意的是，这里记录的是专属于该用例的特殊需求；对于一些全局的非功能性需求和设计约束，它们并不是该用例所专有的，应把它们记录在《补充规约》中。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2.3.5 前置和后置条件</B></P>
<P>前置条件是执行用例之前必须存在的系统状态，后置条件是用例一执行完毕后系统可能处于的一组状态。</P>
<P><A name=IDAU0T0C><SPAN class=atitle3>2.4 检查用例模型</SPAN></A><BR>用例模型完成之后，可以对用例模型进行检查，看看是否有遗漏或错误之处。主要可以从以下几个方面来进行检查：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>功能需求的完备性<BR>现有的用例模型是否完整地描述了系统功能，这也是我们判断用例建模工作是否结束的标志。如果发现还有系统功能没有被记录在现有的用例模型中，那么我们就需要抽象一些新的用例来记录这些需求，或是将他们归纳在一些现有的用例之中。 
<LI>模型是否易于理解<BR>用例模型最大的优点就在于它应该易于被不同的涉众所理解，因而用例建模最主要的指导原则就是它的可理解性。用例的粒度、个数以及模型元素之间的关系复杂程度都应该由该指导原则决定。 
<LI>是否存在不一致性<BR>系统的用例模型是由多个系统分析员协同完成的，模型本身也是由多个工件所组成的，所以我们要特别注意不同工件之前是否存在前后矛盾或冲突的地方，避免在模型内部产生不一致性。不一致性会直接影响到需求定义的准确性。 
<LI>避免二义性语义<BR>好的需求定义应该是无二义性的，即不同的人对于同一需求的理解应该是一致的。在用例规约的描述中，应该避免定义含义模糊的需求，即无二义性。</LI></UL>
<P><A name=IDAL1T0C><SPAN class=atitle2>3. 系统需求</SPAN></A><BR>RUP中根据FURPS+模型将系统需求分为以下几类：</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>功能(Functionality) 
<LI>可用性(Usability) 
<LI>可靠性(Reliability) 
<LI>性能(Performance) 
<LI>可支持性(Supportability) 
<LI>设计约束等</LI></UL>
<P>除了第一项功能性需求之外的其他需求都归之为非功能性需求。</P>
<P><A name=IDAZ1T0C><SPAN class=atitle3>3.1 需求工件集</SPAN></A><BR>用例模型主要用于描述系统的功能性需求，对于其他的非功能性需要用其他文档来记录。RUP中定义了如下的需求工件集合。</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>用例模型：记录功能性需求 
<UL>
<LI>用例图：描述参与者和用例之间的关系 
<LI>用例规约：描述每一个用例的细节信息</LI></UL>
<LI>补充规约：记录一些全局性的功能需求、非功能性需求和设计约束等 
<LI>词汇表：记录一些系统需求相关的术语</LI></UL>
<P>在实际应用中，除了这些工件之外，我们还可以根据实际需求灵活选用其他形式的文档来补充说明需求。并不是所有的系统需求都适保合用用例模型来描述的，如编译器，我们很难用用例方法来表述它所处理的语言的方法规则，在这种情况下，采用传统的BNF范式来表述更加合适一些。在电信软件行业中，很多电信标准都是采用SDL语言来描述的，我们也不必用UML来改写这些标准（UML对SDL存在着这样的兼容性），只需将SDL形式的电信标准作为需求工件之一，在其他工件中对其加以引用就可以了。总之，万万不可拘泥于用例建模的形式，应灵活运用各种方式的长处。</P>
<P><A name=IDAI2T0C><SPAN class=atitle3>3.2 补充规约</SPAN></A><BR>补充规约记录那些在用例模型中不易表述的系统需求，主要包括以下内容。</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>功能性<BR>功能性需求主要在用例模型中刻画，但是也有部分需求不适合在用例中表述。有些功能性需求是全局性的，适用于所有的用例，如出错处理、I18N支持等，我们不需要在所有的用例中描述这些功能性需求，只需要在补充规约中统一描述就可以了。 
<LI>可用性<BR>记录所有可用性相关的需求，如系统的使用者所需要的培训时间、是否应附合一些常见的可用性标准如Windows界面风格等。 
<LI>可靠性<BR>定义系统可靠性相关的各种指标，包括：<BR>
<UL>
<LI>可用性：指出可用时间百分比(xx.xx%)，系统处于使用、维护、降级模式等操作的小时数； 
<LI>平均故障间隔时间(MTBF)：通常表示为小时数，但也可表示为天数、月数或年数； 
<LI>平均修复时间(MTTR)：系统在发生故障后可以暂停运行的时间； 
<LI>精确度：指出系统输出要求具备的精密度（分辨率）和精确度（按照某一已知的标准）； 
<LI>最高错误或缺陷率：通常表示为bugs/KLOC（每千行代码的错误数目）或bugs/function-point（每个功能点的错误数目）。</LI></UL>
<LI>性能<BR>记录系统性能相关的各种指标，包括：<BR>
<UL>
<LI>对事务的响应时间（平均、最长）； 
<LI>吞吐量（例如每秒处理的事务数）； 
<LI>容量（例如系统可以容纳的客户或事务数）； 
<LI>降级模式（当系统以某种形式降级时可接受的运行模式）； 
<LI>资源利用情况：内存、磁盘、通信等。</LI></UL>
<LI>可支持性<BR>定义所有与系统的可支持性或可维护性相关的需求，其中包括编码标准、命名约定、类库、如何来对系统进行维护操作和相应的维护实用工具等。 
<LI>设计约束<BR>设计约束代表已经批准并必须遵循的设计决定，其中包括软件开发流程、开发工具、系统构架、编程语言、第三方构件类库、运行平台和数据库系统等等。</LI></UL>
<P><A name=IDAV3T0C><SPAN class=atitle3>3.3 词汇表</SPAN></A><BR>词汇表主要用于定义项目特定的术语，它有助于开发人员对项目中所用的术语有统一的理解和使用，它也是后续阶段中进行对象抽象的基础。</P>
<P><A name=IDA13T0C><SPAN class=atitle2>4. 调整用例模型</SPAN></A><BR>在一般的用例图中，我们只表述参与者和用例之间的关系，即它们之间的通讯关联。除此之外，我们还可以描述参与者与参与者之间的泛化(generalization)、用例和用例之间的包含(include)、扩展(extend)和泛化(generalization)关系。我们利用这些关系来调整已有的用例模型，把一些公共的信息抽取出来重用，使得用例模型更易于维护。但是在应用中要小心选用这些关系，一般来说这些关系都会增加用例和关系的个数，从而增加用例模型的复杂度。而且一般都是在用例模型完成之后才对用例模型进行调整，所以在用例建模的初期不必要急于抽象用例之间的关系。</P>
<P><A name=IDAB4T0C><SPAN class=atitle3>4.1 参与者之间的关系</SPAN></A><BR>参与者之间可以有泛化(Generalization)关系（或称为"继承"关系）。例如在需求分析中常见的权限控制问题（如下图所示），一般的用户只可以使用一些常规的操作，而管理员除了常规操作之外还需要进行一些系统管理工作，操作员既可以进行常规操作又可以进行一些配置操作。</P>
<P><A name=IDAI4T0C><B></B></A><BR><IMG height=271 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image020.gif" width=289 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>在这个例子中我们会发现管理员和操作员都是一种特殊的用户，他们拥有普通用户所拥有的全部权限，此外他们还有自己独有的权限。这里我们可进一步把普通用户和管理员、操作员之间的关系抽象成泛化(Generalization)关系，管理员和操作员可以继承普通用户的全部特性（包括权限），他们又可以有自己独有的特性（如操作、权限等）。这样可以显著减速少用例图中通讯关联的个数，简化用例模型，使之更易于理解。</P>
<P><A name=IDAW4T0C><B></B></A><BR><IMG height=270 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image022.gif" width=325 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P><A name=IDAC5T0C><SPAN class=atitle3>4.2 用例之间的关系</SPAN></A><BR>用例描述的是系统外部可见的行为，是系统为某一个或几个参与者提供的一段完整的服务。从原则上来讲，用例之间都是并列的，它们之间并不存在着包含从属关系。但是从保证用例模型的可维护性和一致性角度来看，我们可以在用例之间抽象出包含(include)、扩展(extend)和泛化(generalization)这几种关系。这几种关系都是从现有的用例中抽取出公共的那部分信息，然后通后过不同的方法来重用这部公共信息，以减少模型维护的工作量。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">4.2.1 包含(include)</B></P>
<P>包含关系是通过在关联关系上应用&lt;&lt;include&gt;&gt;构造型来表示的，如下图所示。它所表示的语义是指基础用例(Base)会用到被包含用例(Inclusion)，具体地讲，就是将被包含用例的事件流插入到基础用例的事件流中。</P>
<P><A name=IDAM5T0C><B></B></A><BR><IMG height=80 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image024.gif" width=393 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>包含关系是UML1.3中的表述，在UML1.1中，同等语义的关系被表述为使用(uses)，如下图。</P>
<P><A name=IDA05T0C><B></B></A><BR><IMG height=67 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image026.gif" width=333 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>在ATM机中，如果查询、取现、转帐这三个用例都需要打印一个回执给客户，我们就可以把打印回执这一部分内容提取出来，抽象成为一个单独的用例"打印回执"，而原有的查询、取现、转帐三个例都会包含这个用例。每当以后要对打印回执部分的需求进行修改时，就只需要改动一个用例，而不用在每一个用例都作相应修改，这样就提高了用例模型的可维护性。</P>
<P><A name=IDALAU0C><B></B></A><BR><IMG height=229 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image028.gif" width=417 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>在基础用例的事件流中，我们只需要引用被包含用例即可。</P>
<P>查询-基本事件流</P>
<P>1. 用户插入信用卡</P>
<P>2. 输入密码</P>
<P>3. 选择查询</P>
<P>4. 查看帐号余额</P>
<P>5. 包含用例"打印回执"</P>
<P>6. 退出系统，取回信用卡</P>
<P>在这个例子中，多个用例需要用到同一段行为，我们可以把这段共同的行为单独抽象成为一个用例，然后让其他的用例来包含这一用例。从而避免在多个用例中重复性地描述同一段行为，也可以防止该段行为在多个用例中的描述出现不一致性。当需要修改这段公共的需求时，我们也只需要修改一个用例，避免同时修改多个用例而产生的不一致性和重复性工作。</P>
<P>有时当某一个用例的事件流过于复杂时，为了简化用例的描述，我们也可以把某一段事件流抽象成为一个被包含的用例。这种情况类似于在过程设计语言中，将程序的某一段算法封装成一个子过程，然后再从主程序中调用这一子过程。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">4.2.2 扩展(extend)</B></P>
<P>扩展（extend）关系如下图所示，基础用例(Base)中定义有一至多个已命名的扩展点，扩展关系是指将扩展用例(Extension)的事件流在一定的条件下按照相应的扩展点插入到基础用例(Base)中。对于包含关系而言，子用例中的事件流是一定插入到基础用例中去的，并且插入点只有一个。而扩展关系可以根据一定的条件来决定是否将扩展用例的事件流插入基础用例事件流，并且插入点可以有多个。</P>
<P><A name=IDAFBU0C><B></B></A><BR><IMG height=66 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image030.gif" width=327 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>例如对于电话业务，可以在基本通话(Call)业务上扩展出一些增值业务如：呼叫等待(Call Waiting)和呼叫转移(Call Transfer)。我们可以用扩展关系将这些业务的用例模型描述如下。</P>
<P><A name=IDATBU0C><B></B></A><BR><IMG height=159 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image032.gif" width=356 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P><A name=IDAACU0C><B></B></A><BR><IMG height=250 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/2.jpg" width=637 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>在这个例子中，呼叫等待和呼叫转移都是对基本通话用例的扩展，但是这两个用例只有在一定的条件下（如应答方正忙或应答方无应答）才会将被扩展用例的事件流嵌入基本通话用例的扩展点，并重用基本通话用例中的事件流。</P>
<P>值得注意的是扩展用例的事件流往往可以也可抽象为基础用例的备选流，如上例中的呼叫等待和呼叫转移都可以作为基本通话用例的备选流而存在。但是基本通话用例已经是一个很复杂的用例了，选用扩展关系将增值业务抽象成为单独的用例可以避免基础用例过于复杂，并且把一些可选的操作独立封装在另外的用例中。</P>
<P><B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">4.2.3 泛化(generalization)</B></P>
<P>当多个用例共同拥有一种类似的结构和行为的时候，我们可以将它们的共性抽象成为父用例，其他的用例作为泛化关系中的子用例。在用例的泛化关系中，子用例是父用例的一种特殊形式，子用例继承了父用例所有的结构、行为和关系。在实际应用中很少使用泛化关系，子用例中的特殊行为都可以作为父用例中的备选流存在。</P>
<P><A name=IDASCU0C><B></B></A><BR><IMG height=148 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image034.gif" width=299 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>以下是一个用例泛化关系的例子，执行交易是一种交易抽象，执行房产交易和执行证券交易都是一种特殊的交易形式。</P>
<P>用例泛化关系中的事件流示例如下：</P>
<P><A name=IDABDU0C><B></B></A><BR><IMG height=312 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/3.gif" width=637 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P><A name=IDANDU0C><SPAN class=atitle3>4.3 调整用例模型</SPAN></A><BR>用例模型建成之后，我们可以对用例模型进行检视，看是否可以进一步简化用例模型、提高重用程度、增加模型的可维护性。主要可以从以下检查点(checkpoints)入手:</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>用例之间是否相互独立？如果两个用例总是以同样的顺序被激活，可能需要将它们合并为一个用例。 
<LI>多个用例之间是否有非常相似的行为或事件流？如果有，可以考虑将它们合并为一个用例。 
<LI>用例事件流的一部分是否已被构建为另一个用例？如果是，可以让该用例包含(include)另一用例。 
<LI>是否应该将一个用例的事件流插入另一个用例的事件流中？如果是，利用与另一个用例的扩展关系(extend)来建立此模型。 </LI></UL>
<P><A name=IDAYDU0C><SPAN class=atitle2>5. 管理用例模型复杂度</SPAN></A><BR>一般小型的系统，其用例模型中包含的参与者和用例不会太多，一个用例图就可以容纳所有的参与者，所有的参与者和用例也可以并存于同一个层次结构中。对于较复杂的大中型系统，用例模型中的参与者和用例会大大增加，我们需要一些方法来有效地管理由于规模上升而造成的复杂度。</P>
<P><A name=IDA4DU0C><SPAN class=atitle3>5.1 用例包</SPAN></A><BR>包(Package)是UML中最常用的管理模型复杂度的机制，包也是UML中语义最简单的一种模型元素，它就是一种容器，在包中可以容纳其他任意的模型元素（包括其他的包）。在用例模型中，我们可以用构造型(Sterotype)&lt;&lt;use case&gt;&gt;来扩展标准UML包的语义，这种新的包叫作用例包(Use Case Package)，用于分类管理用例模型中的模型元素。</P>
<P>我们可以根据参与者和用例的特性来对它们进行分类，分别置于不同的用例包管理之下。例如对于一个大型的企业管理信息系统，我们可以根据参与者和用例的内容将它们分别归于人力资源、财务、采购、销售、客务服务这些用例包之下。这样我们将整个用例模型划分成为两个层次，在第一层次我们看到的是系统功能总共分为五部分，在第二层次我们可以分别看到每一用例包内部的参与者和用例。</P>
<P><A name=IDAGEU0C><B></B></A><BR><IMG height=192 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image038.gif" width=272 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>一个用例模型需要有多少个用例包取决你想怎么样来管理用例模型的复杂度（包括参与者和用例的个数，以及它们之间的相互关系）。UML中的包其实就类似于文件系统中的目录，文件数量少的时候不需要额外的目录，文件数量一多就需要有多个目录来分类管理，同样一组文件不同的人会创建不同的目录结构来进行管理，关键是要保证在目录结构下每一个文件都要易于访问。同样的道理存在于用例建模之中，如何创建用例包以及用例包的个数取决于不同的系统和系统分析员，但要保证整个用例模型易于理解。</P>
<P><A name=IDATEU0C><SPAN class=atitle3>5.2 用例的粒度</SPAN></A><BR>我的系统需要有多少个用例？这是很多人在用例建模时会产生的疑惑。描述同一个系统，不同的人会产生不同的用例模型。例如对于各种系统中常见的"维护用户"用例，它里面包含了添加用户、修改用户信息、删除用户等操作，这些操作在该用例的事件流可以表述成为基本流的子事件流(subflow)。</P>
<P><A name=IDA0EU0C><B></B></A><BR><IMG height=88 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image040.gif" width=288 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>维护用户-基本事件流</P>
<P>该基本流由三个子事件流构成：</P>
<P>1) 添加用户子事件流<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">…</P>
<P>2) 修改用户 子事件流<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">…</P>
<P>3) 删除用户子事件流<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">…</P>
<P>但是你也可以根据该用例中的具体操作把它抽象成为三个用例，它所表示的系统需求和单个用例的模型是完全一样的。</P>
<P><A name=IDAWFU0C><B></B></A><BR><IMG height=189 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image042.gif" width=300 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>应该如何确定用例的粒度呢？在一次技术研讨会上，有人问起Ivar Jacoboson博士，一个系统需要有多少个用例？大师的回答是20个，当然他的意思是最好将用例模型的规模控制在几十个用例左右，这样比较容易来管理用例模型的复杂度。在用例个数大致确定的条件下，我们就很容易来确定用例粒度的大小。对于较复杂的系统，我们需要控制用例模型一级的复杂度，所以可以将复杂度适当地移往每一个用例的内部，也就是让一个用例包含较多的需求信息量。对于比较简单的系统，我们则可以将复杂度适度地曝露在模型一级，也就是我们可以将较复杂的用例分解成为多个用例。</P>
<P>用例的粒度不但决定了用例模型级的复杂度，而且也决定了每一个用例内部的复杂度。我们应该根据每个系统的具体情况，因时因宜地来把握各个层次的复杂度，在尽可能保证整个用例模型的易理解性前提下决定用例的大小和数目。</P>
<P><A name=IDAEGU0C><SPAN class=atitle3>5.3 用例图</SPAN></A><BR>用例图的主要作用是描述参与者和用例之间的关系，简单的系统中只需要有一个用例图就可以把所有的关系都描述清楚。复杂的系统中可以有多个用例图，例如每个用例包都可以有一个独立的用例图来描述该用例包中所有的参与者和用例的关系。</P>
<P>在一个用例模型中，如果参与者和用例之间存在着多对多的关系，并且他们之间的关系比较复杂，如果在同一个用例图中表述所有的参与者和用例就显得不够清晰，这时我们可创建多个用例图来分别表示各种关系。</P>
<P><A name=IDAMGU0C><B></B></A><BR><IMG height=265 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image044.gif" width=406 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>如果想要强调某一个参与者和多个用例的关系，你就可以以该参与者为中心，用一个用例图表述出该参与者和多个用例之间的关系。在这个用例图中，我们强调的是该参与者会使用系统所提供的哪些服务。</P>
<P><A name=IDA0GU0C><B></B></A><BR><IMG height=228 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image046.gif" width=308 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>如果想要强调某一个用例和多个参与者之间的关系，你就可以以该用例为中心，用一个用例图表述出该用例和多个参与者之间的关系。在这个用例图中，我们强调的是该用例会涉及到哪些参与者，或者说该用例所表示的系统服务有哪些使用者。</P>
<P><A name=IDAIHU0C><B></B></A><BR><IMG height=203 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/images/image048.gif" width=369 border=0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>总之在用例建模过程中，你可以根据自己的需要创建任意多个用例图，用不同的用例来强调参与者和用例之间不同的关系。但是最重要的是要考虑整个用例模型的可理解性，如果可以用一个用例图把意思表述清楚，就不要再用第二个，因为越是简洁的模型越易于理解。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>参与本文的<A href="http://www.rational-club.org/index.php?showtopic=270" target=new>讨论论坛</A><BR><BR>
<LI><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-usecase-atm/ATM.zip">样例代码</A><BR><BR>
<LI>Jeffrey Friedl, Mastering Regular Expressions, O'Reilly<BR><BR>
<LI>Mendel Cooper, Advanced Bash-Scripting Guide<BR><BR>
<LI>Michael Jang, Mastering Redhat 9<BR></LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>傅纯一，IBM中国有限公司软件部Rational中国区技术销售经理</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>]]></description>
</item><item>
<title><![CDATA[迭代化软件开发技术]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=1991</link>
<author>fancy_zh</author>
<pubDate>2005/1/17 12:43:58</pubDate>
<description><![CDATA[
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD><SPAN class=astitle>迭代化软件开发技术 </SPAN><SPAN class=atitle></SPAN></TD>
<TD width=8><IMG height=1 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=8 border=0></TD>
<TD vAlign=bottom align=right width=180><IMG height=1 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=180 border=0><BR><NOBR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR vAlign=bottom>
<TD vAlign=bottom></TD></TR></TBODY></TABLE></NOBR></TD>
<TD width=6><IMG height=1 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=6 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=5><IMG height=1 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=100 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=5><IMG height=8 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=100 border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD width=5><IMG height=1 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=5 border=0></TD>
<TD width="100%">
<TABLE cellSpacing=0 cellPadding=0 width=168 align=right border=0>
<TBODY>
<TR>
<TD width=8><IMG height=21 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=5></TD>
<TD width=160>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=160 bgColor=#000000 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD align=middle background=/developerWorks/cn/i/bg-gold.gif height=5><B>内容：</B></TD></TR>
<TR>
<TD width=160 bgColor=#666666 height=1><IMG height=1 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-id/index.shtml#IDAZLQIB">1. 传统开发流程的问题</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-id/index.shtml#IDAANQIB">2. 采用迭代化开发控制项目风险</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-id/index.shtml#IDARPQIB">3. 管理迭代化的软件项目</A></TD></TR>
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=160></TD></TR><!--Standard links for every dw-article-->
<TR>
<TD height=1><IMG height=5 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD><A href="http://www-900.ibm.com/developerWorks/cn/rational/r-id/index.shtml#rating">对本文的评价</A></TD></TR>
<TR>
<TD><IMG height=10 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=150 bgColor=#000000 colSpan=2 height=2><IMG height=2 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=160></TD></TR>
<TR>
<TD width=150 bgColor=#ffffff colSpan=2 height=2><IMG height=2 alt="" src="http://www-900.ibm.com/developerWorks/cn/i/c.gif" width=160></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><SPAN class=atitle2>IBM Rational 技术白皮书</SPAN><BR>傅纯一 IBM中国有限公司软件部Rational中国区技术销售经理<BR>2004 年 9 月 
<P></P>
<BLOCKQUOTE></BLOCKQUOTE>
<P><A name=IDAZLQIB><SPAN class=atitle2>1. 传统开发流程的问题</SPAN></A><BR>传统的软件开发流程是一个文档驱动的流程，它将整个软件开发过程划分为顺序相接的几个阶段，每个阶段都必需完成全部规定的任务（文档）后才能够进入下一个阶段。如必须完成全部的系统需求规格说明书之后才能够进入概要设计阶段，编码必需在系统设计完成之后才能够进行。这就意味着只有当所有的系统模块全部开发完成之后，我们才进行系统集成，对于一个由上百个模块组的复杂系统来说，这是一个非常艰巨而漫长的工作。</P>
<P><A name=IDAAMQIB><B></B></A><BR><IMG height=254 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-id/images/image002.gif" width=368 border=0 xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>随着我们所开发的软件项目越来越复杂，传统的瀑布型开发流程不断地暴露出以下问题：</P>
<UL xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>需求或设计中的错误往往只有到了项目后期才能够被发现例如：系统交付客户之后才发现原先对于需求的理解是错误的，系统设计中的问题要到测试阶段才能被发现。 
<LI>对于项目风险的控制能力较弱项目风险在项目开发较晚的时候才能够真正降低，往往是经过系统测试之后，才能确定该设计是否能够真正满足系统需求。 
<LI>软件项目常常延期完成或开发费用超出预算项目开发进度往往会被意外发生的问题所打乱，需要进行返工或其他一些额外的开发周期，造成项目延期或费用超支。 
<LI>项目管理人员专注于文档的完成和审核来估计项目的进展情况所以项目经理对于项目状态的估计往往是不准确的，当他回答系统已完成了80%的开发任务时，剩下20%的开发任务实际上消耗的是整个项目80%的开发资源。 </LI></UL>
<P>在传统的瀑布模型中，需求和设计中的问题是无法在项目开发的前期被检测出来的，只有当第一次系统集成时，这些设计缺陷才会在测试中暴露出来，从而导致一系列的返工：重新设计、编码、测试，进而导致项目的延期和开发成本的上升。</P>
<P><A name=IDAUMQIB><B></B></A><BR><IMG height=360 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-id/images/image004.gif" width=480 border=0 xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P><A name=IDAANQIB><SPAN class=atitle2>2. 采用迭代化开发控制项目风险</SPAN></A><BR>为了解决传统软件开发流程中的问题，我们建议采用迭代化的开发方法来取代瀑布模型。在瀑布模型中，我们要完成的是整个软件系统开发这个大目标。在迭代化的方法中，我们将整个项目的开发目标划分成为一些更易于完成和达到的阶段性小目标，这些小目标都有一个定义明确的阶段性评估标准。迭代就是为了完成一定的阶段性目标而所从事的一系列开发活动，在每个迭代开始前都要根据项目当前的状态和所要达到的阶段性目标制定迭代计划，整个迭代过程包含了需求、设计、实施（编码）、部署、测试等各种类型的开发活动，迭代完成之后需要对迭代完成的结果进行评估，并以此为依据来制定下一次迭代的目标。</P>
<P><A name=IDAHNQIB><B></B></A><BR><IMG height=217 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-id/images/image005.gif" width=413 border=0 xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>与传统的瀑布式开发模型相比较，迭代化开发具有以下特点：</P>
<UL xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>允许变更需求<BR>需求总是会变化，这是事实。给项目带来麻烦的常常主要是需求变化和需求"蠕变"，它们会导致延期交付、工期延误、客户不满意、开发人员受挫。通过向用户演示迭代所产生的部分系统功能，我们可以尽早地收集用户对于系统的反馈，及时改正对于用户需求的理解偏差，从而保证开发出来的系统真正地解决客户的问题。 
<LI>逐步集成元素<BR>在传统的项目开发中，由于要求一下子集成系统中所有的模块，集成阶段往往要占到整个项目很大比例的工作量（最高可达40%），这一阶段的工作经常是不确定并且非常棘手。在迭代式方法中，集成可以说是连续不断的，每一次迭代都会增量式集成一些新的系统功能，要集成的元素都比过去少得多，所以工作量和难度都是比较低的。 
<LI>尽早降低风险<BR>迭代化开发的主要指导原则就是以架构为中心，在早期的迭代中所要解决的主要问题就是尽快确定系统架构，通过几次迭代来尽快地设计出能够满足核心需求的系统架构，这样可以迅速降低整个项目的风险。等到系统架构稳定之后，项目的风险就比较低了，这个时候再去实现系统中尚未完成的功能，进而完成整个项目。 
<LI>有助于提高团队的士气<BR>开发人员通过每次迭代都可以在短期内看到自己的工作成果，从而有助于他们增强信心，更好地完成开发任务。而在非迭代式开发中，开发人员只有在项目接近尾声时才能看到开发的结果，在此之前的相当长时间，大家还是在不确定性中摸索前近。 
<LI>生成更高质量的产品<BR>每次迭代都会产生一个可运行的系统，通过对这个可运行系统进行测试，我们在早期的迭代中就可以及时发现缺陷并改正，性能上的瓶颈也可以尽早发现并处理。因为在每次迭代中总是不断地纠正错误，我们可以得到更高质量的产品。 
<LI>保证项目开发进度<BR>每次迭代结束时都会进行评估，来判断该次迭代有没有达到预定的目标。项目经理可以很清楚地知道有哪些需求已经实现了，并且比较准确地估计项目的状态，对项目的开发进度进行必要的调整，保证项目按时完成。 
<LI>容许产品进行战术改变<BR>迭代化的开发具有更大的灵活性，在迭代过程中可以随时根据业务情况或市场环境来对产品的开发进行调整。例如为了同现有的同类产品竞争，可以决定采用抢先竞争对手一步的方法，提前发布一个功能简化的产品。 
<LI>迭代流程自身可在进行过程中得到改进和精炼<BR>一次迭代结束时的评估不仅要从产品和进度的角度来考察项目的情况，而且还要分析组织和流程本身有什么待改进之处，以便在下次迭代中更好地完成任务。 </LI></UL>
<P><A name=IDAWOQIB><B></B></A><BR><IMG height=360 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-id/images/image007.gif" width=480 border=0 xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>迭代化方法解决的主要是对于风险的控制问题，从下图可以看出，传统的开发流程中系统的风险要到项目开发的后期（主要是测试阶段）才能够被真正降低。而迭代化开发中的风险，可以在项目开发的早期通过几次迭代来尽快地解决掉。在早期的迭代中一旦遇到问题，如某一个迭代没有完成预定的目标，我们还可以及时调整开发进度以保证项目按时完成。一般到了项目开发的后期（风险受控阶段），由于大部分高风险的因素（如需求、架构、性能等）都已经解决，这时候只需要投入更多的资源去实现剩余的需求即可。这个阶段的项目开发具有很强的可控性，从而保证我们按时交付一个高质量的软件系统。</P>
<P><A name=IDAEPQIB><B></B></A><BR><IMG height=360 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-id/images/image009.gif" width=480 border=0 xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>迭代化开发不是一种高深的软件工程理论，它提供了一种控制项目风险的非常有效的机制。在日常的工作我们也经常地应用到这一基本思想，如对于一个非常大型的工程项目，我们经常会把它分为几期来分步实施，从而把复杂的问题分解为相对容易解决的小问题，并且能够在较短周期内看到部分系统实现的效果，通过尽早暴露问题来帮助我们及早调整我们的开发资源，加强项目进度的可控程度，保证项目的按时完成。</P>
<P><A name=IDARPQIB><SPAN class=atitle2>3. 管理迭代化的软件项目</SPAN></A><BR>当我们在实际工作中实践迭代化思想时，Rational统一开发流程RUP(Rational Unified Process)可以给予我们实践的指导。RUP是一个通用的软件流程框架，它是一个以架构为中心、用例驱动的迭代化软件开发流程。RUP是从几千个软件项目的实践经验中总结出来的，对于实际的项目具有很强的指导意义，是软件开发行业事实上的行业标准。</P>
<P><A name=IDAXPQIB><SPAN class=atitle3>3.1 软件开发的四个阶段</SPAN></A><BR>在RUP中，我们把软件开发生命周期划分为四个阶段，每个阶段的结束标志就是一个主要的里程碑（如下图所示）。</P>
<P><A name=IDA4PQIB><B></B></A><BR><IMG height=156 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-id/images/image010.gif" width=406 border=0 xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>这四个阶段主要是为了达到以下阶段性的目标里程碑：</P>
<UL xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>先启(Inception)：确定项目开发的目标和范围 
<LI>精化(Elaboration)：确定系统架构和明确需求 
<LI>构建(Construction)：实现剩余的系统功能 
<LI>产品化(Transition)：完成软件的产品化工作，将系统移交给客户 </LI></UL>
<P>每个目标里程碑都是一个商业上的决策点，如先启阶段结束之后，我们就要决定这个项目是否可行、是否要继续做这个项目。每一个阶段都是由里程碑来决定的，判断一个阶段是否结束的标志就是看项目当前的状态是否满足里碑中所规定的条件。</P>
<P>从这种阶段划分模式中可以看出，项目的主要风险集中在前两个阶段。在精化阶段中经过几次迭代后，我们要为系统建立一个稳定的架构，在此之后再实现更多的系统需求时，不再需要对该架构进行修改。同时，在精化阶段中，我们通过迭代来不断地收集用户的需求反馈，便得系统的需求逐步地明确和完整。</P>
<P><A name=IDAVI3IB><SPAN class=atitle3>3.2 关于开发资源的分配</SPAN></A><BR>基于RUP风险驱动的迭代化开发模式，我们只需要在项目的先启阶段投入少量的资源，对项目的开发前景和商业可行性进行一些探索性的研究。在精化阶段再投入多一些的研发力量来实现一些与架构相关的核心需求，逐步地把系统架构搭建起来。等到这两个阶段结束之后，项目的一些主要风险和问题也得到了解决，这时候再投入整个团队进行全面的系统开发。等到产品化阶段，主要的开发任务已经全部完成，项目不再需要维持一个大规模的开发团队，开发资源也可以随之而减少。在项目开发周期中，开发资源的分配可以如下图所示。</P>
<P><A name=IDA2I3IB><B></B></A><BR><IMG height=165 alt="" src="http://www-900.ibm.com/developerWorks/cn/rational/r-id/images/image011.gif" width=413 border=0 xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></P>
<P>这样安排可以最充分有效地利用公司的开发资源，缓解软件公司对于人力资源不断增长的需求，从而降低成本。另外一方面，由于前两个阶段（先启和精化）的风险较高，我们只是投入部分的资源，一旦发生返工或是项目目标的改变，我们也可以将资源浪费降到最低点。在传统的软件开发流程中，对于开发资源的分配基本上是贯穿整个项目周期而不变的，资源往往没有得到充分有效地利用。</P>
<P>基于这种资源分配模式，一个典型的项目在项目进度和所完成的工作量之间的关系可能如下表中的数据所示。</P>
<TABLE width=300 border=1>
<TBODY>
<TR>
<TD>&nbsp;</TD>
<TD>先启</TD>
<TD>精化</TD>
<TD>构建</TD>
<TD>产品化</TD></TR>
<TR>
<TD>工作量</TD>
<TD>~5%</TD>
<TD>20%</TD>
<TD>65%</TD>
<TD>10%</TD></TR>
<TR>
<TD>进度</TD>
<TD>10%</TD>
<TD>30%</TD>
<TD>50%</TD>
<TD>10%</TD></TR></TBODY></TABLE>
<P><A name=IDA5J3IB><SPAN class=atitle3>3.3 迭代策略</SPAN></A><BR>关于迭代计划的安排，通常有以下四种典型的策略模式：</P>
<UL xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>增量式(Incremental)<BR>这种模式的特点是项目架构的风险较小（往往是开发一些重复性的项目），所以精化阶段只需要一个迭代。但项目的开发工作量较大，构建阶段需要有多次迭代来实现，每次迭代都在上一次迭代的基础上增加实现一部分的系统功能，通过迭代的进行而逐步实现整个系统的功能。 
<LI>演进式(Evolutionary)<BR>当项目架构的风险较大时（从未开发过类似项目），需要在精化阶段通过多次迭代来建立系统的架构，架构是通过多次迭代的探索，逐步演化而来的。当架构建立时，往往系统的功能也已经基本实现，所以构建阶段只需要一次迭代。 
<LI>增量提交(Incremental Delivery)<BR>这种模式的特点产品化阶段的迭代较多，比较常见的例子是项目的难度并不大，但业务需求在不断地发生变化，所以需要通过迭代来不断地部署完成的系统；但同时又要不断地收集用户的反馈来完善系统需求，并通过后续的迭代来补充实现这些需求。应用这种策略时要求系统架构非常稳定，能够适应满足后续需求变化的要求。 
<LI>单次迭代(Grand Design) <BR>传统的瀑布模型可以看作是迭代化开发的一个特例，整个开发流程只有一次迭代。但这种模式有一个固有的弱点，由于它对风险的控制能力较差，往往会在产品化阶段产生一些额外的迭代，造成项目的延误。 </LI></UL>
<P>这几种迭代策略只是一些典型模式的代表，实际应用中应根据实际情况灵活应用，最常见的迭代计划往往是这几种模式的组合。</P>
<P><A name=IDAXK3IB><SPAN class=atitle3>3.4 制定项目开发计划</SPAN></A><BR>在迭代化的开发模式中，项目开发计划也是随着项目的进展而不断细化、调整并完善的。传统的项目开发计划是在项目早期制定的，项目经理总是试图在项目的一开始就制定一个非常详细完善的开发计划。与之相反，迭代开发模式认为在项目早期只需要制定一个比较粗略的开发计划，因为随着项目的进展，项目的状态在不断地发生变化，项目经理需要随时根据迭代的结果来对项目计划进行调整，并制定下一次迭代的详细计划。</P>
<P>在RUP中，我们把项目开发计划分为以下三部分：</P>
<UL xmlns:dw="http://www.ibm.com/developerworks/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LI>项目计划<BR>确定整个项目的开发目标和进度安排，包括每一个阶段的起止时间段。 
<LI>阶段计划<BR>当前阶段中包含有几个迭代，每一次迭代要达到的目标以及进度安排。 
<LI>迭代计划<BR>针对当前迭代的详细开发计划，包括开发活动以及相关资源的分配。 </LI></UL>
<P>项目开发计划也是完全体现迭代化的思想，每次迭代中项目经理都会根据项目情况来不断地调整和细化项目开发计划。迭代计划是在对上一次迭代结果进行评估的基础上制定的，如果上一次迭代达到了预定的目标，那么当前迭代只需要解决剩下的问题；如果上一次迭代中留有一些问题还没有解决，则当前迭代还需要继续去解决这些问题。所以必须注意，迭代是不能重叠的，即你还没有完成当前迭代时，你决不能进入下一迭代，因为下一次迭代的计划是根据当前迭代的结果而制定的。</P></TD></TR></TBODY></TABLE>]]></description>
</item><item>
<title><![CDATA[软件过程规范]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=1377</link>
<author>fancy_zh</author>
<pubDate>2004/12/29 8:44:35</pubDate>
<description><![CDATA[软件还真是难做，软件过程还是应该有，规范也必须有，昨天听讲座使用C++Test检测代码规范，好像比以前进步了不少，不过代码规范了，其他环节也得规范，所谓规范，不但要制定出来而且还要有可操作性，有时人工很难将各种规范执行到位，比如代码规范，以前也有，但只能是靠大家自觉遵守，现在有了工具，不遵守就通不过（工具可不讲人情^_^），在人类社会的发展过程中，工具起到了重要的推动作用，软件工程也不例外，有了过程规范，还需要一些工具的支持，才能达到预想的效果，做到事半功倍。]]></description>
</item><item>
<title><![CDATA[毕业生就业问答专栏户口问题]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=1168</link>
<author>fancy_zh</author>
<pubDate>2004/12/21 9:15:19</pubDate>
<description><![CDATA[
<DIV align=center><FONT color=#000000 size=3><B class=title>毕业生就业问答专栏户口问题</B></FONT> </DIV>
<P align=left><FONT color=#000000 size=2><SPAN class=content>
<DIV align=center>
<P align=center><FONT size=2>&nbsp;</P></FONT>
<P align=left><FONT size=2>问：我是一名天津应届毕业生，日前一家北京国企准备接收我，答应给我解决户口。我想咨询如下问题，希望您能给予解答：<BR>1、北京是否有规定：非北京生源到北京工作后（或取得户口后），三年之内不许跳槽。 <BR>2、户口问题应于何时解决？适用期后还是马上就解决？ <BR>3、协议是否应在试用期之前签定？ <BR>4、外国高新技术产业是否有能力解决户口？ <BR><BR>答： 现就您咨询的上述问题一一作答，希望对您能有所帮助。 <BR><BR>1、您提到的该规定并不存在，服务期限一般通过劳动合同来约定。 <BR><BR>2、户口应当在您到该单位工作后就解决，但是办理有关手续，会需要一定的时间。 <BR><BR>3、协议应当在试用期之前签订，试用期包括在合同期之内。 <BR><BR>4、应当说北京的所有具有法人资格的企业都能解决户口，但是，不同性质的企业在申请户口指标时拥有的机会有大有小。一般说、国有企业、集体企业、股份制企业的机会更大。 </FONT></P>
<P align=left><FONT size=2>问：我是外地生源，北京一家外企要和我签约，那我现在可不可以将档案提出，而将户口打回原籍？户口和档案现在可不可以分开？谢谢！<BR><BR>答：政策规定，应届毕业生不得私自到外商驻京机构谋职，更不允许中止学业到外商办事机构工作。应届毕业生应持学校的推荐信，通过每年特定举办的招聘会与参会的外商直接面谈谋职。如被外商录用，毕业生应持学校的推荐信、外商录用信件等到5家外事服务机构办理手续。外事服务机构负责与所属院校协商，综合平衡，纳入国家统分计划。凡招用应届毕业生的外商办事机构，应准备交纳一定的高等教育培养费。<BR><BR>不知道你的具体情况如何。据我推测，你应该属于申请不就业的范围：先向学校提出申请，经学校主管毕业生就业部门批准并报北京市教委备案后，将户粮关系及档案材料转至家庭所在地，按照失业人员对待。国家不再负责派遣问题。然后再将档案迁至北京市的人才服务中心。在程序上应该等到7月办理毕业生的离校手续时才能转户口档案。<BR><BR>户口和档案是可以分开的。比如很多人辞职后在外地打工，可以把档案放在人才而户口不必迁移。 </FONT></P>
<P align=left><FONT size=2>问：<B>错过改派期后如何落实户口？</B>我是2000年的毕业生，由于意向单位的实际情况与当初提供的不符，所以在试用期（三个月）内（到期前2天）我办理了离职，而该单位建议办改派，于是我拿着户口粮食转移证明（毕业时学校开出）找到另一家单位，由于这之间的耽误，致使错过了本市的改派期，因此我的户口没有落下，本市人事局要求原单位开具落户证明方可为我办理户口，而原单位以已经离职为由，不予开具，不知我该怎么办？　　我的户口在这样的情况下可不可以挂靠到本市外的人才市场（本市人才市场无此服务）？ <BR><BR>答： 您好！您的问题确实比较麻烦，由于您在试用期内已提出离职，原单位有权拒绝开具证明，因此我建议您能尽快找到一家有落户指标的单位，试试户口能否落下。如果不能，其结果可能是打回原籍。至于您提到的将户口挂靠到本市外的的人才的问题，我想前提是：您必须将户口落到该人才市场所在地，否则，人才市场是不会接纳您的户粮关系的。 </FONT></P>
<P align=left><FONT size=2>问：我想问一下把户口放在人才市场上和放在用人单位有什么差别?<BR><BR>答：不知你生源所在地与接收单位所在地是否相同？一般情况下，不是你想将户口落在哪儿就落在那儿的，如果你是本地生源，可以将户口迁回家或放在单位。如果是外地生源，往往是放在单位集体户或单位在人才市场开的集体户。<BR><BR>问：你好，我要联系了一家外企，公司说将户口和档案放在外企服务集团。我是应届硕士，他们说三年就可得到北京正式户口，是这样的吗？另外，一天晚上有人打电话问我买户口吗？我不知道是怎么回事？户口还能买吗？谢谢您，希望您能解惑。</FONT></P>
<P align=left><FONT size=2>答：你好，理论上讲研究生毕业去国家规定的服务范围，并通过办工作寄住证，在北京单位工作三年以上的应该可以获得户口。 <BR>另外户口是不能买卖的。一切以法律政策为主，以免上当受骗。<BR>获得户口的前提是接收你的用人单位已获得了从人事部门批准的进京户口指标。<BR><BR>问：请问老师,不通过学校出国就业我的户口可以放在哪里? 可不可以直接放到人才市场托管? 如果等着学校把户籍打回原籍再出去要给有关方面赔款吗?<BR><BR>答：对于有出国意向的同学，最好要么按照学校规定通过学校办理护照，要么到单位工作一个阶段后在单位办理护照而后出国。<BR>不在学校申请出国，就应该参加就业。落实单位，办理落户和档案保管手续后，请单位为自己办理护照，高等教育培养费直接交市教委出国留学审核办公室；如果将户籍退回原籍办出国，也要向当地教委缴纳高等教育培养费。<BR>　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　03/22<BR>-------------------------------------------------------------------------------------------------- </FONT></P>
<P align=left><FONT size=2>问：我出国手续办好，然后去注销户口， 那我最后户口到那里了？<BR><BR>答：国内的户口暂时就没有了，因为你已注销了户口呀。但今后回国后，可到注销户口的警署办理户口恢复。<BR>:</FONT></P>
<P align=left><FONT size=2>问：请问如果我将户口转到上海我舅舅的户口上，是不是可以不进入单位的集体户口?谢谢!<BR><BR>答：经批准进沪就业的非上海生源在毕业离校时，户口迁往地可有多种选择，并不一定要迁入单位集体户口，可迁往<BR>1.单位集体户口；<BR>2.上海市高校毕业生就业指导中心的集体户口（在单位没有集体户口的前提下）；<BR>3.落在直系亲属户口所在地警署（需经亲属和所在地警署同意）；<BR>4.如果已购房，可落在房产所在地警署；<BR>5.如果父母一方户口已进沪，可落在父母一方户口所在地；<BR>6.如果配偶户口在上海，可落在配偶户口所在地。<BR>具体的操作一切按有关政策办理。<BR><BR>问：<B>是否可以从原单位里直接将集体户口转过去？</B>我是2000年交大毕业的本科生，现在已经从原单位辞职跳槽到另一家公司。由于没满一年，我的集体户口有些问题，请问我是否可以从原单位里直接将集体户口转过去？还有在什么情况下公司可以直接把我的户口和档案打回原籍呢？ </FONT></P>
<P align=left><FONT size=2>答：如果和原单位已解除劳动合同，可以请原单位将户口、档案关系转到新单位（如果新单位有集体户口）或地区人才市场（由新单位委托保管）。如果没有和原单位就劳动合同解除达成共识，私自离职或跳槽，原单位可以要求上海市教委将你的户口行政关系退回生源所在地。<BR>　　　　　　　　　　　　　　　　　　　　</FONT></P>
<P align=left><FONT size=2>问：老师：您好！我是今年毕业的研究生，我想问您几个关于工作方面的问题：<BR><BR>1。我找了几家公司说是将我的户口落在海淀人才市场，这说明他们公司没有人事权对吗？落在人才市场与落在那些事业单位的有什么区别？<BR>2。户口落在海淀人才市场是否我的户口就是集体户口？假如我在合同期内跳槽我的户口和档案还在海淀吗？还有户口跟档案是怎么回事？是不是两者可以不同时放在一起？<BR><BR>答：1、一般京外生源都是落户在单位的集体户口。毕业生到各种非公有制经济性质的企事业单位就业，该单位的人事档案关系应当是挂靠在政府人事部门所属的人才服务机构。经挂靠的人才机构盖章同意接收该毕业生后，学校才能为该毕业生办理就业有关手续。户口存放在人才与一般的城市户口没有任何差别。<BR></FONT></P>
<P align=left><FONT size=2>人才服务中心开办的集体户口业务，主要针对以下三种人群：不具备建立集体户口条件的单位的流动人员（有北京市户口）；不具备落户条件的单位（包括国营、集体、三资、合资、外资以及民营企业）引进的外地专业人才，经北京市人事局批准落户北京，而又暂时没有住房的；毕业后留京的应届毕业生。 <BR><BR>2、一般来说，如果在合同期内跳槽，应该交纳一定的违约金（劳动合同中往往有相应规定，各单位不同，有的单位还规定工作不满一年就跳槽，户口打回原籍）。在这种情况下，如原单位不再负责保管你的档案和户口，你的可以开具证明，将档案和户口迁到新单位或者你希望放置的人才中心（交纳一定的档案管理费）。户口和档案是可以分开的，比如很多人辞职后在外地打工，可以把档案放在人才而户口不必迁移。但是一般规定办理集体户口的流动人员，其档案必须在人才服务中心，档案与户口不能分离。 </FONT></P>
<P align=left><FONT size=2>问：<B>我可以把户口落在我哥哥的户口上吗？</B>我是一名即将毕业的大学生。现有一个问题想请教你。我想把户口留在北京，可学校的名额很少。我的亲哥哥，他有北京户口，我能把户落在他的户口上吗？是不是我哥哥必须有户口本而不是集体户，我才能把户落在他的户口上？像我这种情况，落户的话还应该有什么手续？ </FONT></P>
<P align=left><FONT size=2>答： 您好！我非常遗憾地告诉您，您将户口落在哥哥那里是行不通的。因为，根据户口管理规定，落户北京的前提是，有用人单位接受，且该单位有经过人事部门批准的留京户口指标，您才可具有北京户口。有了北京户口后，您才有权将自己的户口落在哥哥那里，但您哥哥也应当立户。因此，要落户北京您还得找到一个用人单位接收。 <BR><BR></FONT></P>
<P align=left><FONT size=2>问：<B>户口落京有哪几种途径？</B>我目前在西安工作，并且也办理了西安长住户口，过段时间我将长期在北京工作，我想把我的户口落在北京，我想知道有哪几种途径可以户口落在北京？ </FONT></P>
<P align=left><FONT size=2>答：您好！就我所了解的来说，要落户北京有两条途径：<BR></FONT></P>
<P align=left><FONT size=2>一种是按照正常工作调动的方式来解决户口，这也就是说，您找到了一个用人单位，该单位有从人事部门批准的进京户口指标，然后由该单位向现单位发出商调函，将您调到北京，以此来解决户口问题； </FONT></P>
<P align=left><FONT size=2>另一种属于北京对外地人才的优惠政策，如果您属于“双高”人才，即高职称或高学历人才，在北京工作一定时间后，您可以申请将户口调到北京。<BR><BR><BR>问：我是刚毕业的博士,到一家单位工作了半年,现在想离开.请问,若现在离开原单位如何处理我的户口和档案,是否跟本科生一样,打回原籍?国家有何规定？谢谢！<BR></FONT></P>
<P align=left><FONT size=2>答：如果已经落户，按照在职人员调整。一个原则：就是必须处理好与原单位的合同问题。 </FONT></P>
<P align=left><FONT size=2>问：<B>我可以通过朋友的公司将户口落在北京吗？</B>我是今年即将毕业生的研究生，我有一朋友在北京中关村成立了一公司，我想毕业后到我这个朋友的公司工作，他的公司是去年初成立的，我可以从学校拿到派遣证，我是否可以持派遣证把户口落到北京？谢谢！ </FONT></P>
<P align=left><FONT size=2>答： 如果你是非北京生源的北京毕业生，并且你朋友的公司属于中关村科技园区的高新技术企业，你就可以将户口留在北京； 刚刚实施不久的<B>《中关村科技园区条例》</B>规定：凡本市行政区域内的高等学校、科研机构的应届毕业生受聘于中关村科技园区内的高新技术企业，可以直接办理本市常住户口。还有最新出台的<B>《北京市2001年普通高等学校毕业生就业工作意见》</B>中明确规定：对于中关村科技园区的高新技术企业引进接收北京地区非北京生源本科毕业生不做数量和专业限制。 这就意味着所有中关村科技园区的高新技术企业只要需要人才，均可不受进京指标的限制，广泛纳贤，并能为其解决户口问题。</FONT></P>
<P align=left><FONT size=2>但如果你是非北京生源的外地毕业生，您将户口落在北京的前提是有用人单位接收，并且该用人单位已获得了从人事部门批准的进京户口指标。如果您朋友的单位能获得进京指标，您才可将户口落在北京。<BR><BR>问： <B>没有北京户口会有何影响？</B>我于2001年7月即将本科毕业。现在有一家在北京的外资企业要与我签约。对方是一家在中关村的高科技企业，我想到了那里能得到很好的发展，而且薪资水平也很高，因此我很想去。但这家公司不能将我的户口落在北京。这样的情况下，我毕业后户口将如何处理？在北京如果没有户口会有什么样的影响？多谢！ </FONT></P>
<P align=left><FONT size=2>答： 如果您要在北京发展，最好还是找一个有进京户口指标的单位，或者是属于中关村高新技术企业的公司，将你的户口落在北京。因为在中国目前情况下，户口对一个人的影响很大，从招工招聘到员工保险福利，从孩子户口到入托上学，甚至买房，户口的重要性无处不在。但是如果您富有闯劲而有自信，您不妨舍弃户口，在北京拼搏，有所成就，因为北京对有能力的人会最终敞开绿灯的。另外北京没有户口的打工学子多达几万人数，一样干事业，所以如果你不介意户口，在北京也一样可以发展。何况，中国的户口限制最终也将被打破。 </FONT></P>
<P align=left><FONT size=2>问：到中西部就业户口可留在上海吗?<BR>答： 去中西部就业户口经录用单位同意，可保留在上海 <BR><BR>问：我是山西师范学院的应届毕业生, 想在北京就业, 并且想能有北京户口, 这样可以吗?<BR></FONT></P>
<P align=left><FONT size=2>答：山西师范学院属于省属院校, 按常规制度应该不允许跨省择业,应首先在省内教育系统择业。所以， 按常规， 不可能获得北京户口。<BR><BR><BR>问：请问李老师，硕士生找外企北京户口是不是绝对没问题？<BR>答：不是说绝对没问题，因为许多外企没有户口指标，国家鼓励到高新技术企业工作。<BR></FONT></P>
<P align=left><FONT size=2><BR>问：去IBM可以解决户口吗？<BR>答：这个问题需要参加IBM的招聘会，了解他们的具体人才政策。 <BR></FONT></P>
<P align=left><FONT size=2><BR>问：那么如果没有户口到底会带来什么影响？<BR>答： 如果没有户口意味着你在这个城市没有获得户籍管理上的认可。对于你将来自由流动可能会有一些限制，因为一般情况下许多单位招聘社会人员都需要有本地户口。 </FONT></P>
<P align=left><FONT size=2><BR>问；户口与档案能否分开？<BR>答： 户口和档案是可以分开的比如很多人辞职后在外地打工， 可以把档案放在人才而户口不必迁移。</FONT></P>
<P align=left><FONT size=2><BR>问：李老师，那么没有户口对购房、子女入学之类的影响如何呢？还有别的吗？<BR>答：如果没有户口对购房、子女入学是有一定影响的。主要体现在要多花一些钱， 并且有的房子是买不到的 。比如康居工程这样的房子。</FONT></P>
<P align=left><FONT size=2><BR>问：李老师，北京的60多家高新技术企业不受户口数量限制,是吗?<BR></FONT></P>
<P align=left><FONT size=2>答： 是的 北京优惠高新技术企业的人才挑选。</FONT></P>
<P align=left><FONT size=2><BR>问：是不是如果是硕士以上或硕士，不分工作性质，理论上就可以拿到北京户口。 如果本科的话，就必须是从事高新行业的工作，并通过办工作寄住证在北京工作三年以上， 才从理论上可拿到户口。 <BR></FONT></P>
<P align=left><FONT size=2>答：理论上讲研究生毕业去国家规定的服务范围，并通过办工作寄住证在北京工作三年以上内的北京单位工作应该可以获得户口。 </FONT></P>
<P align=left><FONT size=2><BR>问：如果工作不满一年就跳槽，户口是不是要打回原籍？ <BR></FONT></P>
<P align=left><FONT size=2>答：有的单位是这样。<BR><BR>问：李老师，假如我的单位无法解决我的北京市户口问题，而我不想我的档案随户口被一起打回家乡，我该如何做？<BR></FONT></P>
<P align=left><FONT size=2>答： 你只能选择纯粹为了就业或者纯粹为了户口。<B><BR></B><BR>问：李老师, 我看到有的单位招聘时写到解决集体户口, 这是怎么回事?<BR></FONT></P>
<P align=left><FONT size=2>答： 一般情况下，刚刚毕业的学生如果没有结婚到单位后办理的都是集体户口。<BR><BR>问：李老师，如果不参加分配，户口档案放在那儿？ <BR></FONT></P>
<P align=left><FONT size=2>答： 如果你不参加就业，应该向学校毕业生就业主管部门提出申请，由学校毕业生就业主管部门根据当年的毕业生就业政策把你的户口档案关系转回家庭所在地。</FONT></P>
<P align=left><FONT size=2>问：李老师，如果自己在北京有亲戚，也就是说那里可以接收自己的户口，这可以吗？ <BR></FONT></P>
<P align=left><FONT size=2>答：这需要你本人和用人单位商妥。</FONT></P>
<P align=left>&nbsp;</P>
<P align=left></P>
<P align=left></P></DIV></SPAN></FONT>]]></description>
</item><item>
<title><![CDATA[下载]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=1112</link>
<author>fancy_zh</author>
<pubDate>2004/12/20 8:48:35</pubDate>
<description><![CDATA[<P>昨天到学校gf的宿舍下载东西（公司有下载限制），结果在xml中国论坛下载XMLSpy2004奇快无比，达到了420k/s莫非xml中国论坛在教育网里有镜像，^_^，反正很爽的说，不过XMLSpy2004与我原来用的XMLSpy5没什么变化，失望ing。</P>]]></description>
</item><item>
<title><![CDATA[差点被我遗忘了：）]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=1034</link>
<author>fancy_zh</author>
<pubDate>2004/12/17 9:52:05</pubDate>
<description><![CDATA[差点忘了这个地方，今天收到Tom的邮件免费申请blog，才又想起这个地方，^_^，以后多来浇浇水，希望不要成为一个被我遗忘的角落。]]></description>
</item><item>
<title><![CDATA[第一个blog]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=fancy_zh&amp;id=970</link>
<author>fancy_zh</author>
<pubDate>2004/12/14 16:23:48</pubDate>
<description><![CDATA[我的第一个blog，哈哈，不太喜欢写东西，希望以后能坚持下去]]></description>
</item>
</channel>
</rss>