如果有一天你想起来了曾经爱过你的人, 那么我永远是其中的一个; 如果有一天这世界上再没有人爱你了, 那就是我离开这个世界了。 ----------------茫茫寒江,扁舟一叶

发布新日志

  • 加油

    2008-01-26 20:54:01

    什么都得家人担心。。

    找了一份。别人不满意。连自己也不满意的。。真的不想做下去。工作没难度。。没激情。。又是整天调来调去的。

     

  • 永远不要忘记自己最初的梦想...

    2007-12-03 01:17:04

    不知不觉过了三个月多了...

    没什么收货.

    反而是多了几份自己人生无法审核的单

  • 音乐

    2007-11-14 02:29:29

    Desperado
                  原唱:eagles        翻唱:west life

    Desperado, why don't you come to your senses?
    You been out ridin' fences for so long now
    Oh, you're a hard one
    I know that you got your reasons
    These things that are pleasin' you
    Can hurt you somehow

    Don' you draw the queen of diamonds, boy
    She'll beat you if she's able
    You know the queen of heats is always your best bet

    Now it seems to me, some fine things
    Have been laid upon your table
    But you only want the ones that you can't get

    Desperado, oh, you ain't gettin' no youger
    Your pain and your hunger, they're drivin' you home
    And freedom, oh freedom well, that's just some people talkin'
    Your prison is walking through this world all alone

    Don't your feet get cold in the winter time?
    The sky won't snow and the sun won't shine
    It's hard to tell the night time from the day
    You're loosin' all your highs and lows
    Ain't it funny how the feeling goes away?

    Desperado, why don't you come to your senses?
    Come down from your fences, open the gate
    It may be rainin', but there's a rainbow above you
    You better let somebody love you, before it's too late
  • 面试测试遇到的一题。

    2007-08-15 18:03:32

    9点连成4条线

    用四条相连的直线把9个三三排成正方形的点连起来,暂且把这9个点命名未1-9个数字

     

  • A Text Watermarking Algorithm based on Contents and Format

    2007-06-29 20:45:56

    A Text Watermarking Algorithm based on Contents and Format

    AbstractWith the development of the technology of computer and Internet, the distributing and copy of digital watermark become widely dispersed. Copyright protection also becomes outstanding .The digital watermark is a kind of copyright protection technique which appears in recent years, it overcome the traditional password to learn to keep secret the product after decrypt no longer safe blemish. Understand the history and the research present conditions of the digital watermark, the different between it and traditional cryptology, and the relation of them.

    In this article , study the tool of MATLAB, make an experiment on embedding the watermark into picture ,carry out a arithmetic which embedding of watermarking . The result prove the MATLAB is efficiently and conveniently .Introduced embedding and detecting of arithmetic that based on content and format :changing the size and color of some words is basis of feature coding idea and format of the word, Study and understand the embeddingbuild detecting of watermarking , good robustness in counteracting traditional attacks

    KeywordsWatermarking,MATLABdigital watermarking of text,Robustnesscolor

  • 嘿。。智力测试

    2007-05-29 14:50:52

    几个题目如下:

    一:小明和小?都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日是下
    列10组中的一天,张老师把M值告诉了小明,把N值告诉了小?,张老师问他们知道他
    的生日是那一天吗?

    3月4日 3月5日 3月8日 6月4日 6月7日
    9月1日 9月5日 12月1日 12月2日 12月8日

    小明说:我不知道,小?肯定也不知道

    小?说:本来我也不知道,但是现在我知道了

    小明说:哦,那我也知道了

    请根据以上对话推断出张老师的生日是哪一天? 



    答案: 9.1 




    猜猜小偷是谁

    李林夫妇从异地探险回家,得到一些奇珍异宝,他们把自己最好的四个朋友请来参观。
    在展宴结束时,李林家的管家在收拾宝物时发现少了一只戒指,它足有20克重,但却很小巧,年代久远,价值不菲!幸好及时发现,客人们还都没离去,于是李林报了警。警察针对四个嫌疑人展开了收查


    A某是个50开外的老人,喜欢抽烟,长年带着自己特制的烟斗,那种头很大,嘴很小,警察发现那很大的烟斗头里有一烟斗烟灰。

    B某是个年轻的夫人,夫人有个小巧的手提包,手提包里有个化妆盒,里面除了一支口红,一盒粉饼,还有一把剪眉刀。手提包里还有个钱包,钱包里也就几张银行卡和几百元现金。

    C某是个年轻小伙,他喜欢喝咖啡,总是随身带着一保温瓶自己煮的咖啡,所有他的朋友都知道他的这个爱好,所以也无可非议,警察发现他满满一壶咖啡还在昌热气!

    D某是个职业歌手,随身带着是一把陈旧的吉他,警察发现吉他身已经被蛀了一个小洞。

    警察助手发现这些东西并无什么跛绽,想询问警察是否要收身,却听警察说已经知道小偷是谁了,并知道他把戒指藏在什么地方,读者朋友你们知道小偷是谁吗,他又是怎么隐藏了那枚戒指的? 



    答案是C喝咖啡的,他那么喜欢喝宴会都结束了,却还是满满的一壶呢 


    三:在第二次世界大战时,侵华日军打算进行大规模军事行动。为了解日方的密谋,我军某特工深入敌占区,盗取日军的行动计划。某天夜里,这些特工潜入日军的司令官邸,由3楼卧房偷 出有关行动计划的密函。正要离开,忽然楼上传来阵阵脚步声。原来是日军司令提前宴罢归来。特工走到窗边,看到楼下正临着一条窄长的运河,他想潜水逃走,但他费了九牛二虎之力偷来的密函,岂不就这么泡汤了。幸好对面楼上有助 手接应,他从窗口探出头来,伸长了手,但与接应者还是差七八十厘米。如果用竹竿系着文件,就可以顺利地递过去,可是在这千钧一发之际根本来不及去拢竹竿之类的长东西; 若要踏着窗户的雨搭跳过去,雨搭又窄又斜,根本无法站稳;他想把信丢过去,又怕被风吹走。突然,他灵机一动,利用特殊手段顺利地完成了任务。然后由3楼跳进运河逃离了官邸。请仔细设想,我方特工到底使用什么妙计把密函传给助手?

    四:“62-63=1”
    是个错误的等式,能不能移动一个数字使得等式成立。这是复旦大学计算机博士入学考试的题目,当时一个人也没有做出来。出题的导师说这是个很有魔力的题目,男的做出来了就能找到他心爱的女孩,女的做出来了就能找到他的白马王子。一般来说,结了婚的人是做不出来的。 
      注意,只能移动一个数字,而且必须是数字。



    五:谁杀了仙道?

    神奈川县高中篮球决赛前夕,陵南高中篮球队中的明星选手---仙道彰被杀死于自家住处。警方稍后拘捕了五名嫌犯。他们是湘北高中篮球队的樱木花道、三井寿、流川枫、赤木刚宪、宫城良田。在警方的盘问中,他们各人都要回答四个问题。但是由安西教练侧面了解,各嫌犯所答的四个问题中有三个答案是真话,另一个答案是假话。而且 

      凶手就是五人其中之一。以下是五人的供词: 

      樱木花道: 

      (a)我没有杀死仙道。 

      (b)我从未有手枪。 

      (c)流川枫讨厌我。 

      (d)当天下午我在练球。 

      三井寿: 

      (a)我没有杀死仙道。 

      (b)流川枫在今年内从未到过仙道家。 

      (c)我和赤木不熟。 

      (d)当天下午,我和樱木在练球。 

      流川枫: 

      (a)我没有杀死仙道。 

      (b)我今年内从未到过仙道家。 

      (c)我不讨厌樱木。 

      (d)如果赤木说我是凶手,这是谎言。 

      赤木刚宪: 

      (a)仙道被杀时,我在家中。 

      (b)我从未杀过人。 

      (c)流川枫是凶手。 

      (d)我和三井是好朋友。 

      宫城良田: 

      (a)如果樱木说他从未有手枪,这是谎言。 

      (b)仙道在决赛前夕被杀的。 

      (c)命案发生时,赤木在家中。 

      (d)我们其中一人是凶手。 


    六:有一组数如下所示:

    12  (21)  26
    16  (30)  36
    20  (38)  48
    24  (54)  60
    28  (    )  84

    请写出最后一个括号中的数。

    提示:括号中的数是由前后两个数而来,与其它数无关。 



    七: 数字的奥妙 (第三期) (被liweisky和天道酬勤破了! 强!)

    题一 (热身题):
    第一组: 
    1        (?)        3        7

    第二组: 
    2        6        (?)        8

    ===================

    题二 (头痛题):
    第一组: 
    10        16        (?)        38

    第二组: 
    44        (?)        112        157


    ===================

    注: 每题中两组也是用同一个逻辑 / 原理 / 算式 计出来的!



    智力题 --- 你与5岁的孩子谁更善于思考

    有一家人决定搬进城里,于是去找房子。 

    全家三口,夫妻两个和一个5岁的孩子。他们跑了一天,直到傍晚,才好不容易看到一张公寓出租的广告。 

    他们赶紧跑去,房子出乎意料的好。于是,就前去敲门询问。 

    这时,温和的房东出来,对这三位客人从上到下地打量了一番。 

    丈夫豉起勇气问道: "这房屋出租吗?" 

    房东遗憾地说:"啊,实在对不起,我们公寓不招有孩子的住户。" 

    丈夫和妻子听了,一时不知如何是好,于是,他们默默地走开 了。 

    那5岁的孩子,把事情的经过从头至尾都看在眼里。那可爱的心灵在想:真的就没办法了? 他那红叶般的小手,又去敲房东的大门。 

    这时,丈夫和妻子已走出5米来远,都回头望着。 

    门开了,房东又出来了。这孩子精神抖擞地说:...... 

    房东听了之后,高声笑了起来,决定把房子租给他们住。 

    问:这位5岁的小孩子说了什么话,终于说服了房东?

    九智力题

    国王要杀四个人,给他们最后一次机会,如果作不出这道题目,4人全杀,只要一个人答对了,4人都不杀
    四个人编号为甲,乙,丙,丁,国王拿出4顶帽子,2白2黑,给他们戴上,帽子很小,自己无法看到自己的帽子的颜色,让他们来到一堵墙前面,让甲站到墙的一边,乙,丙,丁站在墙的另一边,而且乙,丙,丁是站成一条直线的,乙只能看墙,看不到丙,丁,丙可以看到乙,看不到丁,丁可以看到乙,丙

    现在国王让他们说自己戴的帽子的颜色,只要第一个人答对了,就可以全不杀,第一个答错了就全杀,
    请问谁会先回答?为什么?




    答案:第二题

    有两种可能
    一、乙丙同色,那么丁马上可以判断出自己的颜色,那么丁会先回答
    二、乙丙异色,那么丁无法判断自己的颜色,那么丁就不会回答,那么丙就会知道自己和乙不同颜色,所以丙会先答 



    十:经典智力题(海盗分金)

    海盗,大家听说过吧。这是一帮亡命之徒,在海上抢人钱财,夺人性命,干的是刀头上舔血的营生。在我们的印象中,他们一般都瞎一只眼,用条黑布或者讲究点的用个黑皮眼罩把坏眼遮上。他们还有在地下埋宝的好习惯,而且总要画上一张藏宝图,以方便后人掘取。不过大家是否知道,他们是世界上最民主的团体。参加海盗的都是桀骜不驯的汉子,是不愿听人命令的,船上平时一切事都由投票解决。船长的唯一特权,是有自己的一套餐具——可是在他不用时,其他海盗是可以借来用的。船上的唯一惩罚,就是被丢到海里去喂鱼。

      现在船上有若干个海盗,要分抢来的若干枚金币。自然,这样的问题他们是由投票来解决的。投票的规则如下:先由最凶猛的海盗来提出分配方案,然后大家一人一票表决,如果有50%或以上的海盗同意这个方案,那么就以此方案分配,如果少于50%的海盗同意,那么这个提出方案的海盗就将被丢到海里去喂鱼,然后由剩下的海盗中最凶猛的那个海盗提出方案,依此类推。

      我们先要对海盗们作一些假设。

      1) 每个海盗的凶猛性都不同,而且所有海盗都知道别人的凶猛性,也就是说,每个海盗都知道自己和别人在这个提出方案的序列中的位置。另外,每个海盗的数学和逻辑都很好,而且很理智。最后,海盗间私底下的交易是不存在的,因为海盗除了自己谁都不相信。
      2) 一枚金币是不能被分割的,不可以你半枚我半枚。
      3) 每个海盗当然不愿意自己被丢到海里去喂鱼,这是最重要的。
      4) 每个海盗当然希望自己能得到尽可能多的金币。
      5) 每个海盗都是现实主义者,如果在一个方案中他得到了1枚金币,而下一个方案中,他有两种可能,一种得到许多金币,一种得不到金币,他会同意目前这个方案,而不会有侥幸心理。总而言之,他们相信二鸟在林,不如一鸟在手。
      6) 最后,每个海盗都很喜欢其他海盗被丢到海里去喂鱼。在不损害自己利益的前提下,他会尽可能投票让自己的同伴喂鱼。

      现在,如果有10个海盗要分100枚金币,将会怎样?  







    答案:数学的逻辑有时会导致看来十分怪异的结论。一般的规则是,如果逻辑推理没有漏洞,那么结论就必定站得住脚,即使它与你的直觉矛盾。1998年9月,加利福尼亚州帕洛阿尔托的Stephen M. Omohundro寄给我一道难题,它恰好就属于这一类。这难题已经流传了至少十年,但是Omohundro对它作了改动,使它的逻辑问题变得分外复杂了。先来看看此难题原先的形状。10名海盗抢得了窖藏的100块金子,并打算瓜分这些战利品。这是一些讲民主的海盗(当然是他们自己特有的民主),他们的习惯是按下面的方式进行分配:最厉害的一名海盗提出分配方案,然后所有的海盗(包括提出方案者本人)就此方案进行表决。如果50%或更多的海盗赞同此方案,此方案就获得通过并据此分配战利品。否则提出方案的海盗将被扔到海里,然后下提名最厉害的海盗又重复上述过程。 

      所有的海盗都乐于看到他们的一位同伙被扔进海里,不过,如果让他们选择的话,他们还是宁可得一笔现金。他们当然也不愿意自己被扔到海里。所有的海盗都是有理性的,而且知道其他的海盗也是有理性的。此外,没有两名海盗是同等厉害的——这些海盗按照完全由上到下的等级排好了座次,并且每个人都清楚自己和其他所有人的等级。 

      这些金块不能再分,也不允许几名海盗共有金块,因为任何海盗都不相信他的同伙会遵守关于共享金块的安排。这是一伙每人都只为自己打算的海盗。 

      最凶的一名海盗应当提出什么样的分配方案才能使他获得最多的金子呢? 

      为方便起见,我们按照这些海盗的怯懦程度来给他们编号。最怯懦的海盗为1号海盗,次怯懦的海盗为2号海盗,如此类推。这样最厉害的海盗就应当得到最大的编号,而方案的提出就将倒过来从上至下地进行。 

      分析所有这类策略游戏的奥妙就在于应当从结尾出发倒推回去。游戏结束时,你容易知道何种决策有利而何种决策不利。确定了这一点后,你就可以把它用到倒数第2次决策上,如此类推。如果从游戏的开头出发进行分析,那是走不了多远的。其原因在于,所有的战略决策都是要确定:“如果我这样做,那么下一个人会怎样做?”因此在你以下海盗所做的决定对你来说是重要的,而在你之前的海盗所做的决定并不重要,因为你反正对这些决定也无能为力了。 

      记住了这一点,就可以知道我们的出发点应当是游戏进行到只剩两名海盗——即1号和2号——的时候。这时最厉害的海盗是2号,而他的最佳分配方案是一目了然的:100块金子全归他一人所有,1号海盗什么也得不到。由于他自己肯定为这个方案投赞成票,这样就占了总数的50%,因此方案获得通过。 

      现在加上3号海盗。1号海盗知道,如果3号的方案被否决,那么最后将只剩2个海盗,而1号将肯定一无所获——此外,3号也明白1号了解这一形势。因此,只要3号的分配方案给1号一点甜头使他不至于空手而归,那么不论3号提出什么样的分配方案,1号都将投赞成票。因此3号需要分出尽可能少的一点金子来贿赂1号海盗,这样就有了下面的分配方案: 3号海盗分得99块金子,2号海盗一无所获,1号海盗得1块金子。4号海盗的策略也差不多。他需要有50%的支持票,因此同3号一样也需再找一人做同党。他可以给同党的最低贿赂是1块金子,而他可以用这块金子来收买2号海盗。因为如果4号被否决而3号得以通过,则2号将一文不名。因此,4号的分配方案应是:99块金子归自己,3号一块也得不到,2号得1块金子,1号也是一块也得不到。 

      5号海盗的策略稍有不同。他需要收买另两名海盗,因此至少得用2块金子来贿赂,才能使自己的方案得到采纳。他的分配方案应该是:98块金子归自己,1块金子给3号,1块金子给1号。 

      这一分析过程可以照着上述思路继续进行下去。每个分配方案都是唯一确定的,它可以使提出该方案的海盗获得尽可能多的金子,同时又保证该方案肯定能通过。照这一模式进行下去,10号海盗提出的方案将是96块金子归他所有,其他编号为偶数的海盗各得1块金子,而编号为奇数的海盗则什么也得不到。这就解决了10名海盗的分配难题。  



    十一:
    谁没有说谎?

    有五个人,有人讲大话(*),有人讲真话。

    A先生 : 这里只有一个人讲大话。
    B小姐 : 这里只有两个人讲大话。
    C伯伯 : 这里只有三个人讲大话。
    D婆婆 : 这里只有四个人讲大话。
    E爸爸 : 这里只有五个人讲大话。

    究竟谁没有说谎? (答案可能多于一个) 






    答案:首先E是错的,如果E对了,则没有一个人说真话了。A也错了,因为如果A对了,由E错可知A,B,C,D均对,而A,B,C,D的话互相矛盾,固A错了。同理B,C也错了。因此D是对的,大家可以检验!


    十二:下面题目中,不同的字母代表不同的1位数字,从0-9
    组成的数没有前导零的形式(如012)。
    1,热热身
     FORTY
       TEN
    +  TEN
    -------
     SIXTY

    2,A=?
      AS
    x  A
    -----
     MAN

    3,J=?
     ABC
     DEF
    +GHI
    -----
     JJJ

    4,G=?
     BCDEFA
    x     G
    --------
     ABCDEF



    十三:有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段45分钟的时间? 








    答案:是首先去一根香点两头,另一根香点一头,前一根香烧玩,后一根香两头都点上 



    十四:一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?







    答案:因只有一个女儿的头发是黑的, 故两位女儿是无头发.
    这即只可能是0/1/2岁!

    如是:
    0+0+13= 13 ; 0*0*13 = 0 (不对)
    1+1+11=13 ; 1*1*13 = 13 (太小)
    2+2+9=13 ; 2*2*9 = 36 (合理)

    不可能是1+3+9=13; 1*3*9=27
    一来27岁好像少了点 (二十多岁婜老婆加生了3个女儿 !_! ).
    二来27分解质因数是1.3.3.3
    加埋不可能有两种或以上等于13的可能性.
    否则在职员知道经理的年龄的时候, 已经能确定他三个女儿的年龄了!

    还有那个职员知道经理的年龄和三个女儿的年龄加在一起是13, 但还不能确定她们分别是多少, 间接证明组合有两种或以上的可能。
    如1+6+6=13 ; 1*6*6 = 36
    但当他知道只有一个女儿的头发是黑后, 便间接证明其他两个是没有头发
    就只剩下一个组合, 答案是2, 2, 9!





    十五:有三个人去住旅馆,住三间房,每一间房$10元,于是他们一共付给老板$30, 
    第二天,老板觉得三间房只需要$25元就够了于是叫小弟退回$5给三位客人, 
    谁知小弟贪心,只退回每人$1,自己偷偷拿了$2,这样一来便等于那三位客人每人各花了九元, 
    于是三个人一共花了$27,再加上小弟独吞了不$2,总共是$29。可是当初他们三个人一共付出$30那么还有$1呢? 



    十六:有两位盲人,他们都各自买了两对黑袜和两对白袜,八只袜了的布质、大小完全相同, 
    而每对袜了都有一张商标纸连着。两位盲人不小心将八对袜了混在一起。他们每人怎样才能取回黑袜和白袜各两对呢?  




    答案:

    连着的一人一半



    十七:

    有一辆火车以每小时15公里的速度离开洛杉矶直奔纽约,另一辆火车以每小时20公里的速度从纽约开往洛杉矶。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从洛杉矶出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟飞行了多长距离? 


    推理:

    如何自杀?

    一位左腿被截肢的老人吊死在寓所里,一天以后才被人发现。尸体距地板大约80厘米。如果是自杀的话,应该有凳子一类垫脚的物件,可是没有。老人只有一条腿,他无论如何是不可能跳起来把绳子套住自己脖子上的。因此,警方断定是他杀。

      那位老人在死前两个多月曾投了高额人寿保险。从现场看,冷门是从屋里锁上的,完全处于一种与外界隔离的密室状态。保险公司怀疑,死者是为了把保险金留给他的独生女而 成他杀。于是,委托库尔——拉姆侦探事务所进行调 。

      小个子名探拉姆旋即来到警察署查阅了现场检查记录。他发现,在死者的尸体下面有一个空的纸制包装箱。并认为:老人不可能踩着空箱子上吊;如果箱子里装着冰,踩上去就塌不 了,已经一天多了,到现在冰也该化了。可是,箱子和地面又没有潮湿的痕迹。换气扇虽然开着,但是不能在这一天多的时间里就完全干了。这一判断警方也不能接受。拉姆却认为这一判断是正确的,老人是把自杀伪装成他杀。 

      那么,死者到底是踩着什么上吊的呢? 



    答案:老人是利用了干冰的特性。他确实是用那个纸包装箱作为上吊的垫脚物的。不过,在箱子里放了一块干冰。干冰非常坚硬。可以放心地当凳子用。同时,由于气化作用,当尸体被发 现时,干冰已消失得无影无踪了,而箱子是不会湿的。干冰气化过程中产生的二氧化碳,则被换气扇抽到了室外(干冰是固态的二氧化碳,形似冰雪,受热不经溶化而直接气化,故名。)



  • 了解进程,线程

    2007-05-26 22:15:27

    程序,进程,线程的区别-

    进程和程序区别和联系表现在以下方面:
    1)程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是
    一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。
    进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因
    调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被
    撤消。反映了一个程序在一定的数据集上运行的全部动态过程。
    2)进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成
    为不同的进程,可以用进程控制块来唯一地标识每个进程。而这一点
    正是程序无法做到的,由于程序没有和数据产生直接的联系,既使是
    执行不同的数据的程序,他们的指令的集合依然是一样的,所以无法

    唯一地标识出这些运行于不同数据集上的程序。一般来说,一个进程
    肯定有一个与之对应的程序,而且只有一个。而一个程序有可能没有
    与之对应的进程(因为它没有执行),也有可能有多个进程与之对应(运
    行在几个不同的数据集上)。
    进程还具有并发性和交往性,这也与程序的封闭性不同。

    ----------------------------------------------------------------------------------------------

    进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

    简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
    线程的划分尺度小于进程,使得多线程程序的并发性高。
    另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
    线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
    从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

    线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
    一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

    ----------------------------------------------------------------------------------------------

    进程和线程的区别

    说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

    线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

    一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行

     

    说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

    简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

    线程的划分尺度小于进程,使得多线程程序的并发性高。

    另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

    线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

    从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

     

    说法三:多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程和线程有什么区别呢?

    进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

    线程的划分尺度小于进程,使得多线程程序的并发性搞。

    另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

    线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

    从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

    进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的。

    C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。这时,处在可执行状态中的应用程序称为进程。从用户角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU时间片等资源的基本单位,是为正在运行的程序提供的运行环境。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。多任务环境下应用程序进程的主要特点包括:

    ●进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间;

    ●进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型;

    ●从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。

    在Unix操作系统启动过程中,系统自动创建swapper、init等系统进程,用于管理内存资源以及对用户进程进行调度等。在Unix环境下无论是由操作系统创建的进程还要由应用程序执行创建的进程,均拥有唯一的进程标识(PID)。

    说法四:应用程序在执行过程中存在一个内存空间的初始入口点地址、一个程序执行过程中的代码执行序列以及用于标识进程结束的内存出口点地址,在进程执行过程中的每一时间点均有唯一的处理器指令与内存单元地址相对应。

    Java语言中定义的线程(Thread)同样包括一个内存入口点地址、一个出口点地址以及能够顺序执行的代码序列。但是进程与线程的重要区别在于线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中,因此可以定义线程是程序内部的具有并发性的顺序代码流。

    Unix操作系统和Microsoft Windows操作系统支持多用户、多进程的并发执行,而Java语言支持应用程序进程内部的多个执行线程的并发执行。多线程的意义在于一个应用程序的多个逻辑单元可以并发地执行。但是多线程并不意味着多个用户进程在执行,操作系统也不把每个线程作为独立的进程来分配独立的系统资源。进程可以创建其子进程,子进程与父进程拥有不同的可执行代码和数据内存空间。而在用于代表应用程序的进程中多个线程共享数据内存空间,但保持每个线程拥有独立的执行堆栈和程序执行上下文(Context)。

    基于上述区别,线程也可以称为轻型进程 (Light Weight Process,LWP)。不同线程间允许任务协作和数据交换,使得在计算机系统资源消耗等方面非常廉价。

    线程需要操作系统的支持,不是所有类型的计算机都支持多线程应用程序。Java程序设计语言将线程支持与语言运行环境结合在一起,提供了多任务并发执行的能力。这就好比一个人在处理家务的过程中,将衣服放到洗衣机中自动洗涤后将大米放在电饭锅里,然后开始做菜。等菜做好了,饭熟了同时衣服也洗好了。

    需要注意的是:在应用程序中使用多线程不会增加 CPU 的数据处理能力。只有在多CPU 的计算机或者在网络计算体系结构下,将Java程序划分为多个并发执行线程后,同时启动多个线程运行,使不同的线程运行在基于不同处理器的Java虚拟机中,才能提高应用程序的执行效率。


  • 测试英文资料翻译(收集)

    2007-05-10 19:40:03

    原文:

    Testing During Rapid Change

    By Randall W. Rice, CSTE, CSQA

    As the old adage goes, "the one thing that remains constant is change." In software development, one of the weaknesses of the classic waterfall approach is that it assumes little or no change. The real world changes every day. Because of this, other development models such as Rapid Application Development (RAD) have been promoted to embrace change and use it to refine the software through planned iterations.

    While RAD helps software developers get early versions up and running very quickly, it causes testers many headaches. With each and every change is the opportunity to create new defects. The only way to find new defects is to perform a regression test which completely repeats a previous test and compares the results to find differences.

    Two questions come to mind: 1) "Is it possible to completely test during rapid change?", and 2) "Which strategies can be used to test rapidly changing software?"

    Is It Possible to Completely Test During Rapid Change?

    Actually, no. However, that's a trick question because in most cases it is not possible to completely test software even in stable environments1. The essence of this question might be to ask, "Is it possible to test effectively during rapid change?" Can we expect to make the best use of people and other resources to test software? Can we expect to find the expected number of defects?

    By observing projects using RAD, I have observed that a process for testing is essential to finding defects with any degree of effectiveness. Since the norm is to have no repeatable processes for most of what we do in building software, many people test in a RAD environment the same way they do in other environments - try a few cases here and there and look for problems.

    Which Strategies Can Be Used?

    It takes time to learn what works in each unique environment, but here are some general strategies that can be used for testing during rapid change:

    First of all, accept the fact that you do not have the luxury of performing a six week test on software that changes every day. This means you will need to define a testing process that can be performed quickly and efficiently.

    Perform a risk assessment. Knowing the level of risk is crucial, since you will need to prioritize your testing efforts to fit within a short window of time. The higher the risk, the higher the testing priority.

    Automate your testing. Capture/playback tools help you perform repeatable tests in an unattended session. Good tools require a significant investment in software and training, but it beats working 24 hours a day. Some things to consider before automating:

    You must have a working baseline version of the software to perform comparisons with future tests.

    You must define business requirements, test cases and test scenarios. The tool can only record and playback based on what actions the user performs.

    Data is a key consideration. How will you maintain the test data? For example, if you use a capture/playback tool to add a record, a reply of the scrīpt will get a "duplicate record on file" error.

    It takes time and a whole lot of spending money to integrate the tool into your organization. People need to be trained in how to use the tool. In addition, people need to be sold on the long-term benefits as compared to the short-term work required to setup the test scrīpts and test cases.

    Testing during rapid change is not impossible, but it does require rapid response, working smart, and keeping track of changes. Organizations that have been unwilling to consider new technologies such as automated testing tools will not be able to effectively test during rapid change. It is like building a house with hand tools - sure it can be done, eventually.

    Testing during rapid change also requires a new mindset of organization and processes. Tools alone are not the answer. There must be a process that can be executed quickly and makes the best use of people and time. It is arriving at the optimal combination of tools, processes, and people that is the challenge. To find out more about training and approaches for user acceptance testing, e-mail Randy Rice.

    [Back to list]

     

    译文:

     

    如何在快速变更的环境中开展测试工作

    作者:Randall W. Rice, CSTE, CSQA

                   翻译:connie                       

    如同一句古老的谚语说的,世界上唯一永恒的东西就是改变。在软件开发过程当中,传统的开发模式的一个缺点就是他能够呈现较少的改变甚至没有改变。真实世界每天都在改变。正因为此,其他的开发模式,如快速应用开发(RAD)已经提升到可以包含改变并在计划过程中使用改变来精炼开发。

    RAD模式帮助软件开发者更早的得到更新的版本并更快的运行程序的同时,他也给测试人员带来很多令人头疼的烦恼。因为每个改变都可能产生新的缺陷。找到新缺陷的唯一的方法就是使用回归测试,回归测试可以完整的重复先前的测试过程并与得到的结论进行比较,以便找到不同的地方。

    接下来就产生了2个问题:1)能否在快速变更的需求过程中进行彻底的测试?2)在测试快速变更的软件时需要采用什么策略?

    能否在快速变更的需求过程中进行彻底的测试?

    答案是,不能。这是一个恶作剧式的问题,因为在大多数情况下,即便是在稳定的环境当中,进行彻底的测试都是不可能的。我们可以将这个问题改成这样,“能否在快速多变的环境中进行有效的测试?”我们能否期望在测试软件时能够充分有效的利用人力及其他资源?我们能否期望在测试中找到预期数量的缺陷?

    通过观察使用RAD模式进行开发的项目,我发现要找到缺陷和得到任何程度的成效的本质的部分就是测试过程。由于在软件开发中,大多数我们使用的测试标准是规范是使用不重复的过程,所以很多人在测试RAD环境的软件时,采用的方法是平时我们在其他环境中使用的方法——在各个不同的地方使用较少的用例来查找问题和缺陷。

    我们可以采用什么样的策略呢?

    研究每个单独的环境当中需要采用的策略将会耗费过多的时间,这里有一些通用的策略,可以在快速改变的测试环境中使用。

      首先,你必须接受一个事实,那就是不可能花去6个星期的时间来测试一个天天都在改变的软件。这就意味着你需要限定测试过程使得他可以快速并有效的进行。

      做一个风险程度的估定。知道风险的标准是关键所在,因为你需要在一个较短的时间内来确定你要测试内容的优先级。风险越高,册是的优先级越高。

      自动化测试过程。回归测试工具帮助你在短时间内进行重复的测试工作。好的工具需要在软件及培训方面进行重要的投资,但他不能一天不间断的工作。有一些事情需要在自动测试之前考虑并提前做好。

      你必须拥有软件的工作标准文档来跟将来的测试进行比较。

      你必须定义需求,测试用例和测试环境。工具只能记录并回放基于操作者的操作行为的活动。

      数据维护是关键。你将怎样维护这些测试数据?例如,如果你使用回归测试工具来添加一个记录,脚本文件将得到“重复的记录”这样的错误。

      这将耗费相当多的时间以及金钱来使得这个工具融入到你们的公司。在此之前还必须对相关人员进行工具使用的培训。因此,必须使人们相信,跟目前工作当中需要建立测试脚本和测试用例这些琐碎的事情相比,这样做对于长期利益的发展是非常有价值的。

    在快速多变的环境中进行测试并不是不可能的,但是他需要能够做出快速的响应,灵敏的进行操作,并且与变更的轨迹保持一致。那些不愿意考虑新技术,如自动化测试的公司、组织将不能在快速多变的开发环境中开展有效的测试工作。这就好比是手工工具来盖一座房子,很显然他最终是无法成功的。

    在快速多变开发环境中同样也需要一个对于机构和过程的新观念。单独使用工具并不是最终的答案。必须有一个能快速执行并且充分有效的利用人力资源和时间的操作程序。要达到工具使用、操作程序以及人力的完美结合,必将是一个很大的挑战。如果你想得到用户验收测试相关的更多的培训及方法,可以通过以下的链接联系e-mail Randy Rice.

     

    第二篇

    Predicting the Future of Testing

    By Harry Robinson

    Summary: As the end of the year approaches, psychics and pundits alike will start making their predictions about what's in store for us in 2004 and beyond. In this week's column, industry veteran Harry Robinson gives us his forecast on the future of software testing.

    "It is tough to make predictions, especially about the future."—Yogi Berra

    Every December, tabloid fortune-tellers reveal what will happen in the coming year: “Madonna will fly on the space shuttle,” “the U.S. capital will move to Wichita, Kansas” and so forth. I’d like to jump on that bandwagon and make a few predictions of my own about where software testing is going in the next few years. And I can only hope my prophecies fare better than those of my esteemed tabloid colleagues!

    My main prediction is that software testing in the future will look very different than it does today. My reasoning is straightforward: Software testing largely stinks today. It comes into a project too late, contributes too little, and costs too much. If we care about the quality of our products and the health of our bottom lines, we need to re-think our approach to testing and quality.

    I will even go out on a limb and say that better methods, better training and a better appreciation for testers will revolutionize the software industry. To be specific, technologies such as executable specifications, model-based test generation, bug prevention, and system simulation will play important roles in the unfolding drama.

    Here are some scenes we will see in the industry over the next few years. In fact, some of these trends are starting to emerge already.

    Testers, Spec Writers, and Developers See Themselves as Partners

    Testers Help Spec Writers 

    Testers work with spec writers to review and understand the spec as it is being written. Early review and modeling exposes many consistency, completeness, and ambiguity bugs while they are still cheap to fix.

    Spec Writers Help Testers

    The test team creates models to generate tests of its applications' behavīors. Spec writers review the models to ensure that they adequately cover the feature set. The resulting test model becomes an "executable spec."

    Testers Help Developers

    Because the spec is clean and unambiguous, the developers understand better what their code should accomplish. Testers provide lightweight models that developers can run against their code before they officially hand it over for testing. 

    Developers Help Testers

    Proceeding on a feature-by-feature basis (to avoid the late-in-the-cycle, product-pounding approach of the past), developers and testers ensure that the code is easy to test with automated methods. Developer's code is now full of testability hooks, making errors more detectable.

    Testers Help Testers

    Tests are now modeled in a high-level language, so teams working on other features (and even other products) can help review and improve the test models. This creates a community of test generation experts.

    Methods and Metrics Get Better

    Bug Prevention and Early Detection

    Because the emphasis is now on the quality of the deliverable (and not on how many bugs you found along the way), prevention practices and detection tools, such as static analyzers, are mainstream.

    Simulation in Testing

    Simulation tools become common, making it easy to “fake” computer environments. Testing for exceptions and error paths now happens early in the development process. After the code has stabilized, real environments verify that the simulations were accurate.

    Just-in-time Test Cases

    Massive test case management systems are a thing of the past. Most tests are generated on the fly. Test cases are no longer stored away like rotting inventory, so it is easy to keep tests up to date. 

    Positive Metrics

    Misleading metrics, such as bug counts and test case counts, are dead. Useful metrics, such as spec coverage, model coverage, and code coverage, drive the projects.

    Fewer Testers, Better Testers

    Machines now perform much of the mundane work that testers previously did creating tests. Teams require fewer testers, and the testers who remain are more highly trained. Their work is more interesting to them because they are focused on bigger issues in their tests rather than slogging through grunt work.

    More Tests, Better Tests

    Testers can now generate millions of tests on any day, so the challenge becomes how to run the most useful tests first. Combinatorial tools allow testers to prioritize their testing and aim their test runs at the areas most likely to have significant bugs.

    Roles Will Change for Testers

    Distinctions Blur in Testing

    Work in the testing field blurs the line between people who only specialize in hands-on testing and those who only create test tools. A new specialty emerges that encompasses both "testers who like to break things via programs" and "programmers who like to create programs that break things" – people in newsgroups debate endlessly about what to call the new specialty.

    Boundaries Blur Between Testing and Development

    Testers and developers work in tandem to produce testable, high-quality code. Testers help iron out spec issues to make the developer's job easier, and developers create cleaner, more testable code to make the tester's job easier.

    Feedback from Customers Becomes Integrated with Testing

    The quality of deliverables becomes higher. Testers routinely conduct root cause analyses. We ask questions such as "How did we miss this bug?" and "How can we prevent this type of bug in the future?" We work to delight our customers.

    New Challenges Emerge

    The sophisticated and interconnected environment of the computing world guarantees that new problems such as security testing continue to keep testers running hard. This is OK—testers find these challenges invigorating.

    Testers Get Respect

    Testers are no longer called in at the last moment to "pound on the product." They provide a visible, vital, value-added service throughout the software development process. People realize that testing can be rewarding, interesting, and even fun. 

    Testing Gets Trendy

    Software testers start to hold their heads high. And, because breaking stuff is at least as much fun as building it, people begin to rotate between positions in development and testing. Everyone learns more about what makes good code.

    Adrenaline Junkies Move On

    The new process works so well that spec writers, developers, and testers end up having lives. This is disconcerting to some who were raised in the adrenaline-charged world of late-night, last-minute, firefighting sessions. These people gravitate to companies that remain out of control.

    Elvis Presley Is Discovered Working as a Software Tester

    The giveaway is his conference paper titled “Software Quality: It’s Now or Never”. 

    Prepare for the future today

    Whether or not my predictions come true, the future is on its way. Here are five ideas for how you can prepare to meet it:

    1. Get Actively Dissatisfied

    Don't accept the current state of testing. Look around and think, "What are we doing that makes no sense?"

    2. Push the Envelope

    Figure out how to test better and share that knowledge. Overall quality will improve only if everyone seeks to make the code they are working on the best it can be.

    3. Learn More about Testing

    At this moment, the industry is exploding with innovative software testing ideas. Go to conferences, join mailing lists, and scour the Web to see what is happening on the cutting edge of testing.

    4. Learn More about Development

    Take a programming class. Even if you don't plan to write significant amounts of code, view the class as a reconnaissance flight over bug territory.

    5. Change the World!

    As PC pioneer Alan Kay said: "The best way to predict the future is to invent it."

    For more info:

    On executable specs: “Executable Specifications: Creating Testable, Enforceable Designs”

    On model-based testing: “Intelligent Test Automation”

    On system simulation: “Software’s Invisible Users”

    About the Author Harry Robinson is Test Architect for Microsoft's Enterprise Management Division. In addition to his day job, he teaches classes on advanced software test automation and is a driving force behind Microsoft's model-based testing initiative. He has been at Microsoft for five years and has a Bachelors and Masters in Electrical Engineering. You can reach him at harryr@microsoft.com.

    测试未来的预测

     

     

       摘要:一年将尽,心理学家或者一些博学者们,又将对2004年或者更久的将来作出预测。在这次的周末专栏中,Harry Robinson将向我们讲述他对测试未来的预测。

     “预测是件很难的事情,尤其是预测未来” —Yogi Berra

       每年十二月,小报的“未来预测者”们会向大家切揭示即将到来的一年将要发生的事情:“麦丹娜将要乘坐航天飞机”,“美国将迁都 Wichita”,等等。我将加入这个潮流,对软件测试何去何从做一个我自己的预测。并且我希望,我的预测费用能够比我的那些值得尊敬的小报同事更高些。

       我的主要预测就是,将来的软件测试与现在的软件测试看起来很不一样。原因很直接:今天的软件测试很大程度上是臭名昭著的:软件测试参与到项目中的时间太晚、贡献太少、花费太高。如果我们关心我们产品的质量以及我们的账本底线的话,我们就需要重新思考测试和质量的方法。

       即使遭到一致反对,我也要说:更好的方法,对测试人员更好的培训、更好的欣赏将改革软件产业。具体地说,诸如可执行的说明书、基于模型的测试产生、BUG预防、系统模拟这些技术,将在这场演变过程中扮演重要的角色。

       下面就是我们在将来的几年里可能看到的情形。事实上,某些趋势已经开始了。

       测试人员,需求撰写人员和开发人员,都将看到自己是其中的一份子。

       测试人员帮助需求撰写人员

       测试人员与需求撰写人员共同工作,在需求完成以后,审查以及理解需求。早期的审查以及建模可以暴露很多关于一致性、完整性和模糊性的BUG,这个时候修补这些BUG付出的代价还十分小。

       需求撰写人员帮助测试人员

       测试小组建造模型,用于产生对其产品行为的测试。需求撰写人员审查模型,以确保他们充分覆盖了产品特征集。这样产生的测试模块将成为一个“可执行需求”。

       测试人员帮助开发人员

       因为需求清楚,毫不含糊,开发人员更好的理解了他们的代码将要完成什么。

       在正式的将代码提交做测试之前,测试人员提供给开发人员一些模型,以便开发人员可以在自己的代码中实现它们。

       开发人员帮助测试人员

       基于”特征对特征”这样的方式(防止以往的“后期才介入开发,一股脑找出产品问题”的方式),开发人员和测试人员共同保证代码易于实施自动测试.开发人员的代码中处处都是易测试性的开关,使得错误检测更加容易.

       测试人员帮助测试人员

       测试用一种高级语言来模拟,因此别的特征的测试小组(甚至别的产品的测试小组)可以复查和改进测试模型.这就形成了一个测试专家的共同体.

       方法日趋完善

       BUG预防和早期检测

       因为现在把重点放在产品交付的质量上来了(而不是在于找到了多少BUG), 预防实践和静态分析仪这样的检测工具将成为主流.

       仿真测试

       仿真工具变得很普遍,使得仿造计算机环境变得容易起来.在开发过程的早期就可以进行意外和错误流程的测试.代码稳定后,再用真实环境验证仿真是否准确无误.

       及时的测试用例

       庞大的测试用例管理系统将成为昔日的东西,大量的测试用例生成了却没有被使用.测试用例将不再像腐烂的存货一样被收藏起来,因此,让测试用例保持最新变得容易起来.

       积极的方法

       误导人的方法,比如计算BUG的数量、计算测试用例的数量,将不复存在.有用的方法,比如需求覆盖、模型覆盖、代码覆盖将驱动项目开发.

       更少更精的测试人员

       机器将代替测试人员做大部分他们以往创建测试所做的繁琐工作,测试小组需要比以往更少的测试人员,留下来的测试人员将是经过更多高度培训过的.他们所做的工作将更加有趣,因为在测试中他们将致力于更大的问题,而不是在抱怨中艰难地开展工作.

        更多更好的测试

        测试人员将可以在一天中进行成千上万的测试,所以,如何首先运行最有用的测试将成为一大挑战.相关的工具将允许测试人员为他们的测试区分优先级,以及将测试目标放在那些最易出现重大BUG的地方.

        测试人员的角色更换

        测试中界限模糊

        在测试领域工作使得专职测试的人员和专职创建测试工具的人员界限模糊,一个既是“通过程序破坏事物的测试员”又是”创建程序用于破坏事物的程序员”的专业出现了,――关于如何称呼这个新的专业,新闻圈内的人们还在进行着无休止的争论。

        测试与开发界限模糊

        测试人员与开发人员一前一后,共同创造可测试的、高质量的代码。测试人员帮助开发人员消除需求中的问题,使得开发人员的工作更易完成,同时,开发人员写出更清晰、可测性更高的代码,使得测试人员的工作更易完成。

        顾客反馈与测试合为一体

        交付的产品质量更高。测试人员进行根本原因的分析,我们会问比如“我们怎么会遗漏了这个BUG呢?”或者“我们将来如何防止这类BUG?”这些问题,我们的工作就是使顾客满意。

        新的挑战出现

        复杂和相互关联的计算机世界使得了测试安全这一类的新问题让测试人员不断努力工作,但这没关系――因为这些挑战使测试人员精力充沛。

        测试人员获得尊重

        测试人员将不再是在最后时刻才被叫来“对产品狂轰烂炸”,他们将在整个软件开发过程中提供一个可见的、重要的、增值的服务。人们意识到,测试是有益的、有趣的甚至富有乐趣。

        测试变得流行

        软件测试人员开始扬眉吐气,而且,由于破坏事物至少可以带来创建事物一样的乐趣,人们开始在开发和测试角色之间转换,所有的人将学到更多关于如何得到良好代码的知识。

        激情“吸毒者”继续存在

        新的过程运行得如此良好,使得需求撰写者,开发人员以及测试人员不再具有生命力,这就使得那些在激情掌控的世界被提升的人惶惶不可终日,那样的世界意味着工作到深夜、最后一刻测试才参与,以及如同交战开火般的会议。而这些人对于那些还没有受新的运行过程控制的公司来说还具有吸引力。

        Elvis Presley是一个软件测试员

        他的会议发放材料的标题就是:“软件质量:就是现在,否则永远不可能”

        今天就为将来准备

        不管我的预测是否成为现实,未来也会按照它自己的方式到来,下面就是如何准备面临未来的五个意见:

        1.积极地不满于现状

        不要接受测试的现状,四处看看,并且思考“我们在做些什么毫无意义的事情?”

        2.抛开人与人之间的封闭

        领悟如何更好的测试,并且分享这些知识。只有每一个人都试图使他所写的代码达到最佳状态时,整体质量才会改进。

        3.学习更多关于测试的东西

        如今,行业受软件测试的创新思维激发。用参加会议,加入邮件列表,网上冲浪,这些方式来解在测试前沿发生的一切。

        4.学习更多关于开发的东西

        参加一个编程学习班,即使你不打算编写大量的代码。将学习班当作是在BUG领土上的一次侦察飞行。

        5.挑战世界

        正如PC先驱Alan Kay所言:“预测未来的最好方式就是开创未来”

     

     

     

  • ERP测试(收集)

    2007-04-25 10:18:23

    ERP功能测试最佳实践:10个步骤确保ERP系统的可靠性

    来源:http://www.51testing.com/?action_viewnews_itemid_8360.html

    介绍

    企业资源规划(ERP)软件应用为企业提供管理大规模关键业务功能的能力,包括产品规划、部件采购、库存维护、和供应商的互动交流、提供客户服务,以及订单跟踪等。有些ERP解决方案还可能包括一些财政和人力资源方面的应用模块。尽管这些应用通常不会直接生成效益,但是它们能让企业以一种有效的、切合实际的方式使用现有的客户数据,帮助合理化企业的业务活动,为企业新的和当前的客户提供高质量的服务。

     

    ERP应用通常使用一个单一的、中央数据存储器来服务于所有的模块。因此,当这些应用产生了性能问题时,很有可能影响到使用同一存储器的所有业务领域。ERP和共享数据结构间的这种关系决定了它必须实施稳固的测试和监测程序才能确保企业关键应用的健康运行。 

     

     

    目录

    介绍

    步骤1:初始规划和收集需求

    步骤2:定义测试目标和选择合适的测试

    步骤3:定义目的,以满足测试目标

    步骤4:发现功能测试案例

    步骤5:文档记录关键的业务流程

    步骤6:开发模块化的测试组件

    步骤7:建立测试实验室

    步骤8:掌握和利用“冒烟测试”

    步骤9:执行回归测试

    步骤10:分析缺陷和创建测试报告

    Mercury QuickTest Professional

    ERP应用的功能测试

    更多信息

     

     

    由于业务流程交易跨越企业中的多个部门和区域,并且涉及ERP应用本身的多个模块,因此测试ERP应用应该采用一种整体的方式。当验证这些业务流程的功能时,关键在于捕获自动化测试解决方案中的业务流程测试,用于实现快速的测试重复。由于ERP应用跨越多个业务领域,存在不可避免的复杂性,因此,对每个ERP应用以及每个应用发布版本展开功能测试是非常重要的。

     

    每个ERP实施中都会面临的主要挑战之一就是确保应用在上线之前能满足所有的业务需求。关键在于测试和验证这些应用的运作情况是否符合设计要求。在数千个客户实施基础上,美科利已经编纂了一套最佳实践,来确保关键业务应用的功能。在下文中将详细描述10个关键步骤,使用这些步骤能为企业的关键ERP应用来设计和实施有效的功能测试程序。

     

    步骤1:初始规划和收集需求

    在任何一个环境中,功能测试的最重要阶段之一就是规划。对于ERP应用来说,这个步骤就更为重要了,因为其中涉及环境的复杂性以及推动这些应用实施的错综复杂的业务需求。不完善的规划可能导致失望的结果和不完整的测试覆盖面。经过深思熟虑的规划使您能避免一种“垃圾进,垃圾出(garbage in, garbage out)”的局面,使企业能衡量和最大化他们的测试工作,获取更多的投资回报(ROI)。

     

    许多公司购买预先打包的ERP解决方案,希望能实现业务管理各个领域的快速整合。然而,这种被称之为“vanilla”的ERP打包方案必须经过客户定制,才能部署到它所要支持的业务中去。从逻辑上来说,收集需求是规划阶段的起点,因为开发人员通常根据需求来定制ERP应用;测试人员使用它来测试系统和客户定制项目;而最终用户使用它进行用户接受测试和终结测试。通过提前仔细地定义需求,测试人员可以规划和管理那些更加注重业务需要的测试。接着,需求可以同测试和实际测试结果(被识别的缺陷)相结合,以全面覆盖所有的功能测试。

     

    步骤2:定义测试目的和选择合适的测试

    测试人员通过创建主要的测试目的,将决定所需的特定测试类型。 测试目的、项目计划和团队结构也将从这些测试目标中形成。当功能测试一个ERP实施时,有多种不同的验证测试需要执行:

     

    l          数据映射:由于许多ERP实施和后端大机系统紧密地集成在一起,因此测试ERP应用所显示的数据和在大机系统中被发现的数据之间的数据映射是十分关键的。很可能在大机系统中隐藏着一些陈旧的或无效的数据,这些数据会引起应用当中的问题。

    l          业务流程测试:应该使用测试来验证各种业务流程是否正确运作。由于工作流对强化业务规则来说是非常重要的,因此测试应该覆盖整个整合系统中的所有导航项目和直接功能。应用的业务规则和启动项必须通过全面地测试,确保所有规则能被正确地执行。

    l          权限控制系统ERP权限控制系统决定了用户可以使用哪些信息,用户在这些信息中可以看到哪些数据。当涉及到供应链和合作伙伴入口时,将会增加安全方面的考虑。从用户界面的角度出发测试安全性可以确保严格执行验证规则。数据驱动的测试使IT人员能使用具有不同登录凭证的相同脚本去验证安全规则。

    l          回归测试:每次部署一个“Code Drop”时,对位于这些程序的每个对象的功能进行回归测试是非常重要的。这其中包括测试它的存在、功能、值等等。“code drop”指的是任何一次新的ERP应用、补丁程序和/hot fix的发布。

     

    步骤3:定义目标,以满足测试目的

    当完成所有的目的定义,选择好测试类型,接下去就要创建一系列的阶段目标来实现所定义的目的。一套最普通的初始阶段目标包括:

    l          分析应用功能,并识别关键业务流程。在一个ERP应用中的关键业务流程实例就是“服务请求”的创建。

    l          建立“冒烟测试”,在开发周期中快速执行该类测试。冒烟测试不应深入被测试应用的功能,而是应该测试关键的业务功能。例如,用户是否能够创建可以和“Trouble Ticket”相应的活动。

    l          在每次正式发布形成后运行冒烟测试。

    l          着手创建自动化测试来降低手动运行冒烟测试的成本。

     

    实现了这些初始阶段目标之后,应该建立一套后续阶段目标。

    l          分析应用,展开功能识别,这将扩大测试范围,涵盖超过75%的总的应用功能数量。(取得100%的脚本自动化测试是非常困难的,因为自动化测试工具无法进行如可用性测试这样的事宜。)

    l          建立可持续运作的自动化测试,从而降低测试的工作量。

     

    步骤4:区分功能测试案例

    在区分测试案例时,关键要记住,重要的业务功能必须在应用中才能发挥作用。由于每个企业具有独特的业务需求,大多数企业即使完成了基本的或标准的实施,也无法上线。因为那些客户定制的区域必须经过彻底地测试才能保证上线时功能的稳定。ERP应用的主要优势之一就是能和现有的大机系统集成,来满足必要的业务需求。再者,因为这些集成不是标准(非客户定制)实施,它们必须经过严格地测试。

     

    最初,要避免用各种不同的方法去测试相同的功能。开发团队经常会强调一个应用应具有完美架构,可以灵活地让用户通过不同的方式来完成他们的日常任务。关键在于要经常部署测试案例,确保需求驱动、user-path的覆盖面。初期测试应该具有一些共有的特性:

     

    l          它们应该测试关键的业务功能。

    l          它们应该测试应用的关键业务流程。

    l          它们应该识别出经客户定制过的ERP应用的测试区域。

    l          应用功能应该稳定,不在主要开发范围之内。

    l          初期测试应该是冒烟测试的候选方式。

     

    一旦初期自动化测试创建完成,并成功地运行后,测试目标通常会改变,测试包会扩张。这种扩张通常表现为在功能成熟之后,增加更多的测试到测试包中。还可以在应用问题区域,如和大机系统的界面中增加测试,从而对该区域展开持续地检查。

     

    步骤5:文档记录关键的业务流程

    当记录那些将要成为测试脚本的业务流程时,收集所有和测试案例相关的信息是非常重要的。每个测试案例需要具备一份和被测业务区域相关的目的说明。测试案例的目的应该是和满足一个需求或一系列需求有关。关键之处还在于,要文档记录下逻辑步骤,在整个系统中执行这些步骤可以实现测试的需求。由于使用测试案例可以衡量业务流程的成功与否,因此,文档中应该指出,需要验证哪些内容才能保证测试的成功。

     

    除了为测试案例而展开的执行和验证操作外,还需要在测试案例中成功地执行适用的数据值。这种数据可以是来自数据库的主数据(master data)、或是能够凭空增加的用户创建输入数据、或者在脚本创建之前被置入数据库的准备数据。

     

    步骤6:开发模块化的测试组件

    创建模块化测试脚本是非常重要的。测试的模块化能够使开发人员创建单元测试unit test),在整个系统完成之前,测试ERP应用模块和模块的定制项目。接着,被用于单元测试的模块测试会移交给QA测试人员,他们会将模块测试和测试包结合在一起,来满足特定的测试目标。美科利提供一款最新的功能测试解决方案(即“业务流程测试”),它能帮助企业管理与业务组件和端到端流程验证有关的所有测试案例。

     

    步骤7:建立测试实验室

    建议建立一个QA测试实验室,作为ERP应用的测试和调优整体战略的一个组成部分。在一个独立的测试实验室中运行测试的主要优势在于,机器配置可以达到一种理想的状态,因而减少了由于机器配置不完善而引起的各类问题。此外,当模块定制完成之后,开发人员和测试人员可以在新代码发布之前,使用该实验室来运行单元测试。

     

    步骤8:掌握和利用“冒烟测试”

    在大多数ERP应用中,不完善的发布浪费了大量的测试工作。通常,当开发团队完成一个发布版本后将移交给测试团队,接着展开为期数天的测试过程。而测试结果往往是软件的发布版本存在重大的和根本的问题,不值得再进行深入地测试。不幸地是,当开发人员着手为该发布版本增加新的功能时,测试团队已经浪费了几天的时间去发现其薄弱之处。

     

    改变这种情况的捷径就是建立一种“冒烟测试”,它可以覆盖关键的业务功能。冒烟测试结合了手动测试和自动化测试,可以在短时间内被创建和运行(通常在1个小时之内)。运行冒烟测试可以为开发团队提供发布版本质量方面的快速信息反馈,帮助他们集中力量解决严重阻滞的问题,而不是一些新的特性。冒烟测试所利用的脚本可以从开发人员已经创建的单元测试中获取。

     

    步骤9:执行回归测试

    回归测试包应该覆盖关键的业务流程,应该在每个新的ERP应用版本发布时运行。回归测试不同于冒烟测试注重测试核心的业务功能,它能更加深入地测试应用的功能。正如前文所提到的,由供应商和任何定制所带来的应用更新都可能对应用功能和性能产生负面影响,必须在每次发布版本之后进行测试。

     

    步骤10:分析缺陷和创建测试报告

    ERP应用准备就绪的重要指标之一就是被识别的系统缺陷数量。在执行测试时,测试中产生的失误必须被跟踪和分析。一种稳固的功能测试解决方案应该能跟踪和汇报所有存在于业务流程中的缺陷。测试团队可以利用这类信息来衡量和管理缺陷是如何被优先级划分、修复、重复测试和关闭的。

     

    用全面的报告来完整记录所有的测试流程和结果,这也是非常重要的一项工作,可以使测试团队能正确分析测试结果,同时在未来测试中重复使用测试案例和脚本。

     

    美科利QuickTest Professional

    Mercury QuickTest Professional™提供功能和回归测试自动化方面的业界最佳解决方案――可覆盖每个主要的软件应用和环境,包括来自OraclePeopleSoftSAPSiebleERP应用。这种新款的自动化测试解决方案采用一种关键词驱动测试的理念,能够完全简化测试的创建和维护。有了美科利QuickTest Professional的关键词驱动方式,测试自动化专家就能通过一种和关键词视图(Keyword View)相互同步的、集成的脚本和纠错环境,进入到基层测试和目标领域中去。

     

    美科利QuickTest Professional同时满足了技术和非技术用户的需要。它使高质量应用部署的过程变得更为快捷和经济,同时风险也更小。它和Mercury Business Process Testing™(美科利业务流程测试)协同工作,使非技术型的对象专家(subject matter expert)也能参与到质量流程中。

     

    美科利业务流程测试使对象专家无需任何编程知识,就能创建、数据驱动和执行测试自动化。它降低了自动化测试维护的经常性费用,将测试自动化和文档记录两个流程合并为一。它使对象专家和业务分析人员可以根据业务流程测试框架中所定义的业务概念来衡量应用实施的质量。

     

    ERP应用的功能测试

    通过使用美科利QuickTest Professional和美科利业务流程测试,QA团队可以开发和利用统一的、可重复的测试流程,更快、更经济和更便捷地对ERP应用就绪情况提前作出决策。当初期功能测试计划完成之后,测试团队可以使用美科利解决方案来自动验证ERP应用中所有业务交易的完整性。美科利解决方案从业务流程的角度出发,展开ERP应用测试。这些解决方案通过执行分步操作――如更新库存信息,或从供应商处定购某部分商品,就像在实际生产操作中一样来测试ERP应用。

     

    当在测试创建阶段捕获了业务流程后,美科利QuickTest Professional和美科利业务流程测试将ERP业务相关信息与输入数据相互分离。测试人员可以根据选择列表,改变选择项和数据条目。使用同一数据对应用展开反复测试通常不会取得实际结果。要真实地验证应用的功能,测试人员需要不同的数据包来模拟多个用户的实际操作行为。美科利产品允许用户直接输入测试数据,或从一个数据库中导入数据,从而创建一个实际的、数据驱动的测试方案。通过这种方式,测试人员就能使用可变的输入数据,分析实际的ERP业务流程。

     

    打包的ERP应用通常具有很高的复杂性。创建一个简单的记录定制可能会对其它记录或整体性能产生无法预料的影响。当更新发布(甚至是简单的定制更新),都需要对所有业务流程展开全面彻底地测试,而不仅仅是测试变更所发生的区域。这样,测试人员就能衡量更新会对应用产生的影响,确保不会引起缺陷的产生。

     

    更多信息

    美科利解决方案使机构能采用稳固的功能测试程序来展开他们所有的ERP解决方案。解决方案让整个测试团队能够以最少的培训,创建成熟的测试系列;确保在整个环境、数据包和业务流程中应用功能的正确运作;并为开发人员提供全面记录和复制缺陷的能力――帮助团队尽快修复缺陷,跟上苛刻的生产进度。

     

    想获取更多有关美科利QuickTest Professional、美科利业务流程测试,或其它美科利服务和解决方案的信息,请联系当地的美科利销售代表或访问www.mercury.com

数据统计

  • 访问量: 6562
  • 日志数: 13
  • 图片数: 1
  • 建立时间: 2007-04-23
  • 更新时间: 2008-03-21

RSS订阅

Open Toolbar