﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-我的ITblog我作主　　关注→　『伊波拉』→　测试　SzDlinXie- ITblog　　  　　   -文章分类-项目测试管理</title><link>http://www.cnitblog.com/szdlinxie/category/4518.html</link><description>·√·  本ITblog站点记录相关的软件技术文档、网络技术杂志、测试技术杂谈等技术文档的管理站点.联系方式：MSN：dowling@sunlike.cn   QQ:94595885</description><language>zh-cn</language><lastBuildDate>Sat, 01 Oct 2011 02:15:00 GMT</lastBuildDate><pubDate>Sat, 01 Oct 2011 02:15:00 GMT</pubDate><ttl>60</ttl><item><title>IBM Rational ClearCase 视图全攻略</title><link>http://www.cnitblog.com/szdlinxie/articles/20864.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Wed, 20 Dec 2006 09:18:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20864.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20864.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20864.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20864.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<b>IBM Rational ClearCase 视图全攻略<br /><div class="daxiao14" align="left"><p class="main"><strong>1  本文简介</strong></p><p class="main"> Rational ClearCase 作为一款功能强大的软件配置管理（ SCM ）工具，在国内已经得到许多企业用户的认可并被广泛采纳。为了帮助大家更好的了解和使用 ClearCase ，本文将全方位解剖 ClearCase 的重要组成部分：视图（ View ）。</p><p class="main"><strong>2  ClearCase视图的分类</strong></p><p class="main">我们知道，软件配置管理工具的一个基本功能是建立和管理开发人员的工作空间。在 ClearCase 中，工作空间被称为视图（ View ），它可以选择所指定任务的每一个文件或目录的适当版本，并将它们呈现给使用者。通俗的讲， View 就像一个过滤器，依据一组配置规则从 VOB 中将我们需要的文件或目录的版本选择出来。 View 是访问 VOB 库中文件和目录版本的手段，通过视图，用户可以浏览、修改、构建可用的文件和目录。</p><p class="main">在实际使用中， View 分为两种类型，即 Dynamic View （动态视图）和 Snapshot View （静态视图，又称快照视图）。下面我们来看看这两种视图有什么差异：</p><p class="main">动态视图：</p>•  自动保持与 VOB 库的同步更新； 
<p class="main">•  使用 MVFS 文件系统透明访问 VOB 库，不占用本机空间；</p><p class="main">动态视图无需将文件拷贝到本地目录，通过虚拟文件系统对 VOB 中的版本进行存取操作。</p><p class="main">•  动态视图的使用依赖于网络；</p><p class="main">•  提供了共享派生对象和构建审计功能，这是动态视图独有的。</p><p class="main">•  动态视图通过 mount 指定的 VOB 库来获取数据。</p><p class="main"> 动态视图采用 mount 的方式获取 VOB 中的数据，速度比较快，它是一个全局视图。</p><p class="main"> 静态视图：</p><p class="main">•  只能定期通过 update 操作实现文件的更新；</p><p class="main">•  文件被下载到本地，占用本地空间；</p><p class="main">•  可以离线工作，断网使用；</p><p class="main">•  可以在本地进行高速编译；</p><p class="main">•  使用静态视图占用 ClearCase 服务器资源较少；</p><p class="main">•  静态视图通过 load 指定的 VOB 库来查看文件。</p><p class="main">因此你可以只选择下载与你的需要有关的文件拷贝（除非你需要所有的内容），这个可通过通过专门的下载规则来实现。当然静态视图也可以卸载在下载规则中被过滤和删除的文件。</p><p class="main">通过对两种视图比较，我们会发现它们各有千秋。在实际使用中，当你希望离线工作或只需要 VOB 库中的部分代码时，建议使用静态视图，这样还能减少因对服务器频繁访问所造成的压力。如果你使用便携式电脑，使用静态视图则更加便利。</p><p class="main">当需要节省本地磁盘空间、希望频繁自动更新或者仅仅是为了查看文档、代码，创建动态视图既快速又不占用本机空间，是个不错的选择。</p><p class="main"><strong>3  如何创建视图</strong></p><p class="main">当你安装了 ClearCase 客户端软件后，要做的第一件事就是创建 View 。如图 1 所示，我们打开 ClearCase Explorer ，以 Base ClearCase 为例，在工具栏里有一项“ Create View ”：</p><p align="center"><img height="427" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929130.jpg" width="553" /></p><p align="center">图 1</p><p class="main">点击“ Create View ”后，出现图 2 ，因为我们是以 Base ClearCase 为例，这里选择默认即可。</p><p align="center"><img height="361" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929131.jpg" width="538" /></p><p align="center">图 2</p><p class="main">根据你的需求选择创建 Snapshot View 或者 Dynamic View ，见图 3 所示：</p><p align="center"><img height="361" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929132.jpg" width="538" /></p><p align="center">图 3</p><p class="main">如果你要创建静态视图，如图 4 ，需要指定该视图在本机的存储路径（存放从 VOB 库中 load 的文件和目录）。</p><p align="center"><img height="361" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929133.jpg" width="538" /></p><p align="center">图 4</p><p class="main">如果你要创建动态视图，则只需要指定一个映射盘符即可，见图 5 。因为动态视图是通过 MVFS 访问 VOB 库中的数据，不需要将数据下载到本机。</p><p align="center"><img height="358" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929134.jpg" width="535" /></p><p align="center">图 5</p><p class="main">在图 4 和图 5 中都有一个“ Advanced Options ”按钮，点击进入后见图 6 ，这里可以选择你的视图是存储在服务器端还是本机。 ClearCase 的 View 数据（主要是 View database 等）既可以存放在 View Server 中，也可以存放在本机。一般建议存放在 View Server 中，以便组织进行统一管理。</p><p align="center"><img height="325" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929135.jpg" width="554" /></p><p align="center">图 6</p><p class="main">选择完成后，将进入如图 7 所示界面，这里有一个“ Inspect Config Spec ”，用来定义该视图的配置规约（ Config Spec ），配置规约将决定哪些版本可以看到，点击进入：</p><p align="center"><img height="240" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929136.jpg" width="327" /></p><p align="center">图 7</p><p class="main">进入“ Inspect Config Spec ”后，我们会发现里面有默认的规约，见图 8 ，可以直接使用。通常管理员或配置经理会根据开发的需要编写一些特定的配置规约供开发人员使用，在这里进行选择和修改。</p><p align="center"><img height="354" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929137.jpg" width="366" /></p><p align="center">图 8</p><p class="main">完成了以上的选择和设置后，就可以成功创建一个视图了。</p><p class="main"><strong>4  视图的管理</strong></p><p class="main">视图通常与任务对应，经过一段时间的使用后，用户因需要会创建了多个视图，这就涉及到视图的管理和维护问题。</p><p class="main style1">4 .1 与视图相关的基本操作</p><p class="main">对于普通开发人员而言，与视图相关的操作主要包括视图的创建和删除，操作相对比较简单。需要强调的是：在删除视图时，要使用 ”Remove View”进行操作，如图9所示。如果使用”Remove View shortcut”,则只是删除了该视图的快捷方式，更新后还会再次出现。</p><p class="main">静态视图有一个特有的操作是 update，需要定期进行，才能和VOB中的数据保持同步。</p><p align="center"><img height="368" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929138.jpg" width="554" /></p><p align="center">图 9</p><p class="main"><span class="style1">4.2 关于 hijacked文件</span></p><p class="main">我们知道，静态视图将 VOB中的文件下载到本地后，文件是只读的。如果你绕过检出(checkout)操作，只是去掉某个需要更改文件的只读属性就进行操作，那么该文件就被称为“劫持”（ hijacked）文件。 具体的表现为：在 ClearCase Explorer 中，处于“ hijacked ”的元素会有一个带对号的红色圆圈。</p><p class="main">如果出现“ hijacked”，有两种操作方式可供选择：</p><p class="main">•  鼠标右击“ Hijacked”的元素，选择“Undo Hijacked”。为了不丢失你对文件所做的改动，Undo Hijacked之后，ClearCase自动生成一个后缀为“keep”的私有文件（view private files），这时你不仅取消了Hijacked，同时也保存了你的工作成果（当然如果不需要可以删除这个私有文件）。</p><p class="main">•  更新视图（ update view），然后鼠标右击“Hijacked”的元素，选择“Check Out”，该元素将处于“checked out”状态，这时你可以继续对该元素进行改动，也可以直接做Check in操作， 完成文件变更的入库，形成新的版本。</p><p class="main">以上也给大家提供了利用静态视图离线或在家办公的方法，还不错吧。</p><p class="main style1">4.3 视图的迁移</p><p class="main">该部分内容主要针对 ClearCase管理员而言。视图的迁移主要是将View Server中的视图在同一个机器中从一个存储区域迁移到另外一个存储区或者跨服务器间移动。通常在视图存储空间不足或者为了提升View Server性能使用新服务器时，需要进行视图的迁移，这样原有的视图信息不会被破坏，客户端基本不受任何影响，迁移后可以正常使用原有的视图。</p><p class="main">下面我们举例说明如何将视图从 CCSERV1这台视图服务器迁移到CCSERV2上：</p><p class="main">4.3.1 首先对CCSERV1上的所有用户的视图信息进行备份。</p><p class="main">4.3.2 将CCSERV2安装为视图服务器，并创建相应的视图存储路径。</p><p class="main">4.3.3 做好以上准备后，就可以进行正式的迁移工作。</p><p class="main">•  在CCSERV1上停掉ClearCase服务，如图10所示。</p><p class="main">•  使用ccopy命令将CCSERV1的视图拷贝到CCSERV2上新建的视图存储目录中，如：</p><p class="main">ccopy G:\cc_Storage\views\ccview \\ccserv2\cc_ Storage\views\ccview</p><p class="main">上面的操作是将 CCSERV1中ccview目录中的视图信息拷贝到CCSERV2的ccview中，如果有多个目录需要进行拷贝可以写成一个脚本统一进行。</p><p align="center"><img height="410" src="http://www.51testing.com/ddimg/uploadimg/20060104/0929139.jpg" width="486" /></p><p align="center">图 10</p><p class="main">4.3.4 确认拷贝到CCSERV2的数据是否完整。</p><p class="main">4.3.5 启动CCSERV1上的ClearCase服务，在CCSERV2上对迁移的视图进行重新注册。</p><p class="main">因为可能涉及到成百上千的视图，单个进行注册是不现实的，需要通过程序进行。基本的思路是先将视图原有的注册信息删除，然后重新注册到CCSERV2上去。这里给大家一个perl语言编写的例子供参考：</p><p class="main">printf ("All Views begin registering:\n");</p><p class="main">@lines = `cleartool lsview -region soft1 -s`;</p><p class="main">foreach $line(@lines)</p>{ 
<p class="main">chomp ($line);</p><p class="main">$view_info = `cleartool lsview -region soft1 $line`;</p>chomp ($view_info); 
<p class="main">$view_info =~ m/(\S+)\s+(\S+)/;</p><p class="main"> $view_tag = $1;</p><p class="main">$view_stg = $2;</p><p class="main">printf "\n";</p><p class="main">printf("The old view stg is:%s\n",$view_stg);</p><p class="main">system("cleartool rmtag -view -region soft1 $view_tag");</p><p class="main">system("cleartool unregister -view $view_stg");</p><p class="main">$new_view_stg = $view_stg;</p><p class="main">chomp ($new_view_stg);</p><p class="main">if ($new_view_stg =~ m/ccview/)</p><p class="main">{</p><p class="main">$new_view_stg=~ s/\\\\ccserv1\\ccview\\views/\\\\ccserv2\\ccview \\views/;</p><p class="main">}</p><p class="main">printf ("The new_view_stg is:%s\n",$new_view_stg);</p><p class="main">$rc = system("cleartool register -view $new_view_stg");</p><p class="main">if ($rc)</p><p class="main">{</p><p class="main"> print LOG_F "$line\n";</p><p class="main">}</p><p class="main">system("cleartool mktag -nstart -region soft1 -view -tag $view_tag $new_view_stg");</p><p class="main">printf "\n";</p><p class="main">}</p><p class="main">printf ("All Views register successfully!\n");</p><p class="main">上面的程序完成了将视图在 CCSERV1上原有的信息删除，然后重新注册到CCSERV2的功能。这里需要注意的是：如果存在多个region，需要分别进行处理。</p><p class="main">4.3.6 验证迁移后的视图使用是否正常。</p><p class="main">在客户端检查原有的静态和动态视图能否正常使用，可以做一些常见的操作，如checkout、checkin、update和mount（仅对动态视图）等。</p><p class="main">4.3.7 检查无误后可以将CCSERV1上的视图数据和视图存储路径予以清除。</p><p class="main">至此，整个视图的迁移工作大功告成。</p><p class="main"><span class="style1">4.4 视图的清除</span></p><p class="main">因为用户对视图处理不当，在经过一段时间的运作后，会出现一些垃圾视图（即已经不再使用但没有被彻底清除），日积月累会严重影响 ClearCase 服务器的性能。可以使用以下命令予以彻底的清除：</p><p class="main">cleartool rmtag -view $tag;</p><p class="main">cleartool rmview -force -all -uuid $uuid;</p><p class="main">cleartool unregist -view -uuid $uuid;</p><p class="main">以上命令需要的 tag 、 uuid 信息可以通过 lsview 命令获取，将这些命令进行组合，写成一个脚本便可以实现批量清除垃圾视图。</p><p class="main"><strong>5  总结</strong></p><p class="main">本文对 Base ClearCase中的View进行了较为详细的介绍（UCM方式基于活动，故有所差异，本文没有提及），希望能对大家有所启示。由于View本身牵涉内容较多，如有更深层次的需求，可以参考ClearCase自带的用户手册，做进一步的研究。</p><p class="main" align="left">本文缩略语：</p><p class="main" align="left">VOB(Versioned Object Base): 版本对象库,ClearCase 数据的存储库，它存储了处于版本控制下所有的文件、目录和元数据等。</p><p class="main" align="left">View: 视图，它可以选择所指定任务的每一个文件或目录的适当版本，并呈现它们。</p><p class="main" align="left">View Server：存储View数据的服务器。</p><p><span class="main"> MVFS(Multiversioned File System)：多版本文件系统，它通过使用标准操作系统协议增加一个新文件系统类型，MVFS提供了透明的版本控制机制。</span></p></div></b>
				</span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-20 17:18 <a href="http://www.cnitblog.com/szdlinxie/articles/20864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>论测试人员为什么需要参加需求评审</title><link>http://www.cnitblog.com/szdlinxie/articles/20797.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 19 Dec 2006 07:50:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20797.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20797.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20797.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20797.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<b>论测试人员为什么需要参加需求评审<br /><div class="daxiao14" align="left"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><b><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">摘要：</span></b><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">测试人员越早介入项目工作越好的观点已经被越来越多的测试人员所接受。在软件生命周期中，越晚发现的错误越难修改，修改成本越昂贵的论断也已经成为了大家的共识。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">测试人员需要参加需求评审，我想大部分测试人员都接受了这个观点，同时也是这么做的。但测试人员为什么需要参加需求评审，恐怕不是每一个人都知道个中道理。本文从作者多年从事软件测试和过程管理的经验出发进行论述，供同行们参考。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><b><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关键词：</span></b><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">测试</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><span style="mso-spacerun: yes">  </span></span><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">测试人员</span><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"></span><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需求评审</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><b><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正文：</span></b><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></b></p><p class="MsoBodyTextIndent" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们知道，在项目的生命周期中，需求、设计、编码、测试等活动往往是由不同的专业技术人员协同完成的。这样，由于下游技术人员对上游技术人员工作产出物的理解偏差，将导致不同阶段的产出物之间不一致的现象出现，这也是导致项目可能不成功的重要风险之一。</span></p><p class="MsoBodyText" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基于以上的观点，需求人员编写的《用户需求说明书》、系统设计人员编写的《系统设计说明书》、编码人员实现的系统、测试人员编写的《测试用例》之间不可避免地存在不一致的现象。</span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于测试工作的主要面向对象是《</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用户需求说明书<span style="COLOR: black">》和可运行系统，为便于分析，我们先用图来表述一下三者之间的关系：</span></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p> </o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p> <a href="http://www.51testing.com/ddimg/uploadimg/20060317/125134120.jpg" target="_blank"><img height="238" alt="" src="http://www.51testing.com/ddimg/uploadimg/20060317/125134120.jpg" width="436" border="0" /></a></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 42pt; LINE-HEIGHT: 150%; mso-char-indent-count: 4.0"><span lang="EN-US"><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" stroked="f" filled="f" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从理论上讲，上图中“需求”（</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">S</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">圆表示）、“可运行系统”</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">P</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">圆表示）和“测试用例”</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">T</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">圆表示）应该是重合，但实际上这三个圆很难重合。</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从上图可以看出：可能会有没有测试到的已描述行为（区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">2</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">5</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）；经过测试的已描述行为（区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">1</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">4</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）；对应未描述行为的测试用例（区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">3</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">7</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）；可能会没有测试的程序行为（区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">2</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">6</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）；经过测试的程序行为（区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">1</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">3</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）；对应于未通过程序实现的行为（区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">4</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">7</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于我们今天讨论的主题是“<span style="COLOR: black">测试人员为什么需要参加需求评审</span>”，因此我们重点来看看与这一问题关系密切的区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">2</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">5</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">3</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">7</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">2</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">5</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这两部分是测试用例没有覆盖到的需求，即“没有正确的测试用例与该部分需求对应”。出现这种情况本人认为有三种可能：</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 66pt; TEXT-INDENT: -42pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo1; tab-stops: list 66.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'">                </span></span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设计测试用例的测试人员对需求理解不完整，出现了应该被测试的需求而没有被测试用例覆盖到的现象；</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 66pt; TEXT-INDENT: -42pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo1; tab-stops: list 66.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2、<span style="FONT: 7pt 'Times New Roman'">                </span></span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">《<span style="COLOR: black">用户需求说明书</span>》中区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">2</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">5</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对应的需求，具有不可测试性，测试人员无法设计用例；</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 66pt; TEXT-INDENT: -42pt; LINE-HEIGHT: 150%; mso-list: l1 level1 lfo1; tab-stops: list 66.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3、<span style="FONT: 7pt 'Times New Roman'">                </span></span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">《<span style="COLOR: black">用户需求说明书</span>》中区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">2</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">5</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对应的需求，不是用户的需求，是需求分析人员凭空增加的，测试人员无须设计与这部分需求对应的测试用例。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">3</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">7</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这两部分是需求没有覆盖到的测试用例，即“没有正确的需求与该部分测试用例相对应”。出现这种情况本人认为有两种可能：</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo2; tab-stops: list 42.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1、</span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">设计测试用例的测试人员对需求理解不充分，从而设计出了多余的测试用例；</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo2; tab-stops: list 42.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2、</span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">《测试用例》中区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">3</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和区域</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">7</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的测试用例所对应的需求，是用户的真实需求，只是《用户需求说明书》中没有描述到而已。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0; mso-para-margin-left: 2.29gd"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从上面的分析可以看出，如果测试人员参加了“需求评审”，则上面出现的问题可以最大程度地避免，因为测试人员参加“需求评审”的重要作用正是针对产生这些问题的因素而进行的。</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 24.05pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0; mso-para-margin-left: 2.29gd"><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由此总结出，测试人员参加“需求评审”活动所需要达到的目标包括如下三个方面：</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l1 level2 lfo1; tab-stops: list 63.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1、</span></span><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">充分地理解需求，确保对需求的理解与需求分析人员是一致的；</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l1 level2 lfo1; tab-stops: list 63.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2、</span></span><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从可测试的角度，努力发现《</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用户需求说明书<span style="COLOR: black">》中不可测试的需求，从而提醒需求分析人员尽早修改</span>；</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 63pt; TEXT-INDENT: -18pt; LINE-HEIGHT: 150%; mso-list: l1 level2 lfo1; tab-stops: list 63.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">3、</span></span><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从测试人员的角度努力发现《</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用户需求说明书<span style="COLOR: black">》中的不完整性，从而提醒需求分析人员及时补充遗漏掉的这部分</span>用户需求。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><b><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">主要参考文献</span></b><b><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">[1] </span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">《软件测试》</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: '&#xB;'; mso-hansi-font-family: '&#xB;'; mso-bidi-font-size: 9.0pt">机械工业出版社</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">[2] </span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">《软件测试经验与教训》（美）</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">Cem Kaner,James Bach,Bret Pettichord</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">著，韩柯</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等译</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">[3]</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">《编写有效用例》（美）</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%">Alistair Cockburn</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">著，王雷、张莉译</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机械工业出版社</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%"><o:p></o:p></span> </p></div></b>
				</span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-19 15:50 <a href="http://www.cnitblog.com/szdlinxie/articles/20797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>质量控制与测试工作协调方案</title><link>http://www.cnitblog.com/szdlinxie/articles/20794.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 19 Dec 2006 07:30:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20794.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20794.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20794.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20794.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 质量控制与测试工作协调方案1.方案说明目前测试实施已经构建了较完整的过程，但测试质量保证还未形成系统性的方案。测试作为质量保证的内容，应该得到较好的控制和持续的改进，测试只有和质量控制结合起来才能够实现这一目标，该方案就是以此为出发点。2.当前质量控制和测试协调的问题协调问题l         测试人员不能及时了解项目进度并合理安排测试；l         测试人员不能及时了解项目需求；l    ...&nbsp;&nbsp;<a href='http://www.cnitblog.com/szdlinxie/articles/20794.html'>阅读全文</a><img src ="http://www.cnitblog.com/szdlinxie/aggbug/20794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-19 15:30 <a href="http://www.cnitblog.com/szdlinxie/articles/20794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何提高软件质量</title><link>http://www.cnitblog.com/szdlinxie/articles/20789.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 19 Dec 2006 07:16:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20789.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20789.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20789.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20789.html</trackback:ping><description><![CDATA[
		<div class="daxiao14" align="left">
				<p>
						<strong>【摘要】 </strong>软件质量是软件产品的灵魂。本文全面介绍了质量的概念，提出了从流程、技术、组织管理、人员技能发展等多个角度提高软件质量的重要性；并对目前国际上流行的 CMM 标准进行了介绍，提出了使用 PSP 和 TSP 来实现 CMM 的方法。本文最后还给出了中小型软件公司在提高软件质量方面的一个初步思路。 </p>
				<p>
						<strong>【关键字】 </strong>质量管理，软件开发过程模型，软件分析和设计方法，软件测试， CMM </p>
				<p>如何提高软件的质量已经不是一个纯粹的技术问题，而是一个工程的问题。自从计算机诞生以来，相应的软件开发就存在了。由于早期的计算机运行性能较低，软件的可编程范围也较狭窄，因此质量问题就没有那么突出。 50 年代后期到 60 年代，高级语言的相继诞生并得到了广泛的应用，随之而来的是软件规模也越来越庞大，越来越复杂。伴随着软件应用的越来越广泛，软件的质量问题就变得越来越突出。根据美国国家宇航局 NASA 的统计，在 80 年代初，软件引起的故障与硬件引起的故障，其比率约为 1.1:1.0 ，到了 80 年代末，这一比率已达到 2.5:1.0 。因此如何提高软件的质量成为软件工程研究的一个重点。自从软件危机产生以来，出现了很多提高产品质量的理论和方法，有的从技术角度出发，例如：面向对象技术的产生和推广，第四代语言的诞生等等；有的从自动化工具入手，例如： CASE 工具、过程控制软件、自动化管理平台等；有的从过程模型角度出发，例如：迭代模型、螺旋模型、 RUP 、 IPD 、净室软件工程等；也有从管理角度出发的，例如：团队管理、绩效管理、 PSP 、 TSP 等；也有从测试角度出发的，例如：加强全流程的测试等；一些相应的规范和标准也孕育而生，例如： ISO9000 系列、 CMM 、 QMS 等。然而每一种技术都不是绝对的，软件质量的提高应该是一个综合的因素，需要从每个方面进行改进，同时还需要兼顾成本和进度。 </p>
				<p>一、什么是质量？ </p>
				<p>作为软件产品的销售人员，市场人员或维护人员经常会受到客户这样那样的指责或抱怨，客户说：你们产品的质量太差，不稳定等等。那么什么是质量呢？我们该如何来衡量质量呢？ </p>
				<p>质量具有三个维度： </p>
				<p>•  符合目标。目标是客户所定义的，符合目标即判断我们是不是在做需要做的事情。 </p>
				<p>•  符合需求。即产品是不是在做让它做的事情。 </p>
				<p>•  符合实际需求。实际的需求包括用户明确说明的和隐含的需求。 </p>
				<p>ISO 关于质量的定义表示如下： </p>
				<p>“ 一个实体（产品或服务）的所有特性，基于这些特性可以满足明显的或隐含的需要。 ” </p>
				<p>注意，在这个定义中包含明显的需求和隐含的需求。而往往我们会忽略隐含的需求。因此在控制一个产品的质量的过程中必须关注这些隐含的需求，并给予应有的验证。 </p>
				<p>另一方面因为我们的产品是为客户提供服务的，因此凡是不满足客户需求的，我们都认为是一个失效（ failure ）。所以我们的产品必须始终围绕着客户的需求进行开发和验证。 </p>
				<p>这里我们谈到客户，其实在一个软件的需求收集过程中需要关注客户和用户。而我们经常会忽略客户与用户之间的区别。那么谁是客户？谁是用户呢？简单的来说，客户是真正能够决定是否购买你软件的人，而用户是实际使用软件的人。了解了这个区别，对于你在分析需求的重要性的时候就可以进行参考。同时在产品质量验证的时候也可以做出不同的权衡。另一方面我们在考虑我们用户需求的时候，往往只考虑了实际使用软件的人员，而忽略了其它一些人员对软件的要求或对软件造成的潜在竞争，这包括维护人员的要求、系统管理人员的要求、软件上下游人员的要求、先前版本的情况、市场上竞争对手的软件情况等。 </p>
				<p>每个人提到质量的时候，经常会遇到下列矛盾，在这些矛盾中隐含着对质量的承诺【 5 】： </p>
				<p>•  质量需要一个承诺，尤其是高层管理者的承诺。但为了得到质量，高层管理者必须和其雇用的员工进行紧密合作； </p>
				<p>•  许多人相信没有缺陷的产品和服务是不可能的。但是控制在一定级别的缺陷数是正常并可接受的； </p>
				<p>•  质量经常是和成本紧密联系在一起，一个高质量的产品同时也意味着高投入。这是设计的质量和一致性质量的一个矛盾； </p>
				<p>•  一个高的质量要求需求规格说明书足够详细，以便产品可以根据这些规格说明书进行定量的分析。然而许多组织没有能力或者不愿意产生如此详细程度的规格说明书； </p>
				<p>•  技术人员经常相信规范和标准会束缚他们的创造力，因此就不遵照标准做事。然而如果要得到高质量的产品，就必须遵循良好定义的标准和过程。 </p>
				<p>二、流程对质量的贡献 </p>
				<p>好了，既然已经了解了什么是质量，那么怎么才能改进软件产品的质量呢？从一个企业的长远发展来看，首先应当从流程抓起，规范软件产品的开发过程。这是一个软件企业从小作坊的生产方式向集成化、规范化的大公司迈进的必经之路，也是从根本上解决质量问题，提高工作效率的一个关键手段。 </p>
				<p>软件产品的开发同其它产品（如汽车）的生产有着共同特性，即需要按一定的过程来进行生产。在工业界，流水线生产方式被证明是一种高效且能够比较稳定地保证产品质量的一种方式。通过这种方式，不同的人员被安排在流程的不同位置，最终为着一个目标共同努力，这样可以防止人员工作间的内耗，极大的提高工作效率。并且由于其过程来源于成功的实例，因此其最终的产品质量能够满足过程所设定的范围要求。软件工程在软件的发展过程中吸取了这个经验并把它应用到了软件开发中，这就形成了软件工程过程，简单的说就是开发流程。 </p>
				<p>无论做什么事情，都有一个循序渐进的过程，从计划到策略再到实现。软件流程就是按照这种思维来定义开发过程，它根据不同的产品特点和以往的成功经验，定义了从需求到最终产品交付的一整套流程。流程告诉我们该怎么一步一步去实现产品，可能会有那些风险，如何去避免风险等等。由于流程来源于成功的经验，因此，按照流程进行开发可以使得我们少走弯路，并有效的提高产品质量，提高用户的满意度。 </p>
				<p>目前流行的流程方法有很多种，不同的过程模型适合于不同类型的项目。瀑布模型是应用的最为广泛的一种模型，也是最容易理解和掌握的模型，然而它的缺陷也是显而易见的。遗漏的需求或者不断变更的需求会使得该模型无所适从。然而，对于那些容易理解但很复杂的项目，采用瀑布模型会是比较适合的，因为你可以按部就班的去处理复杂的问题。在质量要求高于成本和进度要求的时候，该模型表现的尤其突出。 </p>
				<p>螺旋模型是也是一个经典模型，它关注于发现和降低项目的风险【 8 】。螺旋型项目从小的规模开始，然后探测风险，制定风险控制计划，接着确定下一步项目是否还要继续，然后进行下一个螺旋的反复。该模型的最大优点就是随着成本的增加，风险程度随之降低。然而螺旋模型的缺点是比较复杂，且需要管理人员有责任心，专注以及有管理方面经验。 </p>
				<p>RUP （ Rational Unified Process ）是 Rational 公司提出的一套开发过程模型，它是一个面向对象软件工程的通用业务流程【 9 】。它描述了一系列相关的软件工程流程，它们具有相同的结构，即相同的流程构架。 RUP 为在开发组织中分配任务和职责提供了一种规范方法，其目标是确保在可预计的时间安排和预算内开发出满足最终用户需求的高品质的软件。 RUP 具有两个轴，一个是时间轴，这是动态的。另一个是工作流轴，这是静态的。在时间轴上， RUP 划分了四个阶段：初始阶段、细化阶段、构造阶段和发布阶段。每个阶段都使用了迭代的概念。在工作流轴上， RUP 设计了六个核心工作流程和三个核心支撑工作流程，核心工作流轴包括：业务建模工作流、需求工作流、分析设计工作流、实现工作流、测试工作流和发布工作流。核心支撑工作流包括：环境工作流、项目管理工作流和配置与变更管理工作流。具体可以参考图 1 。 RUP 汇集现代软件开发中多方面的最佳经验，并为适应各种项目及组织的需要提供了灵活的形式。作为一个商业模型，它具有非常详细的过程指导和模板。但是同样由于该模型比较复杂，因此在模型的掌握上需要花费比较大的成本。尤其对项目管理者提出了比较高的要求。</p>
				<p align="center">
						<img height="340" src="http://www.51testing.com/emagzine/lib/No1/5/pic_1.JPG" width="479" />
				</p>
				<p align="center">图1 RUP 工作流程示意图 </p>
				<p>IPD （ Integrated Product Development ）流程是由 IBM 提出来的一套集成产品开发流程，非常适合于复杂的大型开发项目，尤其涉及到软硬件结合的项目。 IPD 从整个产品角度出发，流程综合考虑了从系统工程、研发（硬件、软件、结构工业设计、测试、资料开发等）、制造、财务到市场、采购、技术支援等所有流程。是一个端到端的流程。在 IPD 流程中总共划分了六个阶段（概念阶段、计划阶段、开发阶段、验证阶段、发布阶段和生命周期阶段），四个个决策评审点（概念阶段决策评审点、计划阶段决策评审点、可获得性决策评审点和生命周期终止决策评审点）以及六个技术评审点，具体可以参考图 2 。 IPD 流程是一个阶段性模型，具有瀑布模型的影子。该模型通过使用全面而又复杂的流程来把一个庞大而又复杂的系统进行分解并降低风险。一定程度上，该模型是通过流程成本来提高整个产品的质量并获得市场的占有。由于该流程没有定义如何进行流程回退的机制，因此对于需求经常变动的项目该流程就显得不大适合了。并且对于一些小的项目，也不是非常适合使用该流程。</p>
				<p align="center">
						<img height="378" src="http://www.51testing.com/emagzine/lib/No1/5/pic_2.JPG" width="555" />
				</p>
				<p align="center">图2 IPD 流程示意图 </p>
				<p>三、流程与技术 </p>
				<p>流程和成功不是等价的。没有流程就成功是不可能得到保证，但有了流程并不意味着肯定能够成功。这恐怕是很多迷信于流程的人所不能接受的。但这的确是个事实。记得有个做了将近 30 多年的需求分析专家说过：即使是一个已经达到 CMM4 级的公司，也完全有可能做不好需求分析。为什么？技术，技术是成功的另外一个必要条件。就好比现在你要从上海到北京去，流程给你指出了最短的路径，技术提供给你最快的交通工具。两者结合就是完美。 </p>
				<p>对于软件开发来说，要保证软件的质量，需要掌握多方面的技术，包括分析技术、设计技术、编码技术和测试技术等等。在国内有一个普遍的非正常现象，就是大家觉得只有编程能力才是玩电脑的真正技能。就好像造一套房子，其它都不重要，只要砖瓦匠有高超的技能就行了。尽管这个比喻会打击很多程序员的自尊心，但这的确是一个事实。我们缺少系统级的工程师，在分析和设计方面的工作做得很不扎实。 </p>
				<p>需求是一个项目的灵魂。模棱两可的需求带来不可避免的后果便是返工 —— 重做一些你认为已做好的事情。返工会耗费开发总费用的 4 0 % ，而 7 0 % ～ 8 5 % 的重做是由于需求方面的错误所导致的（ l e ff i n g w e l l1 9 9 7 ）【 10 】。想像一下如果你能减少一半的返工会是怎样的情况？你能更快地开发出产品，在同样的时间内开发更多、更好的产品，甚至能偶尔回家休息休息。在《软件需求》一书中关于如何进行需求分析给出了比较详细的介绍【 7 】， RUP 中关于需求的指导也是很实用的。 </p>
				<p>设计是最能体现一个工程师能力和水平的环节。一个好的设计基本上决定了产品的最终质量。设计是把需求转换成系统的一个关键步骤，它需要从自然语言描述的需求中寻找出设计的基础单元，构建出整个系统的构架。在 RUP 中关于系统构架师和设计师的定位是相当高的。关于设计方面的技能涉及面是很广的，包括传统的结构化设计到面向对象设计。设计人员需要掌握一定的建模技术。 UML 是国际上比较流行的一种建模语言【 11 】。在嵌入式方面， SDL 也是一种非常好的选择。《设计模式》是在设计思想方面总结的非常出色的一本书【 6 】，作为一名设计人员（尤其是面向对象设计人员）必须要好好研究一下。但是对这些模式的应用应当讲究一种自然的应用，千万不要因为模式而去设计模式，否则会适得其反。 </p>
				<p>现在的程序员热中于掌握多种编程语言，或者讲究语言的过分技巧化，而往往忽略了编程语言的规范化。不规范的语言应用给程序的可理解性、可维护性以及可测试性带来了大的伤害，进而损害了产品的质量。某公司曾对中国程序员和印度程序员做过一个测验，这个测验要求参加者对一组数进行排序。测试结果发现，印度程序员设计的程序使用的算法并不是最优，但却是最不容易出错的，并且几个程序员写出来的代码如出一辙。而几个中国程序员写出的代码，有的非常漂亮，很精练，效率很高；有的却很冗杂，还有错误。如果大家是在做研究性的项目或纯粹兴趣性的项目，那么充分发挥自己的编程天才也无可厚非。然而，对于一个软件公司，产品最终是要交给用户的，需要遵循的是一个软件产品的开发工程。因此这类软件的开发需要遵循一定的编程规范，毕竟开发的软件不是自己用，还需要和别人的集成，还需要给以后版本重用和维护。 </p>
				<p>测试的技术将在第五节进行阐述。总之流程很关键，技术也很重要，我的观点是：鱼和熊掌，两者都不能放。 </p>
				<p>四、全面质量管理 </p>
				<p>自从 Deming 的全面质量管理（ TQM ）原则在日本工业界获得了巨大成功之后，这个原则迅速被传播到了世界各个地方，同样，全面质量管理原则也被应用到了软件开发当中。如前面提到的，软件开发也是一个工程性的工作，因此必须提高整个工程的质量。</p>
				<p>产业界的大量研究（ TRW 、 Nippon Electric 和 Mitre Corp. 以及其它一些公司）表明设计活动引入的错误占软件过程中出现所有错误（和最终的缺陷）数量的 50 ％到 65 ％。根据 IBM 的研究表明，假定在分析阶段发现的错误其改正成本为 1 个单位的话，那么在测试之前（设计编码阶段）发现一个错误的修改成本约为 6.5 个货币单位，在测试时（集成测试，系统测试和验收测试）发现一个错误的修改成本约为 15 个货币单位，而在发布之后（已经交到用户手上）发现一个错误的修改成本约为 60 到 100 个货币单位。同样该比例也适用用于发现一个错误需要的时间。我们可以看下面两条曲线图： </p>
				<p align="center">
						<img height="298" src="http://www.51testing.com/emagzine/lib/No1/5/pic_3.JPG" width="498" />
				</p>
				<p align="center">图3 缺陷代价曲线 </p>
				<p>为了提高产品质量，缩短产品开发进度，节约产品开发成本，必须尽早的进行产品质量控制。全面质量控制要求在过程的每个阶段每个步骤上都要进行严格的验证和确认活动。 </p>
				<p>什么是验证？ <strong>验证 </strong>就是要用数据证明我们是不是在正确的制造产品。注意这里强调的是过程的正确行【 12 】。 </p>
				<p>什么是确认？ <strong>确认 </strong>就是要用数据证明我们是不是制造了正确的产品。注意这里强调的是结果的正确性。 </p>
				<p>IEEE 给出的验证和确认过程可以用下图来表示。验证和确认是一个广泛的概念，感兴趣的读者可以参考 IEEE Std 1012-1998 。 </p>
				<p align="center">
						<img height="338" src="http://www.51testing.com/emagzine/lib/No1/5/pic_4.JPG" width="577" /> <br />图4 验证和确认模型 </p>
				<p>五、关注测试 </p>
				<p>软件测试是软件质量控制中的关键活动。业界的统计数据表明，测试的成本大约占软件开发总成本的 50 ％左右。 </p>
				<p>软件测试的目的是要发现软件中的错误。一个好的测试是发现至今没有被发现的错误。传统的软件测试专注于动态测试范畴，如：单元测试，集成测试和系统测试。而测试工程的发展已经进入到了全流程的测试，包括开发过程前期的静态测试。 </p>
				<p>一般我们可以把测试分为白盒测试和黑盒测试。 <strong>白盒测试 </strong>：顾名思义，白盒测试应当是透明的。的确，该类测试是根据程序代码的内部逻辑结构来设计测试用例进行测试。那么什么是测试用例？ 一个 <strong>测试用例 </strong>就是一个文档，描述输入、动作、或者时间和一个期望的结果，其目的是确定应用程序的某个特性是否正常的工作。 </p>
				<p>
						<strong>黑盒测试 </strong>：看了白盒测试的解释，我想你很快就能猜出黑盒测试是不考虑程序内部结构情况的。事实上也是这样。黑盒测试是根据规格说明书进行的测试。 <strong>规格说明书 </strong>记录了用户的需求。比如用户希望在编辑器中增加查找功能，那么我们把该需求写入规格说明书，根据该项要求，直接调用应用程序的该项功能进行测试，而不管其内部是用什么算法实现的。 </p>
				<p>白盒和黑盒这两类测试是从完全不同的出发点，并且是两个完全对立点，反映了事物的两个极端，两种方法各有侧重，不能替代。但是在现代测试理念中，这两种测试往往不是决然分开的，一般在白盒测试中交叉使用黑盒测试的方法，在黑盒测试中交叉使用白盒测试的方法。 </p>
				<p>常见的白盒测试是单元测试。 <strong>单元测试 </strong>是测试中最小单位的测试。简而言之，就是拿一个函数出来，加上驱动模块，桩模块，让它能够运行起来，然后设计一些用例测试其内部的控制点（如：条件判断点，循环点，选择分支点等）。 <strong>驱动模块 </strong>是模拟调用被测函数的函数。 <strong>桩函数 </strong>是模拟当前测试函数所调用的函数。 </p>
				<p>常见的黑盒测试包括：集成测试，系统测试。 <strong>集成测试 </strong>是在单元测试的基础上，将所有模块按照设计要求（如根据结构图）组装成为子系统或系统，进行集成测试。实践表明，一些模块虽然能够单独地工作，但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题，在全局上很可能暴露出来，影响功能的实现。 </p>
				<p>
						<strong>系统测试 </strong>的目的在于通过与系统的需求定义作比较，发现软件与系统定义不符合或与之矛盾的地方。系统测试的测试用例应根据需求分析说明书来设计，并在实际使用环境下来运行。系统测试的内容极其广泛，包括功能测试、协议测试、性能测试、压力测试、容量测试等等。有关测试方面的概念可以参考本人已出版的《软件测试技术概论》。 </p>
				<p>软件测试是产品最终交付到用户之前的最后一道防线，有着举足轻重的地位。然而，做好软件测试却是不容易的，一方面你需要同时掌握软件开发的技能和软件测试方面的技能；另一方面产品必须给予测试充分的独立性和资源保证。 </p>
				<p>六、成功的铁三角 </p>
				<p>在一个软件企业中，如果能够良性的发展，必须关注组织，流程和人三者之间的关系。组织是流程成功实施的保障，好的组织结构能够有效的促进流程的实施；流程对于产品的成功有着关键的作用，一个适合于组织特点和产品特点的流程能够极大的提高产品开发的效率和产品质量，反之则会拖延产品开发进度，并且质量也无法得到保证；对企业来说，人是最宝贵的财富，它们是技术的载体。对于一个软件公司来说，无论是开发人员还是测试人员，都非常关心其今后的发展通道，如果有一条清晰的技术发展线为其指明今后的职业发展方向的话，这可以大大激励员工的士气和工作积极性。另外技术发展的方向应该与现在的开发流程和规范相结合，这样有利于专业技能的提高。 </p>
				<p>总之，组织，流程和人这三者是一个企业成功的铁三角，理想的情况下它们彼此促进，糟糕的情况下它们彼此制约。 </p>
				<p>七、国际上流行的质量标准 </p>
				<p>最早进入国内的质量标准是 ISO 系列。在软件方面主要使用 ISO9000 系列标准。 ISO9000 是一个非常完整的标准，并且定义了供应商设计和交付一个有质量产品的能力所需要的所有元素。 ISO9002 涵盖了对供应商控制设计和开发活动所认为重要的质量标准。 ISO9003 用于证明供应商在检视和测试期间检测和控制产品不一致性的能力。 ISO9004 描述和 ISO9001 、 ISO9002 和 ISO9003 相关的质量标准，并提供了一个完整的质量查检表。 </p>
				<p>软件能力成熟度模型是目前国内软件企业中非常受欢迎的一个质量标准。并且该标准已经成为业界一个事实上的标准。 CMM 为软件组织提供了一个指导性的管理框架。在这个框架的指导下： </p>
				<p>•  软件组织可以对其软件开发、维护过程获得控制。 </p>
				<p>•  软件组织可以推进其软件工程更为科学、推进软件过程管理更为卓越。 </p>
				<p>•  CMM 通过确定当前软件过程管理的成熟度，通过标识软件的质量和过程改进中关键的、要害的问题，可以指导软件组织选择正确的软件过程改进策略。 </p>
				<p>•  CMM 将其焦点，聚焦在一系列具体的软件过程活动上，并以侵略方式（ Aggressively ）达到这些活动。一个软件组织就可以稳定地、持续地改进其整个软件组织过程，使得其软件过程管理能力取得持续地、持久地不断争长提高。 </p>
				<p>在 CMM 中，把软件工厂分为五个等级：初始级、可重复级、已定义级、管理级和优化级。其中： </p>
				<p>
						<strong>初始级 </strong>：软件过程是未加定义的随意过程，项目的执行是随意甚至是混乱的。也许，有些企业制定了一些软件工程规范，但若这些规范未能覆盖基本的关键过程要求，且执行没有政策、资源等方面的保证时，那么它仍然被视为初始级。 </p>
				<p>
						<strong>可重复级 </strong>：人们根据多年的经验和教训，总结出软件开发的首要问题不是技术问题而是管理问题。因此，第二级的焦点集中在软件管理过程上。一个可管理的过程则是一个可重复的过程，可重复的过程才能逐渐改进和成熟。可重复级的管理过程包括了需求管理、项目管理、质量管理、配置管理和子合同管理五个方面；其中项目管理过程又分为计划过程和跟踪与监控过程。通过实施这些过程，从管理角度可以看到一个按计划执行的且阶段可控的软件开发过程。 </p>
				<p>
						<strong>已定义级： </strong>要求制定企业范围的工程化标准，并将这些标准集成到企业软件开发标准过程中去。所有开发的项目需根据这个标准过程裁剪出与项目适宜的过程，并且按照过程执行。过程的裁剪不是随意的，在使用前必须经过企业有关人员的批准。 </p>
				<p>
						<strong>管理级 </strong>：所有过程需建立相应的度量方式，所有产品的质量（包括工作产品和提交给用户的最终产品）需要有明确的度量指标。这些度量应是详尽的，且可用于理解和控制软件过程和产品。量化控制将使软件开发真正成为一种工业生产活动。 </p>
				<p>
						<strong>优化级： </strong>的目标是达到一个持续改善的境界。所谓持续改善是指可以根据过程执行的反馈信息来改善下一步的执行过程，即优化执行步骤。如果企业达到了第五级，就表明该企业能够根据实际的项目性质、技术等因素，不断调整软件生产过程以求达到最佳。 </p>
				<p>美国国防部规定，重要性级别高的软件应该由质量级别高的企业承担。不同等级的软件公司提交的软件，其软件质量也相差很大，国外的一份统计资料如下： </p>
				<p>表 1 、 CMM 级别与软件质量关系表格 <strong></strong></p>
				<table cellspacing="0" cellpadding="0">
						<tbody>
								<tr>
										<td valign="top" width="92">
												<p>每千行软件的缺陷数目 </p>
										</td>
										<td valign="top" width="92">
												<p>软件过程成熟度等级 </p>
										</td>
										<td valign="top" width="92">
												<p>软件准时提交的百分比 </p>
										</td>
										<td valign="top" width="96">
												<p>每人每月生产的程序行数 </p>
										</td>
										<td valign="top" width="88">
												<p>软件需要返工的百分比 </p>
										</td>
										<td valign="top" width="104">
												<p>平均软件失效时间（近似） </p>
										</td>
								</tr>
								<tr>
										<td valign="top" width="92">
												<p>大于 10 </p>
										</td>
										<td valign="top" width="92">
												<p>初始级 </p>
										</td>
										<td valign="top" width="92">
												<p>&lt;=50 </p>
										</td>
										<td valign="top" width="96">
												<p>Z </p>
										</td>
										<td valign="top" width="88">
												<p>&gt;=45 </p>
										</td>
										<td valign="top" width="104">
												<p>2 到 60 分钟 </p>
										</td>
								</tr>
								<tr>
										<td valign="top" width="92">
												<p>小于 10 </p>
										</td>
										<td valign="top" width="92">
												<p>可重复级 </p>
										</td>
										<td valign="top" width="92">
												<p>90 </p>
										</td>
										<td valign="top" width="96">
												<p>1.5Z </p>
										</td>
										<td valign="top" width="88">
												<p>20 </p>
										</td>
										<td valign="top" width="104">
												<p>1-160 小时 </p>
										</td>
								</tr>
								<tr>
										<td valign="top" width="92">
												<p>小于 1 </p>
										</td>
										<td valign="top" width="92">
												<p>已定义级 </p>
										</td>
										<td valign="top" width="92">
												<p>99 </p>
										</td>
										<td valign="top" width="96">
												<p>2.5Z </p>
										</td>
										<td valign="top" width="88">
												<p>10 </p>
										</td>
										<td valign="top" width="104">
												<p>不确定 </p>
										</td>
								</tr>
								<tr>
										<td valign="top" width="92">
												<p>小于 0.1 </p>
										</td>
										<td valign="top" width="92">
												<p>管理级 </p>
										</td>
										<td valign="top" width="92">
												<p>降低开发时间到 1/2 </p>
										</td>
										<td valign="top" width="96">
												<p>5 Z </p>
										</td>
										<td valign="top" width="88">
												<p>5 </p>
										</td>
										<td valign="top" width="104">
												<p>不确定 </p>
										</td>
								</tr>
								<tr>
										<td valign="top" width="92">
												<p>小于 0.01 </p>
										</td>
										<td valign="top" width="92">
												<p>优化级 </p>
										</td>
										<td valign="top" width="92">
												<p>降低开发时间到 1/4 </p>
										</td>
										<td valign="top" width="96">
												<p>10Z </p>
										</td>
										<td valign="top" width="88">
												<p>&lt;=2 </p>
										</td>
										<td valign="top" width="104">
												<p>近似完全可靠 </p>
										</td>
								</tr>
						</tbody>
				</table>
				<p>对于很多已经推行或者准备推行 CMM 的公司来说， CMM 的起步是很难的，因此 Humphrey 又提出了 PSP （ Person Software Process ）和 TSP （ Team Software Process ）【 2 】【 3 】。 </p>
				<p>CMM 是过程改善的第一步，它提供了评价组织的能力、识别优先改善需求和追踪改善进展的管理方式【 1 】。企业只有开始 CMM 改善后，才能接受需要规划的事实，认识到质量的重要性，才能注重对员工经常进行培训，合理分配项目人员，并且建立起有效的项目小组。然而，它实现的成功与否与组织内部有关人员的积极参加和创造性活动密不可分。 </p>
				<p>PSP 能够指导软件工程师如何保证自己的工作质量，估计和规划自身的工作，度量和追踪个人的表现，管理自身的软件过程和产品质量。经过 PSP 学习和实践的正规训练，软件工程师们能够在他们参与的项目工作之中充分运用 PSP ，从而有助于 CMM 目标的实现。 </p>
				<p>TSP 结合了 CMM 的管理方法和 PSP 的工程技能，通过告诉软件工程师如何将个体过程结合进小组软件过程，并将后者与组织进而整个管理系统相联系；通过告诉管理层如何支持和授权项目小组，坚持高质量的工作，并且依据数据进行项目的管理，向组织展示如何应用 CMM 的原则和 PSP 的技能去生产高质量的产品。 </p>
				<p>软件的生产过程及其它的许多子过程、软件的开发者和用户、以及系统的使用中存在着巨大的变化和不同，要使一个软件过程对软件生产的改善真正有所帮助，其框架应是由 CMM 、 TSP 和 PSP 组成的一个完整体系，即从组织、群组和个人三个层次进行良好的软件工程和管理实践的指导和支持。总而言之，单纯实施 CMM ，永远不能真正做到能力成熟度的升级，只有将实施 CMM 与实施 PSP 和 TSP 有机地结合起来，才能发挥最大的效力。 </p>
				<p>八、如何起步？ </p>
				<p>质量改进需要花费成本，因此改进的途径需要视不同公司的规模、业务、财务状况、人员技术水平等多方面综合进行考虑。一般建议中型以上的较大的软件公司实施 CMM 体系。而对于一些小型的软件公司可以采取比较实际的，相对成本较少，且容易操作的方面进行，这些方面大致如下： </p>
				<p>•  实施简洁的开发过程体系，根据不同业务特点可以选择瀑布模型，迭代模型等，并在这些模型上进行适当的变化以适应于短平快的产品开发特点。 </p>
				<p>•  提高需求分析和设计方面的技术，例如：原型法技术，分析模式，设计模式，面向对象设计， UML 等； </p>
				<p>•  加强文档化工作。文档是经验的保留，对于一个企业要想获得长期的发展，必须加强文档化工作； </p>
				<p>•  加强编程规范工作； </p>
				<p>•  进行适当的测试工作，建议进行单元测试和系统测试； </p>
				<p>•  实施配置管理工作，加强版本控制； </p>
				<p>•  开展走读、评审和检视活动，尤其要加强代码走读，建议进行每日交叉走读活动； </p>
				<p>•  进行简单的度量分析获得；建议实施 PSP 活动； </p>
				<p>
				</p>
				<p align="center">
						<strong>参考文档 </strong>
						<strong>
						</strong>
				</p>
				<p>•  Watts S. Humphrey ， Manager the Software Process, Addison Wesley, 1990 </p>
				<p>•  Watts S. Humphrey ， The Team Software Process SM (TSP SM ) ， TECHNICAL REPORT CMU/SEI-2000-TR-023 ESC-TR-2000-023 ， <em>November 2000 </em></p>
				<p>•  Watts S. Humphrey ， The Personal Software Process SM (PSP SM ) ， TECHNICAL REPORT CMU/SEI-2000-TR-023 ESC-TR-2000-022 ， <em>November 2000 </em></p>
				<p>•  Roger S.Pressman ，软件工程实践者的研究方法，机械工业出版社， ISBN ： 7111072820 <strong></strong></p>
				<p>•  William E.Lewis ， Software Testing and Continuous Quality Improvement ， AUERBACH </p>
				<p>•  Erich Gamma ， Richard Helm ， Ralph Johnson ， John Vlissides ，设计模式，机械工业出版社， ISBN-7-111-07575-7 </p>
				<p>•  Karl E.Wiegers ，软件需求，机械工业出版社， ISBN ： 7-111-08127-7 </p>
				<p>•  斯蒂夫 · 迈克康奈尔，快速软件开发 —— 有效控制与完成进度计划，电子工业出版社， ISBN ： 7505372858 </p>
				<p>•  Ivar Jacobson ， Grady Booch ， James Rumbaugh ，统一软件开发过程，机械工业出版社， ISBN ： 7111075722 </p>
				<p>•  Leffingwell, Dean. 1997. “Calculating the Return on Investment from More Effective Requirements Management.” American Programmer 10(4):13-16 </p>
				<p>•  James Rumbaugh ， UML 参考手册 , 机械工业出版社， ISBN ： 7111082206 </p>
				<p>•  BOHEM, B.W. Software Engineering Economics, Prentice-Hall, 1981. FENTON, N.E. Software Metrics, Chapman &amp; Hall, 1991. </p>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-19 15:16 <a href="http://www.cnitblog.com/szdlinxie/articles/20789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>企业管理软件的需求获取方法</title><link>http://www.cnitblog.com/szdlinxie/articles/20785.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 19 Dec 2006 07:02:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20785.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20785.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20785.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20785.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="558" border="0">
				<tbody>
						<tr>
								<td valign="center" align="right" colspan="2" height="32">
										<div class="style7" align="center">
												<span style="FONT-SIZE: 12pt">
														<b>企业管理软件的需求获取方法</b>
												</span>
										</div>
								</td>
						</tr>
						<tr>
								<td valign="center" align="right" bgcolor="#000000" colspan="2" height="1">
								</td>
						</tr>
						<tr>
								<td valign="center" align="right" colspan="2" height="20">
										<div align="center"> </div>
								</td>
						</tr>
						<tr>
								<td valign="top" align="right" colspan="2" height="10">
								</td>
						</tr>
						<tr>
								<td valign="top" align="right" width="2%" height="10">
										<div align="left">
										</div>
								</td>
								<td valign="top" align="right" width="98%" bgcolor="#ffffff">
										<div class="daxiao14" align="left">
												<p>在需求工程中，需求获取阶段是和用户交往最多的一段时间, 而绝大部分用户是不懂得需求分析方法的，他们不知道怎样全面而又准确无误地表达自己的需求，因而对于需求分析人员来讲，需要掌握很好的方法与技巧，恰当地启发引导用户表达自己的需求，以便为项目的成功提供一个很好的基石。</p>
												<p>
														<strong>一 需求获取的2个基本原则</strong>
												</p>
												<p>1 深入浅出</p>
												<p>对企业的需求调研的要尽可能的全面、细致,调研的需求是个全集，系统真正实现的是个子集。所做的工作可能一时看不到有什么作用,但是这样做可以对应用领域的业务吃得很透,能够避免一些不必要的麻烦，如可以保证系统的灵活性等。调研的细致并不等于在分析时都面面俱到地将调研的内容纳入到新系统中, 而有可能实现的很少,但其中在向细处扩充时将会很容易。也就是讲，当新系统设计出来时,开发人员很清楚新系统与旧系统相符合的程度,还有多大的余地或工作可以做,对用户提出的一些细致的问题都能够在系统中找到解决方法。</p>
												<p>2 以流程为主线</p>
												<p>在与用户交流的过程中，应该用流程将所有的内容串起来，如单据、信息、组织结构、处理规则等，这样便于交流沟通，符合用户的思维习惯。流程的描述既要有宏观，又要有微观。即要强调总体的业务流程、全生命周期的业务流程，又要对流程细化，有分支的业务流程。在分析企业流程并进行优化时，要把握几个方面： </p>
												<ul>
														<li>该流程中是否存在不必要的环节？ 
