LabVIEW论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

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

    [LV.2]偶尔看看I

    参加活动: 1

    组织活动: 0

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

      z6 i1 t7 Y& X* C7.1.2 测试的心理要求& l# C6 D" x% q3 e% q7 c
    测试主要是由人而不是由机器执行,这就不免与心理因素相关。为了测试的真实性,对测试的心理要求是“无情”。这似乎太残酷了。开发人员不能很好地测试自己的程序是因为做不到无情。而测试人员如果做到了无情却会引起开发人员的愤怒,遭人白眼。
    * m5 a. {4 E7 l2 `# q6 Q/ Z尽管已经明白了测试的目的是为了发现尽可能多的缺陷,但当测试人员真的发现了一堆缺陷时,却不可乐颠颠地跑去恭喜那个倒霉的开发者,否则会打架的。
    7 ]9 h& G/ V2 G" p6 ^+ Y  O' |" U; m2 a. H
    7.1.3 测试的真理
    ; b7 t" u, @! `4 @. p测试只能证明缺陷存在,而不能证明缺陷不存在。6 _( i( H# A' s( w; y9 Z  c3 v& ~: s
    这个真理告诉我们,对于一个复杂的系统而言,无论采取什么样的测试手段都不能证明缺陷已经不复存在。“彻底地测试”只是一种理想。在实践中,测试要考虑时间、费用等限制,不允许无休止地测试。) G9 Y2 N0 F- _  d6 U: }
    . k0 T' n, S4 W9 h5 g
    7.1.4 测试与质量的关系: F9 f" ?' H; L4 U" }
    测试有助于提高软件的质量,但是提高软件的质量不能依赖于测试。测试与质量的关系很象在考试中“检查”与“成绩”的关系。; g; x/ S9 w9 ?: s5 U% _
    学习好的学生,在考试时通过认真检查能减少因疏忽而造成的答题错误,从而“提高”了考试成绩(取得他本来就该得的好成绩)。" @2 c2 e1 t4 t" m8 r0 g+ l
    而学习差的学生,他原本就不会做题目,无论检查多么细心,也不能提高成绩。* h$ `  O! Z( {6 C8 N) C+ u2 `
    所以说,软件的高质量是设计出来的,而不是靠测试修补出来的。/ g2 P1 b9 h( Y: D' w
    ! i/ v8 b" p' c+ l! m2 Q9 V
    7.2 测试人员的选择
    ' I$ t, F( m0 {1 r( g测试需要开发人员参与吗?0 W  S+ M# a* l
    测试需要独立的测试小组吗?
    ) {6 P! r: f. X; z$ d- Z6 |1 U测试需要用户参与吗?6 B7 S$ i+ ~) I) h/ r: R7 x& m. P
    让我们先看一看Microsoft公司关于测试的经验教训,再回答上述问题。; W7 P2 g- \2 A3 d4 g8 K4 l# ]

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

    ; ^$ Q6 h$ B: m2 H* j1 q$ P, A7.2.2 测试人员的分工  f& I2 I. H( r3 _
    从Microsoft公司的教训中可知,公司内部对产品的测试(称为α测试),需要开发人员与独立的测试小组共同参与。开发人员应该执行“白盒”测试,即测试源程序的逻辑结构以及实现细节(“白盒”是指看得见程序的内部结构)。而独立测试小组应该执行“黑盒”测试,即按照规格说明来测试程序是否符合要求(“黑盒”是指看不见程序的内部结构)。比如在测试一个模块时,“白盒”测试方法要对模块的所有代码进行单步跟踪测试。而“黑盒”测试方法只需测试模块的接口是否符合要求,它关心程序的外部表现而不是内部的实现细节。  J) r, I" O, G
    小型的软件公司可能没有条件设立独立的测试小组,也有可能测试小组人员不多而忙不过来。这时,可以让开发小组的成员相互测试对方的程序。
    # {+ O+ z$ p8 I1 Y7 o" @9 e这里要强调的是,α测试不能依赖于开发人员或者测试小组中的任意一方,必须是双方共同参与。“白盒测试”必须由开发者自己执行,因为别的测试人员无法了解到程序的内部实现细节。而“黑盒测试”必须由独立的测试人员执行,因为开发者难以做到客观、公正。开发者在测试自己的程序时存在一些弊病:: i  }0 d6 X8 s2 S& l: h  {
    (1)开发者对自己的程序印象深刻,并总以为是正确的(自信是应该的)。倘若在设计时就存在理解错误,或因不良的编程习惯而流下隐患,那么他本人很难发现这类错误。6 C  E- s. t; a' z8 A2 f1 n5 j# b: j4 S2 C
    (2)开发者对程序的功能、接口十分熟悉,他自己几乎不可能因为使用不当而引发错误,这与大众用户的情况不太相似,所以自己测试程序难以具备典型性。
      j+ q1 l4 U  \$ n# I(3)程序设计有如艺术设计,开发者总是喜欢欣赏程序的成功之处,而不愿看到失败之处。让开发者去做“蓄意破坏”的测试,就象杀自己的孩子一样难以接受。即便开发者非常诚实,但“珍爱程序”的心理让他在测试时不知不觉地带入了虚假成份。- o4 N; ]0 N3 V
    软件产品正式发行前,在公司外部邀请一些用户对产品进行测试,称为β测试。β测试的涉及面最广,最能反映用户的真实愿望,但花费的时间最长,不好控制。一般地,软件公司与β测试人员之间有一种互利的协议。即β测试人员无偿地为软件公司作测试,定期递交测试报告,提出批评与建议。而软件公司将向β测试人员免费赠送或者以很大的优惠价格发行软件的正式版本。
    5 q% F2 w0 g" ]) Q2 @% \! l# w: k* p7 n4 A
    7.3 测试的主要内容与常用方法. j- \. P# [$ j; Q
    有一次文学考试,问高尔基是哪国人。一考生乐极而吟:“尔基啊尔基,你若不姓高,我怎知你是中国人。”这是一种瞎猜法。如果这种方法用于软件测试,人累死也测不出什么结果来。' J; v! n2 \$ m, a3 ]: M2 d8 O/ p9 k
    不论是对软件的模块还是整个系统,总有共同的内容要测试,如正确性测试,容错性测试,性能与效率测试,易用性测试,文档测试等。“白盒测试”是指开发人员从程序内部对上述内容进行测试,而“黑盒测试”是指独立的测试人员从程序外部对上述内容进行测试。很多软件工程教材讲述了各种各样的测试方法并例举了不少示例[Pressman 1997] [Sommerville 1992] [杨文龙 1997]。本节简明地讲述常用的测试方法及其道理。
    : \  f; [/ m- E  s: Y7 L" }* H
    + a& @- i+ y5 `: V4 q9 k% l7.3.1 正确性测试5 [- |  F. E" o$ u. S0 }; c! I
    正确性测试又称功能测试,它检查软件的功能是否符合规格说明。由于正确性是软件最重要的质量因素,所以其测试也最重要。/ [, Y! e0 q! F" ]2 l% ^2 Y
    基本的方法是构造一些合理输入,检查是否得到期望的输出。这是一种枚举方法。倘若枚举空间是无限的,那可惨了,还不如回家种土豆有盼头。测试人员一定要设法减少枚举的次数,否则没好日子过。关键在于寻找等价区间,因为在等价区间中,只需用任意值测试一次即可。等价区间的概念可表述如下:
    $ |" p; ~7 l* W5 H7 b记(A, B)是命题f(x) 的一个等价区间,在(A, B)中任意取x1进行测试。) H  `8 _" f4 C. U% K$ X1 T6 q
    如果f (x1) 错误,那么f (x) 在整个(A, B)区间都将出错。3 x% g( P8 j& y7 [+ J
    如果f (x1) 正确,那么f (x) 在整个(A, B)区间都将正确。
    6 g  O4 _* F- X上述测试方法称为等价测试,来源于人们的直觉与经验,可令测试事半功倍。. {6 s4 T$ Z7 g$ X0 z
    还有一种有效的测试方法是边界值测试。即采用定义域或者等价区间的边界值进行测试。因为程序员容易疏忽边界情况,程序也“喜欢”在边界值处出错。) H8 z8 n7 z; g
    例如测试的一段程序。凭直觉等价区间应是(0, 1)和(1, +∞)。可取x=0.5以及x=2.0进行等价测试。再取 x=0以及x=1进行边界值测试。  L* \9 J7 X+ u7 ~% c
    有一些复杂的程序,我们难以凭直觉与经验找到等价区间和边界值,这时枚举测试就相当有难度。
    5 D6 L# t% ^5 s5 s5 u) g0 j在用“白盒测试”方式进行正确性测试时,有个额外的好处:如果测试发现了错误,测试者(开发人员)马上就能修改错误。越早改正错误,付出的代价就越低。所以大多数软件公司要求程序员在写完程序时,马上执行基于单步跟踪的“白盒测试”。1 N5 L# |7 Z: f1 `1 Q  |# Y

    7 D; \; o( E+ L7.3.2 容错性测试
    4 }5 h2 h9 D4 i' |2 y: W' K7 |容错性测试是检查软件在异常条件下的行为。容错性好的软件能确保系统不发生无法意料的事故。, |" v. Z. J2 j( x6 R; b
    比较温柔的容错性测试通常构造一些不合理的输入来引诱软件出错,例如:5 Q% t/ l; C7 l" R' _
    (1)输入错误的数据类型,如“猴”年“马”月。
    , m0 Z$ v; }: T4 `. R  Y(2)输入定义域之外的数值,上海人常说的“十三点”也算一种。! G$ I% l+ I# O6 {% I9 A" E
    粗暴一些的容错性测试俗称“大猩猩”测试,除了不能拳打脚踢嘴咬,什么招术都可以使出来。这里我举不出例子,因为我没有对程序粗暴过,并且这辈子也不打算学会粗暴。
    - o- m; y/ L: l4 u
    4 k+ H, k' V% D7 x3 D! F7.3.3 性能与效率测试9 o& U3 ], j- i$ ^+ H' a4 h
    性能与效率测试主要是测试软件的运行速度和对资源的利用率。有时人们关心测试的“绝对值”,如数据送输速率是每秒多少比特。有时人们关心测试的“相对值”,如某个软件比另一个软件快多少倍。4 Z8 g8 X, m  [9 k, E
    在获取测试的“绝对值”时,我们要充分考虑并记录运行环境对测试的影响。例如计算机主频,总线结构和外部设备都可能影响软件的运行速度;若与多个计算机共享资源,软件运行可能慢得像蜗牛爬行。' P" t& ~5 }. `1 K- R# v# e
    在获取测试的“相对值”时,我们要确保被测试的几个软件运行于完全一致的环境中。硬件环境的一致性比较容易做到(用同一台计算机即可)。但软件环境的因素较多,除了操作系统,程序设计语言和编译系统对软件的性能也会产生较大的影响。如果是比较几个算法的性能,就要求编程语言和编译器也完全一致。
    $ c$ N' M0 e; l0 i0 s性能与效率测试中很重要的一项是极限测试,因为很多软件系统会在极限测试中崩溃。例如,连续不停地向服务器发请求,测试服务器是否会陷入死锁状态不能自拔;给程序输入特别大的数据,看看它是否吃得消。
    0 A/ x0 d. w) E; w1 W, M8 K% y& a4 Y+ R- I+ x3 F  B+ ~5 N) h
    7.3.4 易用性测试; a6 M+ A+ [, x5 U5 C
    易用性测试没有一个量化的指标,主观性较强。调查表明,当用户不理解软件中的某个特性时,大多数人首先会向同事、朋友请教。要是再不起作用,就向产品支持部门打电话。只有30%的用户会查阅用户手册。[Cusumano 1995]2 C5 C, F& P- E0 y8 n/ q- [
    一般认为,如果用户不翻阅手册就能使用软件,那么表明这个软件具有较好的易用性。0 Q$ ?+ D# F- a; B! |2 T+ h, u

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

    ) d* Q' m5 n! I/ i$ B2 v9 Z' h: ?" c6 c+ G% B& a0 W  T  y
                                                                               ——Trimed By HavenGu , h/ A6 U/ m( }* y" C) I& K2 R

    4 u# p7 N& k) p5 V) G0 b& x( Jacky_Shu’s talk on 5/12/06 )
    , |3 T0 _5 f0 Y) |/ Q
    0 o; c- E2 ~/ o  ]; o    Q7 ?. P, T& h& z1 G( o
    ) t1 U. u8 e6 o
      
    ' W+ J" P+ v/ N9 f( x& A
    6 h; g+ I! ]- }0 J1 {" K- m" S1 y                     Unswitch Power      à    PC主机,显示器
    7 W; o2 g+ e; [, w5 @2 R9 _8 t4 G* `) f  v1 W. g  X0 K9 C
    PDU 0 `7 E7 _% s% v7 G

    5 I) A6 W; s3 D! n; N3 k                                        fans - z" }( y1 G" c! W! \
    ! D# U+ V9 ^$ W7 q
                        Switch Power    à       testhead # W. h9 A$ R0 h) J6 n7 l1 `7 O  L

    3 ~2 E6 n. x+ d& W4 E: c5 H% u                                          6624A - R) U6 p# X) Q  X% q% ?, B
    / d) h' S: b. G% T& k5 |+ J
      
    4 E4 O8 L# b4 z: M2 G9 V* R; `2 i1 i( ]5 L
                                               9 @# r0 Q( R: R* o* b

    5 k' v, c3 v) I. }8 l7 h# p                              鼠标,键盘  à     HP/IBM 两键鼠
    ( B9 F- Y( D/ D$ K" z! y& I# v
    9 X' m. W2 p) m. E. k& |CDB Errors 1 A4 o$ Z* j+ `" i5 t" a

    5 `6 h  F2 Y; S, Y6 e  p                               网络    à    单用户模式 + Q. `3 x: K, u/ n; D
    & ^! [6 t2 v- r  D
      ' R) ^, P/ D% O+ [1 p2 U

    ( G8 J& ~0 R6 f  F* S( ^; G- R进入单用户模式:
    ) W$ Z8 u8 U/ M) [" Z* p6 v8 ^0 G3 M8 ]
            1.   重启PC     (  按[ tab] 可更改分辨率 )
    + {" q* X7 o# L
    5 U- m4 i, F% G2.      按 [Esc]  . Q1 |3 o" b! ^. a0 R! c7 `

    ; Q; _2 r% q$ G/ e" I, Y7 Q) ]2 h3.      键入命令 “ search “ 回车;
    * P% J" W6 b; M3 B1 F4 m* e
    8 |, ~1 V6 A  S- [5 L" ?4.      > boot P0 或>boot P1  (硬盘启动)
    % u: h! R* l8 V3 G; f8 O- I1 t0 y, o! y) I  n  c
    5.      ISL(Yes/No/I…)> Y ,回车
    9 }7 C; b/ p. C& @! f0 m6 s  \0 F# u5 a, [+ y) H$ Y; [4 Q, q* n
    6.      SINGEL MODE # l1 t, D) |1 N, C: |
    , f3 f: j+ P& t) X9 t) _# M/ I
            #hpux –lm            à 进入单用户调试模式
    % j5 n" \0 S) B3 ~  a- [' P& }$ ?/ l9 M. T
            #hpux –is              à正常启动系统 4 P2 J6 q. o; Y: }6 {- u+ O( T3 Y) q

    & k; t! m* _, k5 k" b: r& ~0 x* J  . O: ~- z) g4 a) Y: S! n4 x0 n

    * b# u. s# W" P( b6 z3 O& I5 Z& J    K" F" p$ c# ~6 v

    ( P$ `5 _% ~" C2 k  
    6 [$ d* t4 Y/ I1 o$ ^
    / j2 Z* ]+ a( Q6 D# u; o* J! t) J    F2 N5 z) A/ I+ E" [, ?

    0 w, B1 g; |6 }5 s  
    $ R% d1 Z8 A/ |% d& p9 d/ [3 V2 H# c6 ?1 E! m, @
      * N) T$ @" H/ j* t# D" k" E
    ) G' f+ |) \5 q9 i8 n
      
    * @- n4 c8 X2 A' X' S) v  d  Y& o0 m; S9 U& S
      7 \% T* r. T* d/ _8 K7 v
    $ y9 G' T6 R; Y. N- U2 J
      # a$ v0 k8 t# o9 c# |
    1 X- Y6 K$ K4 U6 R' G
      
    % W' U$ v/ i% c/ A( b! {
    ( Q8 w# {9 E: x: L9 @; K9 n  X% r7 h$ y2 e

      Q' Q$ U3 H/ {' O  I(1) System card time out 1 c# d, N- V! V$ k
    , O9 `! V  D" z" l' q+ X2 U0 g+ I
    Boot Step:
    " d7 e( N7 T1 k! E: K- n+ `8 Y
    " d& X/ \6 `4 F# h& x8 J2 j9 H7 C% c( A8 q
      
    * I6 H2 J$ \0 l  N) p9 q' c, a$ q8 S. a1 B* W& k% X
      
    + h2 i7 n( P3 o3 s" {  LAN1 card    à    System card    à    Control XT LAN   
    , }0 e$ p( x4 r, L1 b; m2 B& s4 g1 \7 A, J5 l: y+ a
                                                                
    9 X3 z5 n# O0 {: F  D) {
    : ]3 I0 p- m9 a0 h) H+ @  
    8 S2 s* K; G; ~9 r! R0 v  y/ b4 a
    & r) i6 x5 m7 g/ o                    1.检查网络连接                                               1. LAN  cable (光纤) 7 q, x9 P* l2 {9 w
      A- K# g# k0 T& c( s* F1 V
                         cd /etc                                                                                                
    & ?$ a, D0 J$ j1 v
    % A0 G+ F0 j" c8 o/ y" Q2 B. _                        ping 10.3.112.1                                            2. 50ohm终端电阻 + v  e4 j. k& S
    " O  j( _5 u& B6 }% F
                                                                                                                                    
    6 [0 v+ X; e/ N$ t+ O8 w$ f# F1 [) ^3 @1 @& Q% g& E
                                                            1.  有无电源?(LED指示) . _, }! _5 h4 w) S* j
    5 U) G$ E# I7 x; D% l) D* m! u# Y
                                                            2.  地址匹配? ) l7 l, |" U, t$ q8 Y
    9 K4 \( [3 p' L2 ^  y$ k1 v
                                                                 * 卡上标签 6 R% M# G% {5 v, m5 v( g9 X

    1 ]; ~* K" ?9 `3 V9 p                                                             * /etc/.enable中(用text edit 打开)
    6 r+ \+ J& ~7 x) |2 d: F$ Q
    ! ]8 \& h# @5 q& O/ V) v                                                                testhead 1
    , p+ m1 ?5 O7 _. `- x& I
    - ?: U& e& N2 ]$ K; H( r                                                                HA:xx….xx % v* S4 M3 H: U; ?% o' U

    0 E  V0 V" ?' E( I                                                       3.  检查网络连接
    7 X# L+ |' k3 f3 x- T* X( o
    5 u' ^0 o  |7 H* C# l( x8 v                                                              cd /etc
    9 S+ f9 q  a( v) c6 [8 }4 U0 P$ a
                                                                  ping 10.3.112.2 * P! i5 S* P3 I, u% a
    $ x% n' c) j) k' v% A2 l
                         
    # M' s6 z; r) e  S) i# S8 c7 \* U7 k, ^% W: ^9 d
                        ① HUB à  GPIB      
    ( @: d* k2 m( I7 o
    9 s/ s: `  l; N" O6 z0 E                    ②  LAN cable & High Speed Link Cable  (光纤& 排线)
    ) x6 H0 g4 v# z* z0 |5 J, [. p6 H5 D- _. d
      
    , d/ c9 n1 P& H# k: m0 N. p, x! g
    ! w; O, e+ X( z% Q. X6 k6 L  7 H3 q2 N) Q8 a/ M: T! `

    9 E& f' l; O1 L2 O& L/ y% }0 D(2) 实际config与设置config不匹配
    $ i- h# ^! s) ~' F' |! R" J/ `2 ~
                     1.  EX000-69540        -66540       à   6M
    1 C. T2 A( v% f/ n/ o9 k  [0 E0 T
    9 |) ~- a% q( O               -69550        -69550    à   6M, 12M, 20M
    ! M& ?' `( j$ {5 X
    0 d6 U% s! H4 }) j" ?                     设置文件: /etc/.enable 0 [! }9 `/ f% E6 C. q) l

    7 |+ m9 x2 C4 f                  ' p4 n  Z* U" K  e* g* L& ~  _

    , x$ ^  }) d9 J                 2.  config下 NO Card      * ; {; ~7 i" f) m# J: _

    1 B/ t* Y0 b. b& @0 P                                   NO Card      * " S0 o5 ]; Q2 \: h, n

    " ~+ \+ U2 ~1 R% C* I. b                                   …… $ I- H  Z* w# A/ s0 |
    0 f+ n3 [5 j$ L) r7 S( n
                                       NO Card      * 8 G) R0 k4 `( k

    # d9 y* g  B6 D2 i4 Z                    即系统找不到PIN Card等,可判断为MPU损坏。 $ a/ L( ^" Z- @5 y& ^) ^( H
    1 u9 b4 I# Z& x6 q* o
      
    . k. G1 h- b$ X$ B- _2 W# A
    0 H8 o) S: r% A7 R4 d6 C3 c' f                3.  config下   ASRU Card 忽隐忽现,判断为Mother Board Problem.
    ' p) `0 r. S; n- u# G6 F9 A$ }: t
      ^6 B& {  J+ _  r; h. z# P(1)    螺丝是否上紧
    ( S# p+ ^! z+ {# K1 \! E! T5 H1 {6 P
    - o1 I7 X4 a' U, `, S) j! K" K(2)    与ASRU卡connector接触不良,需清理 " A* o% L8 }  v
    $ \8 T' G# ]8 Q+ k
    (3)    Mother Board 损坏,需更换
    6 ]0 C/ E2 O+ t" L0 K
    " H  Y2 j8 b4 x7 ~/ r/ W    r0 t5 Z0 X  [& Z

    # G, }, b* v! O  
    5 v" k4 W+ L# J1 z! S0 l
    ( U9 ~; ^  K8 E7 C8 j  
    3 ~. G, E0 w- E* w# M4 z
    ' k+ T0 p# g. T: p5 J9 d9 g  " X. x' k8 R, L) d5 v' f8 V

    8 C( w& O- P8 ^4 ?5 F  / {- |+ @& |4 X- @. O' T
    6 V& b4 R, B$ x3 R$ D! y
    (3) Control Card Self-handshack 6 h  ]0 \4 c- ?- R" h) w. d  F4 L

    - O% E1 I/ b# t9 Z                       检查Control Card 设置 / \, M( R9 E) j# g

    ' }! _& V" n9 ]+ y3 g- g  
    8 c( G: T$ \7 x  Q* i: e7 P6 }, z. B. S! J/ o
                                 检查High Speed Link Cable
    2 u. e1 }& p9 j) l- z- s* ]5 q
    ) h- z( g' B( V3 E! Z$ Y/ U  
    ' X! x% R: N, @2 [* r! ]" |% y0 Z, h
                                 检查LAN Cable 8 x* Q) ~2 s( |( P% l% t+ L4 M

    1 `# ^7 M1 k- j0 T$ _& m  ) z7 W4 J; L4 `
    & I; j: l7 m* ]4 q, h) f3 c
                        ·Control Card 地址设置:
    + [9 o3 F2 O3 j5 Z5 M9 z% o( ~8 v$ C' z. A/ p# y' M. e
                          /etc/bootptab中(用text edit打开)
    " k! W/ z8 P* W+ l: N" W6 f: X1 B
                                Module 0,1,2,3
    3 j" K6 r, A; w3 L; \3 G; _4 [: _6 D! U, M2 w) W6 W
                                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-26 13:37 , Processed in 0.202474 second(s), 45 queries , Gzip On, Xcache On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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