LabVIEW论坛

 找回密码
 注册

扫一扫,访问微社区

查看: 5507|回复: 7

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

[复制链接]
发表于 2008-1-20 19:36:42 | 显示全部楼层 |阅读模式
USB-6009数据采集卡首发
一位测试工程师对测试的理解$ j: i8 g& e0 K+ i! [, Y. |
编程大师说:“任何一个程序,无论它多么小,总存在着错误。”
9 [8 V7 B9 y  p' u  A' n8 l初学者不相信大师的话,他问:“如果一个程序小得只执行一个简单的功能,那会怎样?”
$ w0 l! r% \/ o# e“这样的一个程序没有意义,”大师说,“但如果这样的程序存在的话,操作系统最后将失效,产生一个错误。”
, a! Q4 U( w+ I8 g; Z% G但初学者不满足,他问:“如果操作系统不失效,那么会怎样?”
, @) ?9 ^3 `' X3 F4 s9 P, ]“没有不失效的操作系统,”大师说,“但如果这样的操作系统存在的话,硬件最后将失效,产生一个错误。”
9 T* s$ U2 }1 x$ X0 e4 `初学者仍不满足,再问:“如果硬件不失效,那么会怎样?”/ p3 `5 r! f9 G, z6 T3 |  X
大师长叹一声道:“没有不失效的硬件。但如果这样的硬件存在的话,用户就会想让那个程序做一件不同的事,这件事也是一个错误。”  z0 O7 w  K6 p/ C& s2 K, V
没有错误的程序世间难求。[James 1999]
( j6 B; u6 W- r& b  u( ?0 h: D, X7 Q' p- U' _
错误是一种严重的程序缺陷。测试的目的是为了发现尽可能多的缺陷,并期望通过改错来把缺陷统统消灭,以期提高软件的质量。但关于测试与改错实在没有什么高明的方法值得大书特书,也不能表现出程序员的聪明才智。相反地,它们带来了更多的牢骚与痛苦。因此在教学和开发实践中,测试与改错总是被当作万般无奈的工作踢到角落里。
7 t6 Y  W" e# F* x, Q0 F医生可以把他的错误埋葬在地下了事,但程序员不能。我们必须要学会测试与改错,并且把测试与改错工作做好。, P* H; W& g" e3 T& D3 a+ g' }

4 k( P, ^/ v  }( `8 j& s7.1 对测试的理解
" H0 c5 h9 D- j7 ^8 W/ m测试的道理并不深奥,计算机专业人员都应该明白。但就是这么简单的事,计算机专业的博士们也未必都已经理解。. R6 f6 a+ a8 j) M  ~  `9 ^5 Y
有一天,一位比我聪明,编程比我快,学习能力比我强的计算机专业博士生恭恭敬敬地请我坐好,并且史无前例地削了苹果请我吃,为的是向我请教“软件工程”问题。你必定以为这位仁兄好学之极。非也,我和他同事三年来从未探讨过“软件工程”问题。只因为他明天要去应聘,参加面试,生怕被人问倒,就央我当晚为他恶补一把“软件工程”。他还特地问我“什么是白盒测试和黑盒测试?应该由谁来执行?”(有公司曾经这样面试应聘者)当我解释完测试的道理时,他叹了一口气说:“这些玩意儿我读大学十年来都没搞过,怎么能讲得出道理来。唉,就去碰碰运气吧。”我有“兔死狐悲”的感觉。我们这一群博士生三年来尽干些自欺欺人的事,到毕业时学问既不深也不博。个个意志消沉,老气横秋。长此以往,总有一天招聘会的大门前将贴出标语“博士与狗不得入内”。' S: U! `8 D2 K2 h
以下是关于测试的几个重要观念。
4 A- A3 _3 t3 `' G( A( L* S4 l6 U6 C4 d: z8 \( ?
7.1.1 测试的目的( Z  ]* D; w1 T1 _  b7 a. J( }! c
测试的目的是为了发现尽可能多的缺陷。8 x) I8 S6 [  _! k1 r/ k
这里缺陷是一种泛称,它可以指功能的错误,也可以指性能低下,易用性差等等。测试总是先假设程序中存在缺陷,再通过执行程序来发现并最终改正缺陷。理解测试的目的是个很重要的意识问题。如果说测试的目的是为了说明程序中没有缺陷,那么测试人员就会向这个目标靠拢,因而下意识地选用一些不易暴露错误的测试示例。这样的测试是虚假的。
1 {; p- d; v0 u4 r# r+ R! R目前高校的科技成果鉴定会普遍存在类似的虚假现象。我在读硕士时就亲身经历过这样的事。我们的项目是研究集成电路制造过程中的成品率问题。当时国内大多数工厂的集成电路成品率只有百分之几,我编写的示例程序可以将集成电路的成品率优化到98%。示例效果是如此的好,以致一位评委(某厂的总工程师)不无讽刺地说:“采用你们的成果,我们可要发大财了。”这个项目就轻易地通过了鉴定,并且不久后获得了电子工业部科技进步二等奖。这就象在考试时通过作弊取得了好成绩而被表扬。我那时尚且纯真,羞愧之余,不禁对高校科研成果的水平和真实性大失所望(现在我已不再失望,因为很少抱希望)。" W* \) j4 a( j$ D) k" _
一个成功的测试示例在于发现了至今尚未发现的缺陷。
0 B5 W6 c$ m5 w; O6 p# u* o6 [测试并不仅是个技术问题,更是个职业道德问题。! o$ c- K- I) ?# s
7 p  a3 I" }3 O5 u/ `
7.1.2 测试的心理要求5 Q8 y* N/ ]5 ]) W) V
测试主要是由人而不是由机器执行,这就不免与心理因素相关。为了测试的真实性,对测试的心理要求是“无情”。这似乎太残酷了。开发人员不能很好地测试自己的程序是因为做不到无情。而测试人员如果做到了无情却会引起开发人员的愤怒,遭人白眼。
+ ~! ?2 I6 P# K9 G尽管已经明白了测试的目的是为了发现尽可能多的缺陷,但当测试人员真的发现了一堆缺陷时,却不可乐颠颠地跑去恭喜那个倒霉的开发者,否则会打架的。
1 r' ^* D: X+ }+ H2 u- w
! i1 {( v. b- l  ]$ Q7.1.3 测试的真理& K# C2 N: {, o. |1 Y  W' `! L
测试只能证明缺陷存在,而不能证明缺陷不存在。
4 R( b4 S/ J! Y! a# a4 x) b  W' M0 t这个真理告诉我们,对于一个复杂的系统而言,无论采取什么样的测试手段都不能证明缺陷已经不复存在。“彻底地测试”只是一种理想。在实践中,测试要考虑时间、费用等限制,不允许无休止地测试。
  P% b7 d, b( G9 c: x2 u& l1 |% f6 i7 Y4 X' s/ _
7.1.4 测试与质量的关系
- I/ }; q" @* |( Z" x- {6 |测试有助于提高软件的质量,但是提高软件的质量不能依赖于测试。测试与质量的关系很象在考试中“检查”与“成绩”的关系。
# Z" f. B- y: f) X; x' D0 j2 a学习好的学生,在考试时通过认真检查能减少因疏忽而造成的答题错误,从而“提高”了考试成绩(取得他本来就该得的好成绩)。
' \5 l5 a: ]  W, [1 q: a9 g而学习差的学生,他原本就不会做题目,无论检查多么细心,也不能提高成绩。! b$ d( ~5 E5 L/ S/ W, m0 y- P
所以说,软件的高质量是设计出来的,而不是靠测试修补出来的。; K: U$ w, f5 G, a" p8 h7 L% E6 k! d3 D

  e, b3 _+ t& q6 q+ q5 b7.2 测试人员的选择9 \" g6 A( z. o& C) g" a  T5 L
测试需要开发人员参与吗?
6 m% I6 s& z6 I- [4 f$ q# }# [测试需要独立的测试小组吗?
) r& l( W: e, B2 ?8 ]测试需要用户参与吗?7 w; Z# F. G# ]# Y- ]2 x# v3 F
让我们先看一看Microsoft公司关于测试的经验教训,再回答上述问题。* A3 e' K0 j' `; H. H# m

6 }% q" f' d6 U+ h2 f# u) i7.2.1 Microsoft公司的经验教训% ?+ v3 ^2 G4 O" n
在80年代初期,Microsoft公司的许多软件产品出现了“Bug”。比如,在1981年与IBM PC机一起推出的BASIC软件,用户在用“.1”(或者其他数字)除以10时,就会出错。在FORTRAN软件中也存在破坏数据的“Bug”。由此激起了许多采用Microsoft操作系统的PC厂商的极大不满,而且很多个人用户也纷纷投诉。# ]! J' A( u; U
Microsoft公司的经理们发觉很有必要引进更好的内部测试与质量控制方法。但是遭到很多程序设计师甚至一些高级经理的坚决反对,他们固执地认为在高校学生、秘书或者外界合作人士的协助下,开发人员可以自己测试产品。在1984年推出Mac机的Multiplan(电子表格软件)之前,Microsoft曾特地请Arthur Anderson咨询公司进行测试。但是外界公司一般没有能力执行全面的软件测试。结果,一种相当厉害的破环数据的“Bug”迫使Microsoft公司为它的2万多名用户免费提供更新版本,代价是每个版本10美元,一共化了20万美元,可谓损失惨重。8 f6 H1 J% z, V9 V$ J% q
痛定思痛后,Microsoft公司的经理们得出一个结论:如果再不成立独立的测试部门,软件产品就不可能达到更高的质量标准。IBM和其它有着成功的软件开发历史的公司便是效法的榜样。但Microsoft公司并不照搬IBM的经验,而是有选择地采用了一些看起来比较先进的方法,如独立的测试小组,自动测试以及为关键性的构件进行代码复查等。Microsoft公司的一位开发部门主管戴夫·穆尔回忆说:“我们清楚不能再让开发部门自己测试了。我们需要有一个单独的小组来设计测试,运行测试,并把测试信息反馈给开发部门。这是一个伟大的转折点。”/ j  J+ l3 I  p' o0 Q8 {: Y
但是有了独立的测试小组后,并不等于万事大吉了。自从Microsoft公司在1984年与1986年之间扩大了测试小组后,开发人员开始“变懒”了。他们把代码扔在一边等着测试,忘了唯有开发人员自己才能阻止错误的发生、防患于未来。此时,Microsoft公司历史上第二次大灾难降临了。原定于1986年7月发行的Mac机的Word 3.0,千呼万唤方于1987年2月问世。这套软件竟然有700多处错误,有的错误可以破坏数据甚至摧毁程序。一下子就使Microsoft名声扫地。公司不得不为用户免费提供升级版本,费用超过了100万美元。[Cusumano 1995]
0 k6 [3 U9 k0 L9 \
3 Y  \) e, M$ D; t$ \: Y2 d7.2.2 测试人员的分工
9 r/ Z) X- a4 [' z& @  b从Microsoft公司的教训中可知,公司内部对产品的测试(称为α测试),需要开发人员与独立的测试小组共同参与。开发人员应该执行“白盒”测试,即测试源程序的逻辑结构以及实现细节(“白盒”是指看得见程序的内部结构)。而独立测试小组应该执行“黑盒”测试,即按照规格说明来测试程序是否符合要求(“黑盒”是指看不见程序的内部结构)。比如在测试一个模块时,“白盒”测试方法要对模块的所有代码进行单步跟踪测试。而“黑盒”测试方法只需测试模块的接口是否符合要求,它关心程序的外部表现而不是内部的实现细节。' {) m3 ?6 T3 W! X8 B- B
小型的软件公司可能没有条件设立独立的测试小组,也有可能测试小组人员不多而忙不过来。这时,可以让开发小组的成员相互测试对方的程序。* @* T# E+ |' E. w, V0 p
这里要强调的是,α测试不能依赖于开发人员或者测试小组中的任意一方,必须是双方共同参与。“白盒测试”必须由开发者自己执行,因为别的测试人员无法了解到程序的内部实现细节。而“黑盒测试”必须由独立的测试人员执行,因为开发者难以做到客观、公正。开发者在测试自己的程序时存在一些弊病:
! t+ y. v5 x# P) F(1)开发者对自己的程序印象深刻,并总以为是正确的(自信是应该的)。倘若在设计时就存在理解错误,或因不良的编程习惯而流下隐患,那么他本人很难发现这类错误。
# B: s3 t# y* J; e- p& `3 G2 C5 e(2)开发者对程序的功能、接口十分熟悉,他自己几乎不可能因为使用不当而引发错误,这与大众用户的情况不太相似,所以自己测试程序难以具备典型性。
' X) C; O: @5 ?" t- t(3)程序设计有如艺术设计,开发者总是喜欢欣赏程序的成功之处,而不愿看到失败之处。让开发者去做“蓄意破坏”的测试,就象杀自己的孩子一样难以接受。即便开发者非常诚实,但“珍爱程序”的心理让他在测试时不知不觉地带入了虚假成份。
1 ?+ I( Z  J; ]) e软件产品正式发行前,在公司外部邀请一些用户对产品进行测试,称为β测试。β测试的涉及面最广,最能反映用户的真实愿望,但花费的时间最长,不好控制。一般地,软件公司与β测试人员之间有一种互利的协议。即β测试人员无偿地为软件公司作测试,定期递交测试报告,提出批评与建议。而软件公司将向β测试人员免费赠送或者以很大的优惠价格发行软件的正式版本。
% Q6 }' S6 k7 r9 R- I4 p5 Q- m7 I; {- |; {% W. ]
7.3 测试的主要内容与常用方法- c2 m! k4 m5 d
有一次文学考试,问高尔基是哪国人。一考生乐极而吟:“尔基啊尔基,你若不姓高,我怎知你是中国人。”这是一种瞎猜法。如果这种方法用于软件测试,人累死也测不出什么结果来。
  |- `4 l7 I4 O不论是对软件的模块还是整个系统,总有共同的内容要测试,如正确性测试,容错性测试,性能与效率测试,易用性测试,文档测试等。“白盒测试”是指开发人员从程序内部对上述内容进行测试,而“黑盒测试”是指独立的测试人员从程序外部对上述内容进行测试。很多软件工程教材讲述了各种各样的测试方法并例举了不少示例[Pressman 1997] [Sommerville 1992] [杨文龙 1997]。本节简明地讲述常用的测试方法及其道理。! N  f) s  ~4 W3 i

4 m; ~8 F9 k0 x' P8 R1 M( R7.3.1 正确性测试! a/ d& G9 n2 Y/ L
正确性测试又称功能测试,它检查软件的功能是否符合规格说明。由于正确性是软件最重要的质量因素,所以其测试也最重要。
6 I$ b4 p9 k& R基本的方法是构造一些合理输入,检查是否得到期望的输出。这是一种枚举方法。倘若枚举空间是无限的,那可惨了,还不如回家种土豆有盼头。测试人员一定要设法减少枚举的次数,否则没好日子过。关键在于寻找等价区间,因为在等价区间中,只需用任意值测试一次即可。等价区间的概念可表述如下:
/ Z, _4 H& P" m4 \# b( h  A8 H记(A, B)是命题f(x) 的一个等价区间,在(A, B)中任意取x1进行测试。
) Q0 v4 C; Z3 Y9 F如果f (x1) 错误,那么f (x) 在整个(A, B)区间都将出错。; N: o6 q/ x5 n- w
如果f (x1) 正确,那么f (x) 在整个(A, B)区间都将正确。$ X2 @7 @3 V4 }
上述测试方法称为等价测试,来源于人们的直觉与经验,可令测试事半功倍。+ O. ~+ {$ h, M, D  V+ r0 F
还有一种有效的测试方法是边界值测试。即采用定义域或者等价区间的边界值进行测试。因为程序员容易疏忽边界情况,程序也“喜欢”在边界值处出错。* n) i. B5 f& N$ `
例如测试的一段程序。凭直觉等价区间应是(0, 1)和(1, +∞)。可取x=0.5以及x=2.0进行等价测试。再取 x=0以及x=1进行边界值测试。
# u4 F$ x; ~$ y' l4 |( C有一些复杂的程序,我们难以凭直觉与经验找到等价区间和边界值,这时枚举测试就相当有难度。
9 y& \* p" ]) y) y+ L/ }0 ]在用“白盒测试”方式进行正确性测试时,有个额外的好处:如果测试发现了错误,测试者(开发人员)马上就能修改错误。越早改正错误,付出的代价就越低。所以大多数软件公司要求程序员在写完程序时,马上执行基于单步跟踪的“白盒测试”。- N0 y7 P8 D# i" P: r

: H, I5 K. K) O! f1 d# C7.3.2 容错性测试$ k% H6 u; {1 \  @5 T( P! D3 p
容错性测试是检查软件在异常条件下的行为。容错性好的软件能确保系统不发生无法意料的事故。6 w: Z& o+ w9 u6 Q8 P1 w* e( C
比较温柔的容错性测试通常构造一些不合理的输入来引诱软件出错,例如:$ i6 Q, m2 {/ o  |# a5 f
(1)输入错误的数据类型,如“猴”年“马”月。8 X1 S& ^6 U* B  p
(2)输入定义域之外的数值,上海人常说的“十三点”也算一种。
6 y% c5 Q' }( }, N粗暴一些的容错性测试俗称“大猩猩”测试,除了不能拳打脚踢嘴咬,什么招术都可以使出来。这里我举不出例子,因为我没有对程序粗暴过,并且这辈子也不打算学会粗暴。
. G# ^: w" |1 g" l. Y6 Z8 Q  o9 K3 ?4 G  m0 B7 J9 i
7.3.3 性能与效率测试
  ^. u5 i; E2 L8 ~& J性能与效率测试主要是测试软件的运行速度和对资源的利用率。有时人们关心测试的“绝对值”,如数据送输速率是每秒多少比特。有时人们关心测试的“相对值”,如某个软件比另一个软件快多少倍。
( V  u% r) T( ^3 z" d4 y在获取测试的“绝对值”时,我们要充分考虑并记录运行环境对测试的影响。例如计算机主频,总线结构和外部设备都可能影响软件的运行速度;若与多个计算机共享资源,软件运行可能慢得像蜗牛爬行。
5 W2 k+ a/ o0 @7 \6 |; `在获取测试的“相对值”时,我们要确保被测试的几个软件运行于完全一致的环境中。硬件环境的一致性比较容易做到(用同一台计算机即可)。但软件环境的因素较多,除了操作系统,程序设计语言和编译系统对软件的性能也会产生较大的影响。如果是比较几个算法的性能,就要求编程语言和编译器也完全一致。" ~- [5 ~% x5 c* _  U1 |! b
性能与效率测试中很重要的一项是极限测试,因为很多软件系统会在极限测试中崩溃。例如,连续不停地向服务器发请求,测试服务器是否会陷入死锁状态不能自拔;给程序输入特别大的数据,看看它是否吃得消。; Q* ^# i# L3 Z, {! z

9 A+ i9 d+ }2 [7.3.4 易用性测试9 f8 j# {/ e  D( V
易用性测试没有一个量化的指标,主观性较强。调查表明,当用户不理解软件中的某个特性时,大多数人首先会向同事、朋友请教。要是再不起作用,就向产品支持部门打电话。只有30%的用户会查阅用户手册。[Cusumano 1995]1 y4 |, f/ N8 z/ d% P1 e' m
一般认为,如果用户不翻阅手册就能使用软件,那么表明这个软件具有较好的易用性。
' O) F" X) I1 ~1 J
$ ?. K0 J0 `. r. }% [9 {4 |7.3.5 文档测试
% N6 T( O7 \# \* C文档测试主要检查文档的正确性、完备性和可理解性。好多人甚至不知道文档是软件的一个组成部分。
- f. l* ~. ]' P# v. v正确性是指不要把软件的功能和操作写错,也不允许文档内容前后矛盾。
$ M8 c: T9 j% M/ J完备性是指文档不可以“虎头蛇尾”,更不许漏掉关键内容。有些学生在证明数学题时,喜欢用“显然”两字蒙混过关。文档中很多内容对开发者可能是“显然”的,但对用户而言不见得都是“显然”的。
9 _; I2 i2 `( M7 m3 W文档不可以写成散文、诗歌或者侦探、言情小说,要让大众用户看得懂,能理解。
3 b" z1 C  B' u& ]9 M( Q; C很多程序员能编写出好程序,却写不出清晰的文档。不要说自己以前语文学得差,现在已没救了,找借口不是办法。没有人天生就能写出好程序,都是练出来的。同理,若第一次写不好文档,就多写几次文档,慢慢地就会写出好文档来。我上大学前不会说普通话,不会写作文,现在我极能说会写,当个秘书或书记已绰绰有余。4 s7 A; ~9 T" p

6 [+ ~! {8 l0 J8 S' p- h. S5 e7.4 改 错
: K) n3 _$ s6 t: U- E) B9 w# [" h在软件测试时如果发现了错误,必须请程序员改错,否则测试工作就白干了。
& V( l6 E: K5 V# P% M5 W改错是个大悲大喜的过程,一天之内可以让人在悲伤的低谷和喜悦的颠峰之间跌荡起伏。如果改过上万个程序错误,那么少男少女们不必经历失恋的挫折也能变得成熟起来。
$ r& y7 B# D- n- ^, Z* J: l我从大三开始真正接受改错的磨练,已记不清楚多少次汗流浃背、湿透板凳。改不了错误时,恨不得撞墙。改了错误时,比女孩子朝我笑笑还开心。
! u8 Y% C: h9 C/ H6 G4 p在做本科毕业设计时,一天夜里,一哥们流窜到我的实验室,哈不拢嘴地对我嚷嚷:“你知道什么叫茅塞顿开吗?”& `! r' L/ l: t8 Y$ [0 ?8 H
我象白痴似的摇摇头。- ]8 D- d3 b9 G% a& a# }1 r
他说:“今天我化了十几个小时没能干掉一个错误,刚才我去了厕所五分钟,一切都解决了。”# m) i7 w; B3 Z# i
他还用那没洗过的手拉我,一定要请我吃“肉夹馍”。那得意劲儿仿佛同时谈了两个女朋友。
% E! T4 l5 l: g' {3 X( c$ n/ P# C在本节,我要替程序员们总结关于改错的几点思想方法:6 [. t8 h, }+ X2 R
(1)要有勇气。东北有个林场工人,工作勤奋,一人能干几个人的活。前三十年是伐树劳模,受到周总理的接见。忽有一天醒悟过来,觉得自己太对不起森林,决心补救错误。后三十年成了植树劳模,受到朱总理的接见。此大勇也。+ f" P2 Q5 `& V5 x3 Q) n& s
程序中的错误只有开发者自己才能找出并改掉。如果因畏惧而拖延,会让你终日心情不定,食无味,睡不香。所以长痛不如短痛,要集中精力对付错误。
; F9 g5 b3 Z# B(2)不可蛮干。都说急中生智,我不信。我认为大多数人着急了就会蛮干,早把“智”丢到脑后。不仅人如此,动物也如此。
( F$ ]5 R) p% B; m我们经常看到,蜜蜂或者苍蝇想从玻璃窗中飞出,它们会顶着玻璃折腾几个小时,却不晓得从旁边轻轻松松地飞走。我原以为蜜蜂和苍蝇长得太小,视野有限,以致看不见近在咫尺的逃生之窗,所以只好蛮干。可是有一天夜里,有只麻雀飞进我的房间,它的逃生方式竟然与蜜蜂一模一样。我用灯光照着那扇打开的窗户为其引路,并向它打手势,对它说话,均无济于事。它是到天亮后才飞走的,这一宿我俩都没息好。% N/ H8 p8 ?$ t6 q2 B: m3 z# l
(3)找出错误的根源。有人问阿凡提:“我肚子痛,应该用什么药?”阿凡提说:“应该用眼药水,因为你眼睛不好,吃了脏东西才肚子痛。”
" B1 o" E; F0 X- i# o/ V* l3 i& s2 o% D我们应该运用归纳、推理等方法尽早确定错误的根源。5 G- G3 n# r* ^4 y2 y2 S* o2 b
(4)在改错之后一定要马上进行重新测试,以免引入新的错误。有人在马路上捡到钱包后得意忘形,不料自己却被汽车撞倒。改了一个程序错误固然是喜事,但要防止乐极生悲。更加严格的要求是:不论原有程序是否绝对正确,只要对此程序作过改动(哪怕是微不足道的),都要进行重新测试。
  M# i( X( I9 h* q2 m
& o! h: {6 N* R7.5 小 结, L3 m" g4 q; X/ z$ t
优秀的程序员敢于声称自己的代码没有错误,这种自信让人羡慕不已。一个错误自身也许很微小,但是程序存在错误这件事很严重。能否做好测试与改错工作,思想认识和办事态度是最关键的。
1 T% G9 r. G( a3 n& h  U程序员应该把测试当成份内之事,不要依赖于外界的“黑盒测试”。“黑盒测试”就象通过提问题来判断一个人是否是个疯子,但无法知道他为什么成了疯子。让程序员对所有的代码执行单步跟踪测试听起来很费时间,但习惯了你就感觉不到有什么不方便。单步跟踪测试将使你以后的日子更轻松
IDAQ-USB-6009数据采集卡
发表于 2008-1-20 21:54:46 | 显示全部楼层
在线课堂
呵呵,顶个,是林锐的《软件工程思想》里面的,挺有意思的...
发表于 2008-1-20 22:16:25 | 显示全部楼层
Ding,不错的文章 :9P
发表于 2008-1-21 16:38:44 | 显示全部楼层
这位好像还是我公司的前辈,呵呵
 楼主| 发表于 2008-1-21 19:37:40 | 显示全部楼层

HP3070硬件故障排除方法 1

HP3070硬件故障排除方法  
0 T" Q6 F8 v/ t, i3 e) Q- [0 I" d! {& Q
1 V( r, F2 K5 r( E- r7 L5 k" Y
                                                                           ——Trimed By HavenGu
3 N  u6 T+ c' {
# B4 F: h1 e+ ?( Jacky_Shu’s talk on 5/12/06 )
( M" Q$ h, `* N% l# k0 ^7 `% I
# z7 k3 ?2 Z/ v- _  
! M  |  V1 x' \6 Z- n1 J  y; E5 n" {7 f% j5 ~
  - K' e  p3 G9 J# O! }) C  ^
' A) j3 Q1 A" `. a2 e6 X& f
                     Unswitch Power      à    PC主机,显示器
* d+ l" s, \5 b4 [- ?4 n' D" r( J5 _6 U
PDU
9 p/ P) E2 Y( Q* B/ ?1 A  Z, l( j8 W8 L
                                        fans
/ k, m0 Q9 ?, P: J8 A* E
' u+ Q3 @/ v2 c9 |9 h; K' z  H, e                    Switch Power    à       testhead
  U# f7 I4 a& b* R/ f. ~- w0 @1 I3 f0 E8 }" {1 p
                                          6624A
& A5 I+ b* V# |  A# ?
5 x  f: U3 r, L0 t) G  E  
0 M: K  D4 j9 @% K5 Y% x- w  a% `2 Z9 P8 y" Q2 X
                                          
: Y& G. o/ ]$ i5 h, P! o# V0 I& N. |
8 Z# D3 j. y$ j1 I  a2 A                              鼠标,键盘  à     HP/IBM 两键鼠 - U. [3 U5 r) {( U- M/ }

6 W1 \7 }& p: ?" c1 m6 }CDB Errors
  \3 d- J6 w9 r- f- t- T
5 z5 X2 z( b  b2 u7 o                               网络    à    单用户模式 ( H- |# R  |6 X- B5 b$ t
* c. @' G( x0 y9 W. O1 @
  " W" t! q, M9 W- \9 O

6 t- d6 v7 W4 i) \进入单用户模式: + b5 C+ ~+ A, m( d
( q) b. m( b* u
        1.   重启PC     (  按[ tab] 可更改分辨率 ) ! ]1 b6 g: g( G. A

& e+ }, n" p) z" n: s$ h3 q2.      按 [Esc]  ! d, M9 p8 z* p2 \. O0 d: K& @

, \  `+ F6 n2 y8 n+ c' A$ _$ u* s9 p3.      键入命令 “ search “ 回车;
% T) \3 u/ ]0 ]( Q. m% @
0 y; n# ^+ r, J% N4.      > boot P0 或>boot P1  (硬盘启动)
% Q( }- N- s9 [
) }$ _6 v1 Z8 ^5.      ISL(Yes/No/I…)> Y ,回车 0 S7 w/ @, u4 |
/ \5 B7 u$ m7 n( Y. G5 U& N
6.      SINGEL MODE 7 I$ Q3 F' U7 N% K

5 x! m1 r. B: `. m        #hpux –lm            à 进入单用户调试模式
: H: Z. K! h  x- P/ ^
8 _6 r; F1 r* @4 R        #hpux –is              à正常启动系统 6 \# c, c# i& w0 w

8 l  H/ W7 ?  Y  y6 R% ~3 j  . f& x# O! X% w

- M3 B/ T* F" b. ^; n1 c, q  5 C, Z$ N. F/ W

7 {, L7 |, B- @  
' E( c) R- |, ~2 `, Z
8 |9 T4 ?, \4 r! z  
' A. c6 L# y- |) y/ Y$ y. w% }: p6 |8 t3 A( j
  6 O3 q+ u/ M9 h2 X- M
  S) Y/ j' ]" o3 Y/ e
  + e; W% t. h/ |0 L/ J* o( u

3 u: p7 T- R  I5 ^9 {0 H  ' Q" v; X; m& M

* g5 ]0 r# O% d4 ~. x6 n0 t$ s' D' e% v  ! W% J  B" A- R7 ^/ P
, Q" X4 d" l! M' j% a' p9 ?3 L! l
    B# k0 x' F! ^

4 n( N8 ^) x. h6 |  
( `) H1 G( L1 \$ B2 Y: _( _7 B6 `2 N- U) y* C" _, p; Y2 K
$ g. W3 ]+ O8 r6 ^+ q6 n

, U: c) z+ P' _8 e7 N(1) System card time out
. S) C6 a' K" a4 i# J; n. A$ w( d6 t
Boot Step:
- G# U8 ]' c( O  a" ]/ m1 F
  [! r4 Y% N! N$ S# p# f5 P( Y5 R2 g/ c& y
  
0 _7 @- ?* a% [7 T7 ]0 F9 C5 \; Q$ e3 z, |1 Q* X& F! q. z5 n
  
% @# x# h/ u5 E; h( T* H  LAN1 card    à    System card    à    Control XT LAN   
, l: e. C* M# D
' I% |0 d: g) p/ v                                                            
& [. |! O; w' m# |4 L, L9 R, d& ~  \$ B+ A+ i
  
6 C$ Z  G  ^% S
* W% B  c% ]7 T% [- y                    1.检查网络连接                                               1. LAN  cable (光纤) , O( X5 T* f5 c8 J/ {0 l/ |, m

0 J% u9 X8 H9 ^4 L                     cd /etc                                                                                                
0 e6 Y5 a" {: c$ F% Y; l
: V# D! N( |0 e) X                        ping 10.3.112.1                                            2. 50ohm终端电阻 * ?" p6 _  A$ I! ~
+ E+ F$ Q) ]3 R! D, C" u! k
                                                                                                                                0 H. p1 |; t  B' @( c

6 D: M; T/ I( a) P  x6 n% o1 r# \( t                                                        1.  有无电源?(LED指示)
4 g& n. z3 [; e2 L5 v5 f7 H7 y' c" F( \2 W. M# [- x
                                                        2.  地址匹配?
* Q$ J8 ?) s7 d4 z% E9 R0 j1 X3 o' \/ D& v- u4 _
                                                             * 卡上标签
5 E2 p0 C7 i" `; K8 J& W
9 k8 E+ G0 N- U" s. w& }                                                             * /etc/.enable中(用text edit 打开)
6 {* U5 f* V; H- U. D) P7 ?' r8 b
4 x: k2 m% S, p$ T                                                                testhead 1 . l5 s( l7 g) N5 g7 A, k1 y" V: P

' E& V7 k9 I  v, h9 u" k8 v0 q5 q                                                                HA:xx….xx
* Z7 |, S' H- m# f. k4 W/ U# x; B' @2 ]" t& X
                                                       3.  检查网络连接
3 [7 {9 p' u( x% |) n! a. w
7 x9 j. g  S/ W% s0 j% E                                                              cd /etc
. r2 |' V( \6 n( m
4 {8 z0 _3 F, ^% Y                                                              ping 10.3.112.2 + c- Y8 P! Y$ l9 _
6 y1 j8 q) X& d( F+ {; v! X, E
                       O, @9 }, ~% j3 L4 U0 ^6 y9 U7 Z' S

1 Z4 M+ A/ g2 k  q$ _! l                    ① HUB à  GPIB       & k" [0 w6 y4 q6 @
/ u  M: V3 [5 s1 ~/ n' [! Z# _
                    ②  LAN cable & High Speed Link Cable  (光纤& 排线)
  W  X6 n6 n, W2 T" c! U
; x* F6 p3 E* Y! O  
7 O, s2 @' E- T# B1 E* _9 \  N$ @& Z* a7 ^
  
8 `! p  V' Z7 e  v1 H' s& K# [/ ^# n) w# ]6 N& V! o
(2) 实际config与设置config不匹配
- C' ^" z/ H# S" v& `  V+ u0 y& y4 k9 g$ i! m: p
                 1.  EX000-69540        -66540       à   6M 3 D6 L; p* G4 c1 J) u- f
8 t  q; \3 `/ f! O8 J& `( [
               -69550        -69550    à   6M, 12M, 20M 8 a0 N) _7 Z$ f0 R

+ p/ x4 m4 }/ j6 S' }$ _; T) C                     设置文件: /etc/.enable ( V! ^- ]/ Z+ F: s, P

; G$ R  _2 I1 u2 ]                  - W/ t, s# z. u& S5 }4 Y  ?

* Y' n# k6 `/ d0 [7 L9 h: f                 2.  config下 NO Card      * 4 j4 S0 s2 s, C
7 x/ u8 `; R* A& V# s5 v
                                   NO Card      *
5 @# K. D; t9 Y4 `* a4 G' X
8 I6 a) \* t, I                                   ……
3 ^0 m5 r6 @& p5 |% T! x2 b' f! Z1 C
                                   NO Card      * $ k  X+ N7 W; Q4 x& R4 W6 V
( H/ b6 V' g5 Z5 x+ L
                    即系统找不到PIN Card等,可判断为MPU损坏。 3 B' `; n. y( `9 i, G
( B8 @0 S& G& O% v2 S6 @
  
" C4 }" a- N8 G, n5 d5 }# I; V( D$ c4 D. B
                3.  config下   ASRU Card 忽隐忽现,判断为Mother Board Problem. " P% I# U2 C4 I+ H

, J2 S$ m2 g! |* S7 ^(1)    螺丝是否上紧
/ r, A# e( l+ P1 `. m
" ]8 \0 E* E9 g7 u9 j: s% u(2)    与ASRU卡connector接触不良,需清理 * z" |! H+ t/ C; G8 i! }! k# u
) Q3 s0 D0 Y4 |! D' m
(3)    Mother Board 损坏,需更换
8 d- g( L5 B3 P. }3 {9 N" k8 h& O1 U, }4 U3 T, D5 X
  ' q9 p+ r9 N/ m) {

* A$ \  q- A; X$ Z( o. ~! Q' q( J  & g" p# D$ B& K6 E

; G# E6 j( u  x# F1 R6 ~  8 W, R: K6 j. u* S( [, _' Y
' M1 u5 R) z6 J/ i$ p" Q" Q
  
/ y: s# t9 _% g( W/ N2 @9 b# f1 \% h
' {( g* _. A* o# V5 L* n2 m  1 v. K1 ?# T& Y, Z( Z

1 Y( b8 \& P. A6 {- f/ c4 {) x(3) Control Card Self-handshack
# D, E- h6 }" z" B1 U! v  l( P
, j9 P' n1 e; l8 O4 d                       检查Control Card 设置
- R2 R  b' K( J- S' m, w) o
* B' i+ |" x, N$ S! D% Y1 E  % d& ?" |( |  f- G3 t8 ]! A

, y/ A" R2 h$ w+ P' F7 u0 k2 H6 X                             检查High Speed Link Cable * E* G* e8 a. s' M: Z% {
4 s+ ?$ z6 p( t5 e
  
4 Z& y9 ~/ i) e; R0 i3 S2 p' Y: _6 U) @/ |% m5 s; K
                             检查LAN Cable ( l) [$ @. ~4 p( Q% R
2 y% _* H1 Y' h8 c. g
  
  v( w8 N+ k5 y
) n+ d- J! x4 w# X& N                    ·Control Card 地址设置: . U' c: O/ ]3 q9 r  U

7 W$ |; S7 @9 ?7 B  ?9 C                      /etc/bootptab中(用text edit打开) 3 {! g! t7 u0 s
) a/ T- l% C5 R! M/ u5 T
                            Module 0,1,2,3 * b3 o# ?5 g" B5 X# ~# Q' q

: y7 J; _9 n% h, E; w                            HA:xx…xx
发表于 2008-1-23 14:22:59 | 显示全部楼层
学习中,谢谢楼主!!!
发表于 2011-1-30 09:27:04 | 显示全部楼层
说的很好啊
发表于 2014-11-20 15:57:25 | 显示全部楼层
很好  很好  很好 很好 很好  很好  很好 很好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|无图浏览|手机版|网站地图|虚拟仪器家园 ( 沪ICP备06029130号-1 )

GMT+8, 2018-12-18 01:11 , Processed in 0.032173 second(s), 26 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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