</li>
														<li>是否可以将决策的权力下放到作业部门？ 
</li>
														<li>流程是否可以简化？ 
</li>
														<li>是否可以省略一些环节？ 
</li>
														<li>流程中的每个处理环节是否起到了增值的作用？ 
</li>
														<li>哪些流程可以并行处理？ 
</li>
														<li>与需求并行可提前做的设计工作有哪些？例如：数据库概念模型设计？基础数据字典设计？ </li>
												</ul>
												<p>
														<strong>二 需求调研的五个步骤</strong>
												</p>
												<p>第一步：调研用户领域的组织结构、岗位设置、职责定义,从功能上区分有多少个子系统，划分系统的大致范围，明确系统的目标。</p>
												<p>第二步: 调研每个子系统所需的工作流程、功能与处理规则，收集单据、报表、帐本等原始资料，分析物流、资金流、信息流三者的关系，以及如何用数据流来表示这三者的关系。</p>
												<p>第三步: 对调研的内容事先准备,针对不同管理层次的用户询问不同的问题，列出问题清单。将操作层、管理层、决策层的需求既联系又区分开来，形成一个金字塔，使下层满足上层的需求。</p>
												<p>第四步: 对与用户沟通的情况及时总结归纳,整理调研结果,找出新的疑点，初步构成需求基线。</p>
												<p>第五步: 若基线符合要求，则需求分析完毕。反之返回到第一步或第二或第三步,如此循环多次，直到需要分析使双方满意为止。</p>
												<p>
														<strong>三 需求获取的重点</strong>
												</p>
												<p>在对具体业务进行调研时需把握的重点有以下几个:</p>
												<p>(1) 平均频度</p>
												<p>业务发生的频繁程度,即在单位时间(分钟,天,月,旬,年等)内发生的次数,这个数字可以是一个平均值或统计值。频度越高,数据量越大,对响应时间、易操作性等要求就越高,在数据存储时对大频度的业务或单据也要进行充分的考虑。</p>
												<p>(2) 高峰期的频度</p>
												<p>必须保证系统在高峰期的响应时间, 对系统进行测试时要模拟高峰期的业务频度。</p>
												<p>(3) 单据上有哪些数据?每项数据的精度?计算生成方法?取值范围或限定?</p>
												<p>单据上的内容也即单据的属性,它是进行数据结构设计的最基本的依据,数据的精度是定义数据库中字段长度的依据,计算生成方法是设计算法的依据,取值范围与计算生成方法是数据完整性检测的依据。</p>
												<p>(4) 生成每张单据或报表的时间</p>
												<p>减轻人员的工作量是采用新系统的一个目的,花费时间最多,处理方法最复杂的地方往往是系统最关键的地方,也是用户将来验收时最关心的地方。实际上有很多报表由于工作量相当大,用户没有足够的人力与时间来进行处理,这时他便想到了计算机。</p>
												<p>(5) 单据或报表的来源,单据联数,每联用途,送交单位,送交时间</p>
												<p>对来源与去向的追踪可以调查出各个业务,各个单据,各个报表, 各个部门之间的联系。 </p>
												<p>(6) 有哪些特殊情况? 在某个作业环节出错时通过何种途径进行弥补?</p>
												<p>对于特殊情况的处理,体现了系统灵活性,但这其中也隐含着安全危机。用户领域中有很多"合理但不合法,不合理也不合法"的特殊情况,它们出现的机会比较少, 用户往往在调研时遗漏这些问题,需要调研人员挖掘出来,这些特殊情况有时是系统必须处理的。</p>
												<p>当在某个作业环节用户出现失误时,手工系统有的采用正规的手续进行纠错,有的则相当随便,这些情况出现的概率也很小,但分析员可采用穷举的方法, 假定在每一个环节都出现失误,逐个环节询问用户的处理方法,防止遗漏。这些细节如果不调研清楚,往往会对系统产生深远的影响。</p>
												<p>(7) 将来有何变化?</p>
												<p>将来用户需求的变化是很正常的现象,如果仅仅着眼于现在,而不对将来有所考虑，系统的寿命便不会长久,对用户的投资是一种浪费,同时也会给开发商增加一些麻烦,故此要"防患于未然",将以后可能的变化考虑在内。</p>
												<p>
														<strong>四 需求整理与表达的方法 </strong>
												</p>
												<p>采用穷举、归纳、抽象等方法。采用穷举的方法可以避免遗漏, 可通过列出各种情况的排列组合达到穷举的目地。采用归纳的方法可以使问题更加条理化, 可通过对各种情况进行综合分类达到归纳的目地。采用抽象的方法，可以发现问题的实质，抓住问题的主要矛盾，忽略其次要矛盾。 </p>
												<p>在整理时可以多种手段共用，如组织结构图、业务流程图、多叉树、关系矩阵、文字叙述( 对其他描述手段的一种补充)、表格(单据调查表,帐本调查表,业务调查表,报表调查表等)、图形等多种手段。</p>
												<p>对与需求的描述可以从六方面来描述：</p>
												<ul>
														<li>组织结构与岗位定义 
