阅读使人充实,会谈使人敏捷,写作与笔记使人精确。 史鉴使人明智;诗歌使人巧慧;数学使人精细;博物使人深沉;伦理之学使人庄重;逻辑与修辞使人善辩。-培根

发布新日志

  • 游戏中对象选取的方法

    caianying 发布于 2007-01-07 15:35:31

    对于PC游戏,在鼠标大行其道的今天,如何由鼠标的位置判定其下的对象是什么,是几乎所有游戏都必须面对的问题。

    以下提供几种方法,仅供参考。

    1、包围框法:
      一般的,对游戏中的每个对象创建一个伴随的包围框,通过遍历所有可见对象,判定鼠标坐标点是否落在某个包围框的内部来获取其选取的对象。这种方法的优点是简单,算法容易理解,当使用矩形包围框,而对象数量又比较有限的时候,效率也是很好的。缺点是选取不够精确,无法对对象的细节做选取。在2D游戏中,包围框一般是矩形,或者是若干个矩形的组合,而3D游戏使用包围盒,或者包围球或其组合等方式。无论具体方式如何,其算法实质都是一样的。

    2、枚举法:
      效率最低的方法之一。和1,包围框法类似,它也需要遍历所有可见对象,但是由于缺少包围盒机制,只能检测对象位于鼠标下的那个位置是否有有效象素,或者有效的alpha值,对3D对象而言,就是检查鼠标点形成的选取射线是否穿越对象的某个面片。这种方法可以实现很精确的选取,但是由于效率太低,所以很少直接使用,一般先使用方法1减少遍历对象的数量之后,再使用这个方法达到精确的选取。

    3、反馈法:
      这是一个很有效,也很快捷的方法,尤其在3D游戏中,有无可比拟的优越性。反馈法的实现很简单,首先要维护一个后台缓冲区,当绘制目标对象的时候,同时将对象的可见信息(一般是对象图片的Alpha值,或者Z值) 写入后台缓冲,然后检测鼠标对应的缓冲区的位置的值是否有变化,如果变化了,表明刚才绘制的对象可以被鼠标选中。当缓冲使用了复杂一些的Z运算的时候,我们在绘制完成之后,就可以得到一个鼠标可以选取的对象列表,然后只要简单的根据一定的原则从这个列表中提取需要的对象就可以了。这个机制在2D下,一般不维护额外的缓冲区而直接使用绘图缓冲区。3D下,像OpenGL提供了内置的反馈方法,更方便了用户的使用。实际也可以利用Z buffer,模板缓冲等实现类似的机制。这种方法可以实现精确到象素级的选取,而几乎不影响运行效率。缺点是需要对绘制部分的代码有很高的控制权限。

    4、直接映射法:
      这也是一个高效算法,可以达到O(1)的时间复杂度。常见于2D战棋类游戏中。在这类游戏中,场景是用一个二维表存储的,表的每个项,保存着它上面的对象信息,我们可以通过一个简单的算法,由当前的鼠标位置得到表的索引,然后直接读取索引对应的项就完成了选取。在固定视角的3D游戏甚至非固定视角的3D游戏中,也可以使用这种方法。这种方法的缺点是对象在场景中,只能是按二维表,或者多层二维表排布的。这种方法对内存空间的需求也比较大。棋牌类游戏比较适合使用这种方法。

      由于每种方法都有其固有的优缺点,而对游戏而言,场景又千变万化,复杂纷繁。为了能适应实际的需求,上面的方法可以组合使用,从而扬长避短,更好的达成需求。其他一些复杂的选取,比如范围选取(框选)等,也可以由以上几种基本的方法演化而来。

  • 迷茫中见彩虹

    ooclp 发布于 2007-08-31 10:47:58

        最近很心烦,遇到了工作中一道坎,前辈告诉我那是必经的心里过程,证明在成长,我就把这个痛苦的过程当糖吃。

        前辈说我对自己的期望值过高了,完成了这样,就想做下一样,并且每样都想做到最好,忽然有一天停下来,没事做了,就觉得心里空空的,就像上紧了的发条,突然松开,“死伤惨重”。

        其实已经很久没有好好休息了,过了近两个月一周加班四天的生活,早上七点起,不加班七点到家,加班九点半到家。算了一下,一天最少上班十个半小时,最多十二个小时。一周上班时间64个小时,一周的时间为168个小时,上班的时间占到了38%,睡觉时间占28%(按每天8小时算),吃饭和公交车上的时间占12%(按每天3小时算),休息的时间为22%。朋友问我上班的感觉如何,我就一个字,“累”!!

        努力的工作也不是没有回报,没有肯定,我们部门就我一个测试人员,就我一个女生,上个月的“优秀员工”给我了,我觉得很开心,跟同事相处也很愉快。

        我就是那样一个人,做什么事都会尽心尽力去做,对我好一分的人我会十分的报答于人。

        我很幸福,有爱我的父母,有爱我的男友,在父母的支持下,我们刚毕业就有了自己的家,我很满足,生活中没有惊喜,但处处甜蜜。

        我的QQ名叫“下一次微笑”,我觉得人生处处都是分岔路,走错了也没有关系,下一个分岔路总会有“微笑”。人生中总有那样一道“彩虹”,风雨后就会出现,退一步海阔天空。

  • LoadRunner7.8测试流程

    ooclp 发布于 2007-09-04 10:56:38

    Loadrunner中参数设置详细分析,相信对大家会有用的,这个版本是基于7.8的。
    做负载或者压力测试时,很多人选择使用了Loadrunner测试工具。该工具的基本流程是先将用户的实际操作录制成脚本,然后产生数千个虚拟用户运行脚本(虚拟用户可以分布在局域网中不同的PC机上),最后生成相关的报告以及分析图。但是在录制脚本的过程中会遇到很多实际的问题,比如不同的用户有不同的使用数据,这就牵涉到参数的设置问题。本文就Loadrunner中参数的设置进行说明,希望对大家有所帮助。
        在录制程序运行的过程中,VuGen(脚本生成器)自动生成了包含录制过程中实际用到的数值的脚本。如果你企图在录制的脚本中使用不同的数值执行脚本的活动(如查询、提交等等),那么你必须用参数值取代录制的数值。这个过程称为参数化脚本。
        本文主要包括如下内容:理解参数的局限性、建立参数、定义参数的属性、理解参数的类型、为局部数据类型设置参数的属性、为数据文件设置参数的属性、从已经存在的数据库中引入数据。
        除了GUI,以下的内容适合于各种类型的用户脚本。
    一、关于参数的定义
        在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本。函数中参数的值就是在录制过程中输入的实际值。
        例如,你录制了一个Web应用程序的脚本。脚本生成器生成了一个声明,该声明搜索名称为“UNIX”的图书的数据库。当你用多个虚拟用户和迭代回放脚本时,也许你不想重复使用相同的值“UNIX”。那么,你就可以用参数来取代这个常量。结果就是你可以用指定的数据源的数值来取代参数值。数据源可以是一个文件,也可以是内部产生的变量。
        用参数表示用户的脚本有两个优点:
    ① 可以使脚本的长度变短。
    ② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。
        参数化包含以下两项任务:
    ① 在脚本中用参数取代常量值。
    ② 设置参数的属性以及数据源。
        参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。另外,不是所有的函数都可以参数化的。
     
    二、参数的创建
        可以指定名称和类型来创建参数。不存在对脚本中参数个数的限制。在Web程序的用户脚本中,你可以使用如下过程在基于文本的脚本视图中创建参数。或者,也可以在基于图标的树形视图中创建参数。
        在基于文本的脚本视图中创建一个参数:
    1、 将光标定位在要参数化的字符上,点击右键。打开弹出菜单。
    2、 在弹出菜单中,选择“Replace with a Parameter”。选择或者创建参数的对话框弹出。
    3、 在“Parameter name”中输入参数的名称,或者选择一个在参数列表中已经存在的参数。
    4、 在“Parameter type”下拉列表中选择参数类型。
    5、点击“OK”,关闭该对话框。脚本生成器便会用参数中的值来取代脚本中被参数化的字符,参数用一对“{}”括住。
        注意:在参数化CORBA或者General-Java 用户脚本的时候,必须参数化整个字符串,而不是其中的部分。另外注意:除了Web或者WAP,缺省的参数括号对于任何脚本都是 “{}”。你可以在“General Options”对话框中的“Parameterization”标签(Tools>General Options)中定义参数括号种类。
    6、用同样的参数替换字符的其余情况,选中参数,点击右键,弹出菜单。从弹出的菜单中,选择“Replace More Occurrences”。搜索和替换对话框弹出。“Find What”中显示了你企图替换的值。“Replace With”中显示了括号中参数的名称。选择适当的检验框来匹配整个字符或者大小写。如果要搜索规则的表达式(.,!,?等等),选中“Regular Expression”检验框,然后点击“Replace”或者“Replace All”。
        注意:小心使用“Replace All”,尤其替换数字字符串的时候。脚本生成器将会替换字符出现的所有情况。
    7、如果想用以前定义过的参数来替换常量字符串的话,选中该字符串,点击右键,然后选择“Use Existing Parameter”,子菜单“Use Existing Parameters”弹出。从子菜单“Use Existing Parameters”选择参数,或者用“Select from Parameter List”来打开参数列表对话框。
        注意:如果用以前定义过的参数来替换常量字符串的话,那么,使用“Parameter List”非常方便。同时,还可以查看和修改该参数的属性。
    8、对于已经用参数替换过的地方,如果想取回原来的值,那么,就在参数上点击右键,然后选择“Restore Original value”。
        在Web用户脚本的树形视图中创建参数:
    1、将光标定位在企图参数化的地方,点击右键,从弹出的菜单中选择“Properties”。则相关的属性对话框打开。
    2、点击在要参数化的参量的旁边的“ABC”形状的图标。“Select or Create Parameter”对话框打开。
    3、在“Parameter name”中输入参数的名称,或者从列表中选择一个已经存在的参数。
    4、在“Parameter type”中输入参数的类型。
    5、点击“OK”关闭该对话框。用户脚本生成器会用参数来替换最初的字符串常量,并用一个表格形状的图标替换“ABC”形状的图标。
    6、要恢复参数化以前的值,点击图标,然后从弹出的菜单中选择“Undo Parameter”,则以前的值便会重现。
     
    三、定义参数的属性
        创建参数完成后,就可以定义其属性了。参数的属性定义就是定义在脚本执行过程中,参数使用的数据源。在Web用户脚本中,你既可以在基于文本的脚本视图中定义参数属性,也可以在基于图标的树形视图中定义参数属性。下面的过程将教你如何在基于本文的脚本视图中定义参数属性。
        在基于文本的脚本视图中定义参数属性步骤:
    1、 在参数上点击右键,有菜单弹出。
    2、 在弹出的菜单中,选择“Parameter Properties”。参数属性对话框打开,显示和当前参数类型相关的属性。
    3、 输入参数的属性值。
    4、 点击“Close”关闭参数属性对话框。
        在Web用户脚本的树形视图中定义参数的属性:
    1、将关标定位在参数上,然后点击右键,选择“Properties”。属性对话框打开。
    2、点击要定义属性的参数旁边的表格形状按钮,点击右键,选择“Parameter Properties”。参数属性对话框打开,和参数类型相关的属性显示出来。
    3、 输入参数的属性。
    4、 点击“Close”关闭参数属性对话框。
        使用参数列表:
      使用参数列表可以在任意时刻查看所有的参数,创建新的参数、删除参数,或者修改已经存在参数的属性。
    1、 点击参数列表按钮或者用“Vuser>Parameter List”。参数列表对话框打开。
    2、要创建新的参数,点击“New”按钮。新的参数则被添加在参数树中,该参数有一个临时的名字,你可以给它重新命名,然后回车。设置参数的类型和属性,点击“OK”,关闭参数列表对话框。
        注意:不要将一个参数命名为“unique”,因为这个名称是用户脚本生成器本身的。用户脚本生成器创建新的参数,但是不会自动用该参数在脚本中替换任意选中的字符串。
    3、要删除已有的参数,那么,要先从参数树中选择该参数,点击“Delete”,然后确认你的行为即可。
    4、要修改已有参数,那么,要先从参数树中选择该参数,然后编辑参数的类型和属性。
    四、理解参数的类型
      在你定义参数属性的时候,要指定参数值的数据源。你可以指定下列数据源类型的任何一种:
    Internal Data―― 虚拟用户内部产生的数据。
    Data Files ――存在于文件中的数据。可能是已存在的文件或者是用脚本生成器新创建的。
    User-Defined Functions―― 调用外部DLL函数生成的数据
      Internal Data包括以下几种:
    1、 Date/Time
      Date/Time用当前的日期/时间替换参数。要指定一个Date/Time格式,你可以从菜单列表中选择格式,或者指定你自己的格式。这个格式应该和你脚本中录制的Date/Time格式保持一致。
    2、 Group Name
      Group Name 用虚拟用户组名称替换参数。在创建scenario的时候,你可以指定虚拟用户组的名称。当从用户脚本生成器运行脚本的时候,虚拟用户组名称总是None。
    3、 Load Generator Name
      Load Generator Name用脚本负载生成器的名称替换参数。负载生成器是虚拟用户在运行的计算机。
    4. Iteration Number
      Iteration Number用当前的迭代数目替换参数。
    5、 Random Number
      Random Number用一个随机数替换参数。通过指定最大值和最小值来设置随机数的范围。
    6、 Unique Number
      Unique Number用一个唯一的数字来替换参数。你可以指定一个起始数字和一个块的大小。
    7、 Vuser ID
      Vuser ID用分配给虚拟用户的ID替换参数,ID是由Loadrunner的控制器在scenario运行时生成的。如果你从脚本生成器运行脚本的话,虚拟用户的ID总是-1。
    五、数据文件
      数据文件包含着脚本执行过程中虚拟用户访问的数据。局部和全局文件中都可以存储数据。可以指定现有的ASCII文件、用脚本生成器创建一个新的文件或者引入一个数据库。在参数有很多已知值的时候数据文件非常有用。数据文件中的数据是以表的形式存储的。一个文件中可以包含很多参数值。每一列包含一个参数的数据。列之间用分隔符隔开,比如说,用逗号。
      对数据文件设置参数属性
      如果使用文件作为参数的数据源,必须指定以下内容:文件的名称和位置、包含数据的列、文件格式,包括列的分隔符、更新方法。
      如果参数的类型是“File”,打开参数属性(Parameter Properties)对话框,设置文件属性如下:
    1、 在“File path”中输入文件的位置,或者点击“Browse”指定一个已有文件的位置。缺省情况下,所有新的数据文件名都是“parameter_name.dat”,注意,已有的数据文件的后缀必须是.dat。
    2、点击“Edit”。记事本打开,里面第一行是参数的名称,第二行是参数的初始值。使用诸如逗号之类的分隔符将列隔开。对于每一新的表行开始一行新的数据。
      注意:在没有启动记事本的情况下如果想添加列,就在参数属性对话框中点击“Add Col”,那么“Add new column”对话框就会弹出。输入新列的名称,点击“OK”。脚本生成器就会添加该列到表中,并显示该列的初始值。
    3、 在“Select Column”部分,指明包含当前参数数据的列。你可以指定列名或者列号。列号是包含你所需要数据的列的索引。列名显示在每列的第一行(row 0)。
    4、 在“Column delimiter”中输入列分隔符,你可以指定逗号、空格符等等。
    5、 在“First data line”中,在脚本执行的时候选择第一行数据使用。列标题是第0行。若从列标题后面的第一行开始的话,那就在“First data line”中输入1。如果没有列标题,就输入0。
    6、 在“Select next row”中输入更新方法,以说明虚拟用户在脚本执行的过程中如何选择表中的数据。方法可以是:连续的、随机的、唯一的、或者与其它参数表的相同行。
      6.1、顺序(Sequential):该方法顺序地给虚拟用户分配参数值。如果正在运行的虚拟用户访问数据表的时候,它会取到下一行中可用的数据。
      6.2、随机(Random):该方法在每次迭代的时候会从数据表中取随机数
      6.3、 使用种子取随机顺序(Use Random Sequence with Seed):如果从Loadrunner的控制器来运行scenario,你可以指定一个种子数值用于随机顺序。每一个种子数值在测试执行的时候代表了一个随机数的顺序。无论你何时使用这个种子数值,在scenario中同样的数据顺序就被分配给虚拟用户。如果在测试执行的时候发现了一个问题并且企图使用同样的随机数序列来重复测试,那么,你就可以启动这个功能(可选项)。
      6.4、唯一(Unique):Unique方法分配一个唯一的有顺序的值给每个虚拟用户的参数。
      6.5 、与以前定义的参数取同一行(Same Line As <parameter>):该方法从和以前定义过的参数中的同样的一行分配数据。你必须指定包含有该数据的列。在下拉列表中会出现定义过的所有参数列表。注意:至少其中的一个参数必须是Sequential、Random或者Unique。
        如果数据表中有三列,三个参数定义在列表中:id1,name1和title1,如下:。
    ID Name Title
    132 Kim Manager
    187 Cassie Engineer
    189 Jane VP
        对于参数id1,你可以指示虚拟用户使用Random方法,而为参数name1和title1就可以指定方法“Same Line as id1”。所以,一旦ID“132”被使用,那么,姓名(Name)“Kim”和职位(Title)“Manager”同时被使用。
    7、Updta value on数据的更新方法
    7.1、Each iteration――每次反复都要取新值
    7.2、Each occurrence――只要发现该参数就重新取值
    7.3、Once――在所有的反复中都使用同一个值
    8、When out of values超出范围:(选择数据为unique时才可用到)
    8.1、Abort Vuser――中止
    8.2、Continue in a cyclic manner――继续循环取值
    8.3、Continue with last value――取最后一个值
    9、Allocate Vuser values in the Controller在控制器中分配值:(选择数据为unique时才可用到)
      9.1、 Automatically allocate block size――自动分配
      9.2、Allocate()values for each Vuser――指定一个值
    六、从已存在的数据库中导入数据
      Loadrunner允许你利用参数化从已经存在的数据库中导入数据。可以使用下列两种方式之一:
    1、 使用Microsoft Query(要求在系统上先安装MS Query)。
    2、 指定数据库连接字符串和SQL语句。
        用户脚本生成器在从数据库中导入数据的过程中提供了一个向导。在向导中,你指明如何导入数据-通过MS Query创建查询语句或者直接书写SQL语句。在导入数据以后,以.dat为后缀并作为正规的参数文件保存。要开始导入数据库中数据的过程,在参数属性对话框中点击“Data Wizard”,则,数据库查询向导弹出。
      要创建新的查询
    1、 选择“Create new query”。如果需要MS Query的帮助,选择“Show me how to use Microsoft Query”,然后点击“Finish”。
    如果你还没有安装Microsoft Query,Loadrunner会提示你这个功能不可用。在进行之前,从Microsoft Office中安装MS Query。
    2、 在Microsoft Query中遵循以下步骤,导入期望的表和列。
    3、 在完成数据的导入后,选择“Exit and return to Virtual User Generator”,然后点击“Finish”。在参数属性对话框中数据库记录以data文件的形式显示出来。
    要在MS Query中编辑并查看数据,选择“View data or edit in Microsoft Query”。若要结束,则选择“File>Exit and return to Virtual User Generator”返回到脚本生成器。
    4、 在“Select Column”部分,指定包含当前参数数据的列可以指定列号或者列名。注意:列标题默认为第0行(row 0)。
    5、 从“Select next row”列表中选择一个更新方法来告诉虚拟用户在脚本指定的过程中如何选择表中的数据。可选项是:Sequential、Random、Unique或者Same Line As。其中每一项的含义文章前面已经讲述,就不再赘述。
    6、 如果选择“Advance row each iteration”,虚拟用户在每次迭代的时候会使用新的一行的数据而不是重复同样的数据。
      要指定数据库连接或者SQL语句
    1、 选择“Specify SQL Statement”,然后点击“Next”。
    2、点击“Create”指定一个新的连接字符串。选择数据源的窗口弹出。
    3、选择已有的数据源,或者点击“New”创建一个新的数据源。向导将提示你穿过创建ODBC数据源的过程。在完成后,连接字符串就会在连接字符串框中显示出来。
    4、 在SQL框中,输入或者粘贴SQL语句。
    5、点击“Finish”继续SQL语句并导入数据。数据库记录将以data文件的形式显示在参数属性框中。
    6、 在“Select Column”部分中,指定包含当前参数数据的列。你可以指定列号或者列名。
    7、 从“Select next row”列表中选择一个更新方法来告诉虚拟用户在脚本指定的过程中如何选择表中的数据。可选项是:Sequential、Random、Unique或者Same Line As。
    8、 如果从Update out of values中,选择“each iteration”,虚拟用户在每次迭代的时候会使用新的一行的数据而不是重复同样的数据。
     
  • 软件需求工程介绍

    wgx198302 发布于 2007-04-24 11:22:43

    IEEE需求:

    1.系统为了解决或满足用户的问题,而应具备条件或能力。

    2.系统为了满足标准,规范等应具备的条件或能力。   

     

    需求工程

    1 需求开发

    1.1 需求获取

    1.1.1 1.项目类型:需求来自用户提出,以合同契约形式明确下来。

    1.1.2 2.产品类型:需求来自市场调研,并没有明确的客户以合同契约的形式提出需求。

    1.2 需求分析

    1.2.1 1.根据显示的需求(原始需求)去分析,挖掘背后的隐式需求。

    1.2.2 2.对所有的需求(显式,隐式)明确其需求规格。

    1.3 需求定义

    1.3.1 把分析得到的所有需求以及明确下来的规格按照规范的格式描述,形成srs.

    1.4 需求验证

    1.4.1 验证需求是否正确。

    2 需求管理

    2.1 需求分配

    2.2 需求评审

    2.2.1 1.项目组针对分配的需求进行评审,评审分配需求的合理性

    2.2.2 2.对需求分析得到srs进行评审

    2.3 需求基线

    2.3.1 将评审通过的需求规格说明书基线化,进入基线库,受控起来

    2.4 需求跟踪

    2.4.1 在软件生命周期中每个阶段的活动结束后,要将阶段成果和需求跟踪起来

    2.5 变更控制

    2.5.1 对基线化的需求的变更,进行变更管理:初试化,评审,变更控制,验证,基线的流程。

     

          

  • IBM 软件产品需求管理流程

    ooclp 发布于 2007-08-28 11:24:29

    IBM 软件产品的版本(V.R.M.F)从市场规划和客户需求开始,到研发以及后续的交付遵循 IBM 软件部集成产品设计(IPD)流程。

     1. 简介

    IBM 软件产品的版本(V.R.M.F)从市场规划和客户需求开始,到研发以及后续的交付遵循IBM软件部集成产品设计(IPD)流程。IBM 软件产品需求管理流程是IPD的一个体现,也就是一个由市场/客户驱动的,跨市场部门、研发产品管理部门及研发工程部门的端到端需求管理流程。同时,此次内容我们将描述IPD和产品需求管理流程,及流程中的角色(市场、研发产品管理部门及研发工程部门),以及他们之间是如何通过协作来管理需求的。

    2. 背景——IPD

    IPD指导如何对软件产品发布版本进行投资决策和如何协调部门间工作以实现这些决策所定义目标,IBM软件产品需求管理基于IPD流程,要了解这个需求管理的流程,首先我们要了解IBM所有产品开发所遵循的IPD的流程,包括其决策点。

    IPD流程分为六个步骤:

    1. 概念:即概念验证阶段,主要对需求包进行评审,以确定其是否有足够的商业价值;
    2. 计划:即资源投入计划阶段,主要对需求包进行评估,以确定是否有足够的资源且在一定的时间范围内将需求包开发出来;
    3. 开发:即对需求包进行开发成产品阶段;
    4. 验证:即对产品进行验证阶段;
    5. 交付:即将产品交付市场阶段;
    6. 生命周期:即产品在市场上销售,使用,维护和退出市场的阶段。
     其中包括了几个重要的决策检查点(DCP):
    1. 概念决策检查点:即经过概念阶段各方面进行的一系列评审,在此检查点确定(1)我们对需求包是否有足够的理解;(2)需求包是否有足够的商业价值。如果是,继续进入计划阶段;
    2. 计划决策检查点:即经过计划阶段的评估,在此检查点确定(1)我们是否有足够的资源在既定的时间范围内完成需求包的开发(2)研发部门是否能在(1)的估计上承诺进行开发。如果是,继续进入开发阶段;
    3. 可交付决策检查点:即经过开发和验证阶段,在此检查点确定(1)产品是否质量合格以交付给客户(2)我们产品的相应支持和销售是否已经准备好服务客户,如果是,产品交付市场;
    4. 生命周期结束决策检查点:即产品在市场使用一定时期后,在此检查点确定产品是否退出市场。

    一个产品从市场需求开始,经过概念验证,时间、资源等计划的支持,然后进行开发,验证,直至发布到市场供客户使用,最后在某个特定的时候结束产品在市场上的销售,在IBM都遵循着IPD流程。在其中过程中,这个产品的概念是否被接受,是否能得到资源上的投入的承诺,是否通过最终验证可以在市场上发布,以及什么时候在市场上停售,这些关键的决策都通过相应的委员会在不同的决策点上进行决策。

    3. IPD 与产品需求管理流程

    以上描述了IBM IPD的基本概念,我们接下来看IBM软件产品的需求管理是如何基于IPD的。首先,请看下图一:产品需求管理流程。

    图一:产品需求管理流程

     这个产品需求管理流程是如何与以上IPD的阶段相映射的呢?主要为以下几点:

    1. IPD的概念阶段对应的是流程中的“New->Prioritize->Prioritized”;
    2. IPD的计划阶段对应的是流程中的“High-Level Sizing->Sized”;
    3. IPD的开发和验证阶段对应的是流程中的“Plan/Develop”;
    4. 其中“Commit->InPlan”对应的是IPD的“Contract”点;

    而产品需求管理流程与决策点的映射,主要为以下几点:

    1. 概念决策点-评估需求给IBM带来市场价值,决定是否接纳,如需求是不是有足够的业务潜力使得IBM产品能够成为市场的领导者;
    2. 计划决策点-评估需求开发的投入,决定是否将其放入开发计划,如是否有相应的资源使得我们能在既定的时间范围内实现需求;
    3. 可交付决策点-评估需求实现的状况,决定是否放入发布计划,如验证需求的功能及质量等是否满足要求。

    4. 产品需求管理流程中的角色

    产品需求管理流程中通过以下几类角色的参与并互相协作,推动需求通过评审并纳入到产品开发路线图里面。

    市场部门

    根据市场、竞争对手的信息,客户的反馈,技术发展方向以及IBM现在的产品组合,定义IBM在此市场领域需要提供的解决方案(O/SBP)。

    研发产品管理部门

    根据市场部门制订的解决方案(O/SBP),及客户反馈的的改善和缺陷,定义产品发布版本所要提供的功能-即产品的需求。

    研发工程部门

    根据产品需求,评估开发需求所需要的资源、时间等,并对需求进行设计、开发和测试等,建立需求与设计开发之间的追踪关系。

    技术支持

    代表IBM与客户进行沟通,反馈需求所处的状态。

    以上角色的互相协作关系请参考以下产品需求管理流程的三个阶段描述。

    5. 产品需求管理流程的三个阶段

    此流程是通过IBM内部系统RATLC实现,这个将在后面第7部分介绍。

    IPD概念阶段

    研发产品管理部门根据市场部门制订的解决方案(O/SBP),定义产品所要提供的功能-即产品的需求。研发产品管理部门将这些需求信息提交到RATLC,包括:

    1. 需求描述及提出理由
    2. 需求所涉及的产品模块

    如果此需求是因为客户反馈的改善和缺陷而产生,那么研发产品管理部门将其与需求关联。改善是指客户在使用此产品的过程中提出的功能改善的要求,而缺陷是指:客户在使用此产品的过程中发现的缺陷。

    当备选需求进入RRM以后,评审委员会,包括市场部门、研发产品管理部门,研发工程部门的代表会复审备选需求以决定那些需求通过概念决策点 (当前的版本)。评估的条件包括其业务的重要性和对产品开发的影响(初步的需求规模评估)在评估的过程中,任何对此需求开发风险的认识,如需要的开发时间、性能要求等都被记录下来,作为此需求的风险记录,作为整个开发过程的参考。

    对已经批准需求进行排序,同时需要增加以下内容:

    1. 将在哪个版本实现
    2. 负责人
    3. 业务的重要性

    没有通过概念决策点的需求:

    1. 被拒绝,即现在没有任何实现的时间表;
    2. 被延迟,将在下次版本的概念阶段被重新考虑;
    3. 需要添加负责人和注释以备查。

    IPD计划阶段

    为了了解开发的投入,并能够给每个需求制订详细的开发计划,所有需求都要进行规模评估。评估的内容包括现在或将来开发此需求所需要的人力,时间和资源。通过研发工程部门和研发产品管理部门的多次和及时的沟通,需求的规模被确定。如果需求规模被修改,研发产品管理部门将再次和市场部门和技术支持部门沟通,以确认修改。修改的记录会记录在需求变更流程里面。通过规模评估的需求,需求会关联一条或多条的规模评估记录:需求开发所需要的资源、人力及计划。

    同时,开发团队根据IRUP指导对需求进行详细的描述和设计,包括用例建模,建立测试策略和项目计划等。

    没有通过计划决策点的需求:

    1. 被拒绝,即现在没有任何实现的时间表;
    2. 被延迟,将在下次版本的Concept Phase重新考虑;
    3. 需要添加负责人和注释以备查。

    IPD 开发和验证阶段

    在此阶段,开发团队决定是否针对需求制订开发计划, 并对需求进行开发和测试,如果制订计划,需要提供以下信息:开发的状态。在开发过程中,需求一直处于InPlan状态,直到通过Availability DCP后,需求状态转变为Delivered。

    如果由于开发计划延后,或开发过程中出现技术问题而导致开发团队决定不将其放入开发计划,需求会被Decommitted。如果有变更情况,负责人需要将变更记录与需求关联。

    6. 产品需求管理流程的价值

    1. 统一的版本需求管理流程:无论是外部的客户需求,IBM的市场规划需求都使用相同的流程,统一的评估,统一的规划,确保需求的开发与业务目标发展一致。

    2. 需求端到端状态的可视化:需求记录包含丰富的信息包括变更的记录,使得市场部门、研发产品管理部门和研发团队能够及时了解需求所处的状态,减少多方沟通的时间,并能够及时的向客户传递相应的信息,提高客户的满意度。

    3. 需求信息的集中管理:每条需求都有相应的属性,如客户优先级别,所涉及的产品模块等,需求开发时间等。有了这些信息,市场部门和研发团队可以定制各种报表对需求进行查询、过滤和排序,多角度的了解需求的状况。

    4. 全球同步进行需求管理:虽然IBM市场部门及研发团队都分布在全球不同地点,但是所有相关人员可以通过WEB的方式访问需求,进行需求的沟通。

    7. RATLC——通过ClearQuest实现需求管理流程

    在IBM内部是使用什么系统来支撑需求管理流程的呢?答案是RATLC。 它既是 IBM 软件部用于管理产品需求和产品缺陷的系统。 RATLC通过Rational ClearQuest工具定制实现。同时由于IBM的软件研发团队分布在全球各地,为了实现每个地区团队能快捷地访问需求,RATLC通过ClearQuest MultiSite实现了“本地复本,全球同步”的模式。现在RATCL在全球一共有 11个复本,分别位于北美、印度、法国和中国,复本之间的一致性通过ClearQuest MultiSite的自动同步功能实现。

    IBM Rational ClearQuest 是一个强大而高度灵活的需求、缺陷和变更、测试计划和用例管理平台,能在整个开发周期内捕获、跟踪并管理各种类型的记录,帮助您以更高的效率交付出更高质量的软件。无论您使用的平台是Windows、UNIX或是Web,可完全自主定制的界面和工作流程引擎都能适应任何开发流程。由于ClearQuest支持业内标准数据库,所以它可任意扩展,以支持任何规模的项目。

    RATLC的具体实现方式:

    (1) 通过ClearQuest Designer定制RATLC中的需求管理流程。ClearQuest本身内嵌了需求管理、缺陷管理和测试管理流程。同时,鉴于IBM需求管理流程有特殊性的需求, ClearQuest提供了灵活的手段在上述的内嵌流程中进行客户化定制。RATLC就是通过ClearQuest Designer的状态过渡矩阵定制产品需求管理流程中的需求状态和其过渡关系,如图二:

    图二:ClearQuest Designer的状态过渡矩阵
     
     图三是通过ClearQuest Designer定制好后的需求管理流程的状态图,图中的椭圆代表的是需求的状态,箭头上的文字代表用户经过何种操作后,需求的状态发生了相应的变化。如需求处在“Submitted”状态,用户经过评审,确定了此需求的优先级别并更新了界面中此需求的优先级别属性后,按下界面中“Prioritize”按钮,需求的状态变为“Prioritized”。

    图三:通过ClearQuest定制的需求在流程中的状态


     (2)通过ClearQuest Designer表单定制功能直观地定制RATLC用户界面。

    我们可以通过ClearQuest Designer提供的可视化表单定制功能直观地定制用户界面。基本上是通过Designer提供的界面工具集如按钮、文字框等拖拽地设计用户界面。如图四:

    图四:ClearQuest Designer表单定制功能
     
     图五是通过ClearQuest Designer表单定制功能定制出来的RATLC需求录入界面。

    图五:RATLC的需求录入界面
     
     (3) 通过ClearQuest客户端定制各式报表

    在RATLC中系统管理员配置了不同产品的缺省报表,当用户和登录到系统的时候可以根据报表的类型(如按产品名称分类的报表)来选择需要查看的需求记录。

    或者,用户登录到系统后,可以自定义报表,如产品经理需要反复查看某个客户所提交的所有需求和缺陷记录的状态,他可以自定义这样的报表,以方便在每次登录系统后都能很迅速地查询到所需要的信息。

    报表的定制也是非常简单,通过拖拽字段的方式就可以便捷地建立所需要的报表。

    图六:通过ClearQuest定制各式报表
     
     (4)多客户端界面选择-Web/Windows UI/Eclipse

    RATLC充分利用了ClearQuest多客户端的特点,为不同类型的用户提供了不同的使用界面。如市场部门及研发管理部门人员,由于他们的日常操作多为查询需求的状态和修改需求记录等,RATLC为这部分人员提供了WEB访问的方式;而对于研发工程人员,由于他们需要对需求进行开发,这就涉及到与配置管理工具的集成实现变更记录与代码的结合,RATLC为他们提供了Windows客户端或Eclipse客户端,这样研发工程人员的开发环境就能很方便地与ClearQuest结合起来。

    (4)ClearQuest与ClearCase集成

    在RATLC系统中,当某个需求经过批准后被分发到相应的开发人员,此开发人员可以通过ClearQuest与ClearCase的集成,在检出代码或文档修改的时候选择相应RATLC系统的记录。这样,变更的原因(需求)和变更的结果(代码或文档)就能紧密的集成在一起,方便随后进行双向的查询,如QA可以通过RATCL了解此需求变更涉及到哪些代码改变,或某个文件的新版本是由于什么原因而产生的。

    8. 总结

    此次我们介绍了IBM软件产品需求管理流程, 它是IBM IPD的一个实例,也就是一个由市场/客户驱动的,跨市场部门、研发产品管理部门及研发工程部门的端到端需求管理流程。此流程在IBM内部的支撑系统RATLC是通过Rational ClearQuest这一优秀生命周期管理集成器来实现(如图七)。Rational ClearQuest涵盖了需求管理、变更管理、缺陷管理和测试管理。

    图七:Rational ClearQuest – 生命周期管理集成器
     

我的栏目

数据统计

  • 访问量: 355
  • 日志数: 1
  • 书签数: 1
  • 建立时间: 2007-06-28
  • 更新时间: 2008-06-01

RSS订阅

Open Toolbar