LabVIEW论坛

 找回密码
 注册

扫一扫,访问微社区

查看: 5538|回复: 7

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

[复制链接]
发表于 2008-1-20 19:36:42 | 显示全部楼层 |阅读模式
USB-6009数据采集卡首发
一位测试工程师对测试的理解
5 E: b) M' C2 P% T; d5 |编程大师说:“任何一个程序,无论它多么小,总存在着错误。”" ]# e: `: p( m. S" g
初学者不相信大师的话,他问:“如果一个程序小得只执行一个简单的功能,那会怎样?”
4 z7 A3 X9 R. X“这样的一个程序没有意义,”大师说,“但如果这样的程序存在的话,操作系统最后将失效,产生一个错误。”  L8 @+ u+ h2 h: a# l
但初学者不满足,他问:“如果操作系统不失效,那么会怎样?”
# g( E- W* z8 Z( Z( P) s/ Y“没有不失效的操作系统,”大师说,“但如果这样的操作系统存在的话,硬件最后将失效,产生一个错误。”, @2 x* R3 A4 {# G( u$ V: E
初学者仍不满足,再问:“如果硬件不失效,那么会怎样?”
6 K7 D- z3 e4 v/ s大师长叹一声道:“没有不失效的硬件。但如果这样的硬件存在的话,用户就会想让那个程序做一件不同的事,这件事也是一个错误。”
% v' z' z$ T8 p3 A& i9 k8 _, G5 y没有错误的程序世间难求。[James 1999]
5 f( x: y% Q  U: `; N! f8 y. G9 N+ w0 w/ J6 ^. x
错误是一种严重的程序缺陷。测试的目的是为了发现尽可能多的缺陷,并期望通过改错来把缺陷统统消灭,以期提高软件的质量。但关于测试与改错实在没有什么高明的方法值得大书特书,也不能表现出程序员的聪明才智。相反地,它们带来了更多的牢骚与痛苦。因此在教学和开发实践中,测试与改错总是被当作万般无奈的工作踢到角落里。0 H) u% E! l) ]' W8 Z1 e
医生可以把他的错误埋葬在地下了事,但程序员不能。我们必须要学会测试与改错,并且把测试与改错工作做好。
5 M) N+ N- e* i4 S" b2 Q' y) h- q0 D1 i1 Z1 f* @& s
7.1 对测试的理解6 l* j; ?3 d; t+ `
测试的道理并不深奥,计算机专业人员都应该明白。但就是这么简单的事,计算机专业的博士们也未必都已经理解。% g- U5 o% r5 ], d7 j% ]' I
有一天,一位比我聪明,编程比我快,学习能力比我强的计算机专业博士生恭恭敬敬地请我坐好,并且史无前例地削了苹果请我吃,为的是向我请教“软件工程”问题。你必定以为这位仁兄好学之极。非也,我和他同事三年来从未探讨过“软件工程”问题。只因为他明天要去应聘,参加面试,生怕被人问倒,就央我当晚为他恶补一把“软件工程”。他还特地问我“什么是白盒测试和黑盒测试?应该由谁来执行?”(有公司曾经这样面试应聘者)当我解释完测试的道理时,他叹了一口气说:“这些玩意儿我读大学十年来都没搞过,怎么能讲得出道理来。唉,就去碰碰运气吧。”我有“兔死狐悲”的感觉。我们这一群博士生三年来尽干些自欺欺人的事,到毕业时学问既不深也不博。个个意志消沉,老气横秋。长此以往,总有一天招聘会的大门前将贴出标语“博士与狗不得入内”。
- n1 T8 J1 @4 n2 R# E# i+ ]$ o以下是关于测试的几个重要观念。
1 {6 z' C, a1 F
5 M7 G+ b8 K  d" r: b$ E+ M9 p* V7.1.1 测试的目的1 G/ \! Z9 F4 _9 k6 o( C
测试的目的是为了发现尽可能多的缺陷。
' U! o4 ~2 }- d# Y4 v这里缺陷是一种泛称,它可以指功能的错误,也可以指性能低下,易用性差等等。测试总是先假设程序中存在缺陷,再通过执行程序来发现并最终改正缺陷。理解测试的目的是个很重要的意识问题。如果说测试的目的是为了说明程序中没有缺陷,那么测试人员就会向这个目标靠拢,因而下意识地选用一些不易暴露错误的测试示例。这样的测试是虚假的。
: s% t) ]. g, l3 Z# U5 |目前高校的科技成果鉴定会普遍存在类似的虚假现象。我在读硕士时就亲身经历过这样的事。我们的项目是研究集成电路制造过程中的成品率问题。当时国内大多数工厂的集成电路成品率只有百分之几,我编写的示例程序可以将集成电路的成品率优化到98%。示例效果是如此的好,以致一位评委(某厂的总工程师)不无讽刺地说:“采用你们的成果,我们可要发大财了。”这个项目就轻易地通过了鉴定,并且不久后获得了电子工业部科技进步二等奖。这就象在考试时通过作弊取得了好成绩而被表扬。我那时尚且纯真,羞愧之余,不禁对高校科研成果的水平和真实性大失所望(现在我已不再失望,因为很少抱希望)。
  c! F8 p( t7 C( L一个成功的测试示例在于发现了至今尚未发现的缺陷。/ `7 F/ j$ l& p9 [( J' b
测试并不仅是个技术问题,更是个职业道德问题。" P/ R$ w2 c7 K9 V3 Y4 @9 R

% c# w- r# }# u" ~1 e7.1.2 测试的心理要求; Z2 c% @  @' q! v4 \/ a3 Z* y  p
测试主要是由人而不是由机器执行,这就不免与心理因素相关。为了测试的真实性,对测试的心理要求是“无情”。这似乎太残酷了。开发人员不能很好地测试自己的程序是因为做不到无情。而测试人员如果做到了无情却会引起开发人员的愤怒,遭人白眼。
8 S1 I5 L4 b7 x尽管已经明白了测试的目的是为了发现尽可能多的缺陷,但当测试人员真的发现了一堆缺陷时,却不可乐颠颠地跑去恭喜那个倒霉的开发者,否则会打架的。, f8 }  {) d: D
# g' b' G% n5 |( M
7.1.3 测试的真理
1 v: x' F7 L* {/ t测试只能证明缺陷存在,而不能证明缺陷不存在。
9 K8 |" l% h- d' R- l, j6 e$ u# a, H这个真理告诉我们,对于一个复杂的系统而言,无论采取什么样的测试手段都不能证明缺陷已经不复存在。“彻底地测试”只是一种理想。在实践中,测试要考虑时间、费用等限制,不允许无休止地测试。7 W9 h  c2 w. y0 }6 {: z, T% G
& u9 T& E# z7 Q+ L& h) _! z0 f1 R
7.1.4 测试与质量的关系
6 g$ P: c7 d6 @& ]7 p! c测试有助于提高软件的质量,但是提高软件的质量不能依赖于测试。测试与质量的关系很象在考试中“检查”与“成绩”的关系。! i. }" U) q7 X
学习好的学生,在考试时通过认真检查能减少因疏忽而造成的答题错误,从而“提高”了考试成绩(取得他本来就该得的好成绩)。* g, F4 \8 D. r
而学习差的学生,他原本就不会做题目,无论检查多么细心,也不能提高成绩。
6 @$ w- x; s$ @所以说,软件的高质量是设计出来的,而不是靠测试修补出来的。
( w5 T9 \  r1 B; T; A' P# i
# H. A; \0 f2 B# g3 ]2 G' v7.2 测试人员的选择# C" Z/ S" I' e7 E' p1 B5 Z7 D* E
测试需要开发人员参与吗?+ V9 y) X! O, E6 a
测试需要独立的测试小组吗?- {1 j6 g2 `9 T  Q: M  [
测试需要用户参与吗?, s, ]: c1 B- V" b
让我们先看一看Microsoft公司关于测试的经验教训,再回答上述问题。3 Z6 l- [' K* `" m' b6 j8 \* h

; Q  F$ u5 b2 ~! X! @8 H7.2.1 Microsoft公司的经验教训- q5 B$ w) }: n
在80年代初期,Microsoft公司的许多软件产品出现了“Bug”。比如,在1981年与IBM PC机一起推出的BASIC软件,用户在用“.1”(或者其他数字)除以10时,就会出错。在FORTRAN软件中也存在破坏数据的“Bug”。由此激起了许多采用Microsoft操作系统的PC厂商的极大不满,而且很多个人用户也纷纷投诉。. j- l3 X% n- C/ T& S9 P% r+ y# T
Microsoft公司的经理们发觉很有必要引进更好的内部测试与质量控制方法。但是遭到很多程序设计师甚至一些高级经理的坚决反对,他们固执地认为在高校学生、秘书或者外界合作人士的协助下,开发人员可以自己测试产品。在1984年推出Mac机的Multiplan(电子表格软件)之前,Microsoft曾特地请Arthur Anderson咨询公司进行测试。但是外界公司一般没有能力执行全面的软件测试。结果,一种相当厉害的破环数据的“Bug”迫使Microsoft公司为它的2万多名用户免费提供更新版本,代价是每个版本10美元,一共化了20万美元,可谓损失惨重。
* g% C  {- Y2 M% {4 i0 j, @8 r痛定思痛后,Microsoft公司的经理们得出一个结论:如果再不成立独立的测试部门,软件产品就不可能达到更高的质量标准。IBM和其它有着成功的软件开发历史的公司便是效法的榜样。但Microsoft公司并不照搬IBM的经验,而是有选择地采用了一些看起来比较先进的方法,如独立的测试小组,自动测试以及为关键性的构件进行代码复查等。Microsoft公司的一位开发部门主管戴夫·穆尔回忆说:“我们清楚不能再让开发部门自己测试了。我们需要有一个单独的小组来设计测试,运行测试,并把测试信息反馈给开发部门。这是一个伟大的转折点。”- I# o# l* z- z- l# G
但是有了独立的测试小组后,并不等于万事大吉了。自从Microsoft公司在1984年与1986年之间扩大了测试小组后,开发人员开始“变懒”了。他们把代码扔在一边等着测试,忘了唯有开发人员自己才能阻止错误的发生、防患于未来。此时,Microsoft公司历史上第二次大灾难降临了。原定于1986年7月发行的Mac机的Word 3.0,千呼万唤方于1987年2月问世。这套软件竟然有700多处错误,有的错误可以破坏数据甚至摧毁程序。一下子就使Microsoft名声扫地。公司不得不为用户免费提供升级版本,费用超过了100万美元。[Cusumano 1995]+ q1 J3 p- K( Z. S

# [1 D, S' Q# m& I& u, `  L7.2.2 测试人员的分工
% a( K0 I; O/ a6 v# f: o  J1 s  k  \从Microsoft公司的教训中可知,公司内部对产品的测试(称为α测试),需要开发人员与独立的测试小组共同参与。开发人员应该执行“白盒”测试,即测试源程序的逻辑结构以及实现细节(“白盒”是指看得见程序的内部结构)。而独立测试小组应该执行“黑盒”测试,即按照规格说明来测试程序是否符合要求(“黑盒”是指看不见程序的内部结构)。比如在测试一个模块时,“白盒”测试方法要对模块的所有代码进行单步跟踪测试。而“黑盒”测试方法只需测试模块的接口是否符合要求,它关心程序的外部表现而不是内部的实现细节。( p8 t$ v. l; Q7 w
小型的软件公司可能没有条件设立独立的测试小组,也有可能测试小组人员不多而忙不过来。这时,可以让开发小组的成员相互测试对方的程序。
* c2 j7 [( t0 U: l5 Y" S这里要强调的是,α测试不能依赖于开发人员或者测试小组中的任意一方,必须是双方共同参与。“白盒测试”必须由开发者自己执行,因为别的测试人员无法了解到程序的内部实现细节。而“黑盒测试”必须由独立的测试人员执行,因为开发者难以做到客观、公正。开发者在测试自己的程序时存在一些弊病:
  A$ E8 }. f; Z3 Y: y) }% C(1)开发者对自己的程序印象深刻,并总以为是正确的(自信是应该的)。倘若在设计时就存在理解错误,或因不良的编程习惯而流下隐患,那么他本人很难发现这类错误。( W8 u: G% t4 v* o2 P
(2)开发者对程序的功能、接口十分熟悉,他自己几乎不可能因为使用不当而引发错误,这与大众用户的情况不太相似,所以自己测试程序难以具备典型性。6 m) m8 f9 U; H
(3)程序设计有如艺术设计,开发者总是喜欢欣赏程序的成功之处,而不愿看到失败之处。让开发者去做“蓄意破坏”的测试,就象杀自己的孩子一样难以接受。即便开发者非常诚实,但“珍爱程序”的心理让他在测试时不知不觉地带入了虚假成份。0 N9 r2 m+ Y1 ^2 S
软件产品正式发行前,在公司外部邀请一些用户对产品进行测试,称为β测试。β测试的涉及面最广,最能反映用户的真实愿望,但花费的时间最长,不好控制。一般地,软件公司与β测试人员之间有一种互利的协议。即β测试人员无偿地为软件公司作测试,定期递交测试报告,提出批评与建议。而软件公司将向β测试人员免费赠送或者以很大的优惠价格发行软件的正式版本。
# H5 H/ U- \- m: f/ G6 A: u/ d
# u/ g% v6 Y0 v( l5 Q& A7.3 测试的主要内容与常用方法
, C' [7 m8 n7 f8 K有一次文学考试,问高尔基是哪国人。一考生乐极而吟:“尔基啊尔基,你若不姓高,我怎知你是中国人。”这是一种瞎猜法。如果这种方法用于软件测试,人累死也测不出什么结果来。
: j8 @5 J) \5 ^2 a/ {不论是对软件的模块还是整个系统,总有共同的内容要测试,如正确性测试,容错性测试,性能与效率测试,易用性测试,文档测试等。“白盒测试”是指开发人员从程序内部对上述内容进行测试,而“黑盒测试”是指独立的测试人员从程序外部对上述内容进行测试。很多软件工程教材讲述了各种各样的测试方法并例举了不少示例[Pressman 1997] [Sommerville 1992] [杨文龙 1997]。本节简明地讲述常用的测试方法及其道理。- q( S: l0 h2 J% F+ n% }; V; e. C

' q9 |5 x5 k" s7.3.1 正确性测试$ E. `5 K0 e( h4 A$ m
正确性测试又称功能测试,它检查软件的功能是否符合规格说明。由于正确性是软件最重要的质量因素,所以其测试也最重要。
, n" i2 p  P& W; P基本的方法是构造一些合理输入,检查是否得到期望的输出。这是一种枚举方法。倘若枚举空间是无限的,那可惨了,还不如回家种土豆有盼头。测试人员一定要设法减少枚举的次数,否则没好日子过。关键在于寻找等价区间,因为在等价区间中,只需用任意值测试一次即可。等价区间的概念可表述如下:7 X, T3 R' S; D5 n. O! j& f, D
记(A, B)是命题f(x) 的一个等价区间,在(A, B)中任意取x1进行测试。) \7 `7 V2 L3 a0 b
如果f (x1) 错误,那么f (x) 在整个(A, B)区间都将出错。- y) k) M( }! q! E% u5 k
如果f (x1) 正确,那么f (x) 在整个(A, B)区间都将正确。$ E6 b% S9 }, g5 f( \* f( q
上述测试方法称为等价测试,来源于人们的直觉与经验,可令测试事半功倍。1 f. w$ o0 D' x: K7 l
还有一种有效的测试方法是边界值测试。即采用定义域或者等价区间的边界值进行测试。因为程序员容易疏忽边界情况,程序也“喜欢”在边界值处出错。
5 x4 b- ~3 D' q例如测试的一段程序。凭直觉等价区间应是(0, 1)和(1, +∞)。可取x=0.5以及x=2.0进行等价测试。再取 x=0以及x=1进行边界值测试。
4 n8 h4 w" E$ q3 O有一些复杂的程序,我们难以凭直觉与经验找到等价区间和边界值,这时枚举测试就相当有难度。; z& ]2 y6 u# q- ~6 O  O
在用“白盒测试”方式进行正确性测试时,有个额外的好处:如果测试发现了错误,测试者(开发人员)马上就能修改错误。越早改正错误,付出的代价就越低。所以大多数软件公司要求程序员在写完程序时,马上执行基于单步跟踪的“白盒测试”。% _7 y. t  r  ?+ q. K2 N

/ T: }0 f  V0 |% F, Y" N7.3.2 容错性测试
* G5 q: v4 w9 W2 K! y容错性测试是检查软件在异常条件下的行为。容错性好的软件能确保系统不发生无法意料的事故。
4 Y" @2 X3 [+ L8 V4 t" S比较温柔的容错性测试通常构造一些不合理的输入来引诱软件出错,例如:
& n3 p3 Q2 f4 K) r2 S; ^2 c* a  ~(1)输入错误的数据类型,如“猴”年“马”月。
3 G' J' v; i' y5 x(2)输入定义域之外的数值,上海人常说的“十三点”也算一种。
, m4 U1 U8 k6 M2 ?6 v) ~2 i7 r粗暴一些的容错性测试俗称“大猩猩”测试,除了不能拳打脚踢嘴咬,什么招术都可以使出来。这里我举不出例子,因为我没有对程序粗暴过,并且这辈子也不打算学会粗暴。8 g! f+ _8 r$ Y2 X3 o+ e9 b

2 h0 u. \4 N) E8 H; \8 C7.3.3 性能与效率测试$ \4 l4 F& e3 i* I1 _% D+ p
性能与效率测试主要是测试软件的运行速度和对资源的利用率。有时人们关心测试的“绝对值”,如数据送输速率是每秒多少比特。有时人们关心测试的“相对值”,如某个软件比另一个软件快多少倍。
- D+ B0 J) x+ c7 J+ B在获取测试的“绝对值”时,我们要充分考虑并记录运行环境对测试的影响。例如计算机主频,总线结构和外部设备都可能影响软件的运行速度;若与多个计算机共享资源,软件运行可能慢得像蜗牛爬行。5 Y+ w6 I8 C0 p7 |5 A
在获取测试的“相对值”时,我们要确保被测试的几个软件运行于完全一致的环境中。硬件环境的一致性比较容易做到(用同一台计算机即可)。但软件环境的因素较多,除了操作系统,程序设计语言和编译系统对软件的性能也会产生较大的影响。如果是比较几个算法的性能,就要求编程语言和编译器也完全一致。0 c0 P8 {7 A; Y
性能与效率测试中很重要的一项是极限测试,因为很多软件系统会在极限测试中崩溃。例如,连续不停地向服务器发请求,测试服务器是否会陷入死锁状态不能自拔;给程序输入特别大的数据,看看它是否吃得消。- O9 f  P: }+ h3 I9 e

; \$ t* i& q2 \7 n7.3.4 易用性测试
% E! u9 u& y, w7 z5 i+ M7 d易用性测试没有一个量化的指标,主观性较强。调查表明,当用户不理解软件中的某个特性时,大多数人首先会向同事、朋友请教。要是再不起作用,就向产品支持部门打电话。只有30%的用户会查阅用户手册。[Cusumano 1995]
; M) `( [0 t4 Y0 S一般认为,如果用户不翻阅手册就能使用软件,那么表明这个软件具有较好的易用性。
$ W. I* c/ l1 |- x! A, Y& V
. x4 ~: X( w" D3 B% D7.3.5 文档测试
7 G( C/ ]7 K& F) P5 D0 d文档测试主要检查文档的正确性、完备性和可理解性。好多人甚至不知道文档是软件的一个组成部分。
1 u$ K, y* z3 M& R" P/ x* R正确性是指不要把软件的功能和操作写错,也不允许文档内容前后矛盾。
" k$ w9 ~- _; i6 ?* ~7 O* M完备性是指文档不可以“虎头蛇尾”,更不许漏掉关键内容。有些学生在证明数学题时,喜欢用“显然”两字蒙混过关。文档中很多内容对开发者可能是“显然”的,但对用户而言不见得都是“显然”的。& D; A/ Z7 D3 F) ?; H  e; x; d
文档不可以写成散文、诗歌或者侦探、言情小说,要让大众用户看得懂,能理解。- n; R. N) E- A. L/ t& X/ [2 V. M
很多程序员能编写出好程序,却写不出清晰的文档。不要说自己以前语文学得差,现在已没救了,找借口不是办法。没有人天生就能写出好程序,都是练出来的。同理,若第一次写不好文档,就多写几次文档,慢慢地就会写出好文档来。我上大学前不会说普通话,不会写作文,现在我极能说会写,当个秘书或书记已绰绰有余。, {- I* W! g$ X$ M
/ ~- ^# g6 [% A( o  n; E
7.4 改 错7 q( [, c- m/ B/ r
在软件测试时如果发现了错误,必须请程序员改错,否则测试工作就白干了。
& \  p: O) o6 F% P# V  F, n改错是个大悲大喜的过程,一天之内可以让人在悲伤的低谷和喜悦的颠峰之间跌荡起伏。如果改过上万个程序错误,那么少男少女们不必经历失恋的挫折也能变得成熟起来。7 n* P" l8 l. B" B
我从大三开始真正接受改错的磨练,已记不清楚多少次汗流浃背、湿透板凳。改不了错误时,恨不得撞墙。改了错误时,比女孩子朝我笑笑还开心。5 c3 ?9 z; m$ h+ n: R  E3 T
在做本科毕业设计时,一天夜里,一哥们流窜到我的实验室,哈不拢嘴地对我嚷嚷:“你知道什么叫茅塞顿开吗?”7 V- H* X& c6 H9 j/ W" m6 e
我象白痴似的摇摇头。
- _; K3 T# p! g他说:“今天我化了十几个小时没能干掉一个错误,刚才我去了厕所五分钟,一切都解决了。”
- J2 ~# W- W% d7 w8 O! }) k他还用那没洗过的手拉我,一定要请我吃“肉夹馍”。那得意劲儿仿佛同时谈了两个女朋友。
6 J' V3 e5 v; r* b6 N; u2 R. o8 u在本节,我要替程序员们总结关于改错的几点思想方法:
( @6 u# |3 n* n(1)要有勇气。东北有个林场工人,工作勤奋,一人能干几个人的活。前三十年是伐树劳模,受到周总理的接见。忽有一天醒悟过来,觉得自己太对不起森林,决心补救错误。后三十年成了植树劳模,受到朱总理的接见。此大勇也。
2 q5 I! s8 ]! X& G* b/ a# m程序中的错误只有开发者自己才能找出并改掉。如果因畏惧而拖延,会让你终日心情不定,食无味,睡不香。所以长痛不如短痛,要集中精力对付错误。- q5 J+ S' J6 S: ?4 m4 B
(2)不可蛮干。都说急中生智,我不信。我认为大多数人着急了就会蛮干,早把“智”丢到脑后。不仅人如此,动物也如此。' N  z# ]: I3 \6 ^
我们经常看到,蜜蜂或者苍蝇想从玻璃窗中飞出,它们会顶着玻璃折腾几个小时,却不晓得从旁边轻轻松松地飞走。我原以为蜜蜂和苍蝇长得太小,视野有限,以致看不见近在咫尺的逃生之窗,所以只好蛮干。可是有一天夜里,有只麻雀飞进我的房间,它的逃生方式竟然与蜜蜂一模一样。我用灯光照着那扇打开的窗户为其引路,并向它打手势,对它说话,均无济于事。它是到天亮后才飞走的,这一宿我俩都没息好。  R) b- \3 u6 |6 P
(3)找出错误的根源。有人问阿凡提:“我肚子痛,应该用什么药?”阿凡提说:“应该用眼药水,因为你眼睛不好,吃了脏东西才肚子痛。”! J! V* X4 {1 U4 K
我们应该运用归纳、推理等方法尽早确定错误的根源。& S8 L% Z: N2 d  P% R% s# I8 x/ @+ Z
(4)在改错之后一定要马上进行重新测试,以免引入新的错误。有人在马路上捡到钱包后得意忘形,不料自己却被汽车撞倒。改了一个程序错误固然是喜事,但要防止乐极生悲。更加严格的要求是:不论原有程序是否绝对正确,只要对此程序作过改动(哪怕是微不足道的),都要进行重新测试。
( b% x: R% {' t1 ~
+ {/ [" G0 |0 ^* b1 y7.5 小 结
7 g9 n7 U6 o. Q+ P( ~2 P优秀的程序员敢于声称自己的代码没有错误,这种自信让人羡慕不已。一个错误自身也许很微小,但是程序存在错误这件事很严重。能否做好测试与改错工作,思想认识和办事态度是最关键的。2 {& N/ c1 k  c0 h
程序员应该把测试当成份内之事,不要依赖于外界的“黑盒测试”。“黑盒测试”就象通过提问题来判断一个人是否是个疯子,但无法知道他为什么成了疯子。让程序员对所有的代码执行单步跟踪测试听起来很费时间,但习惯了你就感觉不到有什么不方便。单步跟踪测试将使你以后的日子更轻松
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硬件故障排除方法  
2 F8 P5 E+ `% N( {( o6 A5 {/ v! {2 G7 p/ t

5 S) b' ]. O( X  y" z1 K9 X% F                                                                           ——Trimed By HavenGu
( b; p3 z3 W7 l' y& {% E: F5 o) S  D1 b: W; e1 ~5 L1 Q; g. O; T) C) S
( Jacky_Shu’s talk on 5/12/06 ) 9 l$ {5 i& P3 n! |# A; H0 D3 _

9 R+ l" [1 b% l  
8 F  ]: w: E$ B9 b! ^0 g
+ R7 J9 N2 [5 k0 u  ! L9 V, I& ]0 J3 C, b

5 q: f3 h$ y, N8 C: {5 x7 c4 H% P                     Unswitch Power      à    PC主机,显示器 2 _9 _2 t$ l' s/ L" P
3 j, e! o% G$ [9 H) W0 p
PDU
& `* S( |' t1 ^5 X/ }8 Z2 Q' @1 \" {$ _& X, }
                                        fans
; ?: b7 U7 o, m- a( X: J5 G) \* D  H+ u  b' i1 \, ~/ ?3 `) j
                    Switch Power    à       testhead
: q/ B1 u' E) H% i, K, G  {& R  m- x
7 _( T4 Q8 q! L                                          6624A
/ }5 C0 Q" C6 r6 D2 W8 l2 [9 G5 W2 Y& K
  
- E' D& f9 g4 R$ H" X) B. ^! z! d$ w6 n' k, S
                                          
0 Y( ?9 f, e0 F6 ]+ h$ e/ T
1 A% [+ l/ j" a0 T- M# q- A2 M                              鼠标,键盘  à     HP/IBM 两键鼠 8 A; m) D, L' X5 ?" e1 ^7 q& a

: F5 [4 \( Z7 \4 |CDB Errors 1 X, ]4 e! m$ |+ k* \' c
5 D: l  j' E, I* ~1 R1 [! s& O
                               网络    à    单用户模式
  v. Z3 m6 G1 I# o4 h/ u1 g" Y4 l: z2 M8 Q# z7 |. w
  
1 }! B; I# Z9 F* M
0 b8 K( }, ]4 x进入单用户模式: ( @8 A; i* i) c: \1 f

. U& {" [7 X2 T& `' K; B" T1 {; X9 |        1.   重启PC     (  按[ tab] 可更改分辨率 ) 7 _2 X: k# v0 g7 k; R0 a6 g

; w& a1 z8 e3 i7 |( p! |2.      按 [Esc]  
$ }* N3 y; e  j, ?5 A7 P; ~: t2 S7 \/ i  a1 P7 T4 x2 Z
3.      键入命令 “ search “ 回车;
+ R3 g4 Q( ~  }/ f8 k( _  u
) \5 F+ y  S' a4.      > boot P0 或>boot P1  (硬盘启动)
5 f5 f+ _$ y9 e6 r" _" i  V# J# d1 M- M5 O6 ]' q6 z6 Q1 x2 J
5.      ISL(Yes/No/I…)> Y ,回车 % h! \5 H! u" h5 }' ^5 Z- `

/ D5 ]. c- M- m) Y6.      SINGEL MODE + U% b/ t9 p7 g7 G' q/ z
; A9 u& M6 D! o& d9 Z4 |" F* `
        #hpux –lm            à 进入单用户调试模式 0 E  ]% c+ ]3 t, y3 h4 F* H; ]

5 A- k* Y. F  C. c; X% d2 W, }; A. @        #hpux –is              à正常启动系统 + x$ R8 \' ]8 u: F
; Q# p* E) E7 w/ U
  
6 `* K7 o. k* v+ x9 t& G+ n0 {2 S# ^8 L
  
" M3 G6 |" X: v, }
: D/ K, V7 [# P1 @  
& Y8 X: Z2 B& C; T5 q" e% M; j# i0 C% N3 V6 C# }6 r4 E
  
+ i& P% i6 J, |
% }/ d9 G+ @) x& F% D# X2 K  
. E6 p7 s, e- n* P; |6 F# W1 M! ]) L8 }( f% d, `
  / E7 {9 i& I& A1 {- ?6 f6 \/ ^' d

7 T8 K: y6 d. ~' V( R  * R$ N" S* D( p
! m: e% c* E, ?/ ?
  ) |1 o- w9 D( x
5 J3 O1 F# s5 d7 _
  % B. p2 q0 ~% S/ a

6 T$ n( a1 ~: }" v8 e  
( u7 A# L4 b8 ~/ e& i1 r1 F4 e' d) N4 e, m8 {& f7 n

! X% s/ V2 `/ w4 m' R
8 ]! C0 o/ q$ w5 _(1) System card time out 0 p. \& s; k. c! r) K
2 r. ~; i0 @+ M% a6 v, T
Boot Step: 2 ?# S+ P! k, k# A3 z
0 x& G, h, V+ p1 x$ `4 a

& b- ?: u9 {$ l6 H  1 f! q" p# m1 t! [' u
" M# J( R+ e9 _: \( O: W  M
  / Z  i! p: a- v+ P! L
  LAN1 card    à    System card    à    Control XT LAN   
  c0 u& u' K6 f* G! ?+ U5 z. d8 w& s
                                                            
' H- M3 z: f) L# k" o+ ^
& {- k9 [1 ^2 v$ f  j" O2 v, m8 |  # N$ |* r* c% }  k* k* I

" a) [+ i. ]) T2 Q                    1.检查网络连接                                               1. LAN  cable (光纤) * Z" M" O/ T; Q5 g: F) U* J
/ C( ~( {: O+ o0 n
                     cd /etc                                                                                                 . [7 x! i1 ~. @' K2 u

) E1 Z+ l5 w1 r5 m                        ping 10.3.112.1                                            2. 50ohm终端电阻
# z! F( x2 W+ ~- Z  R
8 i, Y; @3 V9 [6 H3 j4 Q! R                                                                                                                                
$ m0 Z( f3 O7 U9 z/ a9 y- q: A3 U" }2 T" q3 Z; n0 }
                                                        1.  有无电源?(LED指示)
8 r' o4 j( }" J4 g; R) n4 O
; C8 D  t1 R5 |+ T0 w$ P                                                        2.  地址匹配?
9 d* D- Y  V6 j( E4 A% o
7 h* W& A$ V* @) V& A: {1 g                                                             * 卡上标签 $ l) T2 Q  G# k
* j1 s0 C% F/ y; \- k
                                                             * /etc/.enable中(用text edit 打开)
7 m; ]) f: ?/ x% |, ^
- \6 O# S) F- z' l4 z  J                                                                testhead 1
" `( i9 Q& [  |+ W" O6 E
! Z+ |+ k, C) s7 P+ F                                                                HA:xx….xx
2 F! Q& u8 f1 D% j
- c8 b+ c! Y* X                                                       3.  检查网络连接 * i. W) \/ p0 \

9 O3 W# g+ M; @/ K                                                              cd /etc
: }6 ]+ F3 h5 _8 \1 H' s- D$ o4 ]; I
& V# O4 d2 P1 e$ F% }                                                              ping 10.3.112.2 0 _2 f& B+ F: G9 d- r
. ~( q$ g( E. s* k
                     
" r" M4 u. _" G8 K# y* O/ p# B  D, `9 D. t# |- a
                    ① HUB à  GPIB      
! J5 I4 `8 X& L7 X0 t6 ~5 c
( E- `: D6 h& t& F                    ②  LAN cable & High Speed Link Cable  (光纤& 排线)
. A; e! \; l/ ?3 p" z
# B! c: G- z) e, o1 q  . z$ V/ r( O0 [% _: P
2 y5 f& |# x+ m% G
  8 d3 S+ h4 ?! r; F2 p& Y7 g
: C1 |: [, K% f
(2) 实际config与设置config不匹配
& I- r! S5 n% R" u
  f2 W: H. U4 X" z  `4 j9 X                 1.  EX000-69540        -66540       à   6M
5 d0 v7 U& j' |  B  Q6 t$ L' a3 G. }% j0 B
               -69550        -69550    à   6M, 12M, 20M ' M4 V3 \0 d$ P

4 ?% J6 i* l) y) ?+ e4 ], f                     设置文件: /etc/.enable
7 N5 d5 l  m9 f/ a- J% l) F8 e
, x- L1 B1 n: f, r0 h4 f                  : R. M8 \% x9 Q0 t1 U6 u

/ ^( Z' T% O; u0 k! m                 2.  config下 NO Card      * 6 k* P" D/ R; {9 g& Y

% z4 {/ l; M/ X8 X                                   NO Card      * $ p8 q8 _+ N0 p0 P, T" o

4 {7 H0 \; g/ ^9 o8 c5 H                                   …… & E: R& e# k, Z! u
$ t/ i% n4 Q0 @# c  M) i
                                   NO Card      *
4 E+ X  }3 Z1 t( u
* ]3 `0 Z0 h2 g$ D! j                    即系统找不到PIN Card等,可判断为MPU损坏。
5 K4 d4 n; s9 f0 `( M; E1 _/ k  V. m) s0 M! w3 o+ P  o
  : y' A! G8 D& D- }+ s  a

' X9 j3 h! v" {$ {* B                3.  config下   ASRU Card 忽隐忽现,判断为Mother Board Problem.
/ m" e) _# s" N7 z, |0 G+ o2 z, P* N" w2 |% w
(1)    螺丝是否上紧 / K) Y( ]/ F! F& c. H3 V) x8 o; [
: B; f6 d% _* G
(2)    与ASRU卡connector接触不良,需清理 4 s* C# }$ A. m: p0 j$ {2 i

6 l6 x7 S; b; O, S2 w- Y( |' ^(3)    Mother Board 损坏,需更换 . v  N& \. T) [- p

' s% A  @& ?. W. q: {+ Z  + |4 C0 P/ V5 _  S5 k1 Y( {6 R

# @5 s) _; C4 Q  5 \8 x) H+ G- M

4 S4 [$ J) Y- j' o5 D' A# M) H  $ x; [: a0 _. F: s& B5 G. a

# [. I' Z7 b" [6 I& Z  
$ P7 l2 r) m* S7 M& I* J* @+ n% o) P6 Q$ k6 e+ n
  # e( `0 w% W; p* u) Z: ^$ }3 W9 |

+ Q9 C9 q1 v% X  ]" G( O0 r(3) Control Card Self-handshack
2 l% U7 W$ Q- T6 L$ v% T  V  f* _
                       检查Control Card 设置 & p% s. G+ z. I. c7 E
* A& {+ ^* C$ t& k
  0 e2 ?- t) i; |, }5 y9 v( j7 n
) j( F/ `2 Y+ f$ G1 ~% }
                             检查High Speed Link Cable 8 D1 c' }) U* p* ^! e% I" `
, n3 A& p- G$ X: u! [/ w
  
( p: Q' x( {" Q/ W: k8 Y3 D$ m. H/ p( I
                             检查LAN Cable
( W6 p+ H- k+ F* h3 w9 m* J# ?! l2 i) q9 c
  8 _' e" q. X$ {
9 s( p- A  X1 l* `9 N7 s1 ?
                    ·Control Card 地址设置:
/ V+ D* `* M8 V7 M
3 {- z' l1 U( L. h7 ^                      /etc/bootptab中(用text edit打开) . u8 ]: L! a1 M+ M: D( j
9 K& ]' e0 ?/ i! a0 m+ t+ \
                            Module 0,1,2,3
$ [2 G3 M$ z6 t. `4 Y3 {
" d* B- U( f$ J% X4 B& @% p                            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, 2019-3-26 16:21 , Processed in 0.036982 second(s), 27 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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