</li>
														<li>业务流程 
</li>
														<li>处理规则 
</li>
														<li>数据项 
</li>
														<li>功能 
</li>
														<li>以及上述5个方面的关系 </li>
												</ul>
												<p>
														<strong>五 需求获取过程中的注意事项</strong>
												</p>
												<ol>
														<li>在调研前和用户讲清楚调研的意义、过程、以及需要注意的问题。<br />在调研过程中要经过多次反复, 用户不一定理解这个过程,调查时要和用户讲清楚。 
</li>
														<li>调查前的准备工作要作好。<br />在每次和用户见面前，要准备好问题单，对问题进行合理的分类,安排提问的次序,并事先提供给用户，便于用户准备，以提高工作效率。减少用户的反感情绪。 
</li>
														<li>发问时以一人为主,其他人注意记录与查找问题。 
</li>
														<li>在用户讲解时,不要中断用户,使对方有充分的演说机会。 
</li>
														<li>对询问的问题要有记录。这样便于整理文档,也便于统计工作量。 
</li>
														<li>调研时可以IPO思想作为总体的主线。<br />在我们同用户接触时,最先也是最易于和用户交流的是他们的业务,即每天他们在干什么?流程基本一样:收到别人传来的单据报表,进行加工处理,再传给其他人。就这样"接受、处理、传出",如此循环,就象车间里的流水生产线。工厂中三个基本的部门:供应科、生产车间、销售科,也反映了"输入(INPUT)、处理(PROCESS)、输出(OUTPUT)"的基本思想，因而在调研时采用这种思想易于同客户交流。 
