LabVIEW论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

扫描二维码关注测量与测试世界
查看: 5282|回复: 7

[推荐文章] 一位测试工程师对测试的理解

[复制链接]
  • TA的每日心情
    开心
    2012-1-3 17:24
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    参加活动: 1

    组织活动: 0

    发表于 2008-1-20 19:36:42 | 显示全部楼层 |阅读模式
    LabVIEW FOR ARM正式预售
    一位测试工程师对测试的理解
    ) U; e" ~& i& k* m/ E* t  f编程大师说:“任何一个程序,无论它多么小,总存在着错误。”  O7 T- U. F. W; I9 j
    初学者不相信大师的话,他问:“如果一个程序小得只执行一个简单的功能,那会怎样?”9 T$ X1 z; t$ E* M4 l
    “这样的一个程序没有意义,”大师说,“但如果这样的程序存在的话,操作系统最后将失效,产生一个错误。”4 W, \  c: L, [" }
    但初学者不满足,他问:“如果操作系统不失效,那么会怎样?”
    / F8 w2 Y( d: s2 ?' e) T3 }2 L“没有不失效的操作系统,”大师说,“但如果这样的操作系统存在的话,硬件最后将失效,产生一个错误。”
    ! O2 h" Y' s7 d6 r1 O- f4 A+ o初学者仍不满足,再问:“如果硬件不失效,那么会怎样?”
    , a- T7 \% D- z6 F7 X大师长叹一声道:“没有不失效的硬件。但如果这样的硬件存在的话,用户就会想让那个程序做一件不同的事,这件事也是一个错误。”+ R- u: [& U4 U# m
    没有错误的程序世间难求。[James 1999]( Q/ b; D! i7 ]* }$ J- I3 S3 _! N2 Y

    + t7 d: _% v1 S错误是一种严重的程序缺陷。测试的目的是为了发现尽可能多的缺陷,并期望通过改错来把缺陷统统消灭,以期提高软件的质量。但关于测试与改错实在没有什么高明的方法值得大书特书,也不能表现出程序员的聪明才智。相反地,它们带来了更多的牢骚与痛苦。因此在教学和开发实践中,测试与改错总是被当作万般无奈的工作踢到角落里。% I  Q- M2 Y+ m9 C
    医生可以把他的错误埋葬在地下了事,但程序员不能。我们必须要学会测试与改错,并且把测试与改错工作做好。) G% }( t* t! ]8 z/ G* _
    % c" Y3 ]5 {+ M4 F: T
    7.1 对测试的理解+ Q/ u  `3 J$ x3 f; a
    测试的道理并不深奥,计算机专业人员都应该明白。但就是这么简单的事,计算机专业的博士们也未必都已经理解。
    ' D' ^' L: i* l8 O/ ^  m. ]9 j有一天,一位比我聪明,编程比我快,学习能力比我强的计算机专业博士生恭恭敬敬地请我坐好,并且史无前例地削了苹果请我吃,为的是向我请教“软件工程”问题。你必定以为这位仁兄好学之极。非也,我和他同事三年来从未探讨过“软件工程”问题。只因为他明天要去应聘,参加面试,生怕被人问倒,就央我当晚为他恶补一把“软件工程”。他还特地问我“什么是白盒测试和黑盒测试?应该由谁来执行?”(有公司曾经这样面试应聘者)当我解释完测试的道理时,他叹了一口气说:“这些玩意儿我读大学十年来都没搞过,怎么能讲得出道理来。唉,就去碰碰运气吧。”我有“兔死狐悲”的感觉。我们这一群博士生三年来尽干些自欺欺人的事,到毕业时学问既不深也不博。个个意志消沉,老气横秋。长此以往,总有一天招聘会的大门前将贴出标语“博士与狗不得入内”。
      t6 t" s& Y# K: `. D$ }4 U+ \$ N以下是关于测试的几个重要观念。
    3 F* `" _: W" V( o& |) h  i/ g; L/ B
    7.1.1 测试的目的
    5 W. l2 b: R( m4 {- K测试的目的是为了发现尽可能多的缺陷。& t& U. L# i! F% C
    这里缺陷是一种泛称,它可以指功能的错误,也可以指性能低下,易用性差等等。测试总是先假设程序中存在缺陷,再通过执行程序来发现并最终改正缺陷。理解测试的目的是个很重要的意识问题。如果说测试的目的是为了说明程序中没有缺陷,那么测试人员就会向这个目标靠拢,因而下意识地选用一些不易暴露错误的测试示例。这样的测试是虚假的。% Y* A; @  s( M' n. d; f& P
    目前高校的科技成果鉴定会普遍存在类似的虚假现象。我在读硕士时就亲身经历过这样的事。我们的项目是研究集成电路制造过程中的成品率问题。当时国内大多数工厂的集成电路成品率只有百分之几,我编写的示例程序可以将集成电路的成品率优化到98%。示例效果是如此的好,以致一位评委(某厂的总工程师)不无讽刺地说:“采用你们的成果,我们可要发大财了。”这个项目就轻易地通过了鉴定,并且不久后获得了电子工业部科技进步二等奖。这就象在考试时通过作弊取得了好成绩而被表扬。我那时尚且纯真,羞愧之余,不禁对高校科研成果的水平和真实性大失所望(现在我已不再失望,因为很少抱希望)。
      Z/ o; W- B9 N8 B9 [9 I, W一个成功的测试示例在于发现了至今尚未发现的缺陷。
    / G4 z2 x: j% i! ?0 w" [测试并不仅是个技术问题,更是个职业道德问题。# r; [; [6 ?$ q* J# Z- F7 {& p! h

    + y* e9 V7 S# i$ E7.1.2 测试的心理要求
    3 t& Z# ~* ]. F测试主要是由人而不是由机器执行,这就不免与心理因素相关。为了测试的真实性,对测试的心理要求是“无情”。这似乎太残酷了。开发人员不能很好地测试自己的程序是因为做不到无情。而测试人员如果做到了无情却会引起开发人员的愤怒,遭人白眼。/ _4 Y3 f& r# A
    尽管已经明白了测试的目的是为了发现尽可能多的缺陷,但当测试人员真的发现了一堆缺陷时,却不可乐颠颠地跑去恭喜那个倒霉的开发者,否则会打架的。  ?) `3 U5 h0 v2 _$ m

    6 w1 f: I1 ~& J  t7.1.3 测试的真理- p  ?$ M6 `' B( l9 V: {
    测试只能证明缺陷存在,而不能证明缺陷不存在。
    - I6 I/ _5 W2 ^! j这个真理告诉我们,对于一个复杂的系统而言,无论采取什么样的测试手段都不能证明缺陷已经不复存在。“彻底地测试”只是一种理想。在实践中,测试要考虑时间、费用等限制,不允许无休止地测试。
    - n# m" V$ H" l) u* B0 x9 I# V$ o( m; ~+ c! K
    7.1.4 测试与质量的关系
    3 H: t% s1 b5 F4 c1 A测试有助于提高软件的质量,但是提高软件的质量不能依赖于测试。测试与质量的关系很象在考试中“检查”与“成绩”的关系。1 Z# f" y# t& h7 o
    学习好的学生,在考试时通过认真检查能减少因疏忽而造成的答题错误,从而“提高”了考试成绩(取得他本来就该得的好成绩)。
    " d% d4 Q( q( }/ W& g# C/ ~' R而学习差的学生,他原本就不会做题目,无论检查多么细心,也不能提高成绩。; `$ G6 |' f' _5 g
    所以说,软件的高质量是设计出来的,而不是靠测试修补出来的。
    . a9 L( N  d: F& I$ h+ \; t4 d5 t! k2 N& D; v8 }8 n, K
    7.2 测试人员的选择
    2 w6 y$ _* m5 H* f" f# p' F/ K* d测试需要开发人员参与吗?' K) J- S7 y0 Q- L4 e/ C7 I, E
    测试需要独立的测试小组吗?& u! U& v% X" T1 t
    测试需要用户参与吗?
    9 i7 L: a+ y* A* q' ^让我们先看一看Microsoft公司关于测试的经验教训,再回答上述问题。
    ( c* M+ R3 _, X7 ]
    * p" Y( O* `& A8 P! j7.2.1 Microsoft公司的经验教训" M1 Y( q; j  V5 g- Q( n
    在80年代初期,Microsoft公司的许多软件产品出现了“Bug”。比如,在1981年与IBM PC机一起推出的BASIC软件,用户在用“.1”(或者其他数字)除以10时,就会出错。在FORTRAN软件中也存在破坏数据的“Bug”。由此激起了许多采用Microsoft操作系统的PC厂商的极大不满,而且很多个人用户也纷纷投诉。# M  X5 p( Y2 }$ {( i: ^
    Microsoft公司的经理们发觉很有必要引进更好的内部测试与质量控制方法。但是遭到很多程序设计师甚至一些高级经理的坚决反对,他们固执地认为在高校学生、秘书或者外界合作人士的协助下,开发人员可以自己测试产品。在1984年推出Mac机的Multiplan(电子表格软件)之前,Microsoft曾特地请Arthur Anderson咨询公司进行测试。但是外界公司一般没有能力执行全面的软件测试。结果,一种相当厉害的破环数据的“Bug”迫使Microsoft公司为它的2万多名用户免费提供更新版本,代价是每个版本10美元,一共化了20万美元,可谓损失惨重。3 O0 k+ p8 f/ y+ [) m, P7 P9 w
    痛定思痛后,Microsoft公司的经理们得出一个结论:如果再不成立独立的测试部门,软件产品就不可能达到更高的质量标准。IBM和其它有着成功的软件开发历史的公司便是效法的榜样。但Microsoft公司并不照搬IBM的经验,而是有选择地采用了一些看起来比较先进的方法,如独立的测试小组,自动测试以及为关键性的构件进行代码复查等。Microsoft公司的一位开发部门主管戴夫·穆尔回忆说:“我们清楚不能再让开发部门自己测试了。我们需要有一个单独的小组来设计测试,运行测试,并把测试信息反馈给开发部门。这是一个伟大的转折点。”
    9 m3 F4 \, C* i; h1 ?: a, E但是有了独立的测试小组后,并不等于万事大吉了。自从Microsoft公司在1984年与1986年之间扩大了测试小组后,开发人员开始“变懒”了。他们把代码扔在一边等着测试,忘了唯有开发人员自己才能阻止错误的发生、防患于未来。此时,Microsoft公司历史上第二次大灾难降临了。原定于1986年7月发行的Mac机的Word 3.0,千呼万唤方于1987年2月问世。这套软件竟然有700多处错误,有的错误可以破坏数据甚至摧毁程序。一下子就使Microsoft名声扫地。公司不得不为用户免费提供升级版本,费用超过了100万美元。[Cusumano 1995]
    $ W" V. l0 b: a. v  j6 E& X+ u7 e2 E$ i* ?, d7 D+ O
    7.2.2 测试人员的分工
    ' @. W* {! _0 U" n$ Q; _. b从Microsoft公司的教训中可知,公司内部对产品的测试(称为α测试),需要开发人员与独立的测试小组共同参与。开发人员应该执行“白盒”测试,即测试源程序的逻辑结构以及实现细节(“白盒”是指看得见程序的内部结构)。而独立测试小组应该执行“黑盒”测试,即按照规格说明来测试程序是否符合要求(“黑盒”是指看不见程序的内部结构)。比如在测试一个模块时,“白盒”测试方法要对模块的所有代码进行单步跟踪测试。而“黑盒”测试方法只需测试模块的接口是否符合要求,它关心程序的外部表现而不是内部的实现细节。
    4 y% _6 L4 z0 N# T小型的软件公司可能没有条件设立独立的测试小组,也有可能测试小组人员不多而忙不过来。这时,可以让开发小组的成员相互测试对方的程序。5 V4 I- F0 h! B9 O: }
    这里要强调的是,α测试不能依赖于开发人员或者测试小组中的任意一方,必须是双方共同参与。“白盒测试”必须由开发者自己执行,因为别的测试人员无法了解到程序的内部实现细节。而“黑盒测试”必须由独立的测试人员执行,因为开发者难以做到客观、公正。开发者在测试自己的程序时存在一些弊病:+ @, H' {6 w/ W' J6 A4 @
    (1)开发者对自己的程序印象深刻,并总以为是正确的(自信是应该的)。倘若在设计时就存在理解错误,或因不良的编程习惯而流下隐患,那么他本人很难发现这类错误。
    6 h$ x9 f2 D% w- h(2)开发者对程序的功能、接口十分熟悉,他自己几乎不可能因为使用不当而引发错误,这与大众用户的情况不太相似,所以自己测试程序难以具备典型性。
    ; C' o* |+ S% Q2 Z$ R, m( r+ e5 {(3)程序设计有如艺术设计,开发者总是喜欢欣赏程序的成功之处,而不愿看到失败之处。让开发者去做“蓄意破坏”的测试,就象杀自己的孩子一样难以接受。即便开发者非常诚实,但“珍爱程序”的心理让他在测试时不知不觉地带入了虚假成份。' @' o" G8 k, j* \& g+ O
    软件产品正式发行前,在公司外部邀请一些用户对产品进行测试,称为β测试。β测试的涉及面最广,最能反映用户的真实愿望,但花费的时间最长,不好控制。一般地,软件公司与β测试人员之间有一种互利的协议。即β测试人员无偿地为软件公司作测试,定期递交测试报告,提出批评与建议。而软件公司将向β测试人员免费赠送或者以很大的优惠价格发行软件的正式版本。
    ) I5 X% s/ V) S2 n. h1 ?& H
    9 ]& e- e9 B. H' s$ H0 G7 D7.3 测试的主要内容与常用方法
    / k, T  _6 v2 r5 m, ^% B2 n有一次文学考试,问高尔基是哪国人。一考生乐极而吟:“尔基啊尔基,你若不姓高,我怎知你是中国人。”这是一种瞎猜法。如果这种方法用于软件测试,人累死也测不出什么结果来。
    5 q3 r; M3 x3 n4 K4 ?不论是对软件的模块还是整个系统,总有共同的内容要测试,如正确性测试,容错性测试,性能与效率测试,易用性测试,文档测试等。“白盒测试”是指开发人员从程序内部对上述内容进行测试,而“黑盒测试”是指独立的测试人员从程序外部对上述内容进行测试。很多软件工程教材讲述了各种各样的测试方法并例举了不少示例[Pressman 1997] [Sommerville 1992] [杨文龙 1997]。本节简明地讲述常用的测试方法及其道理。; K" Z7 R2 o: T: f1 q  l
    ' m8 e/ {/ T9 B2 y
    7.3.1 正确性测试
    9 T# u+ o/ w* E0 W0 @正确性测试又称功能测试,它检查软件的功能是否符合规格说明。由于正确性是软件最重要的质量因素,所以其测试也最重要。
    7 I8 C3 J. u6 q) L2 H基本的方法是构造一些合理输入,检查是否得到期望的输出。这是一种枚举方法。倘若枚举空间是无限的,那可惨了,还不如回家种土豆有盼头。测试人员一定要设法减少枚举的次数,否则没好日子过。关键在于寻找等价区间,因为在等价区间中,只需用任意值测试一次即可。等价区间的概念可表述如下:
    9 K9 x/ h: M0 F' c; v% b( @" V记(A, B)是命题f(x) 的一个等价区间,在(A, B)中任意取x1进行测试。9 M  ~# k2 L8 N* r1 o$ B# d2 G% L
    如果f (x1) 错误,那么f (x) 在整个(A, B)区间都将出错。
    ' b6 w* b) ~) Z3 X) ~0 h如果f (x1) 正确,那么f (x) 在整个(A, B)区间都将正确。& K7 Q8 g7 w( n$ m* i9 J
    上述测试方法称为等价测试,来源于人们的直觉与经验,可令测试事半功倍。' k2 c( M1 n% i% m( T$ q
    还有一种有效的测试方法是边界值测试。即采用定义域或者等价区间的边界值进行测试。因为程序员容易疏忽边界情况,程序也“喜欢”在边界值处出错。
    & i& k) j+ K/ o2 A7 V例如测试的一段程序。凭直觉等价区间应是(0, 1)和(1, +∞)。可取x=0.5以及x=2.0进行等价测试。再取 x=0以及x=1进行边界值测试。7 D" Y& s3 j: p0 _
    有一些复杂的程序,我们难以凭直觉与经验找到等价区间和边界值,这时枚举测试就相当有难度。# X' |1 Q7 S/ @4 i5 q- K' x1 S
    在用“白盒测试”方式进行正确性测试时,有个额外的好处:如果测试发现了错误,测试者(开发人员)马上就能修改错误。越早改正错误,付出的代价就越低。所以大多数软件公司要求程序员在写完程序时,马上执行基于单步跟踪的“白盒测试”。0 X4 |9 g( `( N2 p
    $ ~" D% I# q% ~7 i
    7.3.2 容错性测试7 _* `# ]& ~; m" C8 Z- L+ p" [5 t
    容错性测试是检查软件在异常条件下的行为。容错性好的软件能确保系统不发生无法意料的事故。
    ; D$ {7 c7 S: N2 u8 Z# x: ~2 n比较温柔的容错性测试通常构造一些不合理的输入来引诱软件出错,例如:7 e5 l& m/ m2 s2 n4 L2 \( v0 z$ b
    (1)输入错误的数据类型,如“猴”年“马”月。
    - W3 ~8 J3 K8 h5 m(2)输入定义域之外的数值,上海人常说的“十三点”也算一种。
    9 D' w2 q% ]: j( D粗暴一些的容错性测试俗称“大猩猩”测试,除了不能拳打脚踢嘴咬,什么招术都可以使出来。这里我举不出例子,因为我没有对程序粗暴过,并且这辈子也不打算学会粗暴。
    , g' |/ e/ p8 b! I+ F+ Z" T, a7 G1 F3 h- j
    7.3.3 性能与效率测试
    * k7 F5 @% G9 G( h9 c性能与效率测试主要是测试软件的运行速度和对资源的利用率。有时人们关心测试的“绝对值”,如数据送输速率是每秒多少比特。有时人们关心测试的“相对值”,如某个软件比另一个软件快多少倍。
    # E4 K6 W& N" ^( |" ~' R6 m在获取测试的“绝对值”时,我们要充分考虑并记录运行环境对测试的影响。例如计算机主频,总线结构和外部设备都可能影响软件的运行速度;若与多个计算机共享资源,软件运行可能慢得像蜗牛爬行。
    3 R( f5 c( d/ S( X在获取测试的“相对值”时,我们要确保被测试的几个软件运行于完全一致的环境中。硬件环境的一致性比较容易做到(用同一台计算机即可)。但软件环境的因素较多,除了操作系统,程序设计语言和编译系统对软件的性能也会产生较大的影响。如果是比较几个算法的性能,就要求编程语言和编译器也完全一致。
    $ v- N  A2 u% \! r5 Q8 b1 q性能与效率测试中很重要的一项是极限测试,因为很多软件系统会在极限测试中崩溃。例如,连续不停地向服务器发请求,测试服务器是否会陷入死锁状态不能自拔;给程序输入特别大的数据,看看它是否吃得消。
    ; `0 _4 M$ {: h  P0 [! Q+ [9 J! n5 T% t- H
    7.3.4 易用性测试
    3 C% e' [. W7 o' D0 z6 D* [易用性测试没有一个量化的指标,主观性较强。调查表明,当用户不理解软件中的某个特性时,大多数人首先会向同事、朋友请教。要是再不起作用,就向产品支持部门打电话。只有30%的用户会查阅用户手册。[Cusumano 1995]
    / |3 d# X& D8 l) a6 w* s一般认为,如果用户不翻阅手册就能使用软件,那么表明这个软件具有较好的易用性。) P/ ~1 T9 k' M

    2 C( J% w- {9 E* H1 L7.3.5 文档测试
    5 g0 v2 Q( R) x, F- w; A文档测试主要检查文档的正确性、完备性和可理解性。好多人甚至不知道文档是软件的一个组成部分。
    8 Q9 v4 C- p/ e/ X. n0 s5 i正确性是指不要把软件的功能和操作写错,也不允许文档内容前后矛盾。$ G: f" D& K% `0 S, }
    完备性是指文档不可以“虎头蛇尾”,更不许漏掉关键内容。有些学生在证明数学题时,喜欢用“显然”两字蒙混过关。文档中很多内容对开发者可能是“显然”的,但对用户而言不见得都是“显然”的。7 U; e& N5 X0 o) z+ c6 z1 m
    文档不可以写成散文、诗歌或者侦探、言情小说,要让大众用户看得懂,能理解。# P" @3 j- |) B. Q& M
    很多程序员能编写出好程序,却写不出清晰的文档。不要说自己以前语文学得差,现在已没救了,找借口不是办法。没有人天生就能写出好程序,都是练出来的。同理,若第一次写不好文档,就多写几次文档,慢慢地就会写出好文档来。我上大学前不会说普通话,不会写作文,现在我极能说会写,当个秘书或书记已绰绰有余。
    , s. [# M. [& J, g0 T5 \' N! J' S- q6 U( }7 I2 ]
    7.4 改 错
    + `* G0 h: c9 U3 n7 G在软件测试时如果发现了错误,必须请程序员改错,否则测试工作就白干了。
    * t: n' S1 G! S3 V9 C) l" p改错是个大悲大喜的过程,一天之内可以让人在悲伤的低谷和喜悦的颠峰之间跌荡起伏。如果改过上万个程序错误,那么少男少女们不必经历失恋的挫折也能变得成熟起来。; Z0 I, d, f/ @4 v
    我从大三开始真正接受改错的磨练,已记不清楚多少次汗流浃背、湿透板凳。改不了错误时,恨不得撞墙。改了错误时,比女孩子朝我笑笑还开心。% v! P& t4 M1 N8 |- W0 B
    在做本科毕业设计时,一天夜里,一哥们流窜到我的实验室,哈不拢嘴地对我嚷嚷:“你知道什么叫茅塞顿开吗?”: F0 w; Y" g( \1 q
    我象白痴似的摇摇头。2 V; X" v7 C' B6 ?, A% Q4 A
    他说:“今天我化了十几个小时没能干掉一个错误,刚才我去了厕所五分钟,一切都解决了。”1 @! s) ^. i& x" f& E, y
    他还用那没洗过的手拉我,一定要请我吃“肉夹馍”。那得意劲儿仿佛同时谈了两个女朋友。- Q8 F/ A, G& C2 v( i4 B/ [$ o
    在本节,我要替程序员们总结关于改错的几点思想方法:1 O3 C) t8 U; P" b) ^
    (1)要有勇气。东北有个林场工人,工作勤奋,一人能干几个人的活。前三十年是伐树劳模,受到周总理的接见。忽有一天醒悟过来,觉得自己太对不起森林,决心补救错误。后三十年成了植树劳模,受到朱总理的接见。此大勇也。
    / p- g8 O, b& \程序中的错误只有开发者自己才能找出并改掉。如果因畏惧而拖延,会让你终日心情不定,食无味,睡不香。所以长痛不如短痛,要集中精力对付错误。
    0 S% {6 H" @# P8 Z7 y" z(2)不可蛮干。都说急中生智,我不信。我认为大多数人着急了就会蛮干,早把“智”丢到脑后。不仅人如此,动物也如此。
    2 i6 j" I1 Y- ^; V' X# l+ B我们经常看到,蜜蜂或者苍蝇想从玻璃窗中飞出,它们会顶着玻璃折腾几个小时,却不晓得从旁边轻轻松松地飞走。我原以为蜜蜂和苍蝇长得太小,视野有限,以致看不见近在咫尺的逃生之窗,所以只好蛮干。可是有一天夜里,有只麻雀飞进我的房间,它的逃生方式竟然与蜜蜂一模一样。我用灯光照着那扇打开的窗户为其引路,并向它打手势,对它说话,均无济于事。它是到天亮后才飞走的,这一宿我俩都没息好。; j; A( R! z: g' Q
    (3)找出错误的根源。有人问阿凡提:“我肚子痛,应该用什么药?”阿凡提说:“应该用眼药水,因为你眼睛不好,吃了脏东西才肚子痛。”
    % W& R5 e( i2 i; F我们应该运用归纳、推理等方法尽早确定错误的根源。
    4 a/ n3 A4 t/ Y! \# }6 b, c3 \(4)在改错之后一定要马上进行重新测试,以免引入新的错误。有人在马路上捡到钱包后得意忘形,不料自己却被汽车撞倒。改了一个程序错误固然是喜事,但要防止乐极生悲。更加严格的要求是:不论原有程序是否绝对正确,只要对此程序作过改动(哪怕是微不足道的),都要进行重新测试。( @/ M  w$ G2 m/ N  ~! x
    + i$ F0 i; U+ p3 X
    7.5 小 结
    5 t+ A, v# V5 a) P* T优秀的程序员敢于声称自己的代码没有错误,这种自信让人羡慕不已。一个错误自身也许很微小,但是程序存在错误这件事很严重。能否做好测试与改错工作,思想认识和办事态度是最关键的。& g& e+ f6 t0 A$ _5 R4 b8 p
    程序员应该把测试当成份内之事,不要依赖于外界的“黑盒测试”。“黑盒测试”就象通过提问题来判断一个人是否是个疯子,但无法知道他为什么成了疯子。让程序员对所有的代码执行单步跟踪测试听起来很费时间,但习惯了你就感觉不到有什么不方便。单步跟踪测试将使你以后的日子更轻松
    IDAQ-USB-6009数据采集卡
  • TA的每日心情
    开心
    2013-2-10 00:00
  • 签到天数: 349 天

    [LV.8]以坛为家I

    参加活动: 4

    组织活动: 1

    发表于 2008-1-20 21:54:46 | 显示全部楼层
    在线课堂
    呵呵,顶个,是林锐的《软件工程思想》里面的,挺有意思的...
  • TA的每日心情
    开心
    2017-5-4 14:57
  • 签到天数: 33 天

    [LV.5]常住居民I

    参加活动: 0

    组织活动: 6

    发表于 2008-1-20 22:16:25 | 显示全部楼层
    Ding,不错的文章 :9P

    该用户从未签到

    参加活动: 0

    组织活动: 5

    发表于 2008-1-21 16:38:44 | 显示全部楼层
    这位好像还是我公司的前辈,呵呵
  • TA的每日心情
    开心
    2012-1-3 17:24
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    参加活动: 1

    组织活动: 0

     楼主| 发表于 2008-1-21 19:37:40 | 显示全部楼层

    HP3070硬件故障排除方法 1

    HP3070硬件故障排除方法  
    5 _. P! @, G6 E1 I2 p1 d7 {! `( T% @2 p) [

    + y0 F6 D  L3 c# \( P1 @                                                                           ——Trimed By HavenGu ; }" N; u+ |0 N9 B. X/ s! F

      ?. H% B' \6 i; q3 a( Jacky_Shu’s talk on 5/12/06 )
    - }: z4 P: y  J- }% ~. r5 G% }8 M3 S& \; M# }5 H& S8 F
      
    0 j' c1 S% q+ i. ~  G5 e# B; Q* F. i: R" O" m# Q
      
    - ]# f4 K% t' U6 `! F+ G! P& E  ^3 G" h. V* o
                         Unswitch Power      à    PC主机,显示器 , o5 B. r) p- Y. b) Y$ d1 U' x

      N  I0 `& a: m1 p5 LPDU
    7 H1 ^( q; T9 M9 b; C) f( W4 j! F' r. n8 I7 n( t
                                            fans
    ' |& y  \, H7 R$ r9 t( j6 _- R$ d/ q6 {- \3 B( }$ i
                        Switch Power    à       testhead
    " m+ a9 i  l9 M
    . |1 ]' S! z, q9 Y9 \- o                                          6624A
    2 Q- k& L9 j, I- N/ Z& @8 U: j' |2 b) [
    3 d7 U( B- c/ A- O  / k; f1 U( P" g7 T' Q9 S8 M- y) g# b

    / `5 m( X2 _2 _( s, C: c                                          
    ' V+ o; s4 p. U. c. H% w8 o5 L& l8 m: t$ L( y
                                  鼠标,键盘  à     HP/IBM 两键鼠
    - K+ K/ D/ K( A# b. h- e* D* F# I. s& q6 p7 q& M, W: r4 [* r+ Z
    CDB Errors
    4 Z6 G: X- j% |% ]# g' Y
    ( T: v, V7 f: r) L/ c( h7 c                               网络    à    单用户模式
    5 n- J( y6 W, ^2 z4 _& z8 x# H# h* E8 f+ k9 }/ ~  f# a  D
      
    ' }4 Z; k: G# n
    ) @/ g" C0 M* [3 \2 _7 h, ?+ p  E进入单用户模式: 1 d( y6 M! ?, k& w1 G

    . ^8 I9 e+ m3 U; A2 R5 \( E        1.   重启PC     (  按[ tab] 可更改分辨率 )
    7 a( O/ X: @4 `! L; S0 d: h+ D7 V# D: ^3 O/ z; X! u( i
    2.      按 [Esc]  
    ) I4 U* N- U/ k! D) \  G
    0 ~, @$ z1 u& b) D% Z6 z! G3.      键入命令 “ search “ 回车; % c3 u9 K/ M7 N4 F- u5 Q, M& z

    ' A- A2 h  D* X4.      > boot P0 或>boot P1  (硬盘启动)
    7 C) P' Y1 S8 U9 n/ U% S: S
    / h& `3 c" c' R1 Y* c0 c2 x. S( t5.      ISL(Yes/No/I…)> Y ,回车 $ I6 w! o5 C+ k  Q( ~( ~
    ! F4 B; B5 m0 n, P" m( q6 |; U
    6.      SINGEL MODE
    4 h9 L1 e+ D( s# B3 D; X3 J3 s
    6 F3 @* |7 s: v' \8 D+ ?        #hpux –lm            à 进入单用户调试模式 4 w/ j/ N3 F+ @9 H0 X
    - e7 t4 N# y5 }
            #hpux –is              à正常启动系统
    * @" f; {8 Z& }* ]2 y* N
    ; @3 A2 T/ e: y. J  # j% q3 }7 _0 P4 L. U% d' J

    3 f% O7 P- V6 ]% B# k( L  ! l7 O8 [+ v5 W6 A7 Q" `* A

      e% D# q  N) D0 Z7 N% q  n9 i  
    # \* h6 b! B9 ]* J' C
    ( w/ ~' ~$ q/ n2 ~6 |2 x  3 V* o2 v# b/ a- S
    ) _5 c$ u# d) r5 U9 l% m( J
      1 U, P4 Z- W0 m: {4 S" `, d: S  x; i- z) ^

      K/ g/ o% |8 W" l: V  
    ; W0 x2 z$ A$ l( M: O% L
    * G3 d$ \+ G' l# v7 d+ y& o* E  + k2 e( p6 ^: g$ c' y

    $ @' E, L$ I; a7 d2 ?) {  
    ; E2 O1 C: u: c2 D9 p, D8 J4 u$ L9 u) S; m: Y" f. m8 l9 z5 A
      8 ]; b+ i5 v) Q- U! \9 f" M) i
    ( A6 g, ?1 s0 U5 P
      
    ( B# o6 h2 a, j) ^
    + _. A7 r4 ]5 L' e
    / w5 ]0 q+ y: t6 u0 a8 @/ i0 x. I% i+ y3 L7 S
    (1) System card time out ( C+ \& l' L8 a7 L# t% W- J
    ( e, h& `( J2 p- H9 a" N! P
    Boot Step:
    + l. T, N: l' V: Q7 ?7 z- C6 L4 t( _5 c8 E2 R% Q

    ! F( J: \1 d2 J' _/ k  
    0 J' p! {( m: E: X: P! T3 y4 v$ ^* U' @
      
    9 R1 t! w. K( h6 H: w' a  LAN1 card    à    System card    à    Control XT LAN   
    0 [8 N2 N. `; U9 \, z& j3 t2 g" J7 W4 Y+ X4 _2 w
                                                                
    8 n7 j, R0 s/ j' H3 V) ~4 p& P  R. v* d0 i! W- r5 B
      " M  f6 W! d0 |3 F
    # a5 ?1 r0 [2 p$ M* d
                        1.检查网络连接                                               1. LAN  cable (光纤) ! }: O- y* \. b) n0 ]
    - M! I1 O- i$ R" X4 E
                         cd /etc                                                                                                
    $ V& w. U5 [2 F5 \; [  g9 ]
    2 N; [5 a, Z5 q( y3 V4 o                        ping 10.3.112.1                                            2. 50ohm终端电阻 % D% E3 \/ y( J
    * |! P% h2 v9 d+ q1 i5 [) X
                                                                                                                                    & ]0 d7 t% \# v% f$ ]- E* S
    . M, V- e7 E5 s& S9 @& w4 r
                                                            1.  有无电源?(LED指示) 1 r6 W5 u6 j" _) n% q  f$ Z

    ( ~" E$ X+ v- ?0 Z                                                        2.  地址匹配? 3 d+ t' l* h; V

    . A9 |% Z6 s7 E+ `                                                             * 卡上标签
    6 L- J1 D6 z0 C% b% _% c: n" O8 c& c! e4 H! v' B, v
                                                                 * /etc/.enable中(用text edit 打开) ) U, c' j8 w' R' H, Q
    ' |$ e5 c. V7 d) O) ], K; \" M
                                                                    testhead 1 + M$ T3 T& |, d* ^: j, D
    & D" ~6 z1 z$ O- B' M2 c6 B6 e
                                                                    HA:xx….xx
    0 q' A( [4 C& `) v& Z- H) e" r; f
    2 t( l9 }% w; }                                                       3.  检查网络连接
    ( {. _+ x: k+ D; H$ ~' K+ T9 b! ]9 G* i0 J9 X
                                                                  cd /etc
    # P, _9 R6 c5 E' \7 K, f. n' B8 z6 T7 ], V7 h/ O6 L$ S* `0 F
                                                                  ping 10.3.112.2
    ( k4 }' _4 R% j7 Y2 w! N: a# y
    8 M6 h6 b) @% _# R9 [                     & V6 r- M6 x. S5 \& i8 G& U

    ( d; q* D; E- g7 `4 A8 t                    ① HUB à  GPIB       ; w; G  u( V! t

    ! v" D" s4 p. }  j                    ②  LAN cable & High Speed Link Cable  (光纤& 排线)
    ( i. X) M$ i0 ~0 w7 ~5 K9 [' l# ]
    3 U/ h. ]! t" k; ?  
    7 v/ {# F; Q8 d" H5 p7 M
    ' l1 T, C8 w) t) t+ M* e  
    8 c' J, b0 M. z; {( A( x/ Z! D0 B" C8 v& Z, @! ^7 b5 f
    (2) 实际config与设置config不匹配 4 P& C5 w: s5 @4 ^

    ; V* h4 T( ~& K3 ]6 M* V                 1.  EX000-69540        -66540       à   6M
    ; {8 r$ z  l5 `5 a! `# m& Q! U6 V9 B. N6 C" Y
                   -69550        -69550    à   6M, 12M, 20M 2 ]  O$ S) z; ?% d2 X3 x2 |
    6 f) n* R8 y1 b; s. i
                         设置文件: /etc/.enable ' |! m6 r4 [; W- V* }
      ]0 x5 z9 M6 _5 o. T) n& ?$ u
                      - g, H# d0 K5 L; I; S" M! _+ k6 M  [

    ! M6 W/ e- O. d8 R- w  T: o                 2.  config下 NO Card      * ' e+ `2 j: F0 \
    9 F4 C1 y2 F3 U. J$ V1 N
                                       NO Card      * ; U$ b* u: G/ N8 ~+ S; E
    1 a4 m# x7 h1 ~/ Z: w
                                       …… 7 T0 x1 j' a, V* K

    , x- f  ?; r9 W- s* G# P                                   NO Card      *
    2 X  J5 ?9 s; ~4 Q; i
      J  v4 p# ~! h' |; \' b                    即系统找不到PIN Card等,可判断为MPU损坏。 & F+ P' X+ Y2 l

    7 \( p7 d. I* g' W3 O' ^, u' N  
    5 m  W% K. c2 o  k3 u
    - N0 J7 w  C$ m  |4 s                3.  config下   ASRU Card 忽隐忽现,判断为Mother Board Problem. 7 b# b0 i  [8 j+ j1 M' Y. J

    & S. D( {% a! v( e& T" d/ {(1)    螺丝是否上紧
    # P$ v$ S  |  p  V. t! T1 g. D0 `- t# f7 w
    (2)    与ASRU卡connector接触不良,需清理
    - M, N: ?4 f5 h1 q5 H% B  g( w5 M. W* U* K- y4 A
    (3)    Mother Board 损坏,需更换
    " z( x* K9 U; |4 b7 g( C6 N5 W* e( z& W' e
      - l  q4 x0 C* E0 v
    1 U' r7 ?& @1 l' s) C* W
      , R" ?- h, z2 U  `2 j7 k/ n% X7 }+ ?
    7 V6 C* y' l$ `" s' ]
      
    3 c& n# H9 j( Y+ I* ?' e3 @: }6 y6 f: k: E! P+ c" f7 ]
      4 r! e8 J4 f3 R5 X9 G7 O

    " c& E$ y% ^( B  `7 M  5 S( @1 }- Z* X. R) _/ |* n& B

    7 Q4 G2 Q: W( z3 x(3) Control Card Self-handshack ( g5 V6 S5 x- W! V0 e( n3 N, d' P

    + w# |" \2 o/ `- e                       检查Control Card 设置 $ F! Q6 l$ \6 g# @. i+ g! a
    ) L9 V9 C4 u8 h% m: S
      
    / Z% l! m6 X, s/ P
    1 ^0 i( h% Y+ \                             检查High Speed Link Cable ' T. h  d9 X! x" K( C# |& q

    ( B1 v# i% H6 \% r  ' a) g1 X0 \6 z

    * w4 V' I0 O: b9 p1 s8 c4 M                             检查LAN Cable " k3 Q; ^- r" @+ R' o  m

    3 V' m5 t( _& ?" I  
    ' G5 }% l" r# o. l% ~! k1 d; r% Y. `; l4 y7 v
                        ·Control Card 地址设置: ( i4 s7 V, U7 k

    5 l* A- D3 q0 e' `" H                      /etc/bootptab中(用text edit打开) ( V  H, n5 l9 Q* i
    ) T% I: P/ V) `# t. Q
                                Module 0,1,2,3
    3 A# V2 U# a2 i6 L# P
    : ?1 n& Y/ C2 N                            HA:xx…xx

    该用户从未签到

    升级  10.36%

    参加活动: 0

    组织活动: 0

    发表于 2008-1-23 14:22:59 | 显示全部楼层
    学习中,谢谢楼主!!!
  • TA的每日心情
    擦汗
    2011-5-4 08:54
  • 签到天数: 44 天

    [LV.5]常住居民I

    升级  65.28%

    参加活动: 0

    组织活动: 0

    发表于 2011-1-30 09:27:04 | 显示全部楼层
    说的很好啊

    该用户从未签到

    升级  1.59%

    参加活动: 0

    组织活动: 0

    发表于 2014-11-20 15:57:25 | 显示全部楼层
    很好  很好  很好 很好 很好  很好  很好 很好
    您需要登录后才可以回帖 登录 | 注册  

    本版积分规则

    QQ|小黑屋|无图浏览|手机版|网站地图|测量与测试世界 ( 沪ICP备06029130号-1 )

    GMT+8, 2017-9-27 03:49 , Processed in 0.216557 second(s), 45 queries , Gzip On, Xcache On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表