一个人不应该依附在其他人身上,一个人应该首先自力更生。你应该自己能够独立,能够安顿你自己,那你就不会害怕了。你爱你自己的话,别人不能不爱你吧。

发布新日志

  • 淘宝装修工具箱(适合半新人)

    2007-08-09 14:37:14

    淘宝装修工具箱(适合半新人)

    [注:以下有很多网站都是集多种功能性的,现在只是按它们各自最突出,最主要的功能分一下类~]

    1、图片处理   2、图片存储空间   3、商品描述模版   4、商品描述中插入图片

    5、淘宝助理   6、淘宝旺旺   7、淘宝桌面   8、店标、头像、签名制作  

    9、分类制作   10、缩短网址  11、挂饰  12、网店流量统计  

    13、音乐  14、店铺域名 15、邮资查询  16、快递公司网址大全

     

     

            

    1、图片处理

    1、photoshop软件下载  http://zhidao.baidu.com/question/6673877.html 

    2、Photoshop CS2 v9.0 绿色中文版 http://www.crsky.com/soft/5594.html (适合做动态图)

    3、MiYa数码照片边框伴侣http://dl_dgvan.zjol.com.cn/SoftView/SoftView_770.html (给图片加边框、水印

        边框伴侣所使用的边框http://dl_dgvan.zjol.com.cn/SoftView/SoftView_530.html (共200多种边框效果

     

    2、图片存储空间

    雅虎相册  http://gallery.photos.cn.yahoo.com/site/  (支持淘宝论坛贴图)

    宝贝吧  http://up.bb258.com/  (无需注册)

    淘宝吧   http://www.taobao263.com/

    巴比豆  http://www.babidou.com

    139   http://www.139.com/photo/  (支持jpg、gif、png,1G的超大容量

    又拍   http://www.yupoo.com/  (支持gif,谢谢护法"你是我v1"提供信息^_^)

    拍拍乐  http://www.pixplayer.com/  (免费容量小了点2.82MB)

     

     

    3、商品描述模版

    宝贝吧   http://www.bb258.com/main.html  (可进入论坛提供图片素材设计师定做模版)

    淘友吧   http://www.taoyouba.com/  (可以自己DIY简易模版)

    天下买卖   http://txmaimai.com/shop.asp  (可能会限制输入文字的宽度)

    淘宝家   http://www.tbjia.com/index.html

    爱窝    http://www.25wo.com/index.asp

    易翠网    http://www.eacha.com/

     

    4、商品描述中插入图片

    插入一张图片:http://forum.taobao.com/forum-18/show_thread----4312296-.htm

    插入多张图片:这个还是建议用相册,其他方法都不是很稳定,这里提供一个利用雅虎相册的例子

                               http://forum.taobao.com/forum-18/show_thread--1--4030976-.htm 

                               这里再提供一个快速复制相册里照片的方法,不用点图片属性再复制地址了:

                               http://forum.taobao.com/forum-18/show_thread--1--6296013-.htm 

     

    5、商品上架

    淘宝助理   http://www.taobao.com/help/wangwang/wangwang_0628_05.php 

                    可定时上架发布,还可一次批量上传大量商品,这个对于有一些大卖家是必须的)

     

    6、买、卖家沟通工具

    阿里旺旺:  http://www.taobao.com/help/wangwang/wangwang.php 

                  (附带截图,计算器,记事本功能

     

    7、日期提醒

    淘宝桌面:  http://www.taobao.com/theme/3rd_anniv_060714_down.php 

    (可以在桌面上轻松安排日程,附带网页搜索功能,并不定期发布来自淘宝的最新的品牌折扣信息和打折消息)

     

    8、店标、头像、签名制作

    Eoool    http://eoool.com/

    店标、头像素材   http://sc.bb258.com/index.php?type=db

     

    9、分类制作

    我的C2C   http://www.21c2c.com/help/help_shortenimgurl.htm   (包括缩短网址功能)

    特效分类代码 http://forum.taobao.com/forum-18/show_thread----6192640-.htm

    分类素材库1 http://sc.bb258.com/index.php?type=fl

    分类素材库2 http://www.lmqy.net/logoweb/index.htm

    店铺代码img src="这里放图片网址"/

     

    10、缩短网址(可用于上传分类图网址,因为淘宝分类不能超过40个字符)

    宝贝吧  http://url.bb258.com/

    酷缩短网址   http://www.kuso.cc/ (把你的图片地址放在原始网址的框内,再点Make it Short键就OK啦

    淘宝似  http://bbs.taobaos.com/sd.php

     

    11、挂饰

    宝贝吧  http://sc.bb258.com/index.php?type=gj

    去淘吧  http://www.gotaoba.com/tj/cai/

    店铺代码:img src="这里放图片地址" style="left:20px; position: relative; top:0px" /

     

    12、网店流量统计

    美丽统计:   http://tj.3088.com/Counter/supervise/Home.asp   店内显示图标 (多种功能:可在该网站里查看来到你店铺的顾客来自哪个城市,查看过哪些页面等)

    OOcounter    http://www.00counter.com/  (只在店铺里显示流量数) 

    宝贝吧    http://count.bb258.com/index.htm  (合了美丽统计和计数器的功能)

     

    13、音乐

    音乐的网址来源可以从百度上搜到很多,这里就介绍个使用方法的贴子吧,是小二写的哦^_^  

    http://forum.taobao.com/forum-18/show_thread----2476198-.htm (音乐格式最好为WMA)

    店铺代码:bgsound src="这里放音乐地址"loop="-1"></bgsound

     

    14、店铺域名

    淘宝坊:http://www.taobaovip.com/index.aspx

    例: 美玫精品店http://minnie.taobaovip.com/   原店铺网址http://shop33346927.taobao.com/

     

    15、邮资查询

    平邮、快递:   http://www.website-export.com/cnps/

    EMS特快专递:   http://www.ems.com.cn/internetPostageAction.do?reqCode=gotoPostage

     

    16、快递公司网址大全(包括单号查询功能)

    我要找快递:    http://www.51zkd.com/kdweb.htm   (谢谢护法"你是我v1"提供信息^_^)

     

     

             帖子会长期不定时更新, 以保证提供的网站有效,实用性~~~如果大家有更全面、更好的信息;或者想知道而我这里没有的,也可以跟贴提醒告诉我,我会经常更新的,多谢大家配合~~~ 

    原贴地址  http://forum.taobao.com/forum-18/show_thread----6233996-.htm (在淘宝的精华贴,希望能给大家提供些方便~~)

     

  • 组图:揭密前苏联等国人与动物杂交实验

    2007-08-09 10:41:57

    http://tech.qq.com/a/20070808/000001.htm

    厄。。。原来和现实的科幻片这么接近

     

  • 世界首只仿生手上市 每根指头都装马达

    2007-08-09 10:40:57

  • 用例建模指南(转载)

    2007-08-08 09:04:54

    原文

    用例建模指南

    作者:傅纯一 选自: IBM
    用例(Use Case)是一种描述系统需求的方法,使用用例的方法来描述系统需求的过程就是用例建模。用例方法最早是由Iva Jackboson博士提出的,后来被综合到UML规范之中,成为一种标准化的需求表述体系。用例的使用在RUP中被推崇备至,整个RUP流程都被称作是"用例驱动"(Use-Case Driven)的,各种类型的开发活动包括项目管理、分析设计、测试、实现等都是以系统用例为主要输入工件,用例模型奠定了整个系统软件开发的基础。

    1. 什么是用例?
    在介始用例方法之前,我们首先来看一下传统的需求表述方式-"软件需求规约"(Software Requirement Specification)。传统的软件需求规约基本上采用的是功能分解的方式来描述系统功能,在这种表述方式中,系统功能被分解到各个系统功能模块中,我们通过描述细分的系统模块的功能来达到描述整个系统功能的目的。

    采用这种方法来描述系统需求,非常容易混淆需求和设计的界限,这样的表述实际上已经包含了部分的设计在内。由此常常导致这样的迷惑:系统需求应该详细到何种程度?一个极端就是需求可以详细到概要设计,因为这样的需求表述既包含了外部需求也包含了内部设计。在有些公司的开发流程中,这种需求被称为"内部需求",而对应于用户的原始要求则被称之为"外部需求"。

    功能分解方法的另一个缺点是这种方法分割了各项系统功能的应用环境,从各项功能项入手,你很难了解到这些功能项是如何相互关联来实现一个完成的系统服务的。所以在传统的SRS文档中,我们往往需要另外一些章节来描述系统的整体结构及各部分之间的相互关联,这些内容使得SRS需求更象是一个设计文档。

    1.1 参与者和用例
    从用户的角度来看,他们并不想了解系统的内部结构和设计,他们所关心的是系统所能提供的服务,也就是被开发出来的系统将是如何被使用的,这就用例方法的基本思想。用例模型主要由以下模型元素构成:

    • 参与者(Actor)
      参与者是指存在于被定义系统外部并与该系统发生交互的人或其他系统,他们代表的是系统的使用者或使用环境。
    • 用例(Use Case)
      用例用于表示系统所提供的服务,它定义了系统是如何被参与者所使用的,它描述的是参与者为了使用系统所提供的某一完整功能而与系统之间发生的一段对话。
    • 通讯关联(Communication Association)
      通讯关联用于表示参与者和用例之间的对应关系,它表示参与者使用了系统中的哪些服务(用例),或者说系统所提供的服务(用例)是被哪些参与者所使用的。

    这大三种模型元素在UML中的表述如下图所示。


    以银行自动提款机(ATM)为例,它的主要功能可以由下面的用例图来表示。ATM的主要使用者是银行客户,客户主要使用自动提款机来进行银行帐户的查询、提款和转帐交易。


    通讯关联表示的是参与者和用例之间的关系,箭头表示在这一关系中哪一方是对话的主动发起者,箭头所指方是对话的被动接受者;如果你不想强调对话中的主动与被动关系,可以使用不带箭头的关联实线。在参与者和用例之间的信息流不是由通讯关联来表示的,该信息流是缺省存在的(用例本身描述的就是参与者和系统之间的对话),并且信息流向是双向的,它与通讯关联箭头所指的方向亳无关系。

    1.2 用例的内容
    用例图使我们对系统的功能有了一个整体的认知,我们可以知道有哪些参与者会与系统发生交互,每一个参与者需要系统为它提供什么样的服务。用例描述的是参与者与系统之间的对话,但是这个对话的细节并没有在用例图中表述出来,针对每一个用例我们可以用事件流来描述这一对话的细节内容。如在ATM系统中的"提款"用例可以用事件流表述如下:

    提款-基本事件流

    1. 用户插入信用卡

    2. 输入密码

    3. 输入提款金额

    4. 提取现金

    5. 退出系统,取回信用卡

    但是这只描述了提款用例中最顺利的一种情况,作为一个实用的系统,我们还必须考虑可能发生的各种其他情况,如信用卡无效、输入密码错、用户帐号中的现金余额不够等,所有这些可能发生的各种情况(包括正常的和异常的)被称之为用例的场景(Scenario),场景也被称作是用例的实例(Instance)。在用例的各种场景中,最常见的场景是用基本流(Basic Flow)来描述的,其他的场景则是用备选流(Alternative Flow)来描述。对于ATM系统中的"提款"用例,我们可以得到如下一些备选流:

    提款-备选事件流

    备选流一:用户可以在基本流中的任何一步选择退出,转至基本流步骤5。

    备选流二:在基本流步骤1中,用户插入无效信用卡,系统显示错误并退出信用卡,用例结束。

    备选流三:在基本流步骤2中,用户输入错误密码,系统显示错误并提示用户重新输入密码,重新回到基本流步骤2;三次输入密码错误后,信用卡被系统没收,用例结束。

    通过基本流与备选流的组合,就可以将用例所有可能发生的各种场景全部描述清楚。我们在描述用例的事件流的时候,就是要尽可能地将所有可能的场景都描述出来,以保证需求的完备性。

    1.3 用例方法的优点
    用例方法完全是站在用户的角度上(从系统的外部)来描述系统的功能的。在用例方法中,我们把被定义系统看作是一个黑箱,我们并不关心系统内部是如何完成它所提供的功能的。用例方法首先描述了被定义系统有哪些外部使用者(抽象成为Actor),这些使用者与被定义系统发生交互;针对每一参与者,用例方法又描述了系统为这些参与者提供了什么样的服务(抽象成为Use Case),或者说系统是如何被这些参与者使用的。所以从用例图中,我们可以得到对于被定义系统的一个总体印象。

    与传统的功能分解方式相比,用例方法完全是从外部来定义系统的功能,它把需求与设计完全分离开来。在面向对象的分析设计方法中,用例模型主要用于表述系统的功能性需求,系统的设计主要由对象模型来记录表述。另外,用例定义了系统功能的使用环境与上下文,每一个用例描述的是一个完整的系统服务。用例方法比传统的SRS更易于被用户所理解,它可以作为开发人员和用户之间针对系统需求进行沟通的一个有效手段。

    在RUP中,用例被作为整个软件开发流程的基础,很多类型的开发活动都把用例作为一个主要的输入工件(Artifact),如项目管理、分析设计、测试等。根据用例来对目标系统进行测试,可以根据用例中所描述的环境和上下文来完整地测试一个系统服务,可以根据用例的各个场景(Scenario)来设计测试用例,完全地测试用例的各种场景可以保证测试的完备性。

    2. 建立用例模型
    使用用例的方法来描述系统的功能需求的过程就是用例建模,用例模型主要包括以下两部分内容:

    • 用例图(Use Case Diagram)
      确定系统中所包含的参与者、用例和两者之间的对应关系,用例图描述的是关于系统功能的一个概述。
    • 用例规约(Use Case Specification)
      针对每一个用例都应该有一个用例规约文档与之相对应,该文档描述用例的细节内容。

    在用例建模的过程中,我们建议的步聚是先找出参与者,再根据参与者确定每个参与者相关的用例,最后再细化每一个用例的用例规约。

    2.1 寻找参与者
    所谓的参与者是指所有存在于系统外部并与系统进行交互的人或其他系统。通俗地讲,参与者就是我们所要定义系统的使用者。寻找参与者可以从以下问题入手:

    • 系统开发完成之后,有哪些人会使用这个系统?
    • 系统需要从哪些人或其他系统中获得数据?
    • 系统会为哪些人或其他系统提供数据?
    • 系统会与哪些其他系统相关联?
    • 系统是由谁来维护和管理的?

    这些问题有助于我们抽象出系统的参与者。对于ATM机的例子,回答这些问题可以使我们找到更多的参与者:操作员负责维护和管理ATM机系统、ATM机也需要与后台服务器进行通讯以获得有关用户帐号的相关信息。


    2.1.1 系统边界决定了参与者

    参与者是由系统的边界所决定的,如果我们所要定义的系统边界仅限于ATM机本身,那么后台服务器就是一个外部的系统,可以抽象为一个参与者。


    如果我们所要定义的系统边界扩大至整个银行系统,ATM机和后台服务器都是整个银行系统的一部分,这时候后台服务器就不再被抽象成为一个参与者。


    值得注意的是,用例建模时不要将一些系统的组成结构作为参与者来进行抽象,如在ATM机系统中,打印机只是系统的一个组成部分,不应将它抽象成一个独立的参与者;在一个MIS管理系统中,数据库系统往往只作为系统的一个组成部分,一般不将其单独抽象成一个参与者。

    2.1.2 特殊的参与者――系统时钟

    有时候我们需要在系统内部定时地执行一些操作,如检测系统资源使用情况、定期地生成统计报表等等。从表面上看,这些操作并不是由外部的人或系统触发的,应该怎样用用例方法来表述这一类功能需求呢?对于这种情况,我们可以抽象出一个系统时钟或定时器参与者,利用该参与者来触发这一类定时操作。从逻辑上,这一参与者应该被理解成是系统外部的,由它来触发系统所提供的用例对话。


    2.2 确定用例
    找到参与者之后,我们就可以根据参与者来确定系统的用例,主要是看各参与者需要系统提供什么样的服务,或者说参与者是如何使用系统的。寻找用例可以从以下问题入手(针对每一个参与者):

    • 参与者为什么要使用该系统?
    • 参与者是否会在系统中创建、修改、删除、访问、存储数据?如果是的话,参与者又是如何来完成这些操作的?
    • 参与者是否会将外部的某些事件通知给该系统?
    • 系统是否会将内部的某些事件通知该参与者?

    综合以上所述,ATM系统的用例图可表示如下,


    在用例的抽取过程中,必须注意:用例必须是由某一个主角触发而产生的活动,即每个用例至少应该涉及一个主角。如果存在与主角不进行交互的用例,就可以考虑将其并入其他用例;或者是检查该用例相对应的参与者是否被遗漏,如果是,则补上该参与者。反之,每个参与者也必须至少涉及到一个用例,如果发现有不与任何用例相关联的参与者存在,就应该考虑该参与者是如何与系统发生对话的,或者由参与者确定一个新的用例,或者该参与者是一个多余的模型元素,应该将其删除。

    可视化建模的主要目的之一就是要增强团队的沟通,用例模型必须是易于理解的。用例建模往往是一个团队开发的过程,系统分析员在建模过程中必须注意参与者和用例的名称应该符合一定的命名约定,这样整个用例模型才能够符合一定的风格。如参与者的名称一般都是名词,用例名称一般都是动宾词组等。

    对于同一个系统,不同的人对于参与者和用例都可能有不同的抽象结果,因而得到不同的用例模型。我们需要在多个用例模型方案中选择一种"最佳"(或"较佳")的结果,一个好的用例模型应该能够容易被不同的涉众所理解,并且不同的涉众对于同一用例模型的理解应该是一致的。

    2.3 描述用例规约
    应该避免这样一种误解――认为由参与者和用例构成的用例图就是用例模型,用例图只是在总体上大致描述了系统所能提供的各种服务,让我们对于系统的功能有一个总体的认识。除此之外,我们还需要描述每一个有例的详细信息,这些信息包含在用例规约中,用例模型是由用例图和每一个用例的详细描述――用例规约所组成的。RUP中提供了用例规约的模板,每一个用例的用例规约都应该包含以下内容:

    • 简要说明 (Brief Descrīption)
      简要介绍该用例的作用和目的。
    • 事件流 (Flow of Event)
      包括基本流和备选流,事件流应该表示出所有的场景。
    • 用例场景 (Use-Case Scenario)
      包括成功场景和失败场景,场景主要是由基本流和备选流组合而成的。
    • 特殊需求 (Special Requirement)
      描述与该用例相关的非功能性需求(包括性能、可靠性、可用性和可扩展性等)和设计约束(所使用的操作系统、开发工具等)。
    • 前置条件 (Pre-Condition)
      执行用例之前系统必须所处的状态。
    • 后置条件 (Post-Condition)
      用例执行完毕后系统可能处于的一组状态。

    用例规约基本上是用文本方式来表述的,为了更加清晰地描述事件流,也可以选择使用状态图、活动图或序列图来辅助说明。只要有助于表达的简洁明了,就可以在用例中任意粘贴用户界面和流程的图形化显示方式,或是其他图形。如活动图有助于描述复杂的决策流程,状态转移图有助于描述与状态相关的系统行为,序列图适合于描述基于时间顺序的消息传递。

    2.3.1 基本流

    基本流描述的是该用例最正常的一种场景,在基本流中系统执行一系列活动步骤来响应参与者提出的服务请求。我们建议用以下格式来描述基本流:

    1) 每一个步骤都需要用数字编号以清楚地标明步骤的先后顺序。

    2) 用一句简短的标题来概括每一步骤的主要内容,这样阅读者可以通过浏览标题来快速地了解用例的主要步骤。在用例建模的早期,我们也只需要描述到事件流步骤标题这一层,以免过早地陷入到用例描述的细节中去。

    3) 当整个用例模型基本稳定之后,我们再针对每一步骤详细描述参与者和系统之间所发生的交互。建议采用双向(roundtrip)描述法来保证描述的完整性,即每一步骤都需要从正反两个方面来描述:(1)参与者向系统提交了什么信息;(2)对此系统有什么样的响应。具体例子请参见附录。

    在描述参与者和系统之间的信息交换时,需指出来回传递的具体信息。例如,只表述参与者输入了客户信息就不够明确,最好明确地说参与者输入了客户姓名和地址。通常可以利用词汇表让用例的复杂性保持在可控范围内,可以在词汇表中定义客户信息等内容,使用例不至于陷入过多的细节。

    2.3.2 备选流

    备选流负责描述用例执行过程中异常的或偶尔发生的一些情况,备选流和基本流的组合应该能够覆盖该用例所有可能发生的场景。在描述备选流时,应该包括以下几个要素:

    1) 起点:该备选流从事件流的哪一步开始;

    2) 条件:在什么条件下会触发该备选流;

    3) 动作:系统在该备选流下会采取哪些动作;

    4) 恢复:该备选流结束之后,该用例应如何继续执行。

    备选流的描述格式可以与基本流的格式一致,也需要编号并以标题概述其内容,编号前可以加以字母前缀A(Alternative)以示与基本流步骤相区别。

    2.3.3 用例场景

    用例在实际执行的时候会有很多的不同情况发生,称之为用例场景;也可以说场景是用例的实例,我们在描述用例的时候要覆盖所有的用例场景,否则就有可能导致需求的遗漏。在用例规约中,场景的描述可以由基本流和备选流的组合来表示。场景既可以帮助我们防止需求的遗漏,同时也可以对后续的开发工作起到很大的帮助:开发人员必须实现所有的场景、测试人员可以根据用例场景来设计测试用例。

    2.3.4 特殊需求

    特殊需求通常是非功能性需求,它为一个用例所专有,但不适合在用例的事件流文本中进行说明。特殊需求的例子包括法律或法规方面的需求、应用程序标准和所构建系统的质量属性(包括可用性、可靠性、性能或支持性需求等)。此外,其他一些设计约束,如操作系统及环境、兼容性需求等,也可以在此节中记录。

    需要注意的是,这里记录的是专属于该用例的特殊需求;对于一些全局的非功能性需求和设计约束,它们并不是该用例所专有的,应把它们记录在《补充规约》中。

    2.3.5 前置和后置条件

    前置条件是执行用例之前必须存在的系统状态,后置条件是用例一执行完毕后系统可能处于的一组状态。

    2.4 检查用例模型
    用例模型完成之后,可以对用例模型进行检查,看看是否有遗漏或错误之处。主要可以从以下几个方面来进行检查:

    • 功能需求的完备性
      现有的用例模型是否完整地描述了系统功能,这也是我们判断用例建模工作是否结束的标志。如果发现还有系统功能没有被记录在现有的用例模型中,那么我们就需要抽象一些新的用例来记录这些需求,或是将他们归纳在一些现有的用例之中。
    • 模型是否易于理解
      用例模型最大的优点就在于它应该易于被不同的涉众所理解,因而用例建模最主要的指导原则就是它的可理解性。用例的粒度、个数以及模型元素之间的关系复杂程度都应该由该指导原则决定。
    • 是否存在不一致性
      系统的用例模型是由多个系统分析员协同完成的,模型本身也是由多个工件所组成的,所以我们要特别注意不同工件之前是否存在前后矛盾或冲突的地方,避免在模型内部产生不一致性。不一致性会直接影响到需求定义的准确性。
    • 避免二义性语义
      好的需求定义应该是无二义性的,即不同的人对于同一需求的理解应该是一致的。在用例规约的描述中,应该避免定义含义模糊的需求,即无二义性。

    3. 系统需求
    RUP中根据FURPS+模型将系统需求分为以下几类:

    • 功能(Functionality)
    • 可用性(Usability)
    • 可靠性(Reliability)
    • 性能(Performance)
    • 可支持性(Supportability)
    • 设计约束等

    除了第一项功能性需求之外的其他需求都归之为非功能性需求。

    3.1 需求工件集
    用例模型主要用于描述系统的功能性需求,对于其他的非功能性需要用其他文档来记录。RUP中定义了如下的需求工件集合。

    • 用例模型:记录功能性需求
      • 用例图:描述参与者和用例之间的关系
      • 用例规约:描述每一个用例的细节信息
    • 补充规约:记录一些全局性的功能需求、非功能性需求和设计约束等
    • 词汇表:记录一些系统需求相关的术语

    在实际应用中,除了这些工件之外,我们还可以根据实际需求灵活选用其他形式的文档来补充说明需求。并不是所有的系统需求都适保合用用例模型来描述的,如编译器,我们很难用用例方法来表述它所处理的语言的方法规则,在这种情况下,采用传统的BNF范式来表述更加合适一些。在电信软件行业中,很多电信标准都是采用SDL语言来描述的,我们也不必用UML来改写这些标准(UML对SDL存在着这样的兼容性),只需将SDL形式的电信标准作为需求工件之一,在其他工件中对其加以引用就可以了。总之,万万不可拘泥于用例建模的形式,应灵活运用各种方式的长处。

    3.2 补充规约
    补充规约记录那些在用例模型中不易表述的系统需求,主要包括以下内容。

    • 功能性
      功能性需求主要在用例模型中刻画,但是也有部分需求不适合在用例中表述。有些功能性需求是全局性的,适用于所有的用例,如出错处理、I18N支持等,我们不需要在所有的用例中描述这些功能性需求,只需要在补充规约中统一描述就可以了。
    • 可用性
      记录所有可用性相关的需求,如系统的使用者所需要的培训时间、是否应附合一些常见的可用性标准如Windows界面风格等。
    • 可靠性
      定义系统可靠性相关的各种指标,包括:
      • 可用性:指出可用时间百分比(xx.xx%),系统处于使用、维护、降级模式等操作的小时数;
      • 平均故障间隔时间(MTBF):通常表示为小时数,但也可表示为天数、月数或年数;
      • 平均修复时间(MTTR):系统在发生故障后可以暂停运行的时间;
      • 精确度:指出系统输出要求具备的精密度(分辨率)和精确度(按照某一已知的标准);
      • 最高错误或缺陷率:通常表示为bugs/KLOC(每千行代码的错误数目)或bugs/function-point(每个功能点的错误数目)。
    • 性能
      记录系统性能相关的各种指标,包括:
      • 对事务的响应时间(平均、最长);
      • 吞吐量(例如每秒处理的事务数);
      • 容量(例如系统可以容纳的客户或事务数);
      • 降级模式(当系统以某种形式降级时可接受的运行模式);
      • 资源利用情况:内存、磁盘、通信等。
    • 可支持性
      定义所有与系统的可支持性或可维护性相关的需求,其中包括编码标准、命名约定、类库、如何来对系统进行维护操作和相应的维护实用工具等。
    • 设计约束
      设计约束代表已经批准并必须遵循的设计决定,其中包括软件开发流程、开发工具、系统构架、编程语言、第三方构件类库、运行平台和数据库系统等等。

    3.3 词汇表
    词汇表主要用于定义项目特定的术语,它有助于开发人员对项目中所用的术语有统一的理解和使用,它也是后续阶段中进行对象抽象的基础。

    4. 调整用例模型
    在一般的用例图中,我们只表述参与者和用例之间的关系,即它们之间的通讯关联。除此之外,我们还可以描述参与者与参与者之间的泛化(generalization)、用例和用例之间的包含(include)、扩展(extend)和泛化(generalization)关系。我们利用这些关系来调整已有的用例模型,把一些公共的信息抽取出来重用,使得用例模型更易于维护。但是在应用中要小心选用这些关系,一般来说这些关系都会增加用例和关系的个数,从而增加用例模型的复杂度。而且一般都是在用例模型完成之后才对用例模型进行调整,所以在用例建模的初期不必要急于抽象用例之间的关系。

    4.1 参与者之间的关系
    参与者之间可以有泛化(Generalization)关系(或称为"继承"关系)。例如在需求分析中常见的权限控制问题(如下图所示),一般的用户只可以使用一些常规的操作,而管理员除了常规操作之外还需要进行一些系统管理工作,操作员既可以进行常规操作又可以进行一些配置操作。


    在这个例子中我们会发现管理员和操作员都是一种特殊的用户,他们拥有普通用户所拥有的全部权限,此外他们还有自己独有的权限。这里我们可进一步把普通用户和管理员、操作员之间的关系抽象成泛化(Generalization)关系,管理员和操作员可以继承普通用户的全部特性(包括权限),他们又可以有自己独有的特性(如操作、权限等)。这样可以显著减速少用例图中通讯关联的个数,简化用例模型,使之更易于理解。


    4.2 用例之间的关系
    用例描述的是系统外部可见的行为,是系统为某一个或几个参与者提供的一段完整的服务。从原则上来讲,用例之间都是并列的,它们之间并不存在着包含从属关系。但是从保证用例模型的可维护性和一致性角度来看,我们可以在用例之间抽象出包含(include)、扩展(extend)和泛化(generalization)这几种关系。这几种关系都是从现有的用例中抽取出公共的那部分信息,然后通后过不同的方法来重用这部公共信息,以减少模型维护的工作量。

    4.2.1 包含(include)

    包含关系是通过在关联关系上应用<<include>>构造型来表示的,如下图所示。它所表示的语义是指基础用例(Base)会用到被包含用例(Inclusion),具体地讲,就是将被包含用例的事件流插入到基础用例的事件流中。


    包含关系是UML1.3中的表述,在UML1.1中,同等语义的关系被表述为使用(uses),如下图。


    在ATM机中,如果查询、取现、转帐这三个用例都需要打印一个回执给客户,我们就可以把打印回执这一部分内容提取出来,抽象成为一个单独的用例"打印回执",而原有的查询、取现、转帐三个例都会包含这个用例。每当以后要对打印回执部分的需求进行修改时,就只需要改动一个用例,而不用在每一个用例都作相应修改,这样就提高了用例模型的可维护性。


    在基础用例的事件流中,我们只需要引用被包含用例即可。

    查询-基本事件流

    1. 用户插入信用卡

    2. 输入密码

    3. 选择查询

    4. 查看帐号余额

    5. 包含用例"打印回执"

    6. 退出系统,取回信用卡

    在这个例子中,多个用例需要用到同一段行为,我们可以把这段共同的行为单独抽象成为一个用例,然后让其他的用例来包含这一用例。从而避免在多个用例中重复性地描述同一段行为,也可以防止该段行为在多个用例中的描述出现不一致性。当需要修改这段公共的需求时,我们也只需要修改一个用例,避免同时修改多个用例而产生的不一致性和重复性工作。

    有时当某一个用例的事件流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成为一个被包含的用例。这种情况类似于在过程设计语言中,将程序的某一段算法封装成一个子过程,然后再从主程序中调用这一子过程。

    4.2.2 扩展(extend)

    扩展(extend)关系如下图所示,基础用例(Base)中定义有一至多个已命名的扩展点,扩展关系是指将扩展用例(Extension)的事件流在一定的条件下按照相应的扩展点插入到基础用例(Base)中。对于包含关系而言,子用例中的事件流是一定插入到基础用例中去的,并且插入点只有一个。而扩展关系可以根据一定的条件来决定是否将扩展用例的事件流插入基础用例事件流,并且插入点可以有多个。


    例如对于电话业务,可以在基本通话(Call)业务上扩展出一些增值业务如:呼叫等待(Call Waiting)和呼叫转移(Call Transfer)。我们可以用扩展关系将这些业务的用例模型描述如下。



    在这个例子中,呼叫等待和呼叫转移都是对基本通话用例的扩展,但是这两个用例只有在一定的条件下(如应答方正忙或应答方无应答)才会将被扩展用例的事件流嵌入基本通话用例的扩展点,并重用基本通话用例中的事件流。

    值得注意的是扩展用例的事件流往往可以也可抽象为基础用例的备选流,如上例中的呼叫等待和呼叫转移都可以作为基本通话用例的备选流而存在。但是基本通话用例已经是一个很复杂的用例了,选用扩展关系将增值业务抽象成为单独的用例可以避免基础用例过于复杂,并且把一些可选的操作独立封装在另外的用例中。

    4.2.3 泛化(generalization)

    当多个用例共同拥有一种类似的结构和行为的时候,我们可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例所有的结构、行为和关系。在实际应用中很少使用泛化关系,子用例中的特殊行为都可以作为父用例中的备选流存在。


    以下是一个用例泛化关系的例子,执行交易是一种交易抽象,执行房产交易和执行证券交易都是一种特殊的交易形式。

    用例泛化关系中的事件流示例如下:


    4.3 调整用例模型
    用例模型建成之后,我们可以对用例模型进行检视,看是否可以进一步简化用例模型、提高重用程度、增加模型的可维护性。主要可以从以下检查点(checkpoints)入手:

    • 用例之间是否相互独立?如果两个用例总是以同样的顺序被激活,可能需要将它们合并为一个用例。
    • 多个用例之间是否有非常相似的行为或事件流?如果有,可以考虑将它们合并为一个用例。
    • 用例事件流的一部分是否已被构建为另一个用例?如果是,可以让该用例包含(include)另一用例。
    • 是否应该将一个用例的事件流插入另一个用例的事件流中?如果是,利用与另一个用例的扩展关系(extend)来建立此模型。

    5. 管理用例模型复杂度
    一般小型的系统,其用例模型中包含的参与者和用例不会太多,一个用例图就可以容纳所有的参与者,所有的参与者和用例也可以并存于同一个层次结构中。对于较复杂的大中型系统,用例模型中的参与者和用例会大大增加,我们需要一些方法来有效地管理由于规模上升而造成的复杂度。

    5.1 用例包
    包(Package)是UML中最常用的管理模型复杂度的机制,包也是UML中语义最简单的一种模型元素,它就是一种容器,在包中可以容纳其他任意的模型元素(包括其他的包)。在用例模型中,我们可以用构造型(Sterotype)<<use case>>来扩展标准UML包的语义,这种新的包叫作用例包(Use Case Package),用于分类管理用例模型中的模型元素。

    我们可以根据参与者和用例的特性来对它们进行分类,分别置于不同的用例包管理之下。例如对于一个大型的企业管理信息系统,我们可以根据参与者和用例的内容将它们分别归于人力资源、财务、采购、销售、客务服务这些用例包之下。这样我们将整个用例模型划分成为两个层次,在第一层次我们看到的是系统功能总共分为五部分,在第二层次我们可以分别看到每一用例包内部的参与者和用例。


    一个用例模型需要有多少个用例包取决你想怎么样来管理用例模型的复杂度(包括参与者和用例的个数,以及它们之间的相互关系)。UML中的包其实就类似于文件系统中的目录,文件数量少的时候不需要额外的目录,文件数量一多就需要有多个目录来分类管理,同样一组文件不同的人会创建不同的目录结构来进行管理,关键是要保证在目录结构下每一个文件都要易于访问。同样的道理存在于用例建模之中,如何创建用例包以及用例包的个数取决于不同的系统和系统分析员,但要保证整个用例模型易于理解。

    5.2 用例的粒度
    我的系统需要有多少个用例?这是很多人在用例建模时会产生的疑惑。描述同一个系统,不同的人会产生不同的用例模型。例如对于各种系统中常见的"维护用户"用例,它里面包含了添加用户、修改用户信息、删除用户等操作,这些操作在该用例的事件流可以表述成为基本流的子事件流(subflow)。


    维护用户-基本事件流

    该基本流由三个子事件流构成:

    1) 添加用户子事件流

    2) 修改用户 子事件流

    3) 删除用户子事件流

    但是你也可以根据该用例中的具体操作把它抽象成为三个用例,它所表示的系统需求和单个用例的模型是完全一样的。


    应该如何确定用例的粒度呢?在一次技术研讨会上,有人问起Ivar Jacoboson博士,一个系统需要有多少个用例?大师的回答是20个,当然他的意思是最好将用例模型的规模控制在几十个用例左右,这样比较容易来管理用例模型的复杂度。在用例个数大致确定的条件下,我们就很容易来确定用例粒度的大小。对于较复杂的系统,我们需要控制用例模型一级的复杂度,所以可以将复杂度适当地移往每一个用例的内部,也就是让一个用例包含较多的需求信息量。对于比较简单的系统,我们则可以将复杂度适度地曝露在模型一级,也就是我们可以将较复杂的用例分解成为多个用例。

    用例的粒度不但决定了用例模型级的复杂度,而且也决定了每一个用例内部的复杂度。我们应该根据每个系统的具体情况,因时因宜地来把握各个层次的复杂度,在尽可能保证整个用例模型的易理解性前提下决定用例的大小和数目。

    5.3 用例图
    用例图的主要作用是描述参与者和用例之间的关系,简单的系统中只需要有一个用例图就可以把所有的关系都描述清楚。复杂的系统中可以有多个用例图,例如每个用例包都可以有一个独立的用例图来描述该用例包中所有的参与者和用例的关系。

    在一个用例模型中,如果参与者和用例之间存在着多对多的关系,并且他们之间的关系比较复杂,如果在同一个用例图中表述所有的参与者和用例就显得不够清晰,这时我们可创建多个用例图来分别表示各种关系。


    如果想要强调某一个参与者和多个用例的关系,你就可以以该参与者为中心,用一个用例图表述出该参与者和多个用例之间的关系。在这个用例图中,我们强调的是该参与者会使用系统所提供的哪些服务。


    如果想要强调某一个用例和多个参与者之间的关系,你就可以以该用例为中心,用一个用例图表述出该用例和多个参与者之间的关系。在这个用例图中,我们强调的是该用例会涉及到哪些参与者,或者说该用例所表示的系统服务有哪些使用者。


    总之在用例建模过程中,你可以根据自己的需要创建任意多个用例图,用不同的用例来强调参与者和用例之间不同的关系。但是最重要的是要考虑整个用例模型的可理解性,如果可以用一个用例图把意思表述清楚,就不要再用第二个,因为越是简洁的模型越易于理解。

    参考资料


    • 样例代码

    • Jeffrey Friedl, Mastering Regular Expressions, O'Reilly

    • Mendel Cooper, Advanced Bash-scrīpting Guide

    • Michael Jang, Mastering Redhat 9

     

    关于作者
    傅纯一,IBM中国有限公司软件部Rational中国区技术销售经理
  • hoho

    2007-08-06 09:11:39

     

     

  • 《生化危机3:灭绝》最新预告片公开(转载)

    2007-08-06 09:08:40

    原文

    预定于2007年9月21日上映的《生化危机》系列电影的第3部——《生化危机:灭绝(Resident Evil: Extinction)》的第二段预告片近日公开,《生化危机:灭绝》将是电影3部曲的最后一部。

     

    [责任编辑:lingliang]

     

     

  • 我  

    2007-08-04 00:34:09

     

     

  • 英国媒体称塔利班已处死一名韩国人质

    2007-07-26 09:53:53

    原文

    塔利班称韩国人质谈判面临失败危险

    7月23日,在韩国首都首尔,被绑架的韩国人质的家属们焦急等待谈判消息。

    点击浏览更多最新图片

    塔利班称韩国人质谈判面临失败危险(组图)

     被绑架的韩国人质在前往阿富汗之前在韩国机场合影

      中国日报网环球在线消息:塔利班发言人艾哈迈迪7月25日称,由于阿富汗政府拒绝释放塔利班囚犯,塔利班当天已“处死”一名男性韩国人质。

      据英国媒体报道,艾哈迈迪通过电话告诉记者:“由于阿富汗政府不听从我们的要求释放塔利班囚犯,塔利班已开枪打死了一名男性韩国人质。”他补充说,如果塔利班的要求得不到满足,他们将处死更多人质。

      当天早些时候,艾哈迈迪透露,有关23名韩国人质的谈判已经中断,他们准备杀死“一些”人质。(李卉)

      人质尸体已找到 为该义工团领导裴亨奎 中10枪 

      阿富汗政府当天晚些时候也证实了塔利班处死人质的声明,并称在穆穑崎地区发现了这名被害人质的尸体。>>详细

      最新报道:

      塔利班威胁处死更多韩国人质

      塔利班称遭枪杀韩国人质患病无法行走

      阿富汗就先释放18名韩国女人质与塔利班谈判

      日媒称阿富汗政府为韩国人质支付巨额赎金

      塔利班为何频频绑架人质

     

  • [转]工作是女人价值的最大体现

    2007-07-25 17:47:30

    当今社会,不管男人女人,工作当然是第一位,因为这个社会要经济独立,才能被人尊重.
         经济基础决定上层建筑,只有有了一定的经济能力才能自保。才能潇洒的来潇洒的走。一个女人不管男朋友或丈夫多么的有权有势,都要有自己的工作即使工资很少,那是你独立的标志,是你和社会的联系。现在女人和男人一样寒窗苦读,一样在社会上拼博,不是为了嫁人,而是为了实现自己的价值。

         爱情来的容易可消失的也快,工作能带给我们动力,让女人在工作中找到自信,生活的精彩、充实,所以在工作中的女人往往是最有魅力的。
          这个社会如果没了独立生存的资本,女人在温柔再坚强再有母性的付出大多只能得到被男人的轻视和不理解不珍惜的结果,男女要平等没那么容易啊!可另一方面,女人要爱家,爱家人,委屈是必须要受的,因为男人好象天生是顾尊严的,地位和面子好象是上天赐于的特权,他们不做家务是因为他们是男人,男人是要事业不必太在乎家的,那么就只有女人一边顾家一边必须带好孩子,收拾好屋子,因为您总是女人,委屈又幸福可能到死。
           工作第一,现在的社会太现实了,当你把爱情放第一位的时候,男朋友或老公都会觉的自己有依赖于他,所以女人一定要有自己的经济来源,才会生活的充实点。
           工作是维持生活和爱情最基本的生存条件,如果一个人没工作,或者不会工作,不敢想象她将怎样去生活,去被人爱。工作是一个人的,自己付出了就一定有回报。而感情是两个人的付出了不一定有回报,可能还受更多伤害。现代女人,不可以没有工作。有钱并不一定什么都能办到,但没钱是万万不能的。工作是女人的经济来源的保证,如果从老公手上拿钱用,真的得看他们的爱情和爱你的程度。哪怕你今天美丽如花,可是明天、明年你能靠自己的外在条件赢得多少甜言蜜语和金钱呢?只有自己挣钱才最有安全感。在爱情、亲情、工作三者要选其一时,坚决会选工作,因为只有它属于自己,是自己可支配的全部。
          爱情是可以给你带来浪漫和心动,但工作才能让你有饭吃、有房住,而缥缈的爱情给不了这些,你说工作占第几位?
           的确没有人不想把爱情与家庭放在第一位,可如果没有稳定的经济来源来支持并维系着这个家,还谈什么其他?当然是工作放在第一位考虑了。因为工作是稳定的经济来源呀。
           工作是生活需求的根本保证,同时也是爱情的保证,我们能确定通过努力能保得住自己的工作,而爱情有时是无法确定和保证的。爱情无常,但工作是值得信赖的!
           这个世界变数太多,唯独只有你自己的事业工作它不会抛弃你!它是你自己可以控制的,不会随便欺骗你的!我赞成女人要独立才能活的精彩!

     

  • 主题:放弃是为了永恒 [荐]

    2007-07-24 09:41:53

    我以为我可以轻意的说分手,
         面对你的眼睛却无法开口。看到你忧郁的眼神,眼与眼的相逢,
         温柔里揉着酸楚,别也悠悠,留也悠悠,
         我怕我的无意会伤害你;  

    网友贴图


         我以为我可以洒脱的不回头,
         面对你的容颜却心有不忍,
         握着你温暖的双手,手与手的相牵,
         甜蜜里掺着苦涩,聚也依依,散也依依,
         我怕我的有意会刺痛你;   


    网友贴图

         我以为我可以抛下沉重的舍不得,
         面对你的微笑却放不了手,情与情的相知,
         美酒里加着咖啡,一杯烈烈,一杯浓浓,
         我怕我的心意会让你迷醉;   


    网友贴图

         我以为我可以洒落艰难的不再见,
         面对你的温柔却情不由己,心与心的相融,
         幸福里伴着泪水,想也漫漫,爱也漫漫,
         我怕我的情意会让你心碎。  


    网友贴图

         我以为悄悄的躲避会是一种放松,
         怎想看一眼伤更深一层,
         你的温暖让我越陷越沉,
         我以为默默的离去会是一种解脱,
         怎奈走一步痛更深一步,
         你的柔情把我越缠越紧。  
      


    网友贴图

         我以为把伤心留给自己你就不会心痛,
         可是盼到朝霞伤了自己也痛了你。
         我以为把忧愁留给自己你就不会愁苦,
         可是守到日落愁了自己也苦了你。  


    网友贴图


         你离我很近又很远,
         近的只有一步的距离可以听到你的心跳,
         却又远的让我举步为艰迈不出你我的界线。  


    网友贴图


         你爱我很轻又很重,
         轻的象空气,
         我依然承受不起,
         任往事在心里慢慢堆积,
         越想忘记越想起;
         重的更象空气,
         我仍然不能呼吸,
         任回忆在心里渐渐拥挤,
         越想逃离越沉迷。   
      


    网友贴图


         情隔着玻璃,
         透明美丽,
         却无法触及;
         爱隔着心墙,
         想看清你,
         却难寻身影。
         无奈的思绪,
         困惑的感情,
         惊醒了我的梦,
         柔碎了我的心。
      


    网友贴图

         我以为今日的放弃的就是明天的永恒,
         我以为今生的别离就是来世的约定,
         我以为遗憾就是美丽, 美好只能回忆。
         可是心动一回,
         泪洒一行, 此生无缘,
         就是你我今生的宿命……
  • 主题:[情感人生]一个人的天荒地老. [荐]

    2007-07-24 09:25:57

    网友贴图


    看着那些过往在一点一点的飘散
    我,开始.一个人收拾着那零散的思绪
    你说,曾经的梦,那些你我的过往,就如这一地的繁乱
    随水漂去
    我们只是其中的过客,谁也不是谁的谁
    任由那些散落的回忆演绎成此时的遍体鳞伤

    网友贴图

    那些人,那些事,已事过境迁
    那地的繁华一如我散乱的心情,无处收拾
    谁也不能告诉这是什么样的一个结局
    如果失去只是暂时的悲哀
    那么等待只能算是一个人的独角戏
    再怎么去挽回,或是挣扎,最后只能是无奈的独自流泪
    如果曾经相爱的事实只能证明等待的价值
    那么此时的离别,是否又是对等待的批判呢

    网友贴图

    一个人倦缩在回忆的长河里
    用我全部的力气去思念你
    向着你离开的方向用力的呼吸
    以为这样,就能将你带走的所有一一吸进心里
    太多的无法预知,一如爱情褪去后的尘埃
    无法擦拭,无处消散
    直到后来的后来,我也只能一个人在回忆里寻觅你的踪影



    网友贴图

    到底是幸福舍弃了我,还是我被幸福所抛弃
    你的笑,你的泪,你的一举一动
    那么的鲜明,那么的清晰
    我们曾经如此轻易的触及幸福
    最终,也只是一个人在原地演绎地老天荒

    幸福如烟,往事散落天涯
    在这遍地花开的幸福里,我们的幸福如此这般的任人践踏
    很多年以后
    没有谁会想起,曾经有两个相爱的人说过要一起经历天荒地老
    他们只知道,故事的最后,只有一个人念念有词的背着那些幸福的咒语
    独自过着属于她的地老天荒




    完.

    文/玻璃
  • 主题:[诗词随笔]◆偶忆︷ [精]

    2007-07-24 09:25:06

    网友贴图   
    网友贴图

    厄。。。这个mm是怎么坐在自行车上的。。。没有车杠吖。。。


    网友贴图
    忆  怀念

    拨浪鼓摇在石板街上的声音  远远近近   

    一路摇来  摇来孩童们的串串银铃

    麦芽的余香依然如故




    网友贴图
    卖杂货的老爷爷

    圣诞老人般丰盛的百宝担子

    是否依然 

    让今天的少年期待驻足




    网友贴图
    街铺那些柔媚的针线和绢帕

    是否还让瞎了半只眼的伯母黯然  

    久违的雕廊木格窗楞

    是否还如母亲的优雅和风韵




    网友贴图
    家的小黑呢

    还在等待主人匆匆的脚步吗  

    住在巷口的王小丽是否还在奚落 当年

    曾经给我写过情书的张小小呢

    想必他们已经结婚




    网友贴图
    有 

    还有那陪我度过童年的木马摇车

    是否还在故乡的老屋 

    为我守候  抑或

    驳 

    。。。 



    网友贴图
    网友贴图 

  • 主题:[美图欣赏]爱你 [荐]

    2007-07-24 09:23:11

    网友贴图
     
     
      暖暖的风 吹起发丝
      又是这样的感觉
      独自一人站在金色的稻田里
      心 随风飘荡
     又是这样一个寂寞的午后
      记忆中的画面又浮现在面前...
     
     
    网友贴图
     
     
      尤记得童年无数个午后与你数白云片片
      尤记得与你争秋千时那稚气的话语
      如今回忆起来 仍是那么地美好
     
     
    网友贴图
     
     
      回忆起和你赤脚走在雨天的草地上 看彩虹挂天边
      天真的我们 欢呼雀跃
      如今回忆起来 仍是那么地和乐
     
     
    网友贴图
     
     
      懵懂的我 对我们的约言 依然执着
      只是你 早已离去
      心中充满困惑 无法发泄
      与寂寞为邻 守侯着你归来
      孰知你是否拥有幸福
     
     
    网友贴图
     
     
      好想有你在身边
     躺在草地上 谈心事 吐真言
      亲近的感觉 让人怀念
     
     
    网友贴图
     
     
      那晚 送走了你
      送不走的 是 回忆
      笑着送你 哭着入睡
     
     
    网友贴图
     
     
      没有风的小道
      满地的落叶
      空洞的眼神
      我轻轻走过
      那些熟悉的路口
      如今变得如此陌生
     
      
    网友贴图
     
     
      没有了你的我
      被四周的寂寞所包围
      我无法挣脱
      但你仍不知
     
     
     
    网友贴图
     
     
      如今 我可以做的 惟有逃避
      我想要逃
      逃得越远越好
      没有人打扰我 就只有我一人
      躲在草丛中
      哭泣着
      但仍想念你

     

  • 爱在旅行

    2007-07-24 09:20:46

    网友贴图

            听说,爱情很美                       
          我,翻阅所有的书                     
          我,找寻适合的路
           一页一本翻阅,看到的,是别人说的评书

        
    网友贴图

           感觉,爱情多途
          我,生长在盆中的土
          我,攀沿在盆中的树
          一脚一步旅途,站着的,是自己要的国度

        
    网友贴图

           履步,爱情迷途
          我,迷茫在墙中堵
          我,支撑在墙中弧
          一砖一瓦拼图,建造的,是自己有的依附
     
        
    网友贴图

          呼吸,爱的幸福
          我,翻越过生命的干枯
          我,刻画着生命的脚步
          一呼一吸领悟,感受的,是自己有的幸福

        
    网友贴图

           回忆,星的最初
          我,安静回想阳光的温度
          我,安静开始月光的孤独
          一睁一闭观看,闪烁的,是自己看的星图

        
    网友贴图

           飞翔,梦的旅途
          我,带上白色翅膀在空中飞舞
          我,伏于赤色土地在聆听心术
          一匍一匐休憩,拥有的,是自己心的守护
       
        
    网友贴图

           我,开始想……
          爱,开始路……
          它,将以怎样的方式指引我的脚步?  
          它,也许,有着等待
          坐在可以提供幻想的有花的国度
          凝望可以看见远方的有路的前途
          等待着,等待着,更近或是更远的幸福的追逐
     
        
    网友贴图

           它,也许,伴着独舞
          站在一个人的舞台上掂起脚步
          移动一个人的身体来随风飞舞
          飞舞着,飞舞着,更真或是更幻的幸福的舞步

        
    网友贴图

           它,也许,藏着巨毒
          细数着有过的针针上瘾的毒
          畏惧着将有的枝枝伤人的树
          踟躇着,踟躇着,更浅或是更深的幸福的巨毒

        
    网友贴图

           它,也许,随着风渡
          置身在一片已枯黄的叶上,不知它是否再枯
          携带着一只有翅膀的小猪,不知它能否飞舞
          前行着,前行着,更高或是更低的空气有着不同的湿度

        
    网友贴图

           它,也许,留着永驻
          抽身于盆外,只把它看做一幅有风景的图
          观看着盆中,只想它成为一张无生命的图
          观看着,观看着,更多或是更少的幸福的生长基数

        
    网友贴图

           也许,想着沉睡
          沉睡在已看不到顶端的这棵爱情的树
          倚靠于粗枝枯叶间与白雪传递着温度
          沉睡着,沉睡着,更温或是更冷的幸福的掌管神父
  • 东莞上半年楼价涨51.5% 涨幅超过深圳(转载)

    2007-07-24 09:16:50

    原文

    本报东莞讯 (记者汪绍文)近段时间以来,深圳点击查看深圳及更多城市天气预报的房价暴涨引人关注,但据中原地产研究部昨日公布的数据显示,深圳、东莞今年上半年房价与去年同期对比,东莞涨幅最高,达到了惊人的51.5%,深圳虽然均价最高,涨势很快,但由于基数比较高,其涨幅只有42%。

    上半年东莞房价涨幅高过深圳

    从房价对比可以看出,东莞房价在近年增长较快,在2007年开始突破5000元大关;深圳房价在2006年突破万元大关后继续加速,截至2007年6月21日全市商品房成交均价为每平方米15487元,比2006年全年平均房价9384元/平方米上涨了65%。2007年上半年东莞商品房均价为5620元/㎡,同比增长51.5%。

    同时,近三年来东莞房价一直处于上升通道的“牛市”行情中,而且近期东莞整体楼价快速上涨是一个不争的事实。来自市场各方的反应及综合分析,这个增长势头有望继续延续并有加速的可能。

    住宅方面,2007年上半年东莞商品住宅均价为5358元/㎡,非住宅均价为9571元/㎡,其中非住宅包括写字楼、商铺、车位等物业。

    上半年商铺均价15362元/㎡

    从各物业类型的均价来看,经每日均价的简单平均计算,商铺均价最高,为15362元/㎡;别墅均价基本与商铺持平,为15352元/㎡;写字楼为8909元/㎡,住宅的均价比加权平均计算结果略高,为5661元/㎡。

    从月度价格走势来看,写字楼的价格走高趋势明显,商铺、普通住宅的价格在振荡中走高,别墅情况比较特殊,上半年价格在趋势上呈现走低迹象,同时对住宅均价的整体走势起到了拉低的作用。

    原因:投资客过多、地价上涨

    光大集团房产部项目总监黄海俊认为,三个原因导致东莞上半年房价涨幅过高,首先是投资客过多,尤其是近2个多月,深圳的投资客大量涌入东莞,使深圳的楼市投资资金外溢到东莞;其次是土地价格的影响,土地价格一路走高,带动了东莞房价;再次是东莞的房价原本基数低,即使是涨后的价格并不高,但涨幅还会特别明显。

    也有业内人士质疑,由于各种关于楼价的统计方式不同,得出的结果也不一样。

     

  • [原创]wr虚拟控件向导的使用和建议(控件不可识别问题的解决)

    2007-07-21 17:07:52

    [原创]wr虚拟控件向导的使用和建议(控件不可识别问题的解决)作者:wss123(转载请注明作者)


        相信朋友们都有因为wr不能识别部分控件而烦恼的经历吧,论坛里也经常有提问如何识别某某控件的各种声音,wr为可能出现的不能识别控件提供了一个识别工具,即虚拟控件向导。说白了,就是获取被测控件在显示二维平面的位置(x轴、Y轴)来唯一标识;小弟冒昧将自己在使用wr的虚拟控件向导的一些体会写下来,供大家参考和指正;
       首先,还是啰嗦一下如何使用虚拟控件向导:可以从 tools--->virtual

    object wizard 和 tools---->GUI Map Editor --->tools---->virtual object

    wizard 两个路径运行向导,它提供的标准控件类别有:   

    check_button,list,object,push_button,radion_button,table;
    向导提供了一个mark object 的功能,用于框选需要识别的控件。以下是我利用虚拟向导学习的一个按钮控件Gui的物理描述:
    {
    class: push_button,
    virtual: TRUE,
    x: 545,
    y: 510,
    width: 80,
    height: 18,
    rows: 1,
    columns: 1
    }
       wr的学习Gui对象的原理就是要通过物理描述唯一标识Gui对象,这样在 脚本中

    就能正确地指向被描述的控件。
       说了这么多,该说说我在使用中遇到的不如意了 。
       首先:移植性糟糕,在800*600像素15寸平面直角的显示学习的虚拟控件,在1024*760像素中就不能用了,因为物理描述中的x轴,y轴指向的肯定不是原来的控件(被测软件的界面不是固定大小的情况)
    还有一种情况是被测软件提供了横向和纵向滚动条,您在学习虚拟Gui的时候拉动滚动条,在录制过程中又拉动滚动条,控件不能在两次拉动滚动条都出现在同一个位置

    (当然如果可以在显示器上标识还是可以做到两次都出现在同一位置的可能)
       综上所述,如果只是少部分的控件不能识别的话,建议使用虚拟控件向导,但是如
    果很多的话,这样做是一个非常繁重的工作,还是去为wr加载插件来的妙些。
        (以上浅见,欢迎批评,但愿能为论坛和各位同仁做点贡献)

     

  • tsl脚本命令(转贴)四

    2007-07-21 11:10:31

    tsl脚本命令(转贴)四

    301、win_max ( window );最大化窗口到全屏

    302、最小化窗口为一个图标

    303、win_mouse_click ( window, x, y [, mouse_button  [, modifier] ] );在窗口点击鼠标

    304、win_mouse_dbl_click ( window, x, y [, mouse_button  [, modifier ] ] );在窗口双击鼠标

    305、win_mouse_drag ( window, start_x, start_y, end_x, end_y [, mouse_button ] );在窗口做鼠标拖动操作

    306、win_mouse_move ( window, x, y );移动鼠标焦点到指定的位置

    307、win_move ( window, x, y );移动窗口到一个绝对位置

    308、win_move_locator_text ( window, string [ ,search_area  [ ,string_def ] ] );移动鼠标焦点到窗口的某个字符串

    309、win_open ( window );打开应用程序窗口

    310、win_resize ( window, width, height );调整窗口大小

    311、win_restore ( window );恢复窗口从前的大小

    312、win_type ( window, keyboard_input );用键盘输入窗口

    313、win_wait_bitmap ( window, bitmap, time [, x, y, width, height] );等待窗口位图

    314、win_wait_info ( window, property, value, time );等待窗口属性值

    315、atan2 ( y, x );返回y/x(正切)的弧度

    316、cos ( x );返回余弦值

    317、exp ( x );返回e的指数值

    318、int ( x );返回实数的整数部分

    319、log ( x );返回自然对数

    320、sin ( x );返回正弦值

    321、sqrt ( x );返回平方根值

    322、delete array [ subscrīpt ];删除数组里某个元素

    323、split ( string, array [ , field_separators ] );将输入分成区域保存在数组里

    324、call test_name ( [ parameter1, parameter2, ... parametern ] );调用其他测试脚本

    325、call_chain_get_attr ( property, level, out_value );返回调用链里测试或函数的信息

    326、call_chain_get_depth ( );返回调用链选项的个数

    327、call_close test_name ( [ parameter1, parameter2, ... parametern ] );调用测试脚本,完成时关闭测试

    328、call_ex ( Astra_test_path );从winrunner里调用Astra QuickTest测试

    329、return [ expression ];返回测试或函数的结果表达式

    330、texit ( [ expression ] );停止执行当前的测试

    331、treturn [ ( expression ) ];停止调用测试返回控制调用测试

    332、load ( module_name [,1/0 [,1/0 ] ] );载入一个编译过的模块

    333、reload ( module_name [,1|0 [,1|0] ]);删除编译过的模块并重新载入内存

    334、unload ( [ module | test [ , function_name ] ] );从内存里删除编译模块

    335、define_object_exception (recovery_scenario_name, function, window, object, property  [ , value ] );对一个gui对象异常事件定义简单的观察场景

    336、define_popup_exception (recovery_scenario_name, function, window );对pop-up事件定义异常

    337、define_tsl_exception (recovery_scenario_name, return_code [, TSL_function ] );定义tsl事件异常事件

    338、exception_off ( recovery_scenario_name );解除指定的观察场景

    339、exception_off_all ( );解除所有的观察场景

    340、exception_on (recovery_scenario_name );激活指定的观察场景

    341、file_close ( file_name );关闭用file-open打开的文件

    342、file_compare ( file1, file2 [ , save_file ] );比较两个文件的内容

    343、file_getline ( file_name, out_line );读取文件下一行,并将其分配给一个变量

    344、file_open ( file_name, mode );打开或创建指定的文件

    345、file_printf ( file_name, format, exp1 [ , exp2,... exp30 ] );按格式打印文件

    346、pause ( [ expression ] );暂停测试执行并输出提示信息

    347、report_msg ( message );往测试报告里写信息

    348、sprintf ( format, exp1, exp2,...expn );返回固定格式字符串到一个变量

    349、str_map_logical_to_visual ( logical_string, visual_string );把逻辑字符串转换成形象字符串

    350、eval ( statement1 [; statement2;.... statementn;] );评估并执行附属的tsl语句

    351、get_unique_filename ( folder_path , file_prefix  , file_extension  , out_filename  , with_underscore );基于指定的前缀,创建唯一的文件名

    352、nargs ( );返回参数通过的个数

    353、tl_step ( step_name, status, descrīption );把测试脚本分成几块,并在当前测试结果里插入状态信息

    354、invoke_application ( file, command_option, working_dir, show );调用windows应用程序

    355、dos_system ( expression );执行dos命令

    356、ascii ( string );返回字符串第一个字符的asc码

    357、compare_text ( str1, str2 [, chars1, chars2 ] );比较两个字符串

    358、index ( string1, string2 );显示两个字符串位置

    359、length ( string );计算字符串里字符的个数

    360、match ( string, regular_expression );寻找字符串里正规表达式的事件

    361、substr ( string, position [, length ] );从字符串里提取子字符串

    362、tolower ( string );转换全部大写字母到小写字母

    363、toupper ( string ); 转换全部小写字母到大写字母

    364、end_transaction ( transaction [ , status ] );标记一个性能分析的结束

    365、get_time ( );返回当前系统时间

    366、start_transaction ( transaction_name ); 标记一个性能分析的开始

    367、time_str ( [ expression ] );将返回的整数时间转换成字符串

    368、wait ( seconds [, milliseconds] );测试暂停


    invoke_application(file,command_option,working_dir,show);


    file:应用程序的文件名,绝对路径;


    command_option:应用程序的参数;


    working_dir:应用程序工作路径;


    show:程序运行时的显示模式;



    数据库检查点:标准检查点和运行时检查点


    标准检查点检查行数、列数、内容是否一致;包括defaultcheck仅检查数据库内容是否一致;custom check 可随意组合上面三种方式检查


    运行时检查点检查程序界面上某些控件显示的内容是否在数据库中匹配记录,三种方式:匹配一条、匹配多条、没有匹配记录
     
  • tsl脚本命令(转贴)三

    2007-07-21 11:09:47

    tsl脚本命令(转贴)三

    201、tab_get_item ( tab, item_num, out_item );返回tab选项的名称

    202、tab_get_selected ( tab, out_item, out_num );返回选定的tab选项的名称和个数

    203、tab_select_item ( tab, item );选择tab选项

    204、tab_wait_info ( tab, property, value, time );等待tab属性的值

    205、tbl_activate_cell ( table, row, column );双击表里某个单元

    206、tbl_activate_col ( table, column );双击表里某列

    207、tbl_activate_header ( table, column );双击表里某列标题

    208、tbl_activate_row ( table, row );双击表里某行

    209、tbl_deselect_col ( table, column );取消选择表的某列

    210、tbl_deselect_cols_range ( table, from_column, to_column );取消选择表里某几列

    211、tbl_deselect_row ( table, row );取消选择表里某行

    212、tbl_deselect_rows_range ( table, from_row, to_row );取消选择表里某几行

    213、tbl_extend_col ( table, column );往表里当前列加一列

    214、tbl_extend_cols_range ( table, from_column, to_column );往表里当前列加多列

    215、tbl_extend_row ( table, row );往表里当前行前加一行

    216、tbl_extend_rows_range ( table, from_row, to_row );往表里当前行加多行

    217、tbl_get_cell_data ( table, row, column, out_text );返回表里指定单元的内容

    218、tbl_get_cols_count ( table, out_cols_count );返回表的列数

    219、tbl_get_column_name ( table, col_index, out_col_name );返回表里指定列的标题名称

    220、tbl_get_column_names ( table, out_col_names, out_cols_count );返回表里列的名称和个数

    221、tbl_get_rows_count ( table, out_rows_count );返回表的行数

    222、tbl_get_selected_cell ( table, out_row, out_column );返回表里焦点所在单元

    223、tbl_get_selected_row ( table, row );返回当前焦点所在行

    224、tbl_select_cells_range ( table, start_row, start_col, end_row, end_col );在表里点击选定的几个单元

    225、tbl_select_col_header ( table, column );选定指定的列的标题

    226、tbl_select_cols_range ( table, from_column, to_column );在表里选定指定的几列

    227、tbl_select_rows_range ( table, from_row, to_row );在表里选定指定的几行

    228、tbl_set_cell_data ( table, row, column, data );设置表里某单元的内容

    229、tbl_set_cell_focus ( table, row, column );设置表里焦点到某个单元

    230、tbl_set_selected_cell ( table, row, column );在表里选定指定的单元

    231、tbl_set_selected_col ( table, column );在表里选定指定的列

    232、tbl_set_selected_row ( table, row );在表里选定指定的行

    233、obj_click_on_text ( object, string [ ,search_area  [ , string_def  [ , mouse_button ] ] ] );点击一个对象的文本

    234、obj_find_text ( object, string, result_array [, search_area  [, string_def ] ] );返回一个对象字符串的位置

    235、obj_get_text ( object, out_text [, x1, y1, x2, y2 ] );从对象里读取文本

    236、obj_move_locator_text ( object, string [ , search_area  [ , string_def ] ] );在对象里把鼠标焦点落在字符串

    237、win_find_text ( window, string, result_array [, search_area [, string_def ] ] );在一个窗口返回字符串位置

    238、win_click_on_text (window, string [ ,search_area  [ , string_def  [ , mouse_button ] ] ] );在窗口搜索文本

    239、win_get_text ( window, out_text [, x1, y1, x2, y2] );从窗口指定的区域读取文本

    240、win_move_locator_text ( window, string [ ,search_area  [ ,string_def ] ] );在窗口里把鼠标焦点落在字符串

    241、toolbar_button_press ( toolbar, button, mouse_button );点击工具栏按钮

    242、toolbar_get_button ( toolbar, button_num, out_text  );返回工具栏按钮名称

    243、toolbar_get_button_info ( toolbar, button, property, out_value );返回工具栏按钮属性值

    244、toolbar_get_button_num ( toolbar, button, out_num );返回工具栏按钮位置

    245、toolbar_get_buttons_count ( toolbar, out_num );返回工具栏按钮的个数

    246、toolbar_select_item ( toolbar, toolbar_item_chain [, mouse_button ] );选择类菜单工具栏的某项

    247、web_browser_invoke ( browser, site );调用ie打开某个站点

    248、web_cursor_to_image ( image, x, y );移动鼠标指针到某个图片

    249、web_cursor_to_label ( label, x, y );移动鼠标指针到某个标签

    250、web_cursor_to_link ( link, x, y );移动鼠标指针到某个链接

    251、web_cursor_to_obj ( object, x, y );移动鼠标指针到某个对象

    252、web_event ( object, event_name [, x , y ] );在指定对象运行一个事件

    253、web_file_browse ( object );点击浏览按钮

    254、web_file_set ( object, value );在文件类型的对象设置文本值

    255、web_find_text ( frame, text_to_find, result_array [, text_before, text_after, index, show ] );返回帧内文本位置

    256、web_frame_get_text ( frame, out_text [, text_before, text_after, index ] );返回帧内文本的内容

    257、web_frame_get_text_count ( frame, regex_text_to_find, count );返回帧内标准表达式的事件个数

    258、web_frame_text_exists ( frame, text_to_find [, text_before, text_after ] );检查帧内指定的文本字符串是否存在

    259、web_get_run_event_mode ( out_mode );返回当前的运行模式

    260、web_get_timeout ( out_timeout );返回winrunner响应web的最大等待时间

    261、web_image_click ( image, x, y );点击一个图片链接或图片

    262、web_label_click ( label );点击指定的标签

    263、web_link_click ( link );点击朝文本链接

    264、web_link_valid ( name, valid );检查url链接是否有效

    265、web_obj_get_child_item ( object, table_row, table_column, object_type, index, out_object );返回对象的子对象的物理描述

    266、web_obj_get_child_item_count ( object, table_row, table_column, object_type, object_count );返回对象的子对象的个数

    267、web_obj_get_info ( object, property_name, property_value );返回对象属性的值

    268、web_obj_get_text ( object, table_row, table_column, out_text [, text_before, text_after, index] );返回对象的文本字符串

    269、web_obj_get_text_count ( object, table_row, table_column, regex_text_to_find, count ); 返回对象内标准表达式的事件个数

    270、web_obj_text_exists ( object, table_row, table_column, text_to_find [, text_before, text_after] );在对象里如果该文本存在,返回该文本

    271、web_refresh ( frame );winrunner重新连接指定的帧

    272、web_restore_event_default ( );重新设置全部事件为默认值

    273、web_set_event ( class, event_name, event_type, event_status );设置事件状态

    274、web_set_run_event_mode ( mode );设置事件运行模式

    275、web_set_timeout ( timeout );设置winrunner响应web的最大时间

    276、web_set_tooltip_color ( fg_color, bg_color );设置webtest工具条的颜色

    277、web_sync ( timeout );等待帧的导航完成

    278、web_tbl_get_cell_data ( table, row, column, starting_pos, out_text, out_actual_text_length );返回web表内指定单元的内容,开始于指定的字符

    279、web_url_valid ( URL, valid );检查url是否有效

    280、tbl_get_cell_data ( table, row, column, out_text );返回table里指定单元的内容(加载webtest)

    281、tbl_get_cols_count ( table, out_cols_count );返回表的列数(加载webtest)

    282、tbl_get_column_name ( table, col_index, out_col_name );返回表里指定列的标题的名称(加载webtest)

    283、tbl_get_rows_count ( table, out_rows_count );返回表的行数(加载webtest)

    284、web_password_encrypt ( password );将web页面的密码加密

    285、set_window ( window [,time] );激活窗口并确定等待时间

    286、win_activate ( window );激活窗口

    287、win_check_bitmap ( window, bitmap, time [, x, y, width, height ] );比较窗口的位图

    288、win_check_gui ( window, checklist, expected_results_file, time );比较窗口的gui数据

    289、win_check_info ( window, property, property_value [, timeout ] );检查被请求的窗口属性

    290、win_click_help ( window );在窗口点击帮助按钮

    291、win_click_on_text (window, string [ ,search_area  [ , string_def  [ , mouse_button ] ] ] );在窗口搜索文本

    292、win_close ( window );关闭窗口

    293、win_drag (source_window, x, y [, mouse_button ] );从源窗口拖动对象

    294、win_drop ( target_window, x, y  );拖动对象到目标窗口

    295、win_exists ( window [, time ] );检查窗口是否显示在屏幕上

    296、win_find_text ( window, string, result_array [, search_area [, string_def ] ] );返回窗口里字符串的位置

    297、win_get_desc ( window, obligatory, optional, selector, out_desc );返回窗口的物理描述

    298、win_get_info ( window, property, out_value );返回窗口属性的值

    299、win_get_text ( window, out_text [, x1, y1, x2, y2] );从窗口指定区域读取文本

    300、win_highlight ( window [, flashes ] );高亮显示窗口
  • tsl脚本命令(转贴)二

    2007-07-21 11:09:08

    tsl脚本命令(转贴)二

    101、GUI_save ( file_name );保存guimap文件

    102、GUI_save_as ( current_file_name, new_file_name );另存为guimap文件

    103、GUI_set_window ( window_name );设置guimap里目标识别范围

    104、GUI_unload ( file );卸载guimap文件

    105、GUI_unload_all ( )卸载全部的guimap文件

    106、icon_move ( icon, x, y );移动图标到新位置

    107、icon_select ( icon );点击鼠标选择图标

    108、java_activate_method( object, method, retval [ , param1, ... param8 ] );调用请求的java方法

    109、java_fire_event ( object , class [ , constructor_param1,..., constructor_paramX ] );模拟一个java对象的事件

    110、jco_create ( object , jco , class [ , constructor_param1 , ... , constructor_param8 ] )创建一个现有java对象的上下文java对象

    111、jco_free ( object_name );释放内存里指定的jco对象

    112、jco_free_all();释放全部内存里的jco对象

    113、jdc_aut_connect ( in_timeout );建立一个winrunner和java应用程序的连接

    114、method_wizard ( [ object ] );打开java方法的向导

    115、obj_key_type ( object, keyboard_input );向java组件发送事件

    116、obj_set_info ( object, property, value );设置对象属性的值

    117、popup_select_item ( "menu component;menu item" );从java活动菜单选择一个选项

    118、list_activate_item ( list, item [, offset ] );激活列表里某一项

    119、list_check_info ( list, property, property_value );检查列表属性的值

    120、list_check_item ( list, item_num, item_content );检查列表某项的内容

    121、list_check_selected ( list, selected_items );检查选中的那项

    122、list_collapse_item ( list, item [, mouse_button ] );隐藏树型图里的选项

    123、list_deselect_item ( list, item [, mouse_button  [, offset ]] );取消选定列表的某一项

    124、list_deselect_range ( list, item1, item2 [, offset ] );取消选定2个选项

    125、list_drag_item ( source_list, item [, mouse_button ] );拖动源列表的某个选项

    126、list_drop_on_item ( target_list, target_item );把一个对象关联到目标列表的选项

    127、list_expand_item ( list, item [, mouse_button ] );显示隐藏的树型图选项

    128、list_extend_item ( list, item [, button  [, offset ] ] );往指定的列表里添加一个选项

    129、list_extend_multi_items ( list, item_list, [, mouse_button  [, offset ] ] );添加多个选项

    130、list_extend_range ( list, item1, item2 [, button  [, offset ] ] );添加一定范围的选项

    131、list_get_checked_items ( list, items, number );返回标记的选项的个数和值

    132、list_get_info ( list, property, out_value );返回列表属性的值

    133、list_get_item ( list, item_num, out_value );返回列表选项的内容

    134、list_get_item_coord ( list, item, out_x, out_y, out_width, out_height );返回列表选项的四个坐标

    135、list_get_item_info ( list, item, state, out_value );返回列表选项的状态

    136、list_get_item_num ( list, item, out_num );返回列表选项的位置

    137、list_get_selected ( list, out_item, out_num );返回列表里选定选项的数字和字符串值

    138、list_select_item ( list, item [,button  [, offset ] ]);选择一个列表选项

    139、list_select_multi_items ( list, item_list [, mouse_button  [, offset ] ] );选择一个列表的多个选项

    140、list_select_range ( list, item1, item2 [, button  [, offset ] ]);选定一定范围内全部选项

    141、list_wait_info ( list, property, value, time );等待列表属性的值

    142、menu_get_desc ( menu, oblig, optional, selector, out_desc );返回菜单的物理描述

    143、menu_get_info ( menu, property, out_value );返回菜单属性的值

    144、menu_get_item ( menu, item_number, out_contents );返回菜单选项的内容

    145、menu_get_item_num ( menu, item, out_position );返回菜单选项的位置

    146、menu_select_item ( menu;item [ x,y ] );选择一个菜单选项

    147、menu_wait_info ( menu, property, value, time );等待菜单属性的值

    148、obj_check_bitmap ( object, bitmap, time [, x, y, width, height] );比较对象的位图

    149、obj_check_gui ( object, checklist, expected_results_file, time );比较当前的gui对象数据

    150、obj_check_info ( object, property, property_value [, timeout ] );检查gui对象属性的值

    151、obj_click_on_text ( object, string [ ,search_area  [ , string_def  [ , mouse_button ] ] ] );在对象里点击文本

    152、obj_drag ( source_object, x, y [, mouse_button ] );从源对象拖动一个对象

    153、obj_drop ( target_object, x, y );拖动一个对象到目标对象

    154、obj_exists ( object [, time ] );检查对象是否显示在屏幕上

    155、obj_find_text ( object, string, result_array [, search_area  [, string_def ] ] );在对象里返回字符串的位置

    156、obj_get_desc ( object, oblig, optional, selector, out_desc );返回对象的物理描述

    157、obj_get_info ( object, property, out_value );返回对象属性的值

    158、obj_get_text ( object, out_text [, x1, y1, x2, y2 ] );读取对象的文本

    159、obj_highlight ( object [, flashes ] );高亮显示对象

    160、obj_mouse_click ( object, x, y [, mouse_button ] );点击一个对象

    161、obj_mouse_dbl_click ( object, x, y [, mouse_button ] );双击一个对象

    162、obj_mouse_drag ( object, start_x, start_y, end_x, end_y [,mouse_button ] );在对象上拖动鼠标

    163、obj_mouse_move ( object, x, y );在对象里移动鼠标指针

    164、obj_move_locator_text ( object, string [ , search_area  [ , string_def ] ] );在对象里移动鼠标到一个字符串

    165、obj_type ( object, keyboard_input );用键盘输入对象

    166、obj_wait_bitmap ( object, bitmap, time [, x, y, width, height] );等待对象位图出现在屏幕

    167、obj_wait_info ( object, property, value, time );等待对象属性的值

    168、scroll_check_info ( scroll, property, property_value );检查滚动条的属性值

    169、scroll_check_pos ( scroll, position );检查滚动条的当前位置

    170、scroll_drag ( scroll, orientation, position );滚动到指定位置

    171、scroll_drag_from_min ( scroll, orientation, position );从最小值开始滚动

    172、scroll_get_info ( scroll, property, out_value );返回滚动条的属性值

    173、scroll_get_max ( scroll, orientation, out_max );返回滚动条的最大位置

    174、scroll_get_min ( scroll, orientation, out_min );返回滚动条的最小位置

    175、scroll_get_selected ( slider, min_value, max_value );返回滚动条的最小和最大值

    176、scroll_get_pos ( scroll, orientation, out_pos );返回滚动条当前位置

    177、scroll_line ( scroll, orientation, [ +|- ] lines );滚动指定的几行

    178、scroll_max ( scroll, orientation );设置滚动条到最大位置

    179、scroll_min ( scroll, orientation );设置滚动条到最小位置

    180、scroll_page ( scroll, orientation, [+|-] pages );移动滚动条指定的页数

    181、scroll_wait_info ( scroll, property, value, time );等待滚动条属性的值

    182、spin_get_info ( spin, property, out_value );返回旋转属性的值

    183、spin_get_pos ( spin, out_value );返回旋转对象的位置

    184、spin_get_range ( spin, out_min_pos, out_max_pos );返回旋转对象的最小与最大位置

    185、spin_max ( spin [, index ] );设置旋转对象到最大值

    186、spin_min ( spin [, index ] );设置旋转对象到最小值

    187、spin_next ( spin [, index ] );设置旋转对象到下一个值

    188、spin_prev ( spin [, index ] ); 设置旋转对象到前一个值

    189、spin_set ( spin, item [, index ] );设置选择对象到一个选项值

    190、spin_wait_info ( spin, property, value, time );等待旋转属性等于指定的值

    191、static_check_info ( static, property, property_value );检查静态文本对象属性的值

    192、static_check_text ( static, text, case_sensitive );检查静态文本对象的内容

    193、static_get_info ( static, property, out_value );返回静态文本对象属性的值

    194、static_get_text ( static, out_string );返回静态文本对象的内容

    195、static_wait_info ( static, property, value, time );等待静态文本对象的属性值

    196、statusbar_get_field_num ( statusbar, field, field_index );返回状态栏区域的数字索引

    197、statusbar_get_info ( statusbar, property, out_value );返回状态栏的属性值

    198、statusbar_get_text ( statusbar, field_index, out_text );读取状态栏区域的文本

    199、statusbar_wait_info ( statusbar, property, value, time );等待状态栏属性的值

    200、tab_get_info ( tab, property, out_value );返回tab属性的值
  • tsl脚本命令(转贴)一

    2007-07-21 11:08:16

    tsl脚本命令(转贴)一

    Winrunner Context Sensitive命令列表




    1.ActiveBar_combo_select_item ( band_tool , item_name );选择下拉菜单某一项,例如:


    set_window("Form1", 1);


    ActiveBar_combo_select_item("Format;Font", "Arial");


    In the following example, WinRunner selects the third item in the Format:Font tool.


    set_window("Form1", 1);


    ActiveBar_combo_select_item("Format;Font", "#3");


    2.ActiveBar_dump ( file_name );存储活动工具栏信息,包括标题、名称、ID等。

    file_name            参数包括路径,例如:

    set_window("Form1", 1);

    ActiveBar_dump ("d:Bardump.txt");

    3、ActiveBar_select_menu ( band_tool [, events_only ] ) ;选择菜单某一项,例如:

    in the following example, WinRunner selects the Cut menu item in the Edit toolbar.

    set_window("Form1", 1);

    ActiveBar_select_menu ("Edit;Cut",TRUE);

    4、ActiveBar_select_tool (band_tool [, events_only ] ) ;选择工具栏里某一项,例如:

    set_window("Form1", 1);

    ActiveBar_select_tool("Format;Center", TRUE);

    5、win_check_bitmap ( window, bitmap, time [, x, y, width, height ] );比较窗口位图,

    6、obj_check_bitmap ( object, bitmap, time [, x, y, width, height] );比较对象位图,

    7、button_check_info ( button, property, property_value );检查按钮属性的值

    8、button_check_state ( button, state );检查单选框或复选框的状态

    9、button_get_info ( button, property, out_value );返回按钮属性的值

    10、button_get_state ( button, out_state );返回单选框或复选框的状态

    11、button_press ( button );点击按钮

    12、button_set ( button, state );设置单选框或复选框的状态

    13、button_wait_info ( button, property, value, time );等待按钮的属性值变化

    14、calendar_activate_date ( calendar, date );双击日历某个日期

    15、db_check ( checklist, expected_results_file [ , max_rows [ , parameter_array ] ] );比较当前数据库数据和期待的数据库数据

    16、db_connect ( session_name, connection_string );建立一个数据库session并建立odbc连接

    17、db_disconnect ( session_name );断开连接结束session

    18、db_execute_query ( session_name, SQL, record_number );执行sql语句返回记录集

    19、db_get_field_value ( session_name, row_index, column );返回数据库特定区域的值

    20、db_get_headers ( session_name, header_count, header_content );返回数据库session的列的数量及列的内容并以tab分组

    21、db_get_last_error ( session_name, error );返回最后一条数据库session错误信息

    22、db_get_row ( session_name, row_index, row_content );返回特定行内容

    23、db_record_check ( ChecklistFileName , SuccessConditions, RecordNumber ); Compares information that appears in the application under test during a test run with the current values in the corresponding record(s) in your database.

    24、db_write_records ( session_name, output_file [ , headers [ , record_limit ] ] );把结果记录集写到一个文本文件

    25、ddt_close ( data_table_name );关闭数据表文件

    26、ddt_close_all_tables();关闭全部数据表

    27、ddt_export ( data_table_namename1, data_table_namename2 );把一个数据表信息导到另一个数据表文件

    28、ddt_get_current_row ( data_table_name, out_row );返回数据表当前所在行

    29、ddt_get_parameters ( table, params_list, params_num );返回数据表的参数和参数的个数

    30、ddt_get_row_count ( data_table_name, out_rows_count );返回数据表行数

    31、ddt_is_parameter ( data_table_name, parameter );返回一个参数是否在数据表里有效

    32、ddt_next_row ( data_table_name );指向数据表中到当前行的下一行

    33、ddt_open ( data_table_name [ , mode ] );打开或创建一个可以访问的数据表

    34、ddt_report_row ( data_table_name );报告当前行到测试结果

    35、ddt_save ( data_table_name );保存数据表信息

    36、ddt_set_row ( data_table_name, row );设置当前行为第几行

    37、ddt_set_val ( data_table_name, parameter, value );插入parameter列一个新值value

    38、ddt_set_val_by_row ( data_table_name, row, parameter, value  );插入特定行的parameter列一个新值value

    39、ddt_show ( data_table_name [ , show_flag ] );显示或隐藏数据表,1是显示,0是隐藏

    40、ddt_sort ( table_file, row1, col1, row2, col2, sort_by_rows, key1 [ , key2, key3 ]  );根据关键字将数据表特定区域的值排序,sort_by_rows            参数1是按行,0是按列

    41、ddt_update_from_db ( data_table_name, file, out_row_count [ , max_rows ] );从数据库往数据表里导数据;

    42、ddt_val ( data_table_name, parameter );返回数据表当前行的参数的值

    43、ddt_val_by_row ( data_table_name, row_number, parameter );返回数据表特定行的参数的值

    44、date_age_string ( date, years, month, days, new_date );将日期相应改变返回新值

    45、date_align_day ( align_mode, day_in_week );指定特定的日期给某天

    46、date_calc_days_in_field ( field_name1, field_name2 );计算两个日期间的天数

    47、date_calc_days_in_string ( string1, string2 );计算字符串格式的日期间的天数

    48、edit_check_info ( edit, property, property_value );检查对象属性的值

    49、edit_check_selection ( edit, selected_string );检查选择的字符串是否存在

    50、edit_check_text (edit, text, case_sensitive );检查编辑对象的文本内容

    51、edit_delete ( edit, start_column, end_column );删除编辑对象的文本内容

    52、edit_delete_block ( edit, start_row, start_column, end_row, end_column );删除文本区

    53、edit_get_block ( edit, start_row, start_column, end_row, end_column, out_string );返回文本区

    54、edit_get_info ( edit, property, out_value );返回编辑对象的属性值

    55、edit_get_row_length ( edit, row, out_length );返回编辑对象里行的长度

    56、edit_get_rows_count ( edit, out_number );返回编辑对象里行数

    57、edit_get_selection ( edit, out_string );返回编辑对象的选定字符串

    58、edit_get_selection_pos ( edit, out_start_row, out_start_column, out_end_row, out_end_column );返回选定区域的开始和结束位置

    59、edit_get_text ( edit, out_string );返回编辑对象的文本

    60、edit_insert ( edit, text, columnI );在编辑对象第一行插入文本

    61、edit_insert_block ( edit, text, row, column );在一个多行编辑对象插入文本

    62、edit_replace ( edit, text, start_column, end_column );替换一个编辑对象的内容

    63、edit_replace_block ( edit, text, start_row, start_column, end_row, end_column );替换一个编辑对象的多行内容

    64、edit_set ( edit, text );替换编辑对象的全部内容

    65、edit_set_insert_pos ( edit, row, column );把鼠标指针放到编辑对象特定位置

    66、edit_set_selection ( edit, start_row, start_column, end_row, end_column );选择编辑对象的文本

    67、edit_type ( edit, text );在编辑对象敲入字符串

    68、edit_wait_info ( edit, property, value, time );等待编辑对象属性的值

    69、obj_check_gui ( object, checklist, expected_results_file, time );比较当前的gui对象数据

    70、win_check_gui ( window, checklist, expected_results_file, time );对一个窗口比较当前的gui对象数据

    71、get_class_map ( custom_class, out_standard_class );返回和一个自定义的类相关的标准类

    72、get_record_attr ( class, out_obligatory, out_optional, out_selector );从一个对象类返回属性

    73、get_record_method ( class, out_method );返回一个对象类的方法

    74、set_class_map ( custom_class, standard_class );关联一个自定义类和一个标准类

    75、set_record_attr ( class, oblig_prop, optional_prop, selector );设置一个对象类的属性

    76、set_record_method ( class, method );设置对一个类的记录方法

    77、unset_class_map ( custom_class );解开一个自定义类和标准类的关联关系

    78、GUI_add ( file path, window, object, physical_desc );往gui map文件里加一个对象

    79、GUI_buf_get_desc ( file, window, object, out_desc );返回guimap文件里对象的物理描述

    80、GUI_buf_get_desc_attr ( file, window, object, property, out_prop_value ); 返回guimap文件里对象的属性的值

    81、GUI_buf_get_logical_name ( file, physical_desc, window, out_name ); 返回guimap文件里对象的逻辑名称

    82、GUI_buf_new ( file );创建新的gui对象文件

    83、GUI_buf_set_desc_attr ( file, window, object, property, value );设置guimap文件里对象的属性的值

    84、GUI_close ( file );关闭guimap文件

    85、GUI_close_all ();关闭全部guimap文件

    86、GUI_delete ( file, window, obj  );从guimap文件里删除一个对象

    87、GUI_desc_compare ( desc_1, desc_2 );比较两个物理描述

    88、GUI_desc_get_attr ( physical_desc, property, out_attr_value );从物理描述得到属性的值

    89、GUI_desc_set_attr ( physical_desc, property, value );设置属性的值

    90、GUI_get_name ( out_name, out_version );返回测试程序下gui对象的类型

    91、GUI_get_window ( );在guimap里返回当前窗口

    92、GUI_list_buf_windows ( file, out_windows, out_number );列举出guimap文件里所有的窗口

    93、GUI_list_buffers ( out_files, out_number );列举所有打开的guimap文件

    94、GUI_list_desc_attrs ( physical_desc, out_array );列举一个gui对象的属性值

    95、GUI_list_map_buffers ( out_file, out_number );列举所有载入的guimap文件

    96、GUI_list_win_objects ( file, window, out_objects, out_number );列举一个窗口的全部对象

    97、GUI_load ( file_name );载入一个guimap文件

    98、GUI_map_get_desc ( window, object, out_desc, out_file );返回guimap里对象的物理描述

    99、GUI_map_get_logical_name ( physical_desc, window, out_obj, out_file );返回guimap里对象的逻辑名称

    100、GUI_open ( file_name );打开guimap文件
     
Open Toolbar