</li>
														<li>注意交谈的技巧，并尽可能多的记住用户的姓名、职务、爱好等。<br />要在用户提供的单据中提炼出其中最本质的内容来。在调研开始、结束、中间疲老时可闲侃,拉近和用户的距离，和用户成为朋友。</li>
												</ol>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-19 15:02 <a href="http://www.cnitblog.com/szdlinxie/articles/20785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件项目的需求开发与管理</title><link>http://www.cnitblog.com/szdlinxie/articles/20784.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 19 Dec 2006 06:59:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20784.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20784.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20784.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20784.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<b>软件项目的需求开发与管理<br /><div class="daxiao14" align="left">江城（全国海关信息中心，北京，100000） 需求开发与管理是软件项目中一项十分重要的工作，据调查显示在众多失败的软件项目中，由于需求原因导致的约占到45%，因此，需求工作将对软件项目能否最终实现产生至关重要的影响。虽然如此，在项目开发工作中，很多人对需求的认识还远远不够，从本人参与或接触到的一些项目来看，小到几十万元，大到上亿元的软件项目的需求都或多多少的存在问题，有的是开发者本身不重视原因、有的是技术原因、有的是人员组织原因、有的是沟通原因、有的是机制原因，以上种种原因都表明做好软件需求开发是一项系统工作，而不是简单的技术工作，只有系统的了解和掌握需求的基本概念、方法、手段、评估标准、风险等相关知识，并在实践中加以应用，才能真正做好需求的开发和管理工作。 
