发布新日志

  • Zee之LR脚本练习之七:执行dir命令并把结果写到文件里

    2008-02-14 14:33:00

    Action()
     {
          int count,total=0,i;
          char buffer[1000];
          long file_stream;
         char filename[1024], command[1024],line[100];
         char new_dir[] = "C:\\test";


         if (mkdir(new_dir))
              lr_output_message("Create directory %s failed", new_dir);
         else
              lr_output_message("Created new directory %s", new_dir);

         sprintf (filename, "%s\\%s", new_dir, "newfile.txt");
         sprintf (command, "dir /b c:\\ > %s /w", filename );
         system(command);
         lr_output_message("Created new file %s", filename);

       if((file_stream=fopen(filename,"r"))==NULL)
     {
           lr_error_message("can not open %s",filename);
           return -1;
       }

       for(i=1;i<10;i++)
        {
     if (fgets(line, 100, file_stream) == NULL)
              lr_output_message("fgets error" );
         else
              lr_output_message( "The first line is \"%s\"", line);
        }

        while(!feof(file_stream))
      {
          count=fread(buffer,sizeof(char),1000,file_stream);
           lr_output_message("%3d read",count);
     
        if(ferror(file_stream))
      {
        lr_output_message("error reading file %s",filename);
        break;
            }
       total+=count;
            }
          lr_output_message("Total number of bytes read = %d",total);

         if(fclose(file_stream))
          lr_error_message("Error closing file %s",filename);

         return 0;
    }

  • Zee脚本练习之六:LR中real协议的简易脚本展示

    2008-02-14 14:31:57

    注:蓝色部分为需要添加的URL。

    由于本人较懒,就不再添加注释了。^_^

     

    Action()
    {
       int value;
        unsigned long  current_clip_size;

     lreal_open_player(atoi(lr_eval_string("<data1>")));

     

     lreal_open_url(atoi(lr_eval_string("<data1>")), "URL");

     

     lreal_open_url(atoi(lr_eval_string("<data1>")), "URL");

     

     //   lreal_close_player(2);

     lreal_play(atoi(lr_eval_string("<data1>")), 120000);

    value = lreal_get_property(1,LREAL_LOST_PACKETS);

    lr_output_message("Value is %d",value);
    value = lreal_get_property(1,LREAL_CURRENT_BANDWIDTH);

    lr_output_message("Value is %d",value);

    value = lreal_get_property(1,LREAL_NETWORK_PERFORMANCE);

    lr_output_message("Value is %d",value);

    value = lreal_get_property(1,LREAL_STREAM_QUALITY);

    lr_output_message("Value is %d",value);

    value = lreal_get_property(1,LREAL_BUFFERING_NUM);

    lr_output_message("Value is %d",value);

    value = lreal_get_property(1,LREAL_BUFFERING_TIME);

    lr_output_message("Value is %d",value);

    value = lreal_get_property(1,LREAL_BUFFERING_CONGESTION_NUM);

    lr_output_message("Value is %d",value);

    value = lreal_get_property(1,LREAL_RECOVERED_PACKETS);

    lr_output_message("Value is %d",value);

    current_clip_size = lreal_current_time(atoi(lr_eval_string("<data1>")));

    if (current_clip_size > 0)

           lr_output_message("%d  done", current_clip_size);


     lreal_stop(atoi(lr_eval_string("<data1>")));


     lreal_close_player(atoi(lr_eval_string("<data1>")));

    }

  • LR中HTTP协议两种做文本检查点的方式-Zee

    2008-02-14 14:30:06

    http://www.51testing.com/?17369/action_viewspace_itemid_73305.html


    HTTP中做文本检查点的两种方式:
     
     
    第一种方式:关联取值判断
     
     

    //这种方式多有主动找麻烦的意思 ,但是如果碰到用检查函数做不了,可以考虑用这种方
    //式(我还没有碰到想检查的值检查函数做不了的情况)
    //这种方式不管是要判断的值在什么地方,只要是server response里就可以。
     char buffer[20] = {0};
      int j;
       int i;
       char str1[]="dianping";
     
                    web_reg_save_param("param1",
                                    "LB=www.",
                                    "RB=.com",
                                    "Ord=18",
                                    LAST);
                    web_url("www.hao123.com",
                                    "URL=http://www.hao123.com/",
                                    "Resource=0",
                                    "RecContentType=text/html",
                                    "Referer=",
                                    "Snapshot=t1.inf",
                                    "Mode=HTML",
                                    EXTRARES,
                                    "URL=/line.gif", ENDITEM,
                                    "URL=/images/dropdown.gif", ENDITEM,
                                    "URL=/images/guangg/baike.gif", ENDITEM,
                                    LAST);
    //lr_log_message("%s,", lr_eval_string("{param1}"));
    if (atoi( strcmp(str1,lr_eval_string("{param1}"))) == 0){
    //检查关联函数取到的值,和已定义的值是否相同,如相同打印如下
                     lr_log_message("你给我出来!!");
     }

     
     
    第二种方式:函数判断
     
     
    注意:web_find函数不能检查没有显示在页面上的值;而web_reg_find可以。
                 Web_reg_find不能放在Action的最后。

     web_reg_find("Text=dianping",
                                    LAST);
                    web_url("www.hao123.com",
                                    "URL=http://www.hao123.com/",
                                    "Resource=0",
                                    "RecContentType=text/html",
                                    "Referer=",
                                    "Snapshot=t1.inf",
                                    "Mode=HTML",
                                    EXTRARES,
                                    "URL=/line.gif", ENDITEM,
                                    "URL=/images/dropdown.gif", ENDITEM,
                                    "URL=/images/guangg/baike.gif", ENDITEM,
                                    LAST);
                    web_find("web_find",
                                    "What=音乐MP3",
                                    LAST);

  • apache 性能调优-2.2版中文手册(转)

    2008-02-14 14:26:40

    http://www.51testing.com/?199/action_viewspace_itemid_65511.html

    硬件和操作系统

    影响web服务器性能的最大的因素是内存。一个web服务器应该从不使用交换机制,因为交换产生的滞后使用户总感觉"不够快",所以用户就可能去按"停止""刷新",从而带来更大的负载。你可以,也应该,控制MaxClients的设置,以避免服务器产生太多的子进程而发生交换。这个过程很简单:通过top命令计算出每个Apache进程平均消耗的内存,然后再为其它进程留出足够多的内存。

    其他因素就很普通了,装一个足够快的CPU,一个足够快的网卡,几个足够快的硬盘,这里说的"足够快"是指能满足实际应用的需求。

    操作系统是很值得关注的又一个因素,已经被证实的很有用的经验有:

    • 选择能够得到的最新最稳定的版本并打好补丁。近年来,许多操作系统厂商都提供了可以显著改善性能的TCP协议栈和线程库。
    • 如果你的操作系统支持sendfile()系统调用,则务必安装带有此功能的版本或补丁(译者注:Linux2.4内核支持sendfile()系统调用,但2.6内核已经不再支持;对Solaris8的早期版本,则需要安装补丁)。在支持sendfile的系统中,Apache2可以更快地发送静态内容而且占用较少的CPU时间。

    运行时的配置

    相关模块

    相关指令

    HostnameLookups 和其他DNS考虑

    Apache1.3以前的版本中,HostnameLookups默认被设为 On 。它会带来延迟,因为对每一个请求都需要作一次DNS查询。在Apache1.3中,它被默认地设置为 Off 。如果需要日志文件提供主机名信息以生成分析报告,则可以使用日志后处理程序logresolve ,以完成DNS查询,而客户端无须等待。

    推荐你最好是在其他机器上,而不是在web服务器上执行后处理和其他日志统计操作,以免影响服务器的性能。

    如果你使用了任何"Allow from domain""Deny from domain"指令(也就是domain使用的是主机名而不是IP地址),则代价是要进行两次DNS查询(一次正向和一次反向,以确认没有作假)。所以,为了得到最高的性能,应该避免使用这些指令(不用域名而用IP地址也是可以的)

    注意,可以把这些指令包含在<Location /server-status>段中使之局部化。在这种情况下,只有对这个区域的请求才会发生DNS查询。下例禁止除了.html.cgi以外的所有DNS查询:

    HostnameLookups off
    <Files ~ "\.(html|cgi)$">
    HostnameLookups on
    </Files>

    如果在某些CGI中偶尔需要DNS名称,则可以调用gethostbyname来解决。

    FollowSymLinks SymLinksIfOwnerMatch

    如果网站空间中没有使用 Options FollowSymLinks ,或使用Options SymLinksIfOwnerMatch Apache就必须执行额外的系统调用以验证符号连接。文件名的每一个组成部分都需要一个额外的调用。例如,如果设置了:

    DocumentRoot /www/htdocs
    <Directory />
    Options SymLinksIfOwnerMatch
    </Directory>

    在请求"/index.html"时,Apache将对"/www""/www/htdocs""/www/htdocs/index.html"执行lstat()调用。而且lstat()的执行结果不被缓存,因此对每一个请求都要执行一次。如果确实需要验证符号连接的安全性,则可以这样:

    DocumentRoot /www/htdocs
    <Directory />
    Options FollowSymLinks
    </Directory>

    <Directory /www/htdocs>
    Options -FollowSymLinks +SymLinksIfOwnerMatch
    </Directory>

    这样,至少可以避免对DocumentRoot路径的多余的验证。注意,如果AliasRewriteRule中含有DocumentRoot以外的路径,那么同样需要增加这样的段。为了得到最佳性能,应当放弃对符号连接的保护,在所有地方都设置FollowSymLinks ,并放弃使用SymLinksIfOwnerMatch

    AllowOverride

    如果网站空间允许覆盖(通常是用.htaccess文件),则Apache会试图对文件名的每一个组成部分都打开.htaccess ,例如:

    DocumentRoot /www/htdocs
    <Directory />
    AllowOverride all
    </Directory>

    如果请求"/index.html",则Apache会试图打开"/.htaccess""/www/.htaccess""/www/htdocs/.htaccess"。其解决方法和前面所述的 Options FollowSymLinks 类似。为了得到最佳性能,应当对文件系统中所有的地方都使用 AllowOverride None

    内容协商

    实践中,内容协商的好处大于性能的损失,如果你很在意那一点点的性能损失,则可以禁止使用内容协商。但是仍然有个方法可以提高服务器的速度,就是不要使用通配符,如:

    DirectoryIndex index

    而使用完整的列表,如:

    DirectoryIndex index.cgi index.pl index.shtml index.html

    其中最常用的应该放在前面。

    还有,建立一个明确的type-map文件在性能上优于使用"Options MultiViews",因为所有需要的信息都在一个单独的文件中,而无须搜索目录。请参考内容协商文档以获得更详细的协商方法和创建type-map文件的指导。

    内存映射

    Apache2.0需要搜索被发送文件的内容时,比如处理服务器端包含时,如果操作系统支持某种形式的mmap() ,则会对此文件执行内存映射。

    在某些平台上,内存映射可以提高性能,但是在某些情况下,内存映射会降低性能甚至影响到httpd的稳定性:

    • 在某些操作系统中,如果增加了CPUmmap还不如read()迅速。比如,在多处理器的Solaris服务器上,关闭了mmap Apache2.0传送服务端解析文件有时候反而更快。
    • 如果你对作为NFS装载的文件系统中的一个文件进行了内存映射,而另一个NFS客户端的进程删除或者截断了这个文件,那么你的进程在下一次访问已经被映射的文件内容时,会产生一个总线错误。

    如果有上述情况发生,则应该使用 EnableMMAP off 关闭对发送文件的内存映射。注意:此指令可以被针对目录的设置覆盖。

    Sendfile

    Apache2.0能够忽略将要被发送的文件的内容的时候(比如发送静态内容),如果操作系统支持sendfile() ,则Apache将使用内核提供的sendfile()来发送文件。译者注:Linux2.4内核支持sendfile()系统调用,但2.6内核已经不再支持。

    在大多数平台上,使用sendfile可以通过免除分离的读和写操作来提升性能。然而在某些情况下,使用sendfile会危害到httpd的稳定性

    • 一些平台可能会有Apache编译系统检测不到的有缺陷的sendfile支持,特别是将在其他平台上使用交叉编译得到的二进制文件运行于当前对sendfile支持有缺陷的平台时。
    • 对于一个挂载了NFS文件系统的内核,它可能无法可靠的通过自己的cache服务于网络文件。

    如果出现以上情况,你应当使用"EnableSendfile off"来禁用sendfile 。注意,这个指令可以被针对目录的设置覆盖。

    进程的建立

    Apache1.3以前,MinSpareServers, MaxSpareServers, StartServers的设置对性能都有很大的影响。尤其是为了应对负载而建立足够的子进程时,Apache需要有一个"渐进"的过程。在最初建立StartServers数量的子进程后,为了满足MinSpareServers设置的需要,每一秒钟只能建立一个子进程。所以,对一个需要同时处理100个客户端的服务器,如果StartServers使用默认的设置5,则为了应对负载而建立足够多的子进程需要95秒。在实际应用中,如果不频繁重新启动服务器,这样还可以,但是如果仅仅为了提供10分钟的服务,这样就很糟糕了。

    "一秒钟一个"的规定是为了避免在创建子进程过程中服务器对请求的响应停顿,但是它对服务器性能的影响太大了,必须予以改变。在Apache1.3中,这个"一秒钟一个"的规定变得宽松了,创建一个进程,等待一秒钟,继续创建第二个,再等待一秒钟,继而创建四个,如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。

    从多数反映看来,似乎没有必要调整MinSpareServers, MaxSpareServers, StartServers 。如果每秒钟创建的进程数超过4个,则会在ErrorLog中产生一条消息,如果产生大量此消息,则可以考虑修改这些设置。可以使用mod_status的输出作为参考。

    与进程创建相关的是由MaxRequestsPerChild引发的进程的销毁。其默认值是"0",意味着每个进程所处理的请求数是不受限制的。如果此值设置得很小,比如30,则可能需要大幅增加。在SunOS或者Solaris的早期版本上,其最大值为10000以免内存泄漏。

    如果启用了持久链接,子进程将保持忙碌状态以等待被打开连接上的新请求。为了最小化其负面影响,KeepAliveTimeout的默认值被设置为5秒,以谋求网络带宽和服务器资源之间的平衡。在任何情况下此值都不应当大于60秒,参见most of the benefits are lost

    编译时的配置

    选择一个MPM

    Apache 2.x 支持插入式并行处理模块,称为多路处理模块(MPM)。在编译Apache时你必须选择也只能选择一个MPM,这里有几个针对非UNIX系统的MPMbeos, mpm_netware, mpmt_os2, mpm_winnt。对类UNIX系统,有几个不同的MPM可供选择,他们都会影响到httpd的速度和可伸缩性:

    • workerMPM使用多个子进程,每个子进程中又有多个线程。每个线程处理一个请求。该MPM通常对高流量的服务器是一个不错的选择。因为它比preforkMPM需要更少的内存且更具有伸缩性。
    • preforkMPM使用多个子进程,但每个子进程并不包含多线程。每个进程只处理一个链接。在许多系统上它的速度和workerMPM一样快,但是需要更多的内存。这种无线程的设计在某些情况下优于workerMPM:它可以应用于不具备线程安全的第三方模块(比如php3/4/5),且在不支持线程调试的平台上易于调试,而且还具有比workerMPM更高的稳定性。

    关于MPM的更多内容,请参考其文档

    模块

    既然内存用量是影响性能的重要因素,你就应当尽量去除你不需要的模块。如果你将模块编译成DSO ,取消不必要的模块就是一件非常简单的事情:注释掉LoadModule指令中不需要的模块。

    如果你已经将模块静态链接进Apache二进制核心,你就必须重新编译Apache并去掉你不想要的模块。

    增减模块牵涉到的一个问题是:究竟需要哪些模块、不需要哪些模块?这取决于服务器的具体情况。一般说来,至少要包含下列模块:mod_mime, mod_dir, mod_log_config 。你也可以不要mod_log_config ,但是一般不推荐这样做。

    原子操作

    一些模块,比如mod_cacheworker使用APR(Apache可移植运行时)的原子API。这些API提供了能够用于轻量级线程同步的原子操作。

    默认情况下,APR在每个目标OS/CPU上使用其最有效的特性执行这些操作。比如许多现代CPU的指令集中有一个原子的比较交换(compare-and-swap, CAS)操作指令。在一些老式平台上,APR默认使用一种缓慢的、基于互斥执行的原子API以保持对没有CAS指令的老式CPU的兼容。如果你只打算在新式的CPU上运行Apache,你可以在编译时使用 --enable-nonportable-atomics 选项:

    ./buildconf
    ./configure --with-mpm=worker --enable-nonportable-atomics=yes
    查看(950) 评论(0) 收藏 分享 管理

  • apache httpd相关

    2008-02-14 14:23:09

    lsof |grep apache

    Apache是运行在Linux操作系统上的头号Web服务器。很多小地方都可以用来调整Apache的性能,并降低它对系统资源的影响。其中一个就是调整内存使用率,当然达到这一目的可能还是需要花点功夫的。

    例如,通过ps来确定httpd线程的内存使用率,可以输入下面的命令:

    # ps -U apache -u apache u
    USERPID %CPU %MEMVSZRSS TTYSTAT START TIME COMMAND
    apache130670.05.3 149704 54504 ?SOct071:53 /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf -DAPACHE2
    ...

    上面这段输出显示了单个httpd进程使用了50 MB的RSS(驻留集大小)内存(或者非交换物理内存),以及149 MB的VSZ(虚拟)内存。这当然在很大程度上取决于你在Apache里加载和运行的模块数量。这决不是一个固定的数字。由于这个数字里还包含了共享库包,所以不是100%的准确。我们可以认为RSS数字的一半是httpd线程真正使用的内存数,这可能还有点保守,但是离我们的目的已经非常接近了。

    在本文里,我们假设每个httpd进程都在使用了27 MB内存。然后,你需要确定可以让httpd真正使用的内存数。根据运行在机器上的其他进程,你可能希望要求50%的物理内存都供Apache使用。在一个装有1GB内存的系统上,就有512MB的内存可以被划分为多个27MB的内存,也就是大约19个并发的httpd内存。有些人坚持认为每个httpd 线程“真正”使用大约5MB的内存,所以从理论上讲你可以把512MB的内存划分出102个并发进程供Apache使用(要记住的是,除非你的网站需要极其巨大的流量,否则这种情况是非常罕见的)。

    在默认状态下,Apache会分配最大256个并发客户端连接,或者256个进程(每一个都对应一个请求)。按照这种设置,一个流量巨大的网站会在顷刻间崩溃(即使你假设每个进程占用5MB内存,那也需要1.3GB的内存来满足请求的数量)。如果不采取其它措施,系统会通过硬盘来尝试使用交换空间以处理它无法在物理内存中完成的任务。

    其他可以调整的项目包括KeepAlive、KeepAliveTimeout和MaxKeepAliveRequests等设置。可以放在httpd.conf文件里的推荐设置有:

    ServerLimit 128MaxClients 128KeepAlive OnKeepAliveTimeout 2MaxKeepAliveRequests 100

    通过将KeepAliveTimeout从15秒减到2秒,可以增加MaxClients命令;19太小,而128要好得多。通过减少进程存活的秒数,你可以在相同的时间内允许更多的连接。

    当然,如果没有真正的测试在背后支持,数字就是毫无意义的,这就是ab的作用之所在。使用ab对Apache配置文件(MaxClients等于 256、ServerLimit等于256、KeepAliveTimeout等于15)进行调整,使其能够满足1000个请求(100个连续请求并发产生)的调整方法如下。(在执行测试的时候要确保服务器上有一个终端打开以观察系统的负载。)

    $ ab -n 1000 -c 100 -k http://yoursite.com/index.php

    现在把上面的服务器设置改为更加保守的设置,重新启动Apache,试着再次测试(总是从远程计算机上进行,而不是本机)。

    在这里的测试中,不同的设置导致执行所消耗的时间产生了一倍的差距(分别为27.8s和16.8s),但是负载的平均值为0.03和0.30。这可能会使得你的网站变得稍慢,但是会确保它不会在高负载的情况下崩溃。还要记住的是,你将需要进行多次测试,以便取得一个平均值。

    使用ab是测试调整Apache配置的一个极佳方法,应该在你每次做出影响性能的更改时使用它。

  • 彻底删除sybase

    2008-02-14 14:19:21

    我用的是winXP sp2,sybase 12.5
    --------------------
    关闭   Adaptive   Server.    
    将Adaptive   Server在Windows   NT   Services中由自动改为手动    
    重新启动   Windows   NT   server    
    运行regedit修改注册表,   删除以下内容:  
    \\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\<server_name>  
    \\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\<server_name>_BS  
    \\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\<server_name>_HS  
    \\HKEY_LOCAL_MACHINE\SOFTWARE\SYBASE\Server\<server_name>_MS    
    到注册表的如下结构下:  
    \\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session   Manager\Environment  
    删除DSLISTEN,   DSQUERY,   SYBASE,   并修改   LIB,   INCLUDE,   PATH删除SYBASE有关目录    
    删除如下注册键值:  
    \\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services    
    SYBSQL_<server_name>    
    SYBXPS_<server_name>_XP    
    SYBBCK_<server_name>_BS    
    SYBMON_<server_name>_MS    
    SYBHIS_<server_name>_HS    
    重启系统
    使用“开始---控制面板---管理工具---服务”确认SYBASE已经卸载    
    删除SYBASE   Server所用数据库设备文件及SYBASE系统文件 

  • QTP 常用函数(转)

    2008-02-14 14:11:47

  • Qtp学习日记002

    2008-02-14 14:04:06

    今天对输出值进行了学习,这一课得本身没有那么难,但是在学习的过程走了很多弯路,所以浪费了很多的时间.所以值得记录的体会还是有的 .

    (1): 在添加录制脚本的时候要注意网页的名字,在网页第二遍出现的时候和第一遍出现得时候名称是不一样的,在运行的时候就不能连贯,程序会报错.

    (2): 在添加输出值的时候,不能够重复的多次的添加.否则会报错

    (3) 在制定表检查点得时候,检查元素一定要是预期的测试观察点,否则表中别的元素出错,测试结果也是失败的,这样会影响对测试结果的判断

    (别的元素不考虑的情况下不应该选上)

     

  • Qtp学习日记001

    2008-02-14 14:01:53

    今天对QTP中页面检查点,文本检查点的设置进行了学习.

    重点学习参数测试,并成功地实现了FOR  NEXT 函数地循环操作.

    操作的过程中遇见的问题:

    1.进行局部循环的时候,只能做一遍,不能实现局部循环.

       原因: 在最后一页与第一页没有衔接点,导致循环无法继续

       解决方法:在最后一页再录制一条操作,这样可降最后一页与第一页衔接

    2.进行局部循环的时候,只能读取参数表中的第一行,无法在每次循环的时候读到参数表中不同值:

       原因:不明.

       解决方式:在计数器的前面添加语句: DataTable.GetSheet (2).SetNextRow

    3.设置了局部循环,程序还是会将所有程序按照参数表中数量再循环一遍:例如设置了三个参数,局部循环设置三次,待测程序将运行9(局部循环内的程序)整个程序运行三遍

        原因: File > settings > run > data table iteration > 选择了 Run on all rows

        解决方法: 改变上述中的选项

    4. 局部循环设置FOR 1 TO 3 局部循环只运行2

        局部循环设置FOR 0TO 2 局部循环运行3

       原因不明

    明天计划: 输出值学习

  • 未婚男子必读的31条感悟!

    2007-10-30 09:30:21

    1、能不抽烟最好不抽,它或许可以帮助你吸引一些女生,但不抽绝不会招来厌烦,表现男子气概的途径有很多,没必要拿健康做赌注。

    2、给自己定目标,一年,两年,五年,也许你出生不如别人好,通过努力,往往可以改变70%的命运。破罐子破摔只能和懦弱做朋友。

    3、找女朋友外表是第一关,但要了解她的品行之后再做打算也不迟。

    4、不要在乎小钱,工作的人都后悔从前对自己的GF不够好。记住你们的重要日子,你们的谈话,女生要敏感得多,这样做,至少可以证明你对她的重视。

    5、爱她,但别怕她,你们是恋人,也是朋友,她要的不是宠物,这样的感情,走不长远。

    6、她要是病了,带她去医院,她害怕时,找个人少的地方抱着她,给她勇气,帮她排队,挂号,放下你那点可悲的面子,周围人只会向她投来羡慕的眼光,不会对你说三道四。

    7、别把两个人的生活绞在一起,空间才是爱情的长寿药。不要经常吃醋,谁都有异性朋友,该吃的时候才吃,并且让她知道。

    8、善待她的朋友,即使她讨厌的人,你也没资格说坏话,你要做的,就是静静的听她倾诉。适当给她安慰。有时候,她们更需要依靠,即使你们都还是学生。

    9、不要问她过去,时机到了,她会毫无保留的告诉你。她要是想见从前那位,让她去,原因是你不让她去,她也会去。为何不表现得大度点,但要让她知道你相当的郁闷。

    10、珍惜身边人,不要见异思迁,大家都需要安定。即使对方比你GF漂亮10倍,还主动靠近你,给你暗号,请严肃的告诉她,你有女朋友!

    11、她开始管你的生活,你的钱 ,对你唠叨,频繁发消息询问你的位置。别担心,她只是把自己交给了你,害怕失去你。

    12、带她去你从前常去的地方,她内心会无比快乐,你失意时,她会在第一时间找到你。

    13、发生口角后,别关机,也别在街上和其他异性闲逛,那只能使矛盾激化。

    14、过生日,送她草莓蛋糕,不要太大,但要足够精致,把你对她的腻称放在蛋糕上。再买一个大的,让她和朋友一起过。

    15、牵手时,即使你的手有多汗,也别放开。

    16、把她介绍给你最好的朋友,包括异性朋友。
     
    17、别总是让她打电话来,她也需要被重视的感觉。

    18、衣着尽量和她的品位搭调,即使你要提升品质,请带上她一起。

    19、别偷看她的隐私,不要去猜测,在一起是缘分,离开也是缘分。

    20、如果失恋,不要轻信江湖上传言的借酒消愁,吐的滋味不好受,即使喝了,也别急着喝茶,茶不但不能解酒,反而还会伤肾。

    21、不要整天想着如何重修旧好,除了爱情,前面还有许多问题需要你去解决。这是个现实的社会,感情不能当饭吃,贫穷夫妻百事哀。不要相信电影,那只是个供许多陌生人喧嚣情感的场所。

    22、分手之后,可以伤心难过,但过渡期不能太长,因为这期间是绝佳的学习和工作时间。

    23、如果你实在奈不住寂寞,至少等上大半年,否则你不仅否定了她,也否定了你自己。

    24、当她不再爱你的时候,无论你有多想她也别打电话告诉她,因为有些人会记住第一个,而有些人只会记住上一个。

    25、好朋友里面,一定要培养出一个知己,不要以为你有多么八面玲珑,到处是朋友,最后真心对你的,只有一个,相信我。

    26、她的离开如若是一个重大打击,找间手艺不错的发型设计理个发,这样可以让你涣然一新。

    27、不要去打扰她的生活,她只会觉得从前看错人,你也会鄙视自己。

    28、你们在街上相遇,请向她微笑,把微笑留给伤你最深的人。

    29、告诉周围人,你和她已经分手,避免他们给你打报告,哪天又看见谁谁谁了。

    30、不要相信星座命理,那是哄小朋友的,命运在自己手中。难道你想等出栋房子或是车子?
     
    31、你的朋友最好以你自己为中心发散,允许少数支点连接,千万不要把朋友圈变成密不透风的多边型,你要为自己留底牌。

     

     

  • 选购海鲜的三大要决

    2007-10-30 09:16:21

    海鲜不仅营养丰富,且味道鲜美,已逐渐成为人们所喜爱的食物.但据统计,发生在日常饮食生活中的食物中毒的情形最为普遍.因此,在购买海鲜时,必须"动眼,动手,动鼻",谨慎小心.

    动眼:仔细看看鱼眼,眼睛呈透明混浊状态,表示新鲜度高.其次再看看鱼鳃是否紧贴,不易脱落,鱼表面是否有光泽.虾壳应与虾肉紧贴,若很容易就剥下,表示不新鲜.且虾身应完整,有弹力富光泽,壳色光亮.螃蟹及贝类海鲜外壳色彩应富光泽,肢体硬体实有弹性,鱿鱼、章鱼等则应皮肤光滑、爪弯曲,斑纹清晰。

    动手:用手按按海鲜肉质,若肉质坚实有弹性,按之不会深陷下去,即表示新鲜。再摸摸看肉表面有无粘液,无粘液表示新鲜度高。

    动鼻:用鼻子闻一闻,如果是一阵海鲜特有的鲜味,表示很新鲜。反之,若有腥臭与腐败之味则应避复免购买。

  • 电脑族多吃“养眼”食物

    2007-10-30 09:12:31

    长时间对着电脑,您可能发现眼睛变得干涩,有流泪、视力减退现象发生,专家建议可多吃营养眼睛的食物来缓解。

    如:维生素A:是预防眼干、视力衰退、夜盲症的良方,以胡萝卜及绿、黄的蔬菜及红枣含量最多。

    维生素B:是视觉神经的营养来源之一,维生素B1不足,眼睛容易疲劳、易引起角膜炎,可多吃些芝麻、大豆、鲜奶、小麦胚芽等食物。决明子:具有清肝明目及润肠的功效,能改善眼睛肿痛、红赤多泪,防止视力减弱。枸杞子:具有清肝明目疗效,因为它含有丰富的胡萝卜素,维生素A、B1、B2、C,钙、铁等,是健康眼睛的必需营养。

  • 连接服务器失败

    2007-10-26 16:20:05

    1、我的机子(客户端)
    系统平台 WIN XP ,LR版本7.8。

    2、服务器

    系统平台WIN SERVER 2003 ;IP 192.168.1.77 ;
    服务器没有安装LR7.8;

    如果想要监视服务器的运行情况的话,只需要在运行时连接到你要测试的服务器就行了,在场景里运行脚

    本时不需要连到服务器上。

    我也这么试验过 !
    你在服务器上装一个load generator就行了  
    我试过了 可以解决的

  • LoadRunner录制脚本中的中文乱码问题

    2007-10-26 13:58:15

    在使用LoadRunner 8.1 进行录制脚本,其脚本中中文信息存在乱码,其解决方法如下所示:
    1、新建脚本--->选择协议(Http)-->选项-->高级-->选择“支持字符集”并点选“UTF-8”;
    2、在回放脚本之前:Vuser-->运行时设置-->浏览器-->浏览器仿真-->更改-->使用浏览器-->语言下来选择 “中文(中国)”;
    进行如上设置以后即可。
     
    补充说明:主要看被测试应该程序的编码形式是什么。如果是UTF-8的形式则采用上述形式设置,如果是Gb2312则不进行步骤1、的操作。感觉步骤2、不是很重要,如果哪位有更确切跟合理的解释,请多赐教:)
  • 如何实现并发操作(由并发引出的问题及思考-小结)

    2007-10-26 11:43:48

    在controller中将quantity设置为100,这样相当于将一个用户初始化100次,然后此用户进行100个这样的并发操作。不知理解对否??
    或者是quantity是100,给服务器的压力就是100个这样的用户并发操作,尽管在服务器端看到的在线用户只用一个,但这个用户的操作相当于100个用户同时操作。不知这样的理解是否正确?
    如果上面的理解是正确的,那么我想模拟100个用户同时在线并在服务器端真实可见又当如何实现呢?

    版主的回答:
    两种理解都有问题,这就是LR的机制问题。
    quantity是100,表示利用100个并发用户,这个时候服务器看到的在线用户就是100个。而不是一个用户。LR的机制是:
    LoadRunner  是一种预测系统行为和性能的工业级标准性能测试负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期

    首先,LR并发100个用户时,你在controller 中的Vuser是可以看到100用户的,每个用户不同的ID;
    其次,服务端也可以看到的,不过要视乎你测试的系统,我这边的在应用服务器下LOG可以非常清晰地见到每个不同ID的用户操作,也就是说,客户端每与服务器连接上了,服务器分配唯一一个ID给他;
    再次,LR中的controller虚拟用户时是分线程(Run Vuser as a thread)和进程(Run Vuer as a process)两种的,结果当然有区别的,不知道LZ是否留意???

    我在controller 中的Vuser可以看到100用户的,每个用户都拥有不同的ID,只是这些用户拥有相同的用户名。
    这样的操作就是100个用户的并发操作了,是吗?
    我的设置是Run Vuser as a thread。

    这个问题我稍作描述:
    一般指的并发,是某系统下同时在使用的用户数,而不是用时做某一个操作。

    LR中的设置用户数后,一般都会陆续增加用户,因此是普通意义上的并发。
    如果要测试某一系统下同时做某一操作,例如大家一起点击[申请]提交数据,那么需要在LR中设置集合点。

    集合点的相关资料,你查一下软件帮助,里面说的很清楚。

  • 使用BoundsChecker检测内存泄漏

    2007-10-23 15:11:35

    使用BoundsChecker检测内存泄漏:

       BoundsChecker采用一种被称为 Code Injection的技术,来截获对分配内存和释放内存的函数的调用。简单地说,当你的程序开始运行时,BoundsChecker的DLL被自动载入进程的地址空间(这可以通过system-level的Hook实现),然后它会修改进程中对内存分配和释放的函数调用,让这些调用首先转入它的代码,然后再执行原来的代码。BoundsChecker在做这些动作的时,无须修改被调试程序的源代码或工程配置文件,这使得使用它非常的简便、直接。

       这里我们以malloc函数为例,截获其他的函数方法与此类似。

       需要被截获的函数可能在DLL中,也可能在程序的代码里。比如,如果静态连结C-Runtime Library,那么malloc函数的代码会被连结到程序里。为了截获住对这类函数的调用,BoundsChecker会动态修改这些函数的指令。

       以下两段汇编代码,一段没有BoundsChecker介入,另一段则有BoundsChecker的介入:

       126: _CRTIMP void * __cdecl malloc (

       127: size_t nSize

       128: )

       129: {

       00403C10 push ebp

       00403C11 mov ebp,esp

       130: return _nh_malloc_dbg(nSize, _newmode, _NORMAL_BLOCK, NULL, 0);

       00403C13 push 0

    00403C15 push 0

       00403C17 push 1

       00403C19 mov eax,[__newmode (0042376c)]

       00403C1E push eax

       00403C1F mov ecx,dword ptr [nSize]

       00403C22 push ecx

       00403C23 call _nh_malloc_dbg (00403c80)

       00403C28 add esp,14h

       131: }

       以下这一段代码有BoundsChecker介入:

       126: _CRTIMP void * __cdecl malloc (

       127: size_t nSize

       128: )

       129: {

       00403C10 jmp 01F41EC8

       00403C15 push 0

       00403C17 push 1

       00403C19 mov eax,[__newmode (0042376c)]
      
       00403C1E push eax

    00403C1F mov ecx,dword ptr [nSize]

       00403C22 push ecx

       00403C23 call _nh_malloc_dbg (00403c80)

       00403C28 add esp,14h

       131: }

       当BoundsChecker介入后,函数malloc的前三条汇编指令被替换成一条jmp指令,原来的三条指令被搬到地址01F41EC8处了。当程序进入malloc后先jmp到01F41EC8,执行原来的三条指令,然后就是BoundsChecker的天下了。大致上它会先记录函数的返回地址(函数的返回地址在stack上,所以很容易修改),然后把返回地址指向属于BoundsChecker的代码,接着跳到malloc函数原来的指令,也就是在00403c15的地方。当malloc函数结束的时候,由于返回地址被修改,它会返回到BoundsChecker的代码中,此时BoundsChecker会记录由malloc分配的内存的指针,然后再跳转到到原来的返回地址去。

       如果内存分配/释放函数在DLL中,BoundsChecker则采用另一种方法来截获对这些函数的调用。BoundsChecker通过修改程序的DLL Import Table让table中的函数地址指向自己的地址,以达到截获的目的。关于如何拦截Windows的系统函数,《程序员》杂志2002年8期,《API钩子揭密(下)》,对修改导入地址表做了概要的描述。我就不再赘述。

       截获住这些分配和释放函数,BoundsChecker就能记录被分配的内存或资源的生命周期。接下来的问题是如何与源代码相关,也就是说当BoundsChecker检测到内存泄漏,它如何报告这块内存块是哪段代码分配的。答案是调试信息(Debug Information)。当我们编译一个Debug版的程序时,编译器会把源代码和二进制代码之间的对应关系记录下来,放到一个单独的文件里(.pdb)或者直接连结进目标程序中。有了这些信息,调试器才能完成断点设置,单步执行,查看变量等功能。BoundsChecker支持多种调试信息格式,它通过直接读取调试信息就能得到分配某块内存的源代码在哪个文件,哪一行上。使用Code Injection和Debug Information,使BoundsChecker不但能记录呼叫分配函数的源代码的位置,而且还能记录分配时的Call Stack,以及Call Stack上的函数的源代码位置。这在使用像MFC这样的类库时非常有用,以下我用一个例子来说明:

    void ShowXItemMenu()

       {

       …

       CMenu menu;

       menu.CreatePopupMenu();

       //add menu items.

       menu.TrackPropupMenu();

       …

       }

       void ShowYItemMenu( )

       {

       …

       CMenu menu;

       menu.CreatePopupMenu();

       //add menu items.

       menu.TrackPropupMenu();

       menu.Detach();//this will cause HMENU leak

       …

       }

       BOOL CMenu::CreatePopupMenu()

       {


       hMenu = CreatePopupMenu();

       …

       }

       当调用ShowYItemMenu()时,我们故意造成HMENU的泄漏。但是,对于BoundsChecker来说被泄漏的HMENU是在class CMenu::CreatePopupMenu()中分配的。假设的你的程序有许多地方使用了CMenu的CreatePopupMenu()函数,如果只是告诉你泄漏是由CMenu::CreatePopupMenu()造成的,你依然无法确认问题的根结到底在哪里,在ShowXItemMenu()中还是在ShowYItemMenu()中,或者还有其它的地方也使用了CreatePopupMenu()?有了Call Stack的信息,问题就容易了。BoundsChecker会如下报告泄漏的HMENU的信息:

    Function

    File

    Line

    CMenu::CreatePopupMenu

    E:\8168\vc98\mfc\mfc\include\afxwin1.inl

    1009

    ShowYItemMenu

    E:\testmemleak\mytest.cpp

    100

    这里省略了其他的函数调用


       如此,我们很容易找到发生问题的函数是ShowYItemMenu()。当使用MFC之类的类库编程时,大部分的API调用都被封装在类库的class里,有了Call Stack信息,我们就可以非常容易的追踪到真正发生泄漏的代码。

       记录Call Stack信息会使程序的运行变得非常慢,因此默认情况下BoundsChecker不会记录Call Stack信息。可以按照以下的步骤打开记录Call Stack信息的选项开关:

       1. 打开菜单:BoundsChecker|Setting…

       2. 在Error Detection页中,在Error Detection Scheme的List中选择Custom

       3. 在Category的Combox中选择 Pointer and leak error check

       4. 钩上Report Call Stack复选框

       5. 点击Ok

    基于Code Injection,BoundsChecker还提供了API Parameter的校验功能,memory over run等功能。这些功能对于程序的开发都非常有益。由于这些内容不属于本文的主题,所以不在此详述了。

       尽管BoundsChecker的功能如此强大,但是面对隐式内存泄漏仍然显得苍白无力。所以接下来我们看看如何用Performance Monitor检测内存泄漏。

       使用Performance Monitor检测内存泄漏

       NT的内核在设计过程中已经加入了系统监视功能,比如CPU的使用率,内存的使用情况,I/O操作的频繁度等都作为一个个Counter,应用程序可以通过读取这些Counter了解整个系统的或者某个进程的运行状况。Performance Monitor就是这样一个应用程序。

       为了检测内存泄漏,我们一般可以监视Process对象的Handle Count,Virutal Bytes 和Working Set三个Counter。Handle Count记录了进程当前打开的HANDLE的个数,监视这个Counter有助于我们发现程序是否有Handle泄漏;Virtual Bytes记录了该进程当前在虚地址空间上使用的虚拟内存的大小,NT的内存分配采用了两步走的方法,首先,在虚地址空间上保留一段空间,这时操作系统并没有分配物理内存,只是保留了一段地址。然后,再提交这段空间,这时操作系统才会分配物理内存。所以,Virtual Bytes一般总大于程序的Working Set。监视Virutal Bytes可以帮助我们发现一些系统底层的问题; Working Set记录了操作系统为进程已提交的内存的总量,这个值和程序申请的内存总量存在密切的关系,如果程序存在内存的泄漏这个值会持续增加,但是Virtual Bytes却是跳跃式增加的。

       监视这些Counter可以让我们了解进程使用内存的情况,如果发生了泄漏,即使是隐式内存泄漏,这些Counter的值也会持续增加。但是,我们知道有问题却不知道哪里有问题,所以一般使用Performance Monitor来验证是否有内存泄漏,而使用BoundsChecker来找到和解决问题。

       当Performance Monitor显示有内存泄漏,而BoundsChecker却无法检测到,这时有两种可能:第一种,发生了偶发性内存泄漏。这时你要确保使用Performance Monitor和使用BoundsChecker时,程序的运行环境和操作方法是一致的。第二种,发生了隐式的内存泄漏。这时你要重新审查程序的设计,然后仔细研究Performance Monitor记录的Counter的值的变化图,分析其中的变化和程序运行逻辑的关系,找到一些可能的原因。这是一个痛苦的过程,充满了假设、猜想、验证、失败,但这也是一个积累经验的绝好机会。

       总结

       内存泄漏是个大而复杂的问题,即使是Java和.Net这样有Gabarge Collection机制的环境,也存在着泄漏的可能,比如隐式内存泄漏。由于篇幅和能力的限制,本文只能对这个主题做一个粗浅的研究。其他的问题,比如多模块下的泄漏检测,如何在程序运行时对内存使用情况进行分析等等,都是可以深入研究的题目。如果您有什么想法,建议或发现了某些错误,欢迎和我交流。
  • 什么是內存泄漏

    2007-10-23 15:07:52

    什么是內存泄漏

    所谓的内存泄漏可以理解为内存单元逐渐被无用的数据占用
    在c c++里可以通过内存单元没有释放引起
    java里可以通过 未对作废数据内存单元的引用置null引起
     
    分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃。
    内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。
    例如C语言编程中用到带有指针的运算,因为C指针是直导内存的,当运行完程序而没释放内存的话,那段内存就会泄露;同理会出现在C++中;所以malloc后一定要free,new了之后一定要delete,creatDC之后一定要deleteDC的。
     
    内存泄漏可以分为4类:

    1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
    2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
    3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
    4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。
     
    一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
     
    个人理解:在编程过程中,如果我们在堆中动态审请了一块内存,在使用完这块内存后要及时把这块内存释放掉。如果没有及时释放,操作系统会认为这块内存仍然被使用,这就造成了内存泄露。这是程序开发人员必须要注意的问题。操作系统都有自己的内存管理和分配机制,如果内存管理策略不是很好就会引发内存碎片的存在。若不及时进行碎片整理,也将造成内存泄露。
     
    听说,c/c++,java等语言存在内存泄露的隐患,C#语言机制好像就没有这方面的担忧,是这样嘛?
     
    一个比较简单的判断内存泄漏的方法,看一下你的程序所占用的private bytes是多少,
    如果一直增加,也就说明有内存泄漏。

    performance monitor里面可以检测private bytes的变化情况。
     
     
     
     
  • 系统测试的16个测试策略是什么?

    2007-10-23 10:24:19

     
     
    功能测试、性能测试、压力测试、容量测试、安全性测试、可用性测试、GUI测试、安装测试、配置测试、异常测试、备份测试、健壮性测试、文档测试、在线帮助测试、网络测试、稳定性测试
     
     
    项目测试策略不仅仅包括以上说的.上面说的仅仅是测试策略中的测试类型.
    项目测试部分的策略描述测试活动的一般方法和目标.其中包括要进行的测试阶段(单元测试,集成测试和系统测试)以及要执行的测试类型(功能测试,性能测试,负载测试,强度测试等)
    策略定义:
    要使用的测试方法和工具
    测试完成和测试成功所采用的评价标准
    影响资源要求或涉及进度的特殊考虑
    测试与外部系统之间的接口
    模拟物理损坏或安全威胁
    有些组织具有自行定义的公司测试策略.在这种情况下需要将相应策略应用到特定的项目上.
  • 研发手机基本流程(摘自52RD论坛)

    2007-10-23 09:58:08

    研发手机基本流程

    手机设计公司是根据不同的手机研发平台来设计不同性能的产品!
    手机研发的基本流程是:
    用一个较简单的阐释,一般的手机研发公司是需要最基本有六个部门:IDMDHWSWPMSourcingQA
    1
    ID(Industry Design)工业设计
    包括手机的外观、材质、手感、颜色配搭,主要界面的实现与及色彩等方面的设计。

    例如摩托罗拉翻盖的半透明,诺基亚7610的圆弧形外观,索爱W550的阳光橙等。这些给用户的特别感受和体验都是属于手机工业设计的范畴,一部手机是否能成为畅销的产品,手机的工业设计显得特别重要!

    2
    MD(Mechanical Design)结构设计
    手机的前壳、后壳、手机的摄像镜头位置的选择,固定的方式,电池如何连接,手机的厚薄程度。如果是滑盖手机,如何让手机滑上去,怎样实现自动往上弹,SIM卡怎样插和拔的安排,这些都是手机结构设计的范畴。繁琐的部件需要MD的工作人员对材质以及工艺都非常熟识。

    摩托罗拉V3 13.9mm的厚度掀起了手机市场的热潮,V3手机以超薄为卖点,因为它的手机外壳材质选择十分关键,所以V3的外壳是由技术超前的航空级铝合金材质打造而成。可以这样说,特殊外壳材质的选择成就了V3的成功。
    另外有个别用户反应在使用某些超薄滑盖手机的时候,在接听电话时总能感觉到手机前壳的左右摇动,这就是手机结构设计出了问题,由于手机的壳体太薄,通话时的扬声器振动很容易让手机的机身产生了共振。
    3
    HW(Hardware) 硬件设计
    硬件主要设计电路以及天线,而HW是要和MD保持经常性的沟通。
    MD要求做薄,于是电路也要薄才行得通。同时HW也会要求MD放置天线的区域比较大,和电池的距离也要足够远,HW还会要求ID在天线附近不要放置有金 属配件等等。可想而知一部内置天线的设计手机,其制造成本是会较一部外置天线设计的手机贵上20-25%,其主要因素就是天线的设计,物料的要求与及电路 的设计和制造成本平均都是要求较高一些。

    通常结构设计师(MD)与工业设计师(ID)都会有争论,MDID都是画家,画一些大家做不出 来的东西,而ID会说MD笨,不按他们的设计做,所以手机卖得不好。所以,一款新的手机在动手设计前,各个部门都会对ID部门的设计创意进行评审,一个好 ID一定要是一个可以实现的创意,并且客户的体验感觉要很好才行。当年摩托罗拉V70ID就是一个很好的实现创意例子,后期市场的反应也不错,而西门 子的Xelibri的创意虽然也很好,也可实现,但可惜的是最终客户的使用感觉并不好,所以一个真正好的创意,不但要好看,可实现,而且还要好用。

    另外HW也会与ID吵架,ID喜欢用金属装饰,但是金属会影响了天线的设计以及容易产生静电的问题,因此HW会很恼火,ID/MD会开发新材料,才能应付ID的要求。诺基亚8800就是一个好例子,既有金属感,又不影响天线的接收能力。
    ?
    4
    SW(Software)软件设计
    相对来说,SW是更容易为大家所理解,由于计算机的普及,让我们最大程度地接触了各种各样的软件,手机操作界面的模式,大家经常看到的手机九官格操作菜单的实现,这都是SW设计的范畴。

    SW
    要充分考虑到界面的可操作性,是否人性化,是否美观的因素。SW测试非常复杂,名目繁多,SW的测试不仅只是在寻找Bug,一致性的测试、兼容性的测试 等都是非常重要的项目,在目前内容为主的信息时代,软件才是手机的最终幕后支柱,硬件的驱动是软件来实现,软件和硬件的工程师之间的冲突相信是不会比 其它部门少,这种关系的绕来绕去,所以便需要有PM(Project Management)项目管理来协调了。
    5
    PM(Project Management)项目管理
    规模公司的PM都分得非常细致,比如TPM (Technologly Of Project Management),即专门管技术的PM,而普通的PM,只管理项目的进度各协调工作,PM这个部门通常存在于那些自己设计,自己生产,自己销售手机 的公司,AMAccount Manager)的职位恐怕大家都不陌生,作为客户经理,对公司内部是代表客户提出要求,对外则代表公司的整体形象,在两者之间起着不可或缺的桥梁作用。

    6
    Sourcing资源开发部
    资源开发部的员工要不停地去挖掘新的资源,如新材质、新的手机组件、测试器材等,当手机开始试产时,他们要保证生产线上所需要的所有生产物料齐备。

    手机进行小批量试生产,考察的不仅是软/硬件的成熟度,还包括考察生产工艺和生产的测试技术,有些手机在进行到这个阶段时,却通过不了这一关的话,最后是以失败告终。于是这款新设计的手机便不会出现在市场上了,而投入的开发资金和人力却付之流水,是一个极大的损失。

    7
    QA(Quality Assurance)质量监督
    QA
    部门负担起整个流程质量保证的工作,督促开发过程是否符合预定的流程,保证项目的可生产性,有很多新设计的手机,就因为碰上了不可生产的某种因素而放弃了。

    生产一部手机不是在实验室内做实验那么简单,一旦生产就是成千上万部,要保证每一部产品的优质绝非一件简单容易的事。生产一部手机的样品和生产10万部手机完全是两码子事。
    举例:中国的菜馆出的都是样品,麦当劳做的是产品,所以麦当劳可以做得很大,而且到目前为止,中国的菜馆暂时还没有做到像麦当劳的规模是事实,所以手机设计公司才会建立起很多流程来防止出现设计研制出来的手机却不能投入生产的情况。
    不仅如此,一款手机的成功上市,能够卖个满堂红,仍然是需要与大众手机用户有亲密的接触,并且经过用户的反馈以及快速的改善才能成功。
    二、鲜为人知的手机测试项目
    1
    、压力测试
    用自动测试软件连续对手机拨打1000个电话,检查手机是否会发生故障。倘若出了问题,有关的软件就需要重新编写了。所以有时候手机上会出现不同的软件版本存在的情况,其实告诉大家一个秘密,手机的版本越多,这可以证明该手机在推出发售前,未经过充分的测试工作便发售了。

    2
    、抗摔性测试
    抗摔性测试是由专门的Pprt可靠性实验室来进行,0.5m的微跌落测试要做300/(手机有六个面)。而2m的跌落测试每个面需各做一次,还仿真人把手机抛到桌面,而手机所用的电池,也要经过最少4m的高度,单独的向着地面撞击跌落100次而不能有破裂的情况出现。

    3
    、高/低温测试
    让手机处于不同温度环境下测试手机的适应性,低温一般在零下20摄氏度,高温则在80摄氏度左右。

    4
    、高湿度测试
    用一个专门的柜子来作滴水测试,仿真人出汗的情况(水内渗入一定比例的盐分),约需进行30个小时。

    5
    、百格测试(又称界豆腐测试)
    H4硬度的铅笔在手机外壳上画100格子,看看手机的外壳是否会掉下油漆,有些要求更严格的手机,会在手机的外壳上再涂抹上一些名牌的化妆品,看看是否因有不同的化学成分而将手机的油漆产生异味或者掉漆的可能。


    6
    、翻盖可靠性测试
    对翻盖手机进行翻盖10万次,检查手机壳体的损耗情况,是用一部翻盖的仿真机来进行,它可以设置翻盖的力度、角度等。
    7
    、扭矩测试
    直机用夹具夹住两头,一个往左拧,一个往右拧。扭矩测试主要是考验手机壳体和手机内面大型器件的强度。

    8
    、静电测试
    北方地区,天气较为干燥,手摸金属的东西容易产生静电,会引致击穿手机的电路,有些设计不好的手机就是这么样突然损坏了。进行这种测试的工具,是一个被称 静电枪的铜板,静电枪会调较到10-15KV的高压低电流的状况,对手机的所有金属接触点进行放电的击试,时间约为300ms-2s左右,并在一间 有湿度控制的房间内进行,而有关的充电器(火牛)也会有同样的测试,合格才能出厂发售。


    9
    、按键寿命测试
    借助机器以给设定的力量对键盘击打10万次,假使用户每按键100次,就是1000天,相当于用户使用手机三年左右的时间。

    10
    、沙尘测试
    将手机放入特定的箱子内,细小的沙子被吹风机鼓吹起来,经过约三小时后,打开手机并察看手机内部是否有沙子进入。如果有,那么手机的密闭性设计不够好,其结构设计有待重新调整。
    此外,手机的测试还包含了更多更离奇的测项目,比如把手机放在铁板上打电话加以测试,由于此时磁场发生了变化,什么情况都会发生,例如寻找不到SIM卡等。

    用铁丝在手机底部连接器内拨来拨去,主要是要考虑到手袋内有锁匙的情况下,是否会令手机出现短路的问题。
    还有故意把充电器/电池反接测试,看看手机的保护电路设计是否能正常运作,靠近日光灯打电话的测试,人体吸收电磁波比例的测试,以及靠近心脏起博器打电话的测试等等,上述所提及的各种测试都是不可少的。

  • LR8.1中文版监测UNIX资源出现以下错误提示--解决方案(转)

    2007-10-23 09:53:15

    使用LR8.1中文版,遇到如下问题:

    LR8.1中文版监测UNIX资源出现以下错误提示

    条件:unix上的rstatd服务启动.

    使用LR8.0英文版监测UNIX资源正常,但是使用LR8.1中文版监测UNIX资源出现以下错误提示:


    Monitor name :UNIX Resources. 无法在计算机 10.188.182.240 上访问度量 CPU Utilization 的数据。提示: 在计算机上检查是否有此类度量(使用“添加计算机”对话框)(入口点: CRstatMeasurement::CRstatMeasurement)。        [MsgId: MMSG-47195]
     
     
    经过51testinghigkoo仁兄提示:LR8.1中文  的 控制器 资源监视 有问题!不要用汉化的。
     
    解决方案:
     
    重新安装回英文版本,此问题得到解决
Open Toolbar