心灵之所

发布新日志

  • [论坛] LR8.1不支持outlook2007吗?

    2008-06-30 16:10:10

    我使用SMTP,IMAP混合协议录制了outlook2007发送邮件的整个事务过程,结果却无法成功回放

    Action.c(12): Debug message:Smtp Notice: RCPT TO: <XXX@126.com>
    :5.7.1 Unable to relay for XXX@126.com
    Action.c(12): Error -86412:Failed to start sending Message segment (rc = 554).
    Action.c(12): Error -86413:Server responded w/ 554 5.5.2 No valid recipients
    Action.c(12): Error -86416:Aborting mail... (See below for details)

    如果纯粹采用smtp进行2007的录制,是一点信息都录制不到,但是在51Testing丛书连载:(十)中,作者是使用outlook2003进行录制的,这种情况是不是说明LR不支持outlook2007的录制啊?
  • 转:GUI设计与软件易用性

    2008-06-20 16:33:50

    界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。目前界面的设计引起软件设计人员的重视的程度还远远不够,直到最近网页制作的兴起,才受到专家的青睐。

     

    目前流行的界面风格有三种基本方式:多窗体、单窗体以及资源管理器风格,无论那种风格,以下规则是应该被重视的。

    一、易用性

    按钮名称应该易懂,用词准确,摒弃摸棱两可的字眼,要与同一界面上的其他按钮易于区分,能望文知意最好。

    理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。

    1.1易用性细则

    1)   完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。

    2)   完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。

    3)   按功能将界面划分局域块,用Frame框括起来,并要有功能说明或标题。

    4)   界面要支持键盘自动浏览按钮功能,即按Tab键的自动切换功能。

    5)   界面上首先应输入的和重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。

    6)   同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。

    7)   分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab

    8)   默认按钮要支持Enter及选操作,即按Enter后自动执行默认按钮对应操作。

    9)   可写控件检测到非法输入后应给出说明并能自动获得焦点。

    10)  Tab键的顺序与控件排列顺序要一致,目前流行总体从上到下,同时行间从左到右的方式。

    11)  复选框和选项框按选择几率的高底而先后排列。

    12)  复选框和选项框要有默认选项,并支持Tab选择。

    13)  选项数相同时多用选项框而不用下拉列表框。

     

    14)  界面空间较小时使用下拉框而不用选项框。

    15)  选项数较少时使用选项框,相反使用下拉列表框。

    16)  专业性强的软件要使用相关的专业术语,通用性界面则提倡使用通用性词眼。

    二、规范性

    通常界面设计都按Windows界面的规范来设计,即包含菜单条、工具栏、工具厢、状态栏、滚动条、右键快捷菜单的标准格式,可以说:界面遵循规范化的程度越高,则易用性相应的就越好。小型软件一般不提供工具箱。

    2.1规范性细则

    1)   常用菜单要有命令快捷方式。

    2)   完成相同或相近功能的菜单用横线隔开放在同一位置。

    3)   菜单前的图标能直观的代表要完成的操作。

    4)   菜单深度一般要求最多控制在三层以内。

    5)   工具栏要求可以根据用户的要求自己选择定制。

    6)   相同或相近功能的工具栏放在一起。

    7)   工具栏中的每一个按钮要有及时提示信息。

    8)   一条工具栏的长度最长不能超出屏幕宽度。

    9)   工具栏的图标能直观的代表要完成的操作。

    10)  系统常用的工具栏设置默认放置位置。

    11)  工具栏太多时可以考虑使用工具箱。

    12)  工具箱要具有可增减性,由用户自己根据需求定制。

    13)  工具箱的默认总宽度不要超过屏幕宽度的15

    14)  状态条要能显示用户切实需要的信息,常用的有:目前的操作、系统状态、用户位置、用户信息、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。

    15)  滚动条的长度要根据显示信息的长度或宽度能及时变换,以利于用户了解显示信息的位置和百分比。

    16)  状态条的高度以放置5号字为宜,滚动条的宽度比状态条的略窄。

    17)  菜单和工具栏要有清楚的界限;菜单要求凸出显示,这样在移走工具栏时仍有立体感。

    18)  菜单和状态条中通常使用5号字体。工具栏一般比菜单要宽,但不要宽的太多,否则看起来很不协调。

    19)  右键快捷菜单采用与菜单相同的准则。

    三、帮助设施

    系统应该提供详尽而可靠的帮助文档,在用户使用产生迷惑时可以自己寻求解决方法。

    3.1帮助设施细则

    1)   帮助文档中的性能介绍与说明要与系统性能配套一致。(我们的系统帮助文档都是系统的祖先时期的说明,让人困惑)

    2)   打包新系统时,对作了修改的地方在帮助文档中要做相应的修改。

    3)   操作时要提供及时调用系统帮助的功能。常用F1

    4)   在界面上调用帮助时应该能够及时定位到与该操作相对的帮助位置。也就是说帮助要有即时针对性。

    5)   最好提供目前流行的联机帮助格式或HTML帮助格式。

    6)   用户可以用关键词在帮助索引中搜索所要的帮助,当然也应该提供帮助主题词。

    7)   如果没有提供书面的帮助文档的话,最好有打印帮助的功能。

    8)   在帮助中应该提供我们的技术支持方式,一旦用户难以自己解决可以方便的寻求新的帮助方式。

    四、合理性

     屏幕对角线相交的位置是用户直视的地方,正上方四分之一处为易吸引用户注意力的位置,在放置窗体时要注意利用这两个位置。

    4.1合理性细则

    1)   父窗体或主窗体的中心位置应该在对角线焦点附近。

    2)   子窗体位置应该在主窗体的左上角或正中。

    3)   多个子窗体弹出时应该依次向右下方偏移,以显示窗体出标题为宜。

    4)   重要的命令按钮与使用较频繁的按钮要放在界面上注目的位置。(默认界面应该只显示目标用户最常使用的功能,至于不常用到的高级功能,可以隐藏起来,比如说,放到菜单里,不要都做成按钮摆到界面上。果真需要这些高级功能的话,用户自然会到菜单里去找的。 )

    5)   错误使用容易引起界面退出或关闭的按钮不应该放在易点(容易点击)位置。横排开头或最后与竖排最后为易点位置。

    6)   与正在进行的操作无关的按钮应该加以屏蔽(Windows中用灰色显示,没法使用该按钮)

    7)   对可能造成数据无法恢复的操作必须提供确认信息,给用户放弃选择的机会。

    8)   非法的输入或操作应有足够的提示说明。(如中间夹带特殊字符的输入项)

    9)   对运行过程中出现问题而引起错误的地方要有提示,让用户明白错误出处,避免形成无限期的等待。

    10)  提示、警告、或错误说明应该清楚、明了、恰当。

    五、美观与协调性

    界面应该大小适合美学观点,感觉协调舒适,能在有效的范围内吸引用户的注意力。

    5.1、美观与协调性细则

    1)   长宽接近黄金点比例,切忌长宽比例失调、或宽度超过长度。(黄金分隔率值为:1.618

    2)   布局要合理,不宜过于密集,也不能过于空旷,合理的利用空间。

    3)   按钮大小基本相近,忌用太长的名称,免得占用过多的界面位置。

    4)   按钮的大小要与界面的大小和空间要协调,无遮盖。

    5)   避免空旷的界面上放置很大的按钮。

    6)   放置完控件后界面不应有很大的空缺位置。

    7)   字体的大小要与界面的大小比例协调, 通常使用的字体中宋体9-12较为美观,很少使用超过12号的字体。

    8)   前景与背景色搭配合理协调,反差不宜太大,最好少用深色,如大红、大绿等。蓝色文字以白色背景容易识别,而在红色背景则不易分辨,原因是红色和蓝色没有足够反差,而蓝色和白色反差很大。除非特殊场合,杜绝使用对比强烈,让人产生憎恶感的颜色。常用色考虑使用Windows界面色调。

    9)   整个界面色彩尽量少的使用类别不同的颜色。统一色调,针对软件类型以及用户工作环境选择恰当色调:如:安全软件,根据工业标准,可以选取黄色,绿色体现环保,蓝色表现时尚、紫色表现浪漫等等,淡色可以使人舒适,暗色做背景使人不觉得累等

    10)  如果使用其他颜色,主色要柔和,具有亲和力与磁力,坚决杜绝刺目的颜色。

    11)  大型系统常用的主色有"#E1E1E1""#EFEFEF""#C0C0C0"等。

    12)  界面风格要保持一致,字的大小、颜色、字体要相同,除非是需要艺术处理或有特殊要求的地方。

    13)  如果窗体支持最小化和最大化或放大时,窗体上的控件也要随着窗体而缩放;切忌只放大窗体而忽略控件的缩放。

    14)  对于含有按钮的界面一般不应该支持缩放,即右上角只有关闭功能。

    15)  通常父窗体支持缩放时,子窗体没有必要缩放。

    16)  如果能给用户提供自定义界面风格则更好,由用户自己选择颜色、字体等。

    六、菜单位置

    菜单是界面上最重要的元素,菜单位置按照按功能来组织。

    6.1、菜单位置细则

    1)   菜单通常采用常用--主要--次要--工具--帮助的位置排列,符合流行的Windows风格。

    2)   常用的有文件编辑查看等,几乎每个系统都有这些选项,当然要根据不同的系统有所取舍。

    3)   下拉菜单要根据菜单选项的含义进行分组,并切按照一定的规则进行排列,用横线隔开。

    4)   一组菜单的使用有先后要求或有向导作用时,应该按先后次序排列。

    5)   没有顺序要求的菜单项按使用频率和重要性排列,常用的放在开头, 不常用的靠后放置;重要的放在开头,次要的放在后边。

    6)   如果菜单选项较多,应该采用加长菜单的长度而减少深度的原则排列。

    7)   菜单深度一般要求最多控制在三层以内。

    8)   对常用的菜单要有快捷命令方式,组合原则见8

    9)   对与进行的操作无关的菜单要用屏蔽的方式加以处理,如果采用动态加载方式——即只有需要的菜单才显示——最好。

    10)  菜单前的图标不宜太大,与字高保持一直最好。

    11)  主菜单的宽度要接近,字数不应多于四个,每个菜单的字数能相同最好。

    12)  主菜单数目不应太多,最好为单排布置。

    七、独特性

    如果一味的遵循业界的界面标准,则会丧失自己的个性.在框架符合以上规范的情况下,设计具有自己独特风格的界面尤为重要。尤其在商业软件流通中有着很好的迁移默化的广告效用。

    7.1、独特性细则

    1)   安装界面上应有单位介绍或产品介绍,并有自己的图标。

    2)   主界面,最好是大多数界面上要有公司图标。

    3)   登录界面上要有本产品的标志,同时包含公司图标。

    4)   帮助菜单的关于中应有版权和产品信息。

    5)   公司的系列产品要保持一直的界面风格,如背景色、字体、菜单排列方式、图标、安装过程、按钮用语等应该大体一致。

    八、快捷方式的组合

    在菜单及按钮中使用快捷键可以让喜欢使用键盘的用户操作得更快一些。在西文Windows及其应用软件中快捷键的使用大多是一致的。

    8.1、菜单中

    1)   面向事务的组合

    Ctrl-D 删除

    Ctrl-F 寻找

    Ctrl-H 替换

    Ctrl-I 插入

    Ctrl-N

  • 修复LR录制脚本时启动不了IE的问题

    2008-06-10 14:48:29

    今天遇到了一个特郁闷的事情,前几天使用LR,采用HTML协议还可以正常录制WEB脚本,并在录制时成功打开IE,今天是捣腾了大半天就是启动不了IE
    郁闷之后,冷静想了一下,在这几天我的机器唯一的变动就是在虚拟机环境中安装了IE8.0,没办法一步一步来排除吧
    1、查看卡巴斯基的信息区中是否将vugen.exe设置为可信任程序
    2、使用工具查看IE中已安装的插件信息,删除不必要或是恶意的插件
    3、删除虚拟机文件中的IE8.0,恢复至6.0状态
    4、打开LR,录制脚本仍然不行
    5、将LoadRunner安装目录bin下的mmdrv.exe设置为可信任程序
    6、打开LR,可成功录制。

    呵呵,可是到最后,到底是虚拟机文件中包含IE8.0造成的,还是未将mmdrv.exe设置为可信任程序造成的原因尚且不明,仅仅是记录一下排除过程。希望对大家有所帮助

  • 转载:如何在 LoadRunner 脚本中做关联 (Correlation)

    2008-05-21 11:09:36

     

      当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本。在VuGen的Recording Log中,您可以找到浏览器与服务器之间所有的对话,包含通讯内容、日期、时间、浏览器的请求、服务器的响应内容等等。脚本和Recording Log最大的差别在于,脚本只记录了client端要对server端所说的话,而Recording Log则是完整纪录二者的对话。
      当执行脚本时,您可以把VuGen想象成是一个演员,它伪装成浏览器,然后根据脚本,把当初真的浏览器所说过的话,再对网站伺服器重新说一遍,VuGen企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给VuGen。
      所以纪录在脚本中要跟服务器所说的话,完全与当初录制时所说的一样,是写死的(hard-coded)。这样的作法在遇到有些比较聪明的服务器时,还是会失效。这时就需要透过「关联(correlation)」的做法来让VuGen可以再次成功地骗过服务器。

    何谓关联(correlation)?
      所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。
      举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要数据的是不是同一个浏览器。一般称这个辨识码为Session ID。对于每个新的交易,服务器都会产生新的Session ID给浏览器。这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要数据,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页数据给VuGen了。
      下面的图示说明了这样的情形:
      当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的数据,当浏览器再送出网页B的情求时,这时就要用到ID=123的数据,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。
    在执行脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的ID=123的数据,而不是用服务器新给的ID=456,整个脚本的执行就会失败。
      要对付这种服务器,我们必须想办法找出这个Session ID到底是什么、位于何处,然后把它撷取下来,放到某个参数中,并且取代掉脚本中有用到Session ID的部份,这样就可以成功骗过服务器,正确地完成整个交易了。
      哪些错误代表着我应该做关联(correlation)?
    假如脚本需要关联(correlation),在还没做之前是不会执行通过的,也就是说会有错误讯息发生。不过,很不幸地,并没有任何特定的错误讯息是和关联(correlation)有关系的。会出现什么错误讯息,与系统实做的错误处理机制有关。错误讯息有可能会提醒您要重新登入,但是也有可能直接就显示HTTP 404的错误讯息。

      要如何做关联(correlation)?
      关联(correlation)函数
      关联(correlation)会用到下列的函数:
    • web_reg_save_param:这是最新版,也是最常用来做关联(correlation)的函数。
    语法:
    web_reg_save_param ( “Parameter Name” , < list of Attributes >, LAST );
    • web_create_html_param、web_create_html_param_ex:这二个函数主要是保留作为向前兼容的目的的。建议使用 web_reg_save_param 函数。
    详细用法请参考使用手册。在VuGen中点选【Help】>【Function reference】>【Contexts】>【Web and Wireless Vuser Functions】>【Correlation Functions】。

    如何找出要关联(correlation)数据
    简单的说,每一次执行时都会变动的值,就有可能需要做关联(correlation)。
    VuGen提供二种方式帮助您找出需要做关联(correlation)的值:
    1. 自动关联
    2. 手动关联
    自动关联
    VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并且自动使用关联函数建立关联。
    自动关联提供下列二种机制:
    • Rules Correlation:在录制过程中VuGen会根据订定的规则,实时自动找出要关联的值。规则来源有两种:
    o 内建(Built-in Correlation):
    VuGen已经针对常用的一些应用系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,内建关联规则,这些应用系统可能会有一种以上的关联规则。您可以在【Recording Options】>【Internet Protocol】>【Correlation】中启用关联规则,则当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。
    您也可以在【Recording Options】>【Internet Protocol】>【Correlation】检视每个关联规则的定义。
    o 使用者自订(User-defined Rules Correlation):
    除了内建的关联规则之外,使用者也可以自订关联规则。您可以在【Recording Options】>【Internet Protocol】>【Correlation】建立新的关联规则。
    • Correlation Studio:有别于Rules Correlation,Correlation Studio则是在执行脚本后才会建立关联,也就是说当录制完脚本后,脚本至少须被执行过一次,Correlation Studio才会作用。Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。
    Rule Correlation
    请依照以下步骤使用Rule Correlation:
    1. 启用auto-correlation
    1. 点选VuGen的【Tools】>【Recording Options】,开启【Recording Options】对话窗口,选取【Internet Protocol】>【Correlation】,勾选【Enable correlation during recording】,以启用自动关联。
    2. 假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选相对应的应用系统。
    3. 或者也可以针对录制的应用系统加入新的关联规则,此即为使用者自订的关联规则。
    4. 设定当VuGen侦测到符合关联规则的数据时,要如何处理:
     【Issue a pop-up message and let me decide online】:跳出一个讯息对话窗口,询问您是否要建立关联。
     【Perform correlation in sceipt】:直接自动建立关联
    2. 录制脚本
    开始录制脚本,在录制过程中,当VuGen侦测到符合关联规则的数据时,会依照设定建立关联,您会在脚本中看到类似以下的脚本,此为BroadVision应用系统建立关联的例子,在脚本批注部分可以看到关联前的数据为何。
    3. 执行脚本验证关联是OK的。
    Correlation Studio
    当录制的应用系统不属于VuGen预设支持的应用系统时,Rule Correlation可能既无法发挥作用,这时可以利用Correlation Studio来做关联。
    Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。
    使用Correlation Studio的步骤如下:
    1. 录制脚本并执行
    2. 执行完毕后,VuGen会跳出下面的【Scan Action for Correlation】窗口,询问您是否要扫描脚本并建立关联,按下【Yes】按钮。
    3. 扫描完后,可以在脚本下方的【Correlation Results】中看到扫描的结果。
    4. 检查一下扫瞄的结果后,选择要做关联的数据,然后按下【Correlate】按钮,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的数据建立关联。
    注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【Correlate All】。
    5. 一般来说,您必须一直重复步骤1~4直到所有需要做关联的数据都找出来为止。因为有时前面的关联还没做好之前,将无法执行到后面需要做关联的部份。
    有可能有些需要做关联的动态数据,连Correlation Studio都无法侦测出来,这时您就需要自行做手动关联了。

    手动关联
    手动关联的执行过程大致如下:
    1. 使用相同的业务流程与数据,录制二份脚本
    2. 使用WinDiff工具协助找出需要关联的数据
    3. 使用web_reg_save_param函数手动建立关联
    4. 将脚本中有用到关联的数据,以参数取代
    接下来将详细的说明如何执行每个步骤
    使用相同的业务流程与数据,录制二份脚本
    1. 先录制一份脚本并存档。
    2. 依照相同的操作步骤与数据录制第二份脚本并存盘。注意,所有的步骤和输入的数据一定都要一样,这样才能找出由服务器端产生的动态数据。
    有时候会遇到真的无法使用相同的输入数据,那您也要记住您使用的输入数据,到时才能判断是您输入的数据,还是变动的数据。
    使用WinDiff工具协助找出需要关联的数据
    1. 在第二份脚本中,点选VuGen的【Tools】>【Compare with Vuser…】,并选择第一份脚本。
    2. 接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(假如没看到红色字体,请点选【Options】>【View】>【Show Inline Differences】)。
    3. 逐一检视二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。选取差异的脚本,然后复制。
    在复制时,有时并不需要取整行脚本,可能只会选取脚本中的一部分。
    注意:请忽略lr_thik_time的差异部份,因为lr_thik_time是用来模拟每个步骤之间使用者思考延迟的时间。
    4. 接着要在Recording Log(单一protocol)或是Generation Log(多重protocol)中找这个值。将鼠标光标点到Recording Log的第一行开头,按下Ctrl+F,开启【Find】窗口,贴上刚刚复制的脚本,找出在Recording Log第一次出现的位置。
    结果会有二种:
    o 在Recording Log中找不到要找的数据,这时请先确认您找对了脚本,毕竟现在开启了二个几乎一样的脚本,很容易弄错。
    o 在Recording Log中找到了要找的数据,这时要确认数据是从服务器端传送过来的。首先可以先检查数据的标头,从标头的Receiving response可以知道数据是从服务器端传送到client端的。假如此数据第一次出现是在Sending request中,则表示此数据是由client端产生,不需要做关联,但是有可能需要做参数化(parameterized)。
    您要找的标头格式如下:
    *** [tid=b9 Action1 2] Receiving response from host astra.merc-int.com:80 ( 25/11/2002 12:04:00 )
    5. 现在您已经找到录制二次都不一样,而且是由服务器所产生的动态数据了,而此数据极有可能需要做关联。
    使用web_reg_save_param函数手动建立关联
    在找到是由服务器所产生的动态数据之后,接下来要做的就是找出适当的位置,使用web_reg_save_param函数,将这个动态数据撷取到某个参数中。
    1. 要在哪里使用web_reg_save_param函数?
    在之前的步骤,我们已经在Execution Log找到可能需要关联的动态数据。在Execution Log中选取动态数据前的文字然后复制,我们将会利用这段文字,来帮助我们找出要关联的动态数据。
    不过在这之前我们要先找出使用web_reg_save_param函数的正确位置,所以我们要再重新执行一遍脚本,而且这次会开启所有的Log。
    1. 在VuGen中点选【Vuser】>【Run-Time Settings】。
    2. 点选【General】>【Log】。
    3. 勾选【Enable logging】、【Always sends messages】、【Extended log】,以及【Extended log】下的所有选项。
    4. 按下【OK】就可以执行脚本了。
    执行完脚本之后,在Execution Log中搜寻刚刚复制的字符串。找到字符串后,在字符串前面会有A.tion1.c(7),这个7就是到时候要插入web_reg_save_param函数的位置,也就是要插入到脚本的第7行。
    在脚本的第7行前插入一行空白行,然后输入
    web_reg_save_param(“UserSession”,
    “UserSession” 这个 “UserSession” 就是到时要使用的参数名称,建议给个有意义的名字。
    注意:到这里整个web_reg_save_param函数还没完成。
    2. 找出web_reg_save_param中要用到的边界
    web_reg_save_param函数主要是透过动态数据的前面和后面的固定字符串,来辨识要撷取的动态数据的,所以我们还需要找出动态数据的边界字符串。
    找出左边界字符串
    再回到Execution Log中,选取动态数据前的字符串并且复制它。
    这时会有个问题,到底要选取多少字符串才足以唯一识别要找的动态数据呢?建议是越多越好,但是尽量不要包含到特殊字符。
    在这边我们选取「input type=hidden name=userSession value=」字符串。选好之后,还要再确认一次这段字符串真的是可以唯一识别的,所以我们在Execution Log中透过Ctrl+F的搜寻,找找看这段字符串是否可以找到要找的动态数据。假如找不到,web_reg_save_param函数还有个ORD参数可以使用,ORD参数可以设定出现在第几次的字符串才是要找的字符串。
    将这个边界字符串加到未完成的web_reg_save_param函数中:
    web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”,
    找出右边界字符串
    接下来要找出动态数据的右边界字符串,这个字符串就比较好找了,从动态数据的最后一个字符开始,通常就是我们要找的右边界字符串了。
    以这个例子来看,就是「>」,所以再把右边界字符串加入,web_reg_save_param函数中,这时web_reg_save_param函数已经快完成了。最后再加上「LAST);」就完成整个web_reg_save_param函数了。
    web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”, “RB=>”, LAST);
    将脚本中有用到关联的数据,以参数取代
    当使用web_reg_save_param建立参数后,接下来就是用“UserSession”参数去取代脚本中写死的(hard-coded)资料。
    范例:

    “Name=userSession”, “Value=75893.0884568651DQADHfApHDHfcDtccpfAttcf”, ENDITEM,
    换成
    “Name=userSession”, “Value={UserSession}”, ENDITEM,
    到这里您已经完成了一个关联了,接下来就是执行脚本,是否能成功运行,假如还是有问题,就要检查看看是否还需要再做另一个关联。
    关于 web_reg_save_param 函数
    对于关联(correlation)来说,web_reg_save_param是最重要的一个函数,其功能是在下载的网页内容中,透过设定的边界字符串,找出特定的数据并将其储存在一个参数中,以供后续脚本使用。
    接下来将针对web_reg_save_param做比较详细的说明。
    Service and registration type function
    web_reg_save_param是一个Service function。service function主要是用来完成一些特殊的工作的,如关联、设定proxy、提供认证信息等,当其作用时,不会对网页的内容做任何的修改。
    web_reg_save_param同时也是一个registration type function (只要函数名称中包含_reg_的字眼,表示其为registration type function)。registration type function意味着其真正作用的时机是在下一个action function完成时执行的。举例来说,当某个web_url执行时所接收到的网页内容中包含了要做关联的动态数据,则必须将web_reg_save_param放在此web_url之前,则web_reg_save_param会在web_url执行完毕后,也就是网页内容都下载完后,再执行web_reg_save_param找寻要做关联的动态数据并建立参数。
    所以要记住一点,要使用registration type function时,要注意其放置的位置必须在要作用的action function之前。
    语法
    int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);
    参数说明
    ParamName:存放动态数据的参数名称
    list of Attributes:其它属性,包含 Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, 以及 SaveLen。属性值不分大小写,例如 Search=all。以下将详细说明每个属性值的意义:
    • Notfound:指定当找不到要找的动态数据时该怎么处置。
    o Notfound=error:当找不到动态数据时,发出一个错误讯息。假如没设定此属性,此为LoadRunner的默认值。
    o Notfound=warning:当找不到动态数据时,不发出错误讯息,只发出警告,脚本也会继续执行下去不会中断。在对角本除错时,可以使用此属性值。
    • LB:动态数据的左边界字符串。此属性质是必须要有的,而且区分大小写。
    • RB:动态数据的右边界字符串。此属性质是必须要有的,而且区分大小写。
    • RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性质可以是All或是数字,而且可有可无。
    • Search:搜寻的范围。可以是Headers(只搜寻headers)、Body(只搜寻body部分,不搜寻header)、Noresource(只搜寻body部分,不搜寻header与resource)或是All(搜寻全部范围,此为默认值)。此属性质可有可无。
    • ORD:指明从第几次出现的左边界开始才是要撷取的数据。此属性质可有可无,默认值是1。假如值为All,则所有找到符合的数据会储存在数组中。
    • SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始储存到参数中。此属性质不可为负数,其默认值为0。
    • Convert:可能的值有二种:
    o HTML_TO_URL: 将HTML-encoded数据转成URL-encoded数据格式
    o HTML_TO_TEXT:将HTML-encoded数据转成纯文字数据格式
    • SaveLen:从offect开始算起,到指定的长度内的字符串,才储存到参数中。此参数可有可无,默认值是-1,表示储存到结尾整个字符串。
    范例
    web_reg_save_param("A", "LB/ic=<a href=", "RB='>", "Ord=All", LAST);nner会搜寻网页中所有以 「<a href=」 开头,且以 「’>」结束,当中包含的字符串,并且储存在「A」参数中。
    Tips and Tricks
    以下提供一些关联的常见问题:
    • 如何打印出参数值?
    lr_output_message这二个函数来做到。例如:
    lr_output_message(“Value Captured = %s”, lr_eval_string(“{ParameterName}”));
    lr_eval_string与lr_output_message函数的使用说明请参考LoadRunner Online Function Reference。
    • 在脚本的data目录下找不到路制时的快照(snapshot)
    造成在脚本的data目录下找不到路制时的快照(snapshot)的可能原因如下:
    o 脚本是由VuGen 6.02或更早的版本所录制的
    o 汇入的Action不会包含快照(snapshot)的档案
    o 脚本是储存在只读的目录下,早成VuGen无法储存执行时撷取的快照(snapshot)
    o 某些步骤并不会产生快照(snapshot),如浏览某个资源
    o 快照(snapshot)功能被取消
    【Tools】>【General options】>【Correlation】tab >【Save correlation information during replay】
    • 开启WinDiff时出现「File no longer available」的错误讯息
    WinDiff这个工具有些限制,无法开启包含空格符的目录或是脚本,所以建议命名时不要使用空格符,并且尽可能将名称取短一点。
    • 录制时突然跳出【Correlation warning】对话窗口
    当你有勾选自动关联的【Issue a popup message and let me decide online】选项,当VuGen发现有可能要做关联的数据时,就会跳出【Correlation warning】的窗口,询问你要做关联(Correlation in scrīpt)还是要忽略(Ignore)。
    另外你也可以勾选【Perform correlation in scrīpt】,让VuGen自动作关联,不会再跳出询问窗口。
    或是勾选【Disable correlation engine】,关闭自动关联的功能。

    • 如何手动启动「Scan action for correlation」的功能
    要手动启动「Scan action for correlation」的功能,请先执行脚本一次后,点选【Vuser】>【Scan Action for Correlation】。

    • 执行完脚本后并未出现【Scan Action for Correlation】窗口
    要启用【Scan Action for Correlation】功能,请点选【Tools】>【General options】>【Correlation】tab,勾选【Show Scan for correlation popup after replay of Vuser】选项。

  • LR学习知识小积累

    2008-05-20 09:24:11

    1、参数类型设置

    Date/Time类型的参数表现形式设置

    如:2008年5月20日  %Y年%#m月%d日

      2008年05月20日  %Y年%m月%d日

      2008年5月2日  %Y年%#m月%#d日

     

    2、检查函数
    接下来的函数都用于在WEB脚本中。VuGen不能够录制这些函数。你必须手工将它们加入脚本中,或是使用VuGen用户界面去生成这函数


    web_find
    主要用于在HTML文件中查找指定的文本信息。

    web_global_verification
    主要用于在后续的所有请求中查找指定的文本信息

    web_image_check
    主要用于在HTML文件中查找指定的图片信息

    web_reg_add_cookie
    注册一个文本信息查找点,当查找成功时,为其添加至一个cookie中记录起来。

    web_reg_find
    注册一个文本信息查找点,查找范围:在接下来的ACTION函数体中。

    int web_reg_find(const char *attibute_list,LAST);

    这个函数返回值有两个:
    1、成功 LR_PASS(0)
    2、失败   LR_FAIL(1)

  • 链接测试及工具

    2008-05-16 17:05:00

    什么是链接
    链接是Web 应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。

    链接测试原理
    从待测网站的根目录开始遍历所有的网页文件,对所有网页文件中的超级链接、图片文件、包含文件、CSS
    文件、页面内部链接等所有链接进行读取。以求最大程度的发现被测网站不完整是不存在的资源,并提交给相关人员进行整改。

    链接测试分为哪三个方面
    1)首先,测试所有链接是否按指示的那样确实链接
    到了该链接的页面;
    2)其次,测试所链接的页面是否存在;
    3)最后,保证Web 应用系统上没有孤立的页面所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。


    链接测试时间点
    链接测试必须在集成测试阶段完成后,也就是说,在整个Web 应用系统的所有页面开发完成之后进行链接测试。

    为什么要使用链接测试工具
    链接测试作为网站项目所特有的一种测试类型。一般的网站内的链接往往都是错综复杂,犹如一张巨大的蜘蛛网,稍有疏忽便有测试不完全的地方,而引入链接自动化测试能够大幅提高链接测试的效率。
    常用链接测试工具
    . Xenu Link Sleuth
    . HTML Link Validator
    . Web Link Validator 等

    Xenu Link Sleuth 简介
    该工具可以说是本人所见过的最小但功能最强大的检查网站死链接的软件了。你可以打开一个本地网页文件来检查它的链接,也可以输入任何网址来检查。它可以分别列出网站的活链接以及死链接,连转向链接它都分析得一清二楚;它支持多线程,可以把检查结果存储成文本文件或网页文件备注:对于动态生成的网页进行测试时会不准确

    XENU功能特点
    . 首先,它是免费的
    . 其次,它有易学的用户界面
    . 很好的错误报告
    . 忙状态时,保存当前操作
    . 可以一链即查看所有“失败链接报表”
    . 有重新检查失败链接的功能“recheck broken
    links”
    . 非常小巧
    . 可检查本地网页文件
    . 可生成网站地图
    . 支持有安全论证的站点(https://)
    . ..

    如何输入待检测URL地址
    . File->Check URL Or Ctrl+N

    设制测试时的属性信息
    打开此配置项操作为:
    File->Check URL->more Options
    Options->Preferences


    没有绝对的最大线程数,完全取消用户的测试机的内存的大小而定

    弹出验证信息输入窗口

    检测结果图

    查看断开链接的属性信息

    生成报告. File->Report or R

  • 易用性测试(整理文档二)

    2008-05-07 17:02:50

    Ø  完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。

    Ø  按功能将界面划分局域块,用Frame 框起来,并要有功能说明或标题。

    Ø  界面要支持键盘自动浏览按钮功能,即按Tab 键的自动切换功能。

    Ø  界面上首先应输入的信息和重要信息的控件在Tab 顺序中应当靠前,位置也应放在窗口上较醒目的位置。

    Ø  同一界面上的控件数最好不要超过10 个,多于10 个时可以考虑使用分页界面显示。

    Ø  分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab

    Ø  默认按钮要支持Enter 操作,即按Enter 后自动执行默认按钮对应操作。

    Ø  可输入控件检测到非法输入后应给出说明信息并能自动获得焦点。

    Ø  Tab 键的顺序与控件排列顺序要一直,目前流行总体从上到下,同时行间从左到右的方式。

    Ø  复选框和选项框按选择几率的高底而先后排列。

    Ø  复选框和选项框要有默认选项,并支持Tab 选择。

    Ø  选项数相同时多用选项框而不用下拉列表框。        

    Ø  界面空间较小时使用下拉框而不用选项框。

    Ø  选项数较少时使用选项框,相反使用下拉列表框。

    Ø  专业性强的软件要使用相关的专业术语,通用性界面则提倡使用通用性词眼。

    Ø  对于界面输入重复性高的情况,该界面应全面支持键盘操作,即在不使用鼠标的情况下采用键盘进行操作。

    6      易用性评价方法

    知道易用性好坏,最好的办法是让用户来做易用性试验。大公司的做法是有隔音的单面透光玻璃,一边是用户和电脑,另外一边是大量的摄像机,记录仪,更有甚者使用心跳,汗腺等生理监控一起来感觉用户的愤怒。而我建议的方式很简单,找到合适的实验对象,给他一个任务,比如写一篇blog,然后站在他身后,看他操作,同时切记放弃自己帮忙的冲动,只当自己不存在。

    然后记录两个指标:

    Ø  成功完成任务的人占所有测试者的比例。这个比例越高越好。

    Ø  完成任务的平均时间。这个时间越短越好。

    通过对这两个值的监控,就可以知道自己设计的每一个版本的易用性是越来越好了,还是越来越差了。

    7     总结

    总之,不要让易用性测试的模糊性和主观性阻碍测试工作。易用性测试的模糊和主观是固然的,即使设计用户界面的专家也会承认有的地方是这样的。

     

    8        附录

    一、优秀UI应具备以下的七个要素:

    Ø  符合标准和规范

    最重要的用户界面要素是软件符合现行的标准和规范——或者有真正站得住脚的不符合的理由。

    注意:如果测试在特定平台上运行的软件,就需要把该平台的标准和规范作为产品说明书的补充内容。像对待产品说明书一样,根据它建立测试用例。

    这些标准和规范由软件易用性专家开发。它们是经由大量正规测试、使用、尝试和错误而设计出的方便用户的规则。也并非要完全遵守准则,有时开发小组可能想对标准和规范有所提高。平台也可能没有标准,也许测试的软件就是平台本身。在这种情况下,设计小组可能成为软件易用性标准的创立者。

    Ø  直观

    用户界面是否洁净、不唐突、不拥挤

    UI的组织和布局合理吗?

    有多余功能吗?

    帮助系统有效吗?

    Ø  一致

    如果软件或者平台有一个标准,就要遵守它。如果没有,就要注意软件的特性,确保相似的操作以相似的方式进行。

    快捷键和菜单选项

    术语和命名

    听众

    诸如OKCancel按钮的位置。

    Ø  灵活

    多种视图的选择:

    状态跳转

    状态终止和跳过

    数据输入和输出

    Ø  舒适

    软件使用起来应该舒适,不能给用户工作制造障碍和困难。

    恰当;

    错误处理;

    性能。

    Ø  正确

    要测试正确性,就是测试UI是否做了该做的事。

    注意:市场定位偏差、语言和拼写、不良媒体、WYSIWYG(所见即所得)

    Ø  实用

    是否实用事优秀用户界面的最后一个要素。

  • 易用性测试(整理文档一)

    2008-05-07 09:29:10

     最近客户方与PM都在叫嚣质量部门在易用性测试方面的缺失,为了给出给出一个较明确的解释,以便纠正和消失大家在易用性测试方面理解的误差,特在网上查了许多的关于易用性测试方面的资料。

    现将整理的文档列出来,希望对大家有所帮助。

    1         易用性的定义

    首先,我们按照惯有的思路,先来理解一下易用性的概念问题。

    1.1      惯常定义

    易用性主要指以下三点:

    Ø  易见Easy to discover:单单凭观察,用户就应知道设备的状态,该设备供选择可以采取的行动。

    Ø  易学Easy to learn:不通过帮助文件或通过简单的帮助文件,用户就能对一个陌生的产品有清晰的认识。

    Ø  易用Easy to use:用户不翻阅手册就能使用软件。

    1.2      书面定义

    易用性(Usability):是交互的适应性、功能性和有效性的集中体现。

    2003 年颁布的 GB/T16260-2003(ISO 9126-2001) 《软件工程 产品质量》质量模型中,提出易用性包含易理解性、易学习性和易操作性;即易用性是指在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力。

     

    2         一些对于易用性的误解

    2.1      有用性与易用性

    Ø  有用性:这由产品的规划师和前期的产品经理或是需求人员负责保证。反面例子:比如一台机器很容易使用但并不解决实际问题。很多产品的失败,首先有用性,也就是市场的失败,而非易用性的失败。

    Ø            易用性:这由易用性工程师负责。比如一台机器有功能但用户不知道如何使用。

    2.2      易用性测试与UI测试

    UI测试(又称“用户界面测试”):用于与软件交互的方式称为用户界面或UI。是软件面向用户的主大门,直接影响到用户对软件系统的映像,及后期的使用等。但是,对其的测试仅仅是易用性测试的一个方面,是一个包含的关系。(记住,软件测试员不需要去设计UI,只需要把自己当作用户,然后去找出UI中的问题。)

    分清了一件事物的这两个方面,在分析的时候会避免将所有的问题都归结于易用性问题。

     

    3         易用性的原理

    原理归结为三点:易见、映射、反馈。下面我们就一条一条的来梳理。

    3.1      易见(Visibility

    单单凭观察,用户就应知道设备的状态,该设备供选择可以采取的行动。

    举个例子:

    第一次走到新的办公室,透过落地的巨大玻璃门,可以看到里面的会议室。习惯的去推门,同时脚步并没有停下来。

    结果。。。

    “哐”的一声巨响,我差点整个身子就撞了上去,鼻子已经贴到了玻璃上。原来,这扇门是只能拉,而不能推的。

    这是每个人都会遇到的事情:只能拉的门去推,只能推的门去拉,或者直接一头撞进那种左右滑动的移门上去。。。这个时候常会自责“自己真不小心”。其实,傻的不是我们,而是门的设计师。门的把手,遥控器,以及任何我们周围的东西,都是用户界面。让人会犯错误的设计,是易用性出了问题。易用性差的门,就像给我们设计的圈套,等着我们掉进去。

    关于门的例子,就是易见出了问题。通过观察它,让我没有办法判断我可以做哪些操作,推还是拉?有很多门上贴着“推”或“拉”,其实当一项设计需要用标签的时候,就说明设计本身已经失败了。

    3.2      映射(Mapping

    知识主要分布在两个地方。

    1.每个人的脑子里。这些知识对高效的使用一样东西非常有用。

    2.环境中。这些知识当第一次遇到时非常有用

    对于大家日常使用的饮水机的两个水龙头,大多数人不加思考就知道红的是热水,蓝的是冷水。这就是产品的设计和我们脑子里已经形成的火是红的,水是蓝的映射。这简单的映射,让大家对一个产品的接受度大大增加。微软的DOS,就第一次采取了DIR(目录)作为目录的结构,而不用ls这样Unix的文件名,而且第一次使用了形象的C:盘,D:盘。到了Windows时代,更是把目录干脆变成了文件夹的样子,文件变成了一张张写着字的纸。而Windows 95更加开创性的第一次引入了桌面的概念,反而把我的电脑变成桌面的一部分。这种种变化,都是把产品映射到了大家熟识的生活中的概念。我曾经用过红颜色代表冷水,蓝颜色代表热水的饮水机,就算有再多的标签告诉我那个是热水,我还是会搞错。

     

    3.3      反馈(Feedback

    反馈对于产品的易用性至关重要。通过不断的迅速的反馈,让用户知道自己的操作的结果。比如,Windows的应用中的那个“沙漏”的鼠标,就是让用户知道需要等待。产品中“正在。。。,请稍后”就远好于死机一样的一动不动。关于反馈,多数的投影仪最得非常不好。看一个典型的场景:拿起投影仪遥控器,按开的按钮。等了三秒钟,开始不耐烦,因为投影仪虽然已经开动,但是需要非常慢的时间预热。我们会以为没有反应,再按一下。这回更耐心一点了,但是投影仪已经被关掉了。十五秒钟以后,接着按那个开关键,直到愤怒的离开。。。没有反馈,会让初次使用的用户非常的苦恼。比如Windows的登录框,输密码时,因为反馈被星号屏蔽了,多少次按了大写键以后没法输入密码就是一个易用问题。好在从Windows XP以后,用一个“大写键打开”的提示框作为反馈,好多了。

     

    此外,易用性是针对与不同人的,设计者无法准确知道该产品是否对别人同样易用。

    4         易用性测试分类与规定

    4.1      易用性测试的分类

    易用性测试范围从交付产品形态来看,主要包括:

    Ø  应用程序的测试(UI测试、功能易用性测试等)

    Ø  用户手册系统文档的测试

    如果通过质量外部模型来评价易用性,应用程序的易用性测试又包括如下分类:

      (1)易理解性测试;

      (2)易学性测试;

      (3)易操作性测试;

      (4)吸引性测试;

      (5)易用的依从性测试。

      

    4.2      易用性测试规定

    下面仅就之前提及的三点(易操作性、易理解性、易学性)作详细介绍。

    4.2.1        易操作性测试方法

    4.2.1.1         目的

    易操作性测试是与用户为操作和运行控制所花努力有关的软件属性。其目的在于增加软件操作的简易性,让用户容易接受软件,也方便用户的日常使用

    4.2.1.2         易操作性测试的基本步骤

    易操作性测试活动主要包括

    Ø  制定易操作性测试计划并准备易操作性测试用例和易操作性测试规程;

    Ø  对照基线化软件和基线化分配需求及软件需求的文档,进行软件易操作性测试;

    Ø  用文档记载在易操作性测试期间所鉴别出的问题并跟踪直到结束;

    Ø  将易操作性测试结果写成文档并用作为确定软件是否满足其需求的基础;

    Ø  提交易操作性测试分析报告。

     

    4.2.1.3         易操作性测试方法

    Ø  根据软件需求设计搭建相应的测试环境。

    Ø  测试是否具有直观的操作界面,所有的说明应以帮助文档的形式出现。

    Ø  测试操作方式是否采用菜单驱动与热键响应相结合

    Ø  测试是否存在复杂的菜单选项和繁琐的加密操作过程

    Ø  测试是否使用中文平台(还是需挂外码转换平换平台)

    Ø  测试操作是否窗口的打开层次太深

     

    4.2.1.4         易操作性测试的结果分析

    Ø  软件能力 【经过测试所表明的软件能力。】

    Ø  缺陷和限制 【说明测试所揭露的软件缺陷和不足,以及可能给软件运行带来的影响。】

    Ø  建议 【提出为弥补上述缺陷的建议。】

    Ø  测试结论 【说明能否通过。】

    4.2.2        易理解性测试规定

    4.2.2.1         目的

    易理解性是与用户为认识逻辑概念及其应用范围所花的努力有关的软件属性。其目的在于让用户能迅速了解软件的操作流程。

    4.2.2.2         易理解性测试的基本步骤

     易理解性测试活动主要包括:

    Ø  制定易理解性测试计划并准备易理解性测试用例和易理解性作测试规程;

    Ø  对照基线化软件和基线化分配需求及软件需求的文档,进行软件易理解性测试;

    Ø  用文档记载在易理解性测试期间所鉴别出的问题并跟踪直到结束;

    Ø  将易理解性测试结果写成文档并用作为确定软件是否满足其需求的基础;

    Ø  提交易理解性测试分析报告。

    4.2.2.3         易理解性测试方法

    Ø  测试人员详细分析用户业务操作的流程,得到认定的最佳测试方案

    Ø  测试是否按用户的认识逻辑与软件的行业约定进行软件设计

    Ø  测试是否存在会让用户产生错误指引的操作

    Ø  测试是否存在会让用户产生有专业争议操作

    4.2.2.4         易理解性测试的结果分析

    Ø  软件能力 【经过测试所表明的软件能力。】

    Ø  缺陷和限制 【说明测试所揭露的软件缺陷和不足,以及可能给软件运行带来的影响。】

    Ø  建议 【提出为弥补上述缺陷的建议。】

    Ø  测试结论 【说明能否通过。】

    4.2.3        易学性测试规定

    4.2.3.1         目的

    易学性测试是与用户为学习软件应用(例如运行控制、输入、输出)所花的努力有关的属性。其目的找出系统内部存在的错误,让用户迅速学会操作软件。

     

    4.2.3.2         易学性测试的基本步骤

    易学性测试活动主要包括

    Ø  制定易学性测试计划和易学性测试规程;

    Ø  对照基线化软件和基线化分配需求及软件需求的文档,进行软件易学性测试;

    Ø  用文档记载在易学性测试期间所鉴别出的问题并跟踪直到结束;

    Ø  将易学性测试结果写成文档并用作为确定软件是否满足其需求的基础;

    Ø  提交易学性测试分析报告。

    4.2.3.3         易学性测试方法

    Ø  根据软件需求设计搭建相应的测试环境

    Ø  测试是否按用户的一般认识逻辑性与行业习惯进行软件设计

    Ø  测试用户操作手册是否详细、科学而简明扼要

    Ø  测试是否提供在线帮助,在线帮助是否有充分的实例

    4.2.3.4         易学性测试的结果分析

    Ø  软件能力 【经过测试所表明的软件能力。】

    Ø  缺陷和限制 【说明测试所揭露的软件缺陷和不足,以及可能给软件运行带来的影响。】

    Ø  建议 【提出为弥补上述缺陷的建议。】

    Ø  测试结论 【说明能否通过。】

     

    5         易用性的遵循原则

    产品设计是个取舍的问题。易用性和功能本身就存在一定的冲突。

    常常记住以下的原则可能会对我们有帮助:

    Ø  用户的注意力是有限的资源

    Ø  添加的任何一项功能都将有可能是用户找到另外一项功能的绊脚石

    Ø  如果必须添加一些功能,试图替换掉另外一项功能

    Ø  经常需要为了一些功能的易用性牺牲另外一些功能

    Ø  完成相同或相近功能的按钮用Frame 框起来,常用按钮要支持快捷方式。

    <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l1
  • 三国简述

    2008-05-06 15:26:15

     

                          曹魏、刘蜀、孙吴


    继东汉而出现的时代称号,由于魏、蜀、吴三个国家鼎立而得名。三国始与222年孙权称吴王,终于265年晋代魏。但史家往往以184年爆发黄巾起义为三国上限,以280年晋灭吴为三国下限。

    东汉中平六年(189)灵帝死,刘辩继立为少帝。执政的何太后兄何进联络西园八校尉之一的袁绍,杀统领八校尉兵的宦官蹇硕。袁绍、何进等密谋尽杀宦官,并召并州牧董卓入洛阳为援。当宦官杀何进,而袁绍又尽杀宦官之时,董卓率兵入洛阳,尽揽朝政,废黜少帝,另立刘协为帝,即汉献帝。
    初平元年(190),董卓避关东兵锋,挟持汉献帝西迁长安。关东联军本是乌合之众,彼此欺诈并吞,不久就分崩离析了。初平三年长安兵变,董卓被杀,关中混乱不已。
    到建安元年(196)时,全国形成许多割据区域:袁绍占据冀、青、并三州,曹操占据兖、豫二州,韩遂、马腾占据凉州,公孙瓒占据幽州,公孙度占据辽东,陶谦、刘备、吕布先后占据徐州,袁术占据扬州的淮南部分,刘表占据荆州,刘璋占据益州,孙策占据扬州的江东部分,士燮占据交州。此外,张鲁以道教的组织形式保据汉中地区,置祭酒以治民。在这些割据者中,势力最强也最活跃的是袁绍和曹操。
    建安五年,曹操与袁绍两军进行官渡之战,曹操以弱胜强,全歼袁军主力;又利用袁绍二子的矛盾攻占袁氏的邺城,相继占领青、冀、幽、并四州之地,统一了中原地区。建安十二年,曹军出卢龙塞(今河北遵化西北),打败侵扰北方的乌桓。
    建安十三年,曹军南下,攻占刘表之子刘琮所据的荆州。依托于荆州的刘备向南奔逃。江东的鲁肃受孙权之命与刘备会晤,商讨对策,诸葛亮又受刘备之命,于柴桑(今江西九江西南)与孙权结盟,共抗曹军。孙、刘联军以少胜多,大败曹军水师于赤壁(一般认为在今湖北蒲圻西北,长江南岸),迫使曹军退回中原。这就是促使形成三国鼎立局面的赤壁之战。曹操北归以后,用兵于关中、陇西,把统一范围扩及整个北方。
    建安十六年,刘备率部进入益州,逐步占据了原来刘璋(刘焉之子)的地盘。二十四年,刘备从曹军手中夺得汉中,据守荆州的关羽也向曹军发起进攻,但是孙权遣军袭杀关羽,占领荆州大部,隔三峡与刘备军相持。
    汉延康元年(220)正月,曹操死;十月,子曹丕称帝(即魏文帝曹丕),国号魏,都洛阳,建元黄初。221年,刘备在成都称帝(即汉昭烈帝刘备),国号汉,世称蜀,又称蜀汉,建元章武。孙权于221年接受魏国封号,在武昌称吴王。222年,蜀军出峡与吴军相持于夷陵(今湖北宜都境),猇亭一战,被吴将陆逊击败,退回蜀中。229年,孙权在武昌称帝(即吴大帝孙权),后迁都建业(见建康),建立吴国。猇亭之战以后不久, 蜀、吴恢复结盟关系,共抗曹魏。南北之间虽然还常有战事发生,有时规模还比较大,但是总的说来,力量大体平衡,鼎足之势维持了四十余年之久。

    三国疆域,大体魏得北方,蜀得西南地区,吴得东南地区。魏国置司、豫、兖、青、 徐、凉、雍、冀、幽、并、荆、扬等州。其中凉州领戊己校尉护西域;幽州地境达于辽东;南部诸州大致依秦岭、淮河分别与蜀、吴相接。蜀置益州,自秦岭至于南中(今四川大渡河以南和云南、贵州,因在巴、蜀之南,故名)。吴有扬、荆、交三州。三国户口,魏有户六十六万余,口四百四十余万;蜀有户二十八万,口九十四万,吏四万,兵十万余;吴有户五十二万余,口二百三十万,吏三万余,兵二十三万。

    魏:
    魏汉末社会中的世家大族,魏晋时称为士族,影响很大,名士多出于这个阶层,或者在政治上站在这个阶层一边。曹操由于其宦官家族的身世,一般说来不为名士所尊重,不具备战胜出身于世家大族的割据者的政治优势。曹操杀戮讥议自己的名士边让,引起兖州士大夫的激烈反抗,其势力几乎覆没。东汉世家大族的代表人物袁绍,实力和影响远胜曹操,在讨曹檄文中曾辱骂曹操是“赘阉遗丑”。官渡之战时,曹操的文武官员多与袁绍通谋。曹操为了战胜强大的对手,不得不度外用人,即从较低的社会阶层中网罗有能力的人才。后来他一再发布“唯才是举”的教令,拔用那些不齿于名教但有治国用兵之术的人。但曹操选官的真正准则并不是“唯才是举”,而是“治平尚德行,有事赏功能”。曹操不但不曾笼统地否定世家大族素所强调的德行标准,而且很重视对名士的争取。在其帷幄中有许多名士。官渡战前,徐州混乱,他曾派出名士陈群、何夔等人出宰诸县,以图稳定 局势。曹操得邺城后,立即辟用袁绍原来辖区内的名士;破荆州,也尽力搜罗本地的和北方逃来的士人。曹燥越到晚年,越是以慎德为念。
    曹操进驻冀州后颁行租调制,对土地所有者(包括自耕农和地主),每亩土地征收田租谷四升。每户征收户调绢二匹、绵二斤。户调取代汉代沉重的人头税,对农民有好处,也有利于大族豪强庇荫佃客。曹操命令加重对豪强兼并行为的惩罚,但大族豪强兼并事实上难以阻止。
    随着北方的统一和屯田制、租调制的施行,北方社会秩序趋于稳定,生产逐渐恢复。政府修整道路,兴建水利,便利了交通和槽运。恢复的冶铁业中,利用水力鼓风冶铸的水排得到推广,丝织业也兴盛起来。商品交换渐有起色,魏明帝时重新颁用钱币。洛阳、邺城都日趋繁华。魏国与日本境内的邪马台国保持着较频繁的交往。西域诸国也有使臣和商人往来。

    文化方面,文学、哲学和科学技术都有重要成就。曹操、曹丕、曹植父子都是著名诗人;还有以王粲、陈琳为代表的所谓建安七子。三曹和建安七子在诗歌创作上形成 “建安风骨”,留下许多名篇。才华横溢的女诗人蔡琰(文姬)有《悲愤诗》传世,著名的乐府叙事诗《孔雀东南飞》也创作于建安时。以何晏、王弼为代表的玄学的产生,是 哲学思想的突出成就。后世称为“医圣”的张仲景,著《伤寒杂病论》(后人析为《伤寒论》及《金匾要略》二书),奠定了中国医学体系的基础。华佗则精于外科手术、首创用麻沸散作手术麻醉剂。数学家刘徽在圆周率计算上有重大贡献。马钧在机械上有多种发明,包括提水工具翻车。在宗教方面,道教由于黄巾起义和张鲁保据的失败,略 有沉寂,佛教则继续流传。洛阳有佛寺,西域僧人前来传法译经。颍川人朱士行远赴于阗求经,是第一个西行求法的汉僧。

    魏国建立不久,政权开始腐败。齐王芳在位时发生了辅政的宗室曹爽和太尉司马懿的权力之争。曹爽重用名士何晏、邓飏、李胜、毕轨、丁谥等人,改易朝典,排斥司马懿。司马氏是东汉以来的世家大族,司马懿本人又富于谋略,屡有军功。景初二年(238),他率军平定公孙渊,使辽东归入魏 国版图。正始十年(即嘉平元年,249),又乘曹爽奉齐王芳出洛阳城谒高平陵的机会发动政变,逼迫曹爽屈服,并处死曹爽及其党羽,独揽朝政,史称高平陵事件。后来,司马懿及子司马师、司马昭陆续压平了起自淮南的王凌(嘉平三年,25i)、毋丘俭(正元二年,255)、诸葛诞(甘露二年,257)的军事叛乱和其他朝臣的反抗,巩固了司马氏的统治。以竹林七贤为代表的一批玄学名士对 司马氏持消极反抗态度,其中的嵇康被司马氏以非毁名教和欲助毋丘俭为乱之罪名杀害。他们之中的大部分在魏和西晋初都陆续归服于司马氏。

    当反抗力量都被消灭以后,司马氏乘时立功,于魏景元四年(263)出兵灭蜀。两年后,司马炎以接受禅让为名,代魏为晋。魏国历五帝,共四十六年。

    蜀:
    董卓入洛的前一年(中平五年,188),汉宗室刘焉出任益州牧。焉死,子璋继任。刘焉、刘瘴相继压平了益州豪强的反抗。建安十六年刘璋邀请暂驻荆州的刘备入蜀,使击保据汉中的张鲁。建安十九年,刘备占据益州;二十四年进驻汉中,自称汉中王。是年,留守荆州的关羽被孙权军袭杀。刘备于221年称帝后,为争夺已失的荆州,于次年出峡,与吴军进行了夷陵之战,败退入蜀,病死。其子刘禅继立。

    刘备在新野时,邀约客居隆中的诸葛亮为辅佐。诸葛亮看清了北有曹操,东有孙权,荆州不可持久的形势,从战略上促成刘备进入益州,以图自保。刘备死,诸葛亮辅刘禅。小国弱民,处境困难。今川西和云、贵的一些少数民族,当时统称西南夷,接连发生叛乱。益州郡(今云南晋宁东)豪强雍闿执太守,求附于吴。牂柯太守朱褒、越嶲夷王高定元都响应雍闿,南中地区动乱扩大。建兴三年(225),诸葛亮率军南征,大军分为三路,诸葛亮军西平越嶲,马忠军东平牂柯,然后他们与中路李恢所部共指益州郡。此时孟获已代雍闿据郡。诸葛亮败孟获,并按出军时马谡“攻心为上”的建议,对孟获七纵七擒,终于使孟获归心,南中平定。诸葛亮把夷人渠帅移置成都为官,把南中青羌编为军队,并允许大姓招引夷人作部曲;以南中的牛马特产充实蜀国军资。西南夷人地区的闭塞状态,从此有所改变。

    南中战争结束,蜀吴结盟也取得圆满成果。诸葛亮于建兴五年率军进驻汉中,同魏国展开争夺关陇的激战。诸葛亮在益州疲惫情况下急于求战,一方面力图以北伐来巩固自己“兴复汉室,还于旧都”的正统地位;一方面则以攻为守,借以图存。建兴六年,诸葛亮命赵云据箕谷(今陕西褒城北)以为疑兵,自己率主力取西北方向进攻祁山(今甘肃礼县东北)。前锋马谡在街亭(今甘肃庄浪东南)败阵,蜀军撤回。以后三年,诸葛亮又屡次出兵,都由于军粮不济,没有成果。建兴十二年再次北伐,进军至渭水南面的五丈原(今陕西眉县西南),病死军中,蜀军撤回,北伐停顿。

    诸葛亮死后,蜀国以蒋碗、费祎、董允等人相继为相,因循守成而已。景耀元年(258)以后,宦官擅权,政治腐败。大将军姜维北伐,劳而无功。景耀六年,魏军三路攻蜀,姜维在剑阁抗拒魏钟会大军,而魏邓艾则轻军出阴平(今甘肃文县西)险道南下,于这年冬灭蜀。蜀国历二帝,共四十三年。

    吴:
    吴 汉末黄中起义时,孙坚随会稽朱儁 到中原镇压黄巾,以后又转战于凉州和荆州江南诸郡。董卓之乱时,孙坚参加讨伐董卓的关东联军,隶属于袁术,在淮南活动,孙坚死,子孙策统领部众,约于兴平元年(194)开始向江东发展。他得到周瑜等人的助力,驱逐暂驻曲阿的扬州刺史刘繇,逼降会稽太守王朗。建安元年献帝都许以后,孙策拒袁术而联曹操,受封为吴侯。建安四年,孙策击破袁术庐江太守刘勋,吞并其部曲,并取得豫章郡地。建安五年孙策死,策弟孙权统众。建安十三年孙权由吴徒治京城(今江苏镇江)。筹划赤壁之战,势力达于荆州;十五年招附保据岭南的士夑兄弟,取得东南半壁。建安十六年孙权徒治秣陵,次年,改秣陵为建业。建安二十四年孙权破关羽,占有荆州全境。三年以后(222)又取得夷陵之战的胜利,限制了蜀国出峡发展的可能。孙权尚存的困难,一是对付山越的不宁,一是在淮南巢湖地区抗拒曹魏的压力。

    散布在东南州郡山区的山越人,阻险割据,甚至北联曹魏,反对孙权势力向南方内地扩张。孙权与山越进行过多次战争,屡获胜利,嘉禾三年(234)诸葛格率军进攻丹阳山越,经三年围困,山越十万人出山投降,其中四万丁壮补兵,余下的成为编户。孙吴统治的几十年中,山越人大体与汉人趋于融合。东晋南朝史籍中,关于山越的记载只偶尔一见。

    孙权主要的军事活动在淮南。赤壁战后,曹操军屡攻合肥地区,双方互有胜负。江北居民多渡江,濒江数郡成为空虚地带。 诸葛亮死,魏蜀战争停止后,魏国加强了在淮南对吴国的进攻。吴军除沿江设督驻军、遍置烽燧以外,还在巢湖南口筑濡须坞,严密防守。魏军水师有限,进攻难于奏效,所以魏吴相持有年。

    孙权统治时,江东经济有显著发展。北人南来,山越出居平地,劳动力增多。长江两岸地区都设有屯田区,其中毗陵屯田区(今江苏常州、镇江、无锡一带)最大。会稽郡农业生产比较发达。历代陆续修成的浙东运河和江南运河在孙吴时发挥了通航效益。江南运河云阳至京口(今江苏丹阳至镇 江)一段流经山间,不便通航,吴未得到修整。云阳以西开辟破冈渎,使秦淮河和江南运河联通,为三吴至建业的便捷水道。丝织业开始在江南兴起,但织造技术还不高,所以蜀锦成为重要的输入物资。铜铁冶铸继承东汉规模而有发展规律,青瓷业也在东汉釉陶制造基础上走向成熟。由于河海交通的需要,造船业很兴旺,海船经常北航辽东,南通南海诸国。黄龙二年(230)万人船队到达夷洲,即今台湾省,这是大陆与台湾联系的最早记录,吴国使臣朱应、康泰泛海至林邑(在今越南南部)、扶南(在今柬埔寨境)诸国。大秦商人和林邑使臣也曾到达建业。

    经济的发展,与外界交往的增加,促进了攻江南文化的提高,出现了一批知名的经学家和文史之士,如虞翻、陆绩、韦昭。佛教开始在江南传播,居士支谦从洛阳南来,世居天竺的西域僧康僧会稍晚从交趾北上。他们在建康译经传法,影响颇大。道教在南方民间继续流传。

    孙吴诸将以私兵随孙氏征战,孙吴屡以国家佃客赐给功臣,功臣往往拥有多至于数县的俸邑,因而逐渐形成吴国武将世袭领兵的制度。同时,江南也出现了象吴郡的顾、陆、朱、张那样的占有大量土地和童仆,而且各有门风,世居高位的大族。他们和世袭领兵的武将同是孙吴政权的主要支柱。

    孙权死(252)后吴国日趋衰弱,而魏国则在司马氏消灭淮南地区三次军事叛乱后日趋强大。由于司马氏以先灭蜀后取吴作为国策,而在灭蜀(263)、代魏(265)后又忙于新朝定制,吴国政权暂得延续。晋泰始五年(269),羊祜命王浚在益州筹建水师,并预定攻吴的军事方略。咸宁五年(279)冬,晋军出兵自长江以北、江陵至建业之间五道攻吴,而以益州水师为奇兵出峡顺流,于太康元年(280)三月攻下建业,吴帝孙皓降,吴国亡。吴国历四帝,共五十二年。东汉初平元年(190)后出现的全国分裂局面,经过魏、蜀、吴三个区域的局部统一和相持后,至此又归于全国的统一。

  • 凤求凰---司马相如

    2008-05-06 15:24:55

      凤兮凤兮归故乡,遨游四海求其皇。

       时未遇兮无所将,何悟今兮升斯堂!

      有艳淑女在闺房,室迩人遐毒我肠。

       何缘交颈为鸳鸯,胡颉颃兮共翱翔!

      
      皇兮皇兮从我栖,得托孳尾永为妃。

       交情通意心和谐,中夜相从知者谁?

      双翼俱起翻高飞,无感我思使余悲。

      

      当年司马相如一曲《凤求凰》打动了才女卓文君的心,“文君夜亡奔相如”,演出了一幕传唱千古的私奔佳话。这两首诗据说就是《凤求凰》的歌辞。

      司马相如(公元前179年—公元前117年),字长卿,四川成都人,幼时喜好读书、舞剑,因为仰慕赵国名相蔺相如的行止,所以就更名相如。相如精通楚辞,善于写辞作赋,汉景帝年间任武骑常侍,但因为景帝不喜欢词赋,所以无法施展自己的才华,常常称病,被景帝免职。以后他和枚乘一起游于梁孝王门下,在那里作了著名的《子虚赋》,梁孝王死后归于成都。

      相如家里很穷,无法养活自己,他的一个好友王吉在临邛当县令,知道相如困厄,就邀请他去做客。当时临邛有好多富人,有个卓王孙家资巨万,他的女儿就是卓文君,才貌双绝,新寡在家。卓王孙仰慕相如风采,就设宴邀请相如和王吉。席间王吉称誉相如不仅精于词赋,而且琴艺绝佳,于是就弹起了这曲《凤求凰》,意欲挑逗文君。当时文君颇为相如才情所动,“文君窃从户窥之,心悦而好之,恐不得当也”。后相如又通过侍女向文君大献殷勤,文君遂夜奔相如,与他一同回到了成都。

      但是相如家贫如洗,怎么能养活得起娇妻呢?文君将情况告诉父亲,希望得到资助,但是卓王孙却认为女儿的行为有辱家门,和她断绝了父女关系。文君乃富家女子,过不了这穷日子,所以从去了成都后就没有高兴过;她想让相如和她回临邛,向兄弟姐妹们借贷一点也足以度日。相如答应了,但是回到临邛后却把仅有的家产变卖了,在街上租了个门面卖酒,自己穿着酒保的衣服跑堂不说,还让卓文君坐柜当炉(温酒),这就又有了“文君当炉”的美谈。此举将卓王孙羞得连门都不敢出了,最后给了相如100万钱和100个仆人,夫妻双双回到成都,置田买房,成了富人。后来武帝即位,读了《子虚赋》相当赞赏,遂将相如召回长安。

      司马相如是西汉的词赋名家,史有“西汉文章两司马”(另一司马为司马迁)之称。《汉书.艺文志》中记载他的著作有29篇,但大多失传,今仅存《子虚赋》、《上林赋》、《大人赋》、《长门赋》、《美人赋》、《哀二世赋》6篇,其中《长门赋》、《美人赋》两篇的真伪还存在争议。《子虚赋》和《上林赋》是其代表作,在这两篇赋中,典型的汉代大赋的体制得到确立。

      这两篇赋的内容前后相连,都是在一个虚构的故事中以问答体的形式展开的。赋中假设楚国使者子虚出使齐国,在齐王面前大肆吹嘘楚国云梦泽广袤、丰饶和楚王到云梦泽游猎的盛况,乌有先生不服,批评子虚说:“不称楚王之德厚,而盛推云梦以为高,奢言淫乐而显侈靡。”接着说齐国“吞若云梦者八九于其中,曾不蒂芥”,又夸耀了一番齐地的风景。听完俩人的夸耀,在旁边代表天子的亡是公大笑其无知,根本不知道齐楚之外还有更为宽广的世界。接着他搬出了天上的上林苑,描绘了那里的壮丽景象和天子游猎的盛举,铺陈出一个总揽天地万物,吞吐世界的去处。表明了诸侯在天子的威风和气概之下根本不足与论。

      这两篇赋写得极为铺张扬厉,用了4千余字,以写天子游猎为中心,将山海河泽、宫殿苑囿、林木鸟兽、土地物产、音乐歌舞、服饰器物、骑射酒宴等等内容包罗在内,展现了社会昌盛、经济繁荣的汉武盛世,展示了中华民族海纳百川的博大胸襟,也展示了中华民族进入一个崭新的历史时代后傲视天下自豪。也只有这种铺张扬厉的大赋才能体现出那个时代蓬勃向上的生气,让人感受到叹为观止的大汉气象。

      《子虚》和《上林》在语言方面表现出高度的修辞艺术。它们将辞赋注重修辞的特点推向了极致。司马相如在这两篇赋中,收罗了许多脱离日常生活的陌生孤僻却极为工整的词汇,逐字逐句精心选择,完全清除了在楚辞中残留的简单用语。在形式上重点已不是六字句的重复了,数量最多的是四字句,同时和三字句、七字句交错使用,显示出一种成熟时期整齐复杂的文学美感。

      其他几篇赋也各有特色,《哀二世赋》借助描写旅途风景,伤今怀古,开了纪行赋的先河。《大人赋》通过描写幻想的自然景色,上承楚辞传统,下开游仙文学之先河。《长门赋》细腻地描写了陈皇后被幽禁长门宫的孤独与悲哀,成为后世宫怨文学的先河。司马相如在辞赋方面的杰出才能,不愧为“西汉文章两司马”的称号。

  • 锦瑟---李商隐

    2008-05-06 15:23:15

      锦瑟无端五十弦,一弦一柱思华年。
     
      庄生晓梦迷蝴蝶,望帝春心托杜鹃。
     
      沧海月明珠有泪,蓝田日暖玉生烟。
     
      此情可待成追忆,只是当时已惘然。
     
      这首《锦瑟》,是李商隐的代表作,爱诗的无不乐道喜吟,堪称最享盛名;然而它又是最不易讲解的一篇难诗。自宋元以来,揣测纷纷,莫衷一是。
     
      诗题“锦瑟”,是用了起句的头二个字。旧说中,原有认为这是咏物诗的,但近来注解家似乎都主张:这首诗与瑟事无关,实是一篇借瑟以隐题的“无题”之作。我以为,它确是不同于一般的咏物体,可也并非只是单纯“截取首二字”以发端比兴而与字面毫无交涉的无题诗。它所写的情事分明是与瑟相关的。
     
      起联两句,从来的注家也多有误会,以为据此可以判明此篇作时,诗人已“行年五十”,或“年近五十”,故尔云云。其实不然。“无端”,犹言“没来由地”、“平白无故地”。此诗人之痴语也。锦瑟本来就有那么多弦,这并无“不是”或“过错”;诗人却硬来埋怨它:锦瑟呀,你干什么要有这么多条弦?瑟,到底原有多少条弦,到李商隐时代又实有多少条弦,其实都不必“考证”,诗人不过借以遣词见意而已。据记载,古瑟五十弦,所以玉谿写瑟,常用“五十”之数,如“雨打湘灵五十弦”,“因令五十丝,中道分宫徵”,都可证明,此在诗人原无特殊用意。
     
      “一弦一柱思华年”,关键在于“华年”二字。一弦一柱犹言一音一节。瑟具弦五十,音节最为繁富可知,其繁音促节,常令听者难以为怀。诗人绝没有让人去死抠“数字”的意思。他是说:聆锦瑟之繁弦,思华年之往事;音繁而绪乱,怅惘以难言。所设五十弦,正为“制造气氛”,以见往事之千重,情肠之九曲。要想欣赏玉谿此诗,先宜领会斯旨,正不可胶柱而鼓瑟。宋词人贺铸说:“锦瑟华年谁与度?”(《青玉案》)元诗人元好问说:“佳人锦瑟怨华年!”
     
      (《论诗三十首》)华年,正今语所谓美丽的青春。玉谿此诗最要紧的“主眼”端在华年盛景,所以“行年五十”这才追忆“四十九年”之说,实在不过是一种迂见罢了。
     
      起联用意既明,且看他下文如何承接。
     
      颔联的上句,用了《庄子》的一则寓言典故,说的是庄周梦见自己身化为蝶,栩栩然而飞……浑忘自家是“庄周”其人了;后来梦醒,自家仍然是庄周,不知蝴蝶已经何往。玉谿此句是写:佳人锦瑟,一曲繁弦,惊醒了诗人的梦景,不复成寐。迷含迷失、离去、不至等义。试看他在《秋日晚思》中说:“枕寒庄蝶去”,去即离、逝,亦即他所谓迷者是。晓梦蝴蝶,虽出庄生,但一经玉谿运用,已经不止是一个“栩栩然”的问题了,这里面隐约包涵着美好的情境,却又是虚缈的梦境。本联下句中的望帝,是传说中周朝末年蜀地的君主,名叫杜宇。后来禅位退隐,不幸国亡身死,死后魂化为鸟,暮春啼苦,至于口中流血,其声哀怨凄悲,动人心腑,名为杜鹃。杜宇啼春,这与锦瑟又有什么关联呢?原来,锦瑟繁弦,哀音怨曲,引起诗人无限的悲感,难言的冤愤,如闻杜鹃之凄音,送春归去。一个“托”字,不但写了杜宇之托春心于杜鹃,也写了佳人之托春心于锦瑟,手挥目送之间,花落水流之趣,诗人妙笔奇情,于此已然达到一个高潮。
     
      看来,玉谿的“春心托杜鹃”,以冤禽托写恨怀,而“佳人锦瑟怨华年”提出一个“怨”字,正是恰得其真实。玉谿之题咏锦瑟,非同一般闲情琐绪,其中自有一段奇情深恨在。
     
      律诗一过颔联,“起”“承”之后,已到“转”笔之时,笔到此间,大抵前面文情已然达到小小一顿之处,似结非结,含意待申。在此下面,点笔落墨,好象重新再“起”似的。其笔势或如奇峰突起,或如藕断丝连,或者推笔宕开,或者明缓暗紧……手法可以不尽相同,而神理脉络,是有转折而又始终贯注的。当此之际,玉谿就写出了“沧海月明珠有泪”这一名句来。
     
      珠生于蚌,蚌在于海,每当月明宵静,蚌则向月张开,以养其珠,珠得月华,始极光莹……。这是美好的民间传统之说。月本天上明珠,珠似水中明月;泪以珠喻,自古为然,鲛人泣泪,颗颗成珠,亦是海中的奇情异景。如此,皎月落于沧海之间,明珠浴于泪波之界,月也,珠也,泪也,三耶一耶?一化三耶?三即一耶?在诗人笔下,已然形成一个难以分辨的妙境。我们读唐人诗,一笔而有如此丰富的内涵、奇丽的联想的,舍玉谿生实不多觏。
     
      那么,海月、泪珠和锦瑟是否也有什么关联可以寻味呢?钱起的咏瑟名句不是早就说“二十五弦弹夜月,不胜清怨却飞来”吗?所以,瑟宜月夜,清怨尤深。如此,沧海月明之境,与瑟之关联,不是可以窥探的吗?
     
      对于诗人玉谿来说,沧海月明这个境界,尤有特殊的深厚感情。有一次,他因病中未能躬与河东公的“乐营置酒”之会,就写出了“只将沧海月,高压赤城霞”的句子。如此看来,他对此境,一方面于其高旷皓净十分爱赏,一方面于其凄寒孤寂又十分感伤:一种复杂的难言的怅惘之怀,溢于言表。
     
      晚唐诗人司空图,引过比他早的戴叔伦的一段话:“诗家美景,如蓝田日暖,良玉生烟,可望而不可置于眉睫之前也。”这里用来比喻的八个字,简直和此诗颈联下句的七个字一模一样,足见此一比喻,另有根源,可惜后来古籍失传,竟难重觅出处。今天解此句的,别无参考,引戴语作解说,是否贴切,亦难断言。晋代文学家陆机在他的《文赋》里有一联名句:“石韫玉而山辉,水怀珠而川媚。”蓝田,山名,在今陕西蓝田东南,是有名的产玉之地。此山为日光煦照,蕴藏其中的玉气(古人认为宝物都有一种一般目力所不能见的光气),冉冉上腾,但美玉的精气远察如在,近观却无,所以可望而不可置诸眉睫之下,—这代表了一种异常美好的理想景色,然而它是不能把握和无法亲近的。玉谿此处,正是在“韫玉山辉,怀珠川媚”的启示和联想下,用蓝田日暖给上句沧海月明作出了对仗,造成了异样鲜明强烈的对比。而就字面讲,蓝田对沧海,也是非常工整的,因为沧字本义是青色。玉谿在词藻上的考究,也可以看出他的才华和工力。
     
      颈联两句所表现的,是阴阳冷暖、美玉明珠,境界虽殊,而怅恨则一。诗人对于这一高洁的感情,是爱慕的、执着的,然而又是不敢亵渎、哀思叹惋的。
     
      尾联拢束全篇,明白提出“此情”二字,与开端的“华年”相为呼应,笔势未尝闪遁。诗句是说:如此情怀,岂待今朝回忆始感无穷怅恨,即在当时早已是令人不胜惘惘了—话是说的“岂待回忆”,意思正在:那么今朝追忆,其为怅恨,又当如何!诗人用两句话表出了几层曲折,而几层曲折又只是为了说明那种怅惘的苦痛心情。诗之所以为诗者在于此,玉谿诗之所以为玉谿诗者,尤在于此。
     
      玉谿一生经历,有难言之痛,至苦之情,郁结中怀,发为诗句,幽伤要眇,往复低徊,感染于人者至深。他的一首送别诗中说:“瘐信生多感,杨朱死有情;弦危中妇瑟,甲冷想夫筝!……”则筝瑟为曲,常系乎生死哀怨之深情苦意,可想而知。循此以求,我觉得如谓锦瑟之诗中有生离死别之恨,恐怕也不能说是全出臆断。
  • 长恨歌

    2008-05-06 15:21:56

    汉皇重色思倾国,御宇多年求不得。
    杨家有女初长成,养在深闺人未识。
    天生丽质难自弃,一朝选在君王侧。
    回眸一笑百媚生,六宫粉黛无颜色。
    春寒赐浴华清池,温泉水滑洗凝脂。
    侍儿扶起娇无力,始是新承恩泽时。
    云鬓花颜金步摇,芙蓉帐暖度春宵。
    春宵苦短日高起,从此君王不早朝。
    承欢侍宴无闲暇,春从春游夜专夜。
    后宫佳丽三千人,三千宠爱在一身。
    金星妆成娇侍夜,玉楼宴罢醉和春。
    姊妹弟兄皆列士,可怜光彩生门户。
    遂令天下父母心,不重生男重生女。
    骊宫高处入青云,仙乐风飘处处闻。
    缓歌慢舞凝丝竹,尽日君王看不足。
    渔阳鼙鼓动地来,惊破霓裳羽衣曲。
    九重城阙烟尘生,千乘万骑西南行。
    翠华摇摇行复止,西出都门百馀里。
    六军不发无奈何,宛转蛾眉马前死。
    花钿委地无人收,翠翘金雀玉搔头。
    君王掩面救不得,回看血泪相和流。
    黄埃散漫风萧索,云栈萦纡登剑阁。
    峨嵋山下少人行,旌旗无光日色薄。
    蜀江水碧蜀山青,圣主朝朝暮暮情。
    行宫见月伤心色,夜雨闻铃肠断声。
    天旋地转回龙驭,到此踌躇不能去。
    马嵬坡下泥土中,不见玉颜空死处。
    君臣相顾尽沾衣,东望都门信马归。
    归来池苑皆依旧,太液芙蓉未央柳。
    芙蓉如面柳如眉,对此如何不泪垂!
    春风桃李花开日,秋雨梧桐叶落时。
    西宫南内多秋草,落叶满阶红不扫。
    梨园子弟白发新,椒房阿监青娥老。
    夕殿萤飞思悄然,孤灯挑尽未成眠。
    迟迟钟鼓初长夜,耿耿星河欲曙天。
    鸳鸯瓦冷霜华重,翡翠衾寒谁与共?
    悠悠生死别经年,魂魄不曾来入梦。
    临邛道士鸿都客,能以精诚致魂魄。
    为感君王辗转思,遂教方士殷勤觅。
    排空驭气奔如电,升天入地求之遍。
    上穷碧落下黄泉,两处茫茫皆不见。
    忽闻海上有仙山,山在虚无缥缈间。
    楼阁玲珑五云起,其中绰约多仙子。
    中有一人字太真,雪肤花貌参差是。
    金阙西厢叩玉扃,转教小玉报双成。
    闻道汉家天子使,九华帐里梦魂惊。
    揽衣推枕起徘徊,珠箔银屏迤逦开。
    云鬓半偏新睡觉,花冠不整下堂来。
    风吹仙袂飘飘举,犹似霓裳羽衣舞。
    玉容寂寞泪阑干,梨花一枝春带雨。
    含情凝睇谢君王,一别音容两渺茫。
    昭阳殿里恩爱绝,蓬莱宫中日月长。
    回头下望人寰处,不见长安见尘雾。
    唯将旧物表深情,钿合金钗寄将去。
    钗留一股合一扇,钗擘黄金合分钿。
    但教心似金钿坚,天上人间会相见。
    临别殷勤重寄词,词中有誓两心知。
    七月七日长生殿,夜半无人私语时。
    在天愿作比翼鸟,在地愿为连理枝。
    天长地久有时尽,此恨绵绵无绝期!

数据统计

  • 访问量: 12541
  • 日志数: 14
  • 文件数: 1
  • 建立时间: 2008-05-06
  • 更新时间: 2008-07-02

RSS订阅