<p class="main">  <strong>  </strong>本文将通过介绍关于软件需求的基本知识和个人在实际工作中总结的一些经验，帮助读者了解软件需求，学习需求开发的一些基本方法，避免因需求原因而导致的项目失败。 <br />  <strong>  1 什么是软件需求和需求工程 <br /><br />    <span class="style1"><font color="#0000ff">1.1 软件需求的定义 </font></span></strong><br />  <strong>  </strong>在IEEE软件工程标准词汇表(1997年)中定义软件需求为： <br />  <strong>  </strong>（1）用户解决问题或达到目标所需的条件或能力。 </p><p class="main">  <strong>  </strong>（2）系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或能力。</p><p class="main">  <strong>  </strong>（3）一种反映上面(1)或(2)所描述的条件或权能的文档说明。 实通俗的讲，“需求”就是用户的需要，它包括用户要解决的问题、达到的目标、以及实现这些目标所需要的条件，它是一个程序或系统开发工作的说明，表现形式一般为文档形式。 </p><p class="main">  <strong>  <span class="style3"><font color="#0000ff">1.2 需求工程的定义 </font></span></strong></p><p class="main">  <strong>  </strong>需求分析的过程，也叫做需求工程和需求阶段，它包括了需求开发和需求管理两个部分。需求开发是指从情况收集、分析和评价到编写文档、评审等一系列产生需求的活动，分为四个阶段：情况获取、分析、制订规格说明和评审。这四个阶段不一定是遵循线性顺序的，他们的活动是相互独立和反复的。需求管理是软件项目开发过程中控制和维持需求约定的活动，它包括：变更控制、版本控制、需求跟踪、需求状态跟踪等工作。 </p><p class="main">  <strong>  2 需求分析的风险 </strong></p><p class="main">  <strong>  </strong>由于需求分析的参与人员、业务模式、投资、时间等客观因素的影响和需求本身具有主观性和可描述性差的特点，因此，需求分析工作往往面临着一些潜在的风险。这些风险主要表现在： </p><p class="main">  <strong>  </strong>（1）用户不能正确表达自身的需求。在实际开发过程中，常常碰到用户对自己真正的需求并不是十分明确的情况，他们认为计算机是万能的，只要简单的说说自己想干什么就是把需求说明白了，而对业务的规则、工作流程却不愿多谈，也讲不清楚。这种情况往往会增加需求分析工作难度，分析人员需要花费更多的时间和精力与用户交流，帮助他们梳理思路，搞清用户的真实需求。 <br />  <strong>  </strong>（2）业务人员配合力度不够。有的用户日常工作繁忙，他们不愿意付出更多的时间和精力向分析人员讲解业务，这样会加大分析人员的工作难度和工作量，也可能导致因业务需求不足而使系统无法使用。 <br />  <strong>  </strong>（3）用户需求的不断变更。由于需求识别不全、业务发生变化、需求本身错误、需求不清楚等原因，需求在项目的整个生命周期都可能发生变化，因此，我们要认识到，软件开发的过程实际上是同变化做斗争的过程，需求变化是每个开发人员、项目管理人员都会遇到的问题，也是最头痛的问题，一旦发生了需求变化，就不得不修改设计、重写代码、修改测试用例、调整项目计划等等，需求的变化就像是万恶之源，为项目的正常的进展带来不尽的麻烦。 <br />  <strong>  </strong>（4）需求的完整程度。需求如何做到没有遗漏？这是一个大问题，大的系统要想穷举需求几乎是不可能的，即使小的系统，新的需求也总会不时地冒出来。一个系统很难确定明确的范围并把所有需求一次性提出来，这会导致开发人员在项目进展中去不断完善需求，先建立系统结构再完成需求说明，造成返工的可能性很大，会给开发人员带来挫折感，降低他们完成项目的信心。 <br />  <strong>  </strong>（5）需求的细化程度。需求到底描述到多细，才算可以结束了？虽然国家标准有需求说明的编写规范，但具体到某一个需求上，很难给出一个具体的指标，可谓仁者见仁，智者见智，并没有定论。需求越细，周期越长，可能的变化越多，对设计的限制越严格，对需求的共性提取要求也越高，相反，需求越粗，开发人员在技术设计时不清楚的地方就越多，影响技术设计。 <br />  <strong>  </strong>（6）需求描述的多义性。需求描述的多义性一方面是指不同读者对需求说明产生了不同的理解；另一方面是指同一读者能用不同的方式来解释某个需求说明。多义性会使用户和开发人员等项目参与者产生不同的期望，也会使开发、测试人员为不同的理解而浪费时间，带来不可避免的后果便是返工重做。 <br />  <strong>  </strong>（7）忽略了用户的特点分析。分析人员往往容易忽略了系统用户的特点，系统是由不同的人使用其不同的特性，使用频繁程度有所差异，使用者受教育程度和经验水平不尽相同。如果忽略这些的话，将会导致有的用户对产品感到失望。 <br />  <strong>  </strong>（8）需求开发的时间保障。为了确保需求的正确性和完整性，项目负责人往往坚持要在需求阶段花费较多的时间，但用户和开发部门的领导却会因为项目迟迟看不到实际成果而焦虑，他们往往会强迫项目尽快往前推进，需求开发人员也会被需求的复杂和善变折腾的筋疲力尽，他们也希望尽快结束需求阶段。 </p><p class="main">  <strong>  3 如何做好需求工作 </strong></p><p class="main">  <strong>  </strong>需求分析是软件项目开发中最困难的一项工作，它不仅要求分析人员具有丰富的需求分析经验和良好的专业素质，还要求分析人员具有良好的学习能力、公关能力、语言能力和组织能力。在实际工作中分析人员要面对不同的单位、不同的部门、不同的人员、不同的文化、不同的关系、不同的管理水平等等不同的情况，面对如此纷繁复杂的环境，如何做好需求分析工作？首先需要建立一个有效的工作机制，只有建立了工作机制，才能保证需求工作按照既定方案执行，需求开发和管理的参与者才会在一种有序的状态下工作。其次才是充分运用工作机制和个人能力去获取问题、分析问题、编写需求文档和进行需求管理。 </p><p class="main">  <strong>  <span class="style3"><font color="#0000ff">3.1 建立需求分析工作机制需考虑的几个因素 </font></span></strong></p><p class="main">  <strong>  </strong>（1）抓住决策者最迫切和最关心的问题，引起重视。用户方决策者对项目的关心重视程度是项目能否顺利开展的关键，决策者的真实意图也是用户方的最终需求，因此，在开发过程中要利用一切机会了解决策者关心的问题，同时也要让他们了解项目的情况。在诸如谈判、专题汇报、协调会议、领导视察、阶段性成果演示等过程中用简短明确的语言或文字抓住领导最关心的问题，引导他们了解和重视项目的开发，当决策者认识到项目的重要性时，需求分析工作在人力、物力、时间上就有了保障。 <br />  <strong>  </strong>（2）建立组织保障，明确的责任分工。项目开发一般都会成立相应的项目组或工程组，目前，常见的组织形式是：产品管理组、质量与测试组、程序开发组、用户代表组和后勤保障组，各组的主要分工是：产品管理组负责确定和设置项目目标，根据需求的优先级确定功能规范，向相关人员通报项目进展。程序管理组负责系统分析，根据软件开发标准协调日常开发工作确保及时交付开发任务，控制项目进度。程序开发组负责按照功能规范要求交付软件系统。质量与测试组负责保证系统符合功能规范的要求，测试工作与开发工作是独立并行的。用户代表组负责代表用户方提出需求，负责软件的用户方测试。后勤保障组负责确保项目顺利进行的后勤保障工作。 <br />  <strong>  </strong>（3）建立良好的沟通环境和氛围。分析人员与用户沟通的程度关系到需求分析的质量，因此建立一个良好的沟通氛围、处理好分析人员与用户之间的关系显得尤其重要，一般情况，用户作为投资方会有一些心理优势，希望他们的意见得到足够的重视，分析人员应该充分的认识到这一点，做好心理准备，尽量避免与他们发生争执，因为我们的目的是帮助用户说出他们的最终需要。在沟通时分析人员应注意以下几个方面：1）态度上要尊重对方，但不谦恭。谦恭可能会让用户一时感到满意，但对长期合作并没有好处，尤其是在发生冲突的时候，用户会习惯性地感到自己的优势，而忽略分析人员地意见。2）分析人员要努力适应不同用户的语言表达方式。每个人都有自己的表达方式，所以优秀的分析人员应该是一个优秀的“倾听者”，他们能很快的适应用户的语言风格，理解他们的意思。3）善于表达自己，善于提问。分析人员在开口前应该先让对方充分表达他的意思，在领会了后，自己再说，尽量不要抢话。4）工作外的交流有助于增进理解，加强沟通。 <br />  <strong>  </strong>（4）需求质量控制要制度化需求的变化是软件项目不可避免的事实，因此需求质量控制是一项艰苦的工作，要保证该项工作的顺利实施，就必须有制度保证，这个制度可以在项目质量控制方案中制定，该方案主要是具体化、定量化的描述用户要求，形成全面、一致、规范的软件需求分析规格说明书，明确需求分析规格说明书的工作程序和要素，规范开发活动，为后续软件设计、实现、测试、评审及验收提供依据。在方案中要明确项目组各部门关于需求质量控制的职责，制定需求分析的工作程序，包括编制需求分析工作计划、编制《需求分析说明书》、《需求分析规格说明书》的评审和确认、《需求分析规格说明书》修改控制、确定需求质量控制的质量记录文档规范等内容。</p><p class="main">  <strong>  <span class="style3"><font color="#0000ff">3.2 需求开发与管理的一些方法 </font></span></strong></p><p class="main">  <strong>  </strong>需求开发是一项复杂的工作，使用的方法也很多，不同的开发方式有不同的方法，这里简单介绍一些相关的方法： <br />  <strong>  </strong>（1）绘制关联图：绘制系统关联图是用于定义系统与系统外部实体间的界限和接口的简单模型。 <br />  <strong>  </strong>（2）可行性分析：在允许的成本、性能要求下，分析每项需求实施的可行性，提出需求实现相关风险，包括与其它需求的冲突，对外界因素的依赖和技术障碍。 <br />  <strong>  </strong>（3）需求优先级：确定使用实例、产品特性或单项需求实现的优先级别。以优先级为基础确定产品版本将包括哪些特性或哪类需求。 <br />  <strong>  </strong>（4）系统原型：当用户自身对有的需求不十分清楚时，我们可以建立一个系统原型，用户通过评价原型更好地理解所要解决的问题。。 <br />  <strong>  </strong>（5）图形分析模型：绘制图形分析模型是编制软件需求规格说明重要手段。它们能帮助分析人员理清数据、业务模式、工作流程以及他们之间的关系，找出遗漏、冗余和不一致的需求。这样的模型包括数据流图、实体关系图、状态变换图、对话框图、对象类及交互作用图。 <br />  <strong>  </strong>（6）数据字典：数据字典是对系统用到的所有数据项和结构的定义，以确保开发人员使用统一的数据定义。在需求阶段，数据字典至少应定义客户数据项，确保客户与开发小组是使用一致的定义和术语。 <br />  <strong>  </strong>（7）质量功能调配：质量功能调配是一种高级系统技术，它将产品特性、属性与对客户的重要性联系起来。该技术提供了一种分析方法以明确哪些是客户最为关注的特性。它将需求分为三类：期望需求、普通需求、兴奋需求。 </p><p class="main">  <strong>  </strong>需求管理的目的就是要控制和维持需求事先约定，保证项目开发过程的一致性，使用户得到他们最终想要得产品。需求管理的方法主要包括以下一些方面：</p><p class="main">  <strong>  </strong>1）确定需求变更控制过程。制定一个选择、分析和决策需求变更的过程，所有的需求变更都需遵循此过程。</p><p class="main">  <strong>  </strong>2）进行需求变更影响分析。评估每项需求变更，以确定它对项目计划安排和其它需求的影响，明确与变更相关的任务并评估完成这些任务需要的工作量。通过这些分析将有助于需求变更控制部门做出更好的决策。</p><p class="main">  <strong>  </strong>3）建立需求基准版本和需求控制版本文档。确定需求基准，这是项目各方对需求达成一致认识时刻的一个快照，之后的需求变更遵循变更控制过程即可。每个版本的需求规格说明都必须是独立说明，以避免将底稿和基准或新旧版本相混淆。</p><p class="main">  <strong>  </strong>4）维护需求变更的历史记录。将需求变更情况写成文档，记录变更日期、原因、负责人、版本号等内容，及时通知到项目开发所涉及的人员。为了尽量减少困惑、冲突、误传，应指定专人来负责更新需求。</p><p class="main">  <strong>  </strong>5）跟踪每项需求的状态。可以把每一项需求的状态属性（如已推荐的，已通过的，已实施的，或已验证的）保存在数据库中，这样可以在任何时候得到每个状态类的需求数量。</p><p class="main">  <strong>  </strong>6）衡量需求稳定性。可以定期把需求数量和需求变更（添加、修改、删除）数量进行比较。过多的需求变更"是一个报警信号"，意味着问题并未真正弄清楚。 </p><p class="main">  <strong>  4 需求分析评价标准 </strong></p><p class="main">  <strong>  </strong>如何判断需求规格说明的好坏，不同的软件工程规范都有自己的一套标准，这里向大家介绍一个比较常见的NASA SEL推荐方法，它是由美国国家航空和航天局软件工程实验室开发的五大常用国际软件工程规范之一，它对软件需求过程的评价标准是：清晰、完整、一致、可测试。 <br />  <strong>  </strong>（1）清晰：目前大多数的需求分析采用的仍然是自然语言，自然语言对需求分析最大的弊病就是它的二义性，所以开发人员需要对需求分析中采用的语言做某些限制。例如尽量采用主语＋动作的简单表达方式。需求分析中的描述一定要简单，千万不要采用疑问句、修饰这些复杂的表达方式。 除了语言的二义性之外，注意不要使用行话，就是计算机术语。需求分析最重要的是和用户沟通，可是用户多半不是计算机的专业人士，如果在需求分析中使用了行话，就会造成用户理解上的困难。 <br />  <strong>  </strong>（2）完整：需求的完整性是非常重要的，如果有遗漏需求，则不得不返工，在软件开发过程中，最糟糕的事情莫过于在软件开发接近完成时发现遗漏了一项需求。但实际情况是，需求的遗漏是常发生的事情，这不仅仅是开发人员的问题，更多发生在用户那里。要做到需求的完整性是很艰难的一件事情，它涉及到需求分析过程的各个方面，贯穿整个过程，从最初的需求计划制定到最后的需求评审。 <br />  <strong>  </strong>（3）一致：一致性是指用户需求必须和业务需求一致，功能需求必须和用户需求一致。在需求过程中，开发人员需要把一致性关系进行细化，比如用户需求不能超出预前指定的范围。严格的遵守不同层次间的一致性关系，就可以保证最后开发出来的软件系统不会偏离最初的实现目标。 <br />  <strong>  </strong>（4）可测试：一个项目的测试从什么时候开始呢？有人说是从编码完成后开始，有人说是编码的时候同时进行单元测试，编码完成后进行系统测试，这些结论都不完全正确。实际上，测试是从需求分析过程就开始了，因为需求是测试计划的输入和参照。这就要求需求分析是可测试的，只有系统的所有需求都是可以被测试的，才能够保证软件始终围绕着用户的需要，保证软件系统是成功的。 </p></div></b>
				</span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-19 14:59 <a href="http://www.cnitblog.com/szdlinxie/articles/20784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>需求的变化就是创新的机会</title><link>http://www.cnitblog.com/szdlinxie/articles/20783.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 19 Dec 2006 06:58:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20783.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20783.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20783.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20783.html</trackback:ping><description><![CDATA[经常遇到做软件设计的朋友抱怨用户的需求老是变化，自己不断的修改自己的设计，结构搞得自己疲惫不堪，而且软件的应用效果也不理想。其实类似的问题每个人都会遇到，关键是我们应该如何对待，如果我们总是不断的修改代码以适应用户的要求，这时候我们应该考虑软件是否具备足够的让软件开发人员自己比较舒适的适应能力，如果不具备这种能力，则改进设计，甚至具备足够的适应能力，否则，软件设计真的就成了苦差事。<br /><br />    软件设计师不应该害怕需求的变化，更不应该为需求的变化而烦恼，任何需求的变化都可能蕴藏着巨大的机会，这种机会就是创新，这种创新就是未来的市场机遇，就是企业的进步的推动力。创新源于需求的不断变化。这是多年来从事软件开发工作的一点非常深刻的体会，这种变化包括各个方面的，可能是硬件的变化，可能是操作系统的变化，可能是用户群的变统统可以归结为用户需求的变化。我们的软件产品就是在需求不断的变化之中发展的。<br /><br />    如果我们为用户编写了一个软件，不管具体实现的功能如何，只要上述的几种变化出现，我们都不得不不对软件的设计进行调整，有时可能需要对系统的整体框架进行调，甚至重写部分或全部的源代码。刚开始学习编程的时，总是希望一条语句表达尽可能多的含义，梦想一个算法解决所有的问题，一个程序满足所有用户的要求，但这是不可能的，因为我们周围的世界处于不断的变化之中，今天你写的程序完全满足用户要求，一段时间之后，用户的系统升级了，你的程序在新的系统上运行就会产生错误，所以你必须更新程序以适应这种变化。这种变化还包括机器主板的变化引起硬件的冲突，某种型号板卡的停产或改型，用户特别指定的硬件设备等等。另外，我们的头脑不可能聪明到完全可以预览未来发生的事情，所有很难设计一个一劳永逸的软件，另外市场的选择，竞争对手的压力，也逼着我们不断的修改设计。<br /><br />    需求的变化是一个客观存在的事实，软件设计人员必须正确的面对这样的事实，不要指望你辛辛苦苦编写了一年的代码之后，你就可以高枕无忧，尽管你对软件的架构、算法处理的非常好，甚至可以说是完美，然而所有的你所津津乐道的那些完美的设计，都是相对的，当用户 的需求开始发生变化的时候，他们可能提出要增加一个新的功能，那么你很可能要改进设计。 除非你设计的东西没有人使用，否则对设计的更改总是不可避免的。<br /><br />    2000年底的时候，我的第一个商品化软件完成，尽管我不觉得多么好，但是在同其他厂商的竞争中赢得了用户的青睐，听到从市场上反馈的信息，我当时的感觉非常好，然而，很快我不得不修改我的代码，除了程序中存在的一些BUG之外，在用户群不到增加的情况下，用户的要求开始发生变化了，例如：A用户希望整个界面的字体采用楷体比较好，B用户50多岁的人比较多，希望字体能够大一些，可以看得清楚，C用户希望界面上的“医生”改为“医师”，D用户希望界面上的字段数量少一些，等等诸如此类的。关键是有些用户的需求是存在冲突 的，如果程序满足了张三的要求，而张三所要求的东西恰恰是李四要极力避免的，所以对于使用VB时间不长，经验不多的我来说，只能靠保留多个版本来解决这样的问题，我为每个用户保留一个备份，这样每个用户的要求都可以满足了，但是后期的代码的维护几乎让我陷入绝望的境地，试想一下，一个存在问题的函数，需要你在10个甚至更多的版本上同时修改，是一种什么样的感觉，而且每个版本的程序都多少有点区别，任何一次修改，你都必须小心翼翼，一不留神就会产生一个新的BUG，这种更改让人精神紧张。或许，我应该使用VSS之类的工具管理代码，但是我当时根本不知道世界上有这样的一种工具。所以在万般无奈之下，我必须想办法拯救自己，可不能陷入到需求变化和版本层出不穷的深渊，于是我开始构思下一版的软件，这个软必须能够解决现有版本的程序所面临的一切问题，同时可以支持网络版的功能。<br /><br />    在2002年，与后来的两个同时鼎力合作，终于在11月份完成的这个新版本的程序，整个程序界面上的控件都是在程序启动时动态创建，可以直接编辑，编辑完成之后将界面信息保存到数据库中，下次启动应用程序时再从数据库中动态加载界面，界面上的字体，颜色，甚至整个界面的风格都可以由用户自己选择。当这个软件第一次推出的时候，用户也比较喜欢，很多设计非常新颖。直到今天，这个版本的程序还在不断的完善，但是程序的样子与2002年11月相比，已经大不相同了，现在的程序更加美观，看起来更加专业，使用更为方便，也更稳定。但是这个程序比较庞大，因为它要同时支持Access和SQL Server数据库。这个程序也就成了我们的产品由单机版向网络版过度的一个桥梁。这就是我们的第三版软件。<br /><br />    可以说第三版软件彻底解决了第二版软件面临的问题，但是在网络方面遇到了挑战，那就是所有的网络版软件都面临的问题：流程的变更和业务规则的变更。第三版的设计初衷就是为了解决第二版遇到的问题，不过为了节约工作量，同时兼顾了网络版的功能，这就导致了第三版代码比较多，其中经常出现是单击版还是网络版的判断。对于网络版的用户需求的适应能力，第三版显得有点吃力了，我们不得不在程序中专门为某个用户增加一些特殊的处理，当网络版的用户快接近10家的时候，我们的噩梦又开始了，当然比第二版要乐观一点，因为VC中可以使用预编译条件解决了不少的问题，例如一个对话框资源可以根据不同的条件显示不同的外观等等。由于针对多家用户添加的那些if else实在是太多了，修改一个地方，一不小心就会影响其他的功能。当然这也与第三版程序结构的设计不太合理有关系，因为这个版本的程序我依然是在现蒸现卖，卖到2005年底的时候，我对于VC才有了点感觉，什么是面向对象的设计，什么是设计模式，系统架构等等的概念开始接触和学习。<br /><br />    在2003年非典刚刚开始的时候，我们的第一个网络版用户开始装机，从那时起第三版软件开始了网络版的考验，从第三个网络用户开始我就不得不规划第四版软件了，这个新版本的软件必须同时解决第二版和第三版所遇到的所有问题，同时可以非常方便的解决流程的变更和业务规则的变更问题。2004年2月,我正式开始设计第四版软件，这个软件可以设计界面，设计流程，增加和编辑业务规则，而且支持脚本和二次开发，到2005年11月，我们的BUG管理器通过第四版软件配置完成了，现在用得很好，到元旦前，估计我们得计划管理器也可以配置出来。这个版本的软件就像一个平台，可以搭建起几乎所有的数据库管理软件实现的功能，从而开发人员可以自如的面对用户需求 的变化。当然，并不是所有的需求都可以在不改变程序代码的情况下实现，但是相对于第三版软件，新版本的软件已经很优秀了，至少我们不需要为了实现每个用户的要求而修改程序的代码。另外，同第三版软件相比，该版软件的系统架构好多了，尽可能采用面向对象的设计，关于设计模式的很多规则也应用了不少。<br /><br />    软件设计师就是为了解决麻烦而存在的，既要解决用户的麻烦，也要解决自己的麻烦，在这样的过程中不断的进步。抱着这样的一种心态，我们可以从容面对用户需求的变化，如果我们设计的软件不能够做到随需应变，那么很可能软件的结构和设计上遇到了问题，我们必须考虑如何改进设计以适应这种变化，如果你绞尽脑汁之后发现修改代码将会把一切搞得更糟，那么我们应该考虑是否重新设计一个新的产品。<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-19 14:58 <a href="http://www.cnitblog.com/szdlinxie/articles/20783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件项目获取用户需求的沟通技巧</title><link>http://www.cnitblog.com/szdlinxie/articles/20782.html</link><dc:creator>szdlinxie</dc:creator><author>szdlinxie</author><pubDate>Tue, 19 Dec 2006 06:56:00 GMT</pubDate><guid>http://www.cnitblog.com/szdlinxie/articles/20782.html</guid><wfw:comment>http://www.cnitblog.com/szdlinxie/comments/20782.html</wfw:comment><comments>http://www.cnitblog.com/szdlinxie/articles/20782.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/szdlinxie/comments/commentRss/20782.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/szdlinxie/services/trackbacks/20782.html</trackback:ping><description><![CDATA[
		<div class="style7" align="center">
				<span style="FONT-SIZE: 12pt">
						<strong>软件项目获取用户需求的沟通技巧<br /></strong>软件开发生命周期包含需求、设计、编码和测试四个过程阶段,其中需求过程是第一个也是最重要的一个阶段。软件需求包括三个不同的层次:业务需求，说明了提供给客户和产品开发商的新系统的利益,反映了组织机构或客户对系统、产品高层次的目标要求，它们将在项目视图与范围文档中予以说明;用户需求，描述了用户使用系统必须要完成的任务，这在使用实例文档或方案脚本说明中予以说明;功能需求和非功能需求，定义了开发人员必须实现的软件功能，使得用户能顺利完成他们的任务，从而满足了业务需求。 
<p><strong>　软件需求过程包括了5个主要活动：需求获取、需求分析和确认、编写需求规格说明书、需求验证和需求管理。</strong></p><p><strong>　需求获取</strong></p><p><strong>　需求的收集、分析、细化、核实并组织的步骤，并将它编写成文档。这个活动包括了编写项目视图和范围文档、用户群分类、选择用户代表、建立核心队伍、确定使用实例、召开联合会议、分析用户工作流程、确定质量属性、检查问题报告和需求重用10个具体任务，文章将在后面进行详细的阐述。</strong></p><p><strong>　需求分析</strong></p><p><strong>　根据需求获取中得到的需求文档，分析系统实现方案。这个活动需要完成下面几个任务：<br />　　<br />　   1、绘制关联图，用于定义系统与系统外部实体间的边界和接口的简单模型；</strong></p><p><strong>　2、创建开发原型，当开发人员或用户不能明确某些需求时，开发一个系统原型，这样使得许多概念和可能发生的事更为直观明了；</strong></p><p><strong>　3、分析可行性，在允许的成本、性能要求下，分析每项需求实施的可行性，明确每项需求实现相联系的风险，包括与其它需求的冲突，涉及各类用户的利益平衡，对外界因素的依赖和技术障碍；</strong></p><p><strong>　4、确定需求优先级：分析方法来确定使用实例、系统特性或单项需求实现的优先级别，以优先级为基础确定产品版本将包括哪些特性或哪类需求；</strong></p><p><strong>　5、为需求建立模型，为需求建立图形分析模型是软件需求规格说明极好的补充说明，可以为系统需求从多个角度建模；</strong></p><p><strong>　6、编写数据字典，创建数据字典数据字典是对系统用到的所有数据项和结构的定义，以确保开发人员使用统一的数据定义；</strong></p><p><strong>　7、应用质量功能调配，将系统特性、属性与对客户的重要性联系起来，提供了一种分析方法以明确哪些是客户最为关注的特性。<br />　编写需求规格说明书</strong></p><p><strong>　需求开发的最终成果是客户和开发小组对将要开发的产品达成一致协议，这一协议就是通过文档化的需求规格说明书来体现。需求规格说明书包括项目视图和范围文档说明了系统的业务需求，而使用实例文档则说明了用户需求。这个活动需要完成下面几个任务：</strong></p><p><strong>　1、采用模版,在你的组织中要为编写软件需求规格说明书等文档定义一种标准模板,该模板为记录系统需求和各种其它与需求相关的重要信息提供了统一的结构；</strong></p><p><strong>　2、指明需求来源，为了让所有项目风险承担者明白需求规格说明书中为何提供这些功能需求，要能追溯每项需求的来源，来源可能是一种使用实例或其它客户要求，也可能是某项更高层系统需求、业务规范、政府法规、标准或别的外部来源，这些来源应该记录在需求的跟踪能力矩阵中；</strong></p><p><strong>　3、为每项需求注上标号，为了需求的可跟踪性和可修改性的质量标准，必须唯一确定每个软件需求，为制定一种惯例来为需求规格说明书中的每项需求提供一个独立的可识别的标号或记号;</strong></p><p><strong>　4、记录业务规范，是指关于系统的操作原则，比如谁能在什么情况下采取什么动作,将这些编写成需求规格说明书中的一个独立部分，或一独立的业务规范文档;</strong></p><p><strong>　5、创建需求跟踪能力矩阵，建立一个矩阵把每项需求来源、定义与实现、测试它的设计和代码部分联系起来,这样有利于需求的管理和需求变更影响范围的评估。</strong></p><p><strong>　需求验证</strong></p><p><strong>　需求的验证是为了确保需求说明准确、完整，表达必要的质量特点,需求将要作为系统设计和最终验证的依据,因此一定要保证它的正确性。需求验证务必确保符合完整性、正确性、灵活性、必要性、无二义性、一致性、可跟踪性及可验证性这些良好特征。这个活动需要完成下面几个任务：</strong></p><p><strong>　1、审查需求文档，对需求文档进行正式审查是保证软件质量的有效的方法。组织一个由不同代表（如用户，分析人员，设计人员，测试人员）组成的小组，对需求规格说明书及相关模型进行仔细的检查；</strong></p><p><strong>　2、依据需求编写测试用例，根据用户需求所要求的产品特性写出系统的功能测试用例作为系统测试依据；</strong></p><p><strong>　3、编写用户手册，在需求开发早期即可起草一份用户手册，用它作为需求规格说明的参考并辅助需求分析;</strong></p><p><strong>　4、确定合格的标准，需求说明中描述什么样的产品才算满足用户的要求和适合他们使用的，将合格的测试建立在使用情景描述或使用实例的基础之上。<br /><br />　需求管理</strong></p><p><strong>　需求管理是组织、控制和文档化需求的系统方法，也是一种建立和维护用户和开发组织对于改变系统功能的协议。需求开发的结果经验证批准就定义了开发工作的需求基线,这个基线在客户和开发人员之间就构筑了一个需求约定，需求管理包括在项目进展过程中维持需求约定一致性和精确性的活动。现在很多商业化的需求管理工具都能很好的支持需求管理活动。这个活动需要完成下面几个任务：</strong></p><p><strong>　1、确定变更控制过程,确定一个选择、分析和决策需求变更的过程,所有的需求变更都需遵循此流程;</strong></p><p><strong>　2、建立软件变更控制委员会(SCCB，Software Change Control Board),组织一个由项目风险承担者组成的小组作为变更控制委员会，由他们来评估和确定需求变更;</strong></p><p><strong>　3、进行变更影响分析,评估需求变更对项目进度、资源、工作量和项目范围以及其它需求的影响;</strong></p><p><strong>　4、跟踪变更影响的产品,当进行某项需求变更时，参照需求跟踪能力矩阵找到相关的其它需求、设计文档、源代码和测试用例，这些相关部分可能也需要修改；</strong></p><p><strong>　5、建立基准和控制版本,需求文档确定一个基线，这是一致性需求在特定时刻的快照，之后的需求变更就遵循变更控制过程即可;</strong></p><p><strong>　6、维护变更的历史记录,记录变更需求文档版本的日期以及所做的变更、原因，还包括由谁负责更新和更新的新版本号等情况;</strong></p><p><strong>　7、跟踪每项需求的状态,这里状态包括"确定"、"已实现"、"暂缓"、"新增"、"变更"　等。建立一个数据库，其中每一条记录记录一项需求;</strong></p><p><strong>　8、衡量需求稳定性,记录基线需求的数量和每周或每月的变更（添加、修改、删除）数量。</strong></p><p><strong><img height="931" src="http://www.51testing.com/ddimg/uploadimg/20051230/1640260.gif" width="481" border="0" /></strong></p><p><strong>　需求获取是在问题及其最终解决方案之间架设桥梁的第一步，是软件需求过程的主体。一个项目的目的就是致力于开发正确的系统，要做到这一点就要足够详细地描述需求，也就是系统必须达到的条件或能力，使用户和开发人员在系统应该做什么，不应该做什么方面达成共识。我们都知道开发软件系统最为困难的部分就是准确说明开发什么，最为困难的概念性工作便是编写出详细技术需求，这包括所有面向用户、面向机器和其它软件系统的接口。</strong></p><p><strong>　获取需求就是为了解决这些问题，它必不可少的成果就是是对项目中描述的用户需求的普遍理解，一旦理解了需求，分析者、开发者和用户就能探索出描述这些需求的多种解决方案。这一阶段的工作一旦做错，将最终会给系统带来极大损害的部分，由于需求获取事物造成的对需求定义的任何改动，都将导致设计、实现和测试上的大量返工，而这时花费的资源和时间将大大超过仔细精确获取需求的时间和资源。</strong></p></span>
		</div>
<img src ="http://www.cnitblog.com/szdlinxie/aggbug/20782.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/szdlinxie/" target="_blank">szdlinxie</a> 2006-12-19 14:56 <a href="http://www.cnitblog.com/szdlinxie/articles/20782.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>