![]() |
上海壹僑國(guó)際貿(mào)易有限公司
主營(yíng)產(chǎn)品: FILA,DEBOLD,ESTA,baumer,bernstein,bucher,PILZ,camozzi,schmalz |
會(huì)員.png)
聯(lián)系電話
![]() |
上海壹僑國(guó)際貿(mào)易有限公司
主營(yíng)產(chǎn)品: FILA,DEBOLD,ESTA,baumer,bernstein,bucher,PILZ,camozzi,schmalz |
聯(lián)系電話
參考價(jià) | 面議 |
更新時(shí)間:2025-03-24 13:40:56瀏覽次數(shù):471
聯(lián)系我們時(shí)請(qǐng)說明是化工儀器網(wǎng)上看到的信息,謝謝!
產(chǎn)地類別 | 進(jìn)口 | 應(yīng)用領(lǐng)域 | 生物產(chǎn)業(yè),地礦 |
---|
Prevost 20 3660058098915
Prevost 22 3660058098939
Prevost 25 3660058098953
Prevost 27 3660058098991
Prevost 0507 3660058018708
Prevost 0709 3660058018715
Prevost 0911 3660058018722
Prevost 1113 3660058018739
Prevost 1315 3660058018753
Prevost 1517 3660058018777
Prevost 1518 3660058018784
Prevost 1720 3660058018807
Prevost 1821 3660058018821
Prevost 2023 3660058018838
Prevost 2225 3660058018845
Prevost 2327 3660058018852
Prevost 2528 3660058018869
Prevost 2731 3660058018876
Prevost 3134 3660058018883
Prevost 3437 3660058018890
Prevost 3740 3660058018906
Prevost 4043 3660058018913
Prevost 4346 3660058018920
Prevost 27101 3660058026345
Prevost 27103 3660058026352
Prevost 27201 3660058136440
Prevost 0708EG 3660058048996
Prevost 0709E 3660058048798
Prevost 0709P 3660058237079
Prevost 0809EG 3660058049009
Prevost 0810E 3660058048804
Prevost 0910EG 3660058049016
Prevost 0911E 3660058048811
Prevost 0911P 3660058237499
Prevost 1011EG 3660058049023
Prevost 1012E 3660058048828
Prevost 1012EG 3660058049030
Prevost 101V 3660058098861
Prevost 1113E 3660058048835
Prevost 1113EG 3660058049047
Prevost 1113P 3660058240123
Prevost 1213D 3660058018746
Prevost 1214E 3660058048842
Prevost 1315EG 3660058049054
Prevost 1315P 3660058237741
Prevost 1415D 3660058018760
Prevost 1416E 3660058048859
Prevost 1517EG 3660058049061
Prevost 1517P 3660058270717
Prevost 1518P 3660058237765
Prevost 1617D 3660058018791
Prevost 1618E 3660058048866
Prevost 1720P 3660058237086
Prevost 1819D 3660058018814
Prevost 1821P 3660058237093
Prevost 2023P 3660058237109
Prevost 20FX 3660058098922
Prevost 2225P 3660058270724
Prevost 22FX 3660058098946
Prevost 2327P 3660058237116
Prevost 25FX 3660058098960
Prevost 25M38 3660058098977
Prevost 27102 BL10 3660058025829
Prevost 27102 EC6A 3660058099141
Prevost 27102 EC6I 3660058099172
Prevost 27102 EC7E 3660058099189
Prevost 27102 ECR 3660058025843
Prevost 27102 ECRP 3660058253437
Prevost 27102 F18 3660058025867
Prevost 27102 MB13 3660058099219
Prevost 27102 MB20 3660058099257
Prevost 27102 MB40OSH 3660058225816
Prevost 27102 MT6A 3660058099585
Prevost 27102 MT6I 3660058099615
Prevost 27102 MT7E 3660058099622
Prevost 27102 MTJ06 3660058171960
Prevost 27102 MTJ09 3660058171953
Prevost 27102 MTL 3660058025874
Prevost 27102 MTLBP3 3660058025881
Prevost 27102 MTLP 3660058231961
Prevost 27102 OS6A 3660058099677
Prevost 27102 OS6I 3660058099707
Prevost 27102 OS7E 3660058099714
Prevost 27102 OSH 3660058025928
Prevost 27102 OSHP 3660058253444
Prevost 27102 PR6A 3660058099820
Prevost 27102 PR6I 3660058099851
Prevost 27102 PR7E 3660058099868
Prevost 27102 PRE 3660058025942
Prevost 27102 PREBP3 3660058025959
Prevost 27102 PREP 3660058231978
Prevost 27102 PRJ06 3660058172042
Prevost 27102 PRJ13 3660058172059
Prevost 27102 SI6A 3660058099943
Prevost 27102 SI6I 3660058099974
Prevost 27102 SI7E 3660058099981
Prevost 27102 SIJ06 3660058172073
Prevost 27102 SIJ09 3660058172066
Prevost 27102 SIJ13 3660058172080
Prevost 27102 SIL 3660058025973
Prevost 27102 SILP 3660058253451
Prevost 27201E 3660058136457
Prevost 27F38 3660058099011
Prevost 27FX 3660058099004
Prevost 29FX 3660058028141
Prevost 30FX 3660058028158
Prevost 7101T 3660058026376
Prevost 7200T 3660058026383
Prevost A1 0101 3660058015608
Prevost A1 1201 3660058236232
Prevost A1 1212 3660058015615
Prevost A1 1212I 3660058064569
Prevost A1 1234I 3660058064576
Prevost A1 1412 3660058015639
Prevost A1 1414 3660058015646
Prevost A1 1414I 3660058064583
Prevost A1 14251 3660058015653
Prevost A1 1438 3660058015660
Prevost A1 1438I 3660058064606
Prevost A1 1814 3660058015677
Prevost A1 1814I 3660058064613
Prevost A1 1818 3660058015684
Prevost A1 1818I 3660058064620
Prevost A1 1838 3660058015707
Prevost A1 3401 3660058015714
Prevost A1 3412 3660058015721
Prevost A1 3434 3660058015738
Prevost A1 3434I 3660058064637
Prevost A1 3442 3660058236249
Prevost A1 3812 3660058015745
Prevost A1 3812I 3660058064651
Prevost A1 3834 3660058236225
Prevost A1 3838 3660058015752
Prevost A1 3838I 3660058064668
Prevost A1 M518 3660058015592
Prevost A1 M5M5 3660058015585
Prevost A10 0101 3660058040679
Prevost A10 1212 3660058015820
Prevost A10 1212P2 3660058232845
Prevost A10 1414 3660058015837
Prevost A10 1414P2 3660058232838
Prevost A10 1818 3660058015844
Prevost A10 3434 3660058015851
Prevost A10 3838 3660058015882
Prevost A10 3838P2 3660058232852
Prevost A11 01 3660058040150
Prevost A11 12 3660058015875
Prevost A11 12P 3660058233859
Prevost A11 14 3660058045919
Prevost A11 14P2 3660058232869
Prevost A11 18 3660058015899
Prevost A11 34 3660058015905
Prevost A11 38 3660058015912
Prevost A11 38P2 3660058232876
Prevost A11 42 3660058176040
Prevost A11 49 3660058176057
Prevost A11 60 3660058176064
Prevost A12 0101 3660058040310
Prevost A12 1212 3660058015936
Prevost A12 1414 3660058015943
Prevost A12 1818 3660058015950
Prevost A12 3434 3660058015967
Prevost A12 3838 3660058015974
Prevost A13 0101 3660058040327
Prevost A13 1212 3660058015981
Prevost A13 1414 3660058015998
Prevost A13 1818 3660058016001
Prevost A13 3434 3660058016018
Prevost A13 3838 3660058016025
Prevost A14 12 3660058016032
Prevost A14 14 3660058016056
Prevost A14 18 3660058016070
Prevost A14 38 3660058016087
Prevost A15 12 3660058016100
Prevost A15 14 3660058016117
Prevost A15 18 3660058040723
Prevost A15 38 3660058016124
Prevost A16 3814S2 3660058040877
Prevost A16 3814S3 3660058040884
Prevost A16 3814S4 3660058016131
Prevost A16 3814S5 3660058016148
Prevost A16 3814S6 3660058016155
Prevost A17 14 3660058064743
Prevost A17 38 3660058064750
Prevost A18 12 3660058016162
Prevost A18 14 3660058016179
Prevost A18 18 3660058016186
Prevost A18 34 3660058016193
Prevost A18 38 3660058016209
Prevost A2 0101 3660058016230
Prevost A2 1212 3660058016247
Prevost A2 1212P2 3660058232548
Prevost A2 1234 3660058016254
Prevost A2 1412 3660058016261
Prevost A2 1412P2 3660058232586
Prevost A2 1414 3660058016278
Prevost A2 1414P2 3660058232531
Prevost A2 1438 3660058016285
Prevost A2 1438P2 3660058232555
Prevost A2 1814 3660058016292
Prevost A2 1818 3660058016308
Prevost A2 1838 3660058016315
Prevost A2 3401 3660058016339
Prevost A2 3434 3660058040402
Prevost A2 3434P2 3660058232593
Prevost A2 3812 3660058016346
Prevost A2 3812P2 3660058232579
Prevost A2 3838 3660058016353
Prevost A2 3838P2 3660058232562
Prevost A2 4201 3660058016360
Prevost A2 4242 3660058016377
Prevost A2 4942 3660058016384
Prevost A2 4949 3660058016391
Prevost A2 6049 3660058016407
Prevost A2 6060 3660058016414
Prevost A20 12 3660058040655
Prevost A20 14 3660058016636
Prevost A20 18 3660058016643
Prevost A20 38 3660058040648
Prevost A21 12 3660058064781
Prevost A21 14 3660058064798
Prevost A21 18 3660058064804
Prevost A21 38 3660058064811
Prevost A23 01T0,5 3660058051552
Prevost A23 01T1 3660058051569
Prevost A23 01T1,5 3660058051576
Prevost A23 01T10 3660058051743
Prevost A23 01T10,5 3660058051750
Prevost A23 01T11 3660058051767
Prevost A23 01T11,5 3660058051774
Prevost A23 01T12 3660058051781
Prevost A23 01T12,5 3660058051835
Prevost A23 01T13 3660058051842
Prevost A23 01T13,5 3660058051859
Prevost A23 01T14 3660058051866
Prevost A23 01T14,5 3660058059978
Prevost A23 01T15 3660058051873
Prevost A23 01T15,5 3660058051880
Prevost A23 01T16 3660058051897
Prevost A23 01T16,5 3660058053402
Prevost A23 01T17 3660058051910
Prevost A23 01T17,5 3660058053419
Prevost A23 01T18 3660058051927
Prevost A23 01T18,5 3660058051934
Prevost A23 01T19 3660058051941
Prevost A23 01T19,5 3660058051958
Prevost A23 01T2 3660058051583
Prevost A23 01T2,5 3660058051590
Prevost A23 01T20 3660058051965
Prevost A23 01T20,5 3660058051972
Prevost A23 01T21 3660058051989
Prevost A23 01T3 3660058051606
Prevost A23 01T3,5 3660058051613
Prevost A23 01T4 3660058051620
Prevost A23 01T4,5 3660058051637
Prevost A23 01T5 3660058051644
Prevost A23 01T5,5 3660058051651
Prevost A23 01T6 3660058051668
Prevost A23 01T6,5 3660058051675
Prevost A23 01T7 3660058051682
Prevost A23 01T7,5 3660058051699
Prevost A23 01T8 3660058051705
Prevost A23 01T8,5 3660058051712
Prevost A23 01T9 3660058051729
Prevost A23 01T9,5 3660058051736
Prevost A23 12T0,5 3660058051064
Prevost A23 12T1 3660058051071
Prevost A23 12T1,5 3660058051088
Prevost A23 12T10 3660058051255
Prevost A23 12T10,5 3660058051262
Prevost A23 12T11 3660058051279
Prevost A23 12T11,5 3660058051286
Prevost A23 12T12 3660058051293
Prevost A23 12T12,5 3660058051811
Prevost A23 12T13 3660058052696
Prevost A23 12T13,5 3660058052702
Prevost A23 12T14 3660058052719
Prevost A23 12T14,5 3660058052726
Prevost A23 12T15 3660058052733
Prevost A23 12T15,5 3660058052740
Prevost A23 12T16 3660058052757
Prevost A23 12T16,5 3660058052764
Prevost A23 12T17 3660058052771
Prevost A23 12T17,5 3660058052788
Prevost A23 12T18 3660058052795
Prevost A23 12T18,5 3660058052801
Prevost A23 12T19 3660058052818
Prevost A23 12T19,5 3660058052825
Prevost A23 12T2 3660058051095
Prevost A23 12T2,5 3660058051101
Prevost A23 12T20 3660058052832
Prevost A23 12T20,5 3660058052849
Prevost A23 12T21 3660058052856
Prevost A23 12T21,5 3660058052863
Prevost A23 12T22 3660058052870
Prevost A23 12T22,5 3660058052887
Prevost A23 12T23 3660058052894
Prevost A23 12T23,5 3660058052900
Prevost A23 12T24 3660058052917
Prevost A23 12T24,5 3660058052924
Prevost A23 12T25,5 3660058052948
Prevost A23 12T26 3660058052955
Prevost A23 12T26,5 3660058052962
Prevost A23 12T27 3660058052979
Prevost A23 12T27,5 3660058052986
Prevost A23 12T28 3660058052993
Prevost A23 12T28,5 3660058053006
Prevost A23 12T29 3660058053013
Prevost A23 12T29,5 3660058053020
Prevost A23 12T3 3660058051118
Prevost A23 12T3,5 3660058051125
Prevost A23 12T30 3660058053037
Prevost A23 12T4 3660058051132
Prevost A23 12T4,5 3660058051149
Prevost A23 12T5 3660058051156
Prevost A23 12T5,5 3660058051163
Prevost A23 12T6 3660058051170
Prevost A23 12T6,5 3660058051187
Prevost A23 12T7 3660058051194
Prevost A23 12T7,5 3660058051200
Prevost A23 12T8 3660058051217
Prevost A23 12T8,5 3660058051224
Prevost A23 12T9 3660058051231
Prevost A23 12T9,5 3660058051248
Prevost A23 14T0,5 3660058050586
Prevost A23 14T1 3660058050593
Prevost A23 14T1,5 3660058050609
Prevost A23 14T10 3660058050777
Prevost A23 14T10,5 3660058050784
Prevost A23 14T11 3660058050791
Prevost A23 14T11,5 3660058050807
Prevost A23 14T12 3660058050814
Prevost A23 14T12,5 3660058051798
Prevost A23 14T13 3660058051996
Prevost A23 14T13,5 3660058052009
Prevost A23 14T14 3660058052016
Prevost A23 14T14,5 3660058052023
Prevost A23 14T15 3660058052030
Prevost A23 14T15,5 3660058052047
Prevost A23 14T16 3660058052054
Prevost A23 14T16,5 3660058052061
Prevost A23 14T17 3660058052078
Prevost A23 14T17,5 3660058052085
Prevost A23 14T18 3660058052092
Prevost A23 14T18,5 3660058052108
Prevost A23 14T19 3660058052115
Prevost A23 14T19,5 3660058052122
Prevost A23 14T2 3660058050616
Prevost A23 14T2,5 3660058050623
Prevost A23 14T20 3660058052139
Prevost A23 14T20,5 3660058052146
Prevost A23 14T21 3660058052153
Prevost A23 14T21,5 3660058052160
Prevost A23 14T22 3660058052177
Prevost A23 14T22,5 3660058052184
Prevost A23 14T23 3660058052191
Prevost A23 14T23,5 3660058052207
Prevost A23 14T24 3660058052214
Prevost A23 14T24,5 3660058052221
Prevost A23 14T25 3660058052238
Prevost A23 14T25,5 3660058052245
Prevost A23 14T26 3660058052252
Prevost A23 14T26,5 3660058052269
Prevost A23 14T27 3660058052276
Prevost A23 14T27,5 3660058052283
Prevost A23 14T28 3660058052290
Prevost A23 14T28,5 3660058052306
Prevost A23 14T29 3660058052313
Prevost A23 14T29,5 3660058052320
Prevost A23 14T3 3660058050630
Prevost A23 14T3,5 3660058050647
Prevost A23 14T30 3660058052337
Prevost A23 14T4 3660058050654
Prevost A23 14T4,5 3660058050661
Prevost A23 14T5 3660058050678
Prevost A23 14T5,5 3660058050685
Prevost A23 14T6 3660058050692
Prevost A23 14T6,5 3660058050708
Prevost A23 14T7 3660058050715
Prevost A23 14T7,5 3660058050722
Prevost A23 14T8 3660058050739
Prevost A23 14T8,5 3660058050746
Prevost A23 14T9 3660058050753
Prevost A23 14T9,5 3660058050760
Prevost A23 34T0,5 3660058051309
Prevost A23 34T1 3660058051316
Prevost A23 34T1,5 3660058051323
Prevost A23 34T10 3660058051507
Prevost A23 34T10,5 3660058051514
Prevost A23 34T11 3660058051521
PREVOST RPD MR1001 1/4"
PREVOST RPD MR1002 3/8"
PREVOST RPD MR1203 1/2"
PREVOST RPD MR1202 3/8"
PREVOST RPD MR1201 1/4"
PREVOST RPD MR1203,1/2"
PREVOST RPD MR0801,1/4"
PREVOST RPD MR0802,3/8"
PREVOST RPD MR1202,3/8"
PREVOST RPD MR0800,1/8"
PREVOST RPD MR1201,1/4"
PREVOST RPT ET1212
PREVOST RPT ET1010
PREVOST RPU ET0606
PREVOST RPD MR1203,1/2"
PREVOST RPD MR0801,1/4"
PREVOST RPD MR0802,3/8"
PREVOST RPD MR1202,3/8"
PREVOST RPD MR0800,1/8"
PREVOST RPD MR1201,1/4"
PREVOST MT RA1050
PREVOST MT RA1023
PREVOST RPU IT1210
PREVOST RPU IT1008
PREVOST RPU IT0806
PREVOST RPY ET1010
PREVOST RPY ET1212
PREVOST RPT ET0808
PREVOST RPU ET0808
PREVOST ISI 08 G3/8
PREVOST ISI 08 G1/4
PREVOST DMF 0810N 8X12 10m 1115
PREVOST PUCR M0710100
一.法國(guó)PREVOST壓縮空氣ALR超級(jí)管道工程
ALR壓縮空氣管路近年來(lái)被譽(yù)為氣動(dòng)超級(jí)管道,安裝簡(jiǎn)捷方便、耐用時(shí)間十年以上、*生銹磨損、二次拆裝無(wú)損耗,憑借獨(dú)到的材料優(yōu)勢(shì),在各行各業(yè)的壓縮空氣管路中得到了廣泛的認(rèn)可和好評(píng)。
二.法國(guó)PREVOST安全快速接頭、氣動(dòng)卷管器、油水分離器、特種氣管、液壓接頭、 模具用CPI插頭、氣動(dòng)油脂泵等氣動(dòng)產(chǎn)品。
安全快速接頭,是一種不需要工具就能實(shí)現(xiàn)管路連通或斷開的接頭??焖俳宇^可分為:空氣用快速接頭、氧氣燃料氣體用快速接頭、氣體液體共用快速接頭、油壓用快速接頭、惰性氣體用快速接頭、冷卻水溫油用快速接頭、半導(dǎo)體快速接頭。
1、兩端開閉式
不鏈接時(shí):當(dāng)母體的套圈移到另一端時(shí),不銹鋼珠自動(dòng)向外滾動(dòng),子體因母體與子體共同閥門彈簧力的作用力運(yùn)作下而斷開,子體與母體的閥門各自閉合,瞬間阻斷流體流動(dòng)。
鏈接時(shí):按鈕式氣動(dòng)快速接頭廠家介紹說,當(dāng)子體插入母體時(shí),套圈在彈簧的作用下回到原來(lái)的位置,鋼珠滾動(dòng)鎖緊子體緊密連接,同時(shí)母體與子體的閥門互相推動(dòng)而打開,流體流通,O型圈能*阻斷流體的滲漏。
2、兩端開放式
不鏈接:當(dāng)母體的套圈被推到另一端時(shí),鋼珠自動(dòng)向外滾動(dòng),因此,子體被移出;由于子體與母體都沒有閥門,流體向外流出。
鏈接時(shí):當(dāng)子體插入母體時(shí),套圈被其彈簧的作用力推到先前的位置致鋼珠鎖緊,流體流動(dòng),其中的O型圈以防止液漏。
3、單路開閉式
不鏈接:當(dāng)母體的套圈移到另一端時(shí),不銹鋼珠自動(dòng)向外滾動(dòng),子體被閥門彈簧的反作用力彈開,閥門就能自動(dòng)關(guān)閉以阻斷流體流動(dòng)。
LOHSE 氣缸活塞 D605200
LOHSE 閥板 A810155
LOHSE 密封包 O4815000201 包含填料組件A836155 NL形密封圈A830153 滑動(dòng)襯板A337154 密封線A832905
LOHSE 密封法蘭 A852925
LOHSE 氣缸修理包 A037175
LOHSE 閥板 A810105
LOHSE 密封包 O4810000901 包含填料組件A836105 NL形密封圈A830103 滑動(dòng)襯板A337104 密封線A832903
LOHSE 密封法蘭 A852923
LOHSE 氣缸修理包 A037145
LOHSE 閥板 A807255
LOHSE 密封包 O9625000501 包含填料組件A837256 閥座A967269 導(dǎo)軌A967255 刮板A917165 圓形密封線A917251
KUBLER 編碼器 8.5883.5624.G323 091050397F
MURR 精密電阻板 67081
BANNER 傳感器 QS18EP6DQB
PHOENIX 無(wú)線通訊裝置 FL WLAN 24 AP 802-11
SIEMENS 電機(jī) 電機(jī)1LA7131-2AA61-Z
RITZ 電機(jī) 7AA100L-4 B35 3kW
ZIEHL-ABEGG 風(fēng)機(jī) RH71M-6DK.7Q.1R
ASC 高溫計(jì) PM500-2C法國(guó)PREVOST卷管器原裝法國(guó)PREVOST卷管器原裝
WURTH(Würth) 熱膠槍 HKLEBPIST-EL-HKP220 MASTER 07026231
WURTH(Würth) 剝線器 ENTMANTLER-KOMBI-RUND-8-13MM 071441 031
WURTH(Würth) 壓線鉗 CRIMPZANG-AENDHUE-(0,08-6QMM) ZEBRA,714107101
WURTH(Würth) 壓線鉗 CRIMPZANG-(UNISO-KBLVERB)-(0,5-2,5QMM) ZEBRA 0714107110
WURTH(Würth) 壓線鉗 CRIMPZANG-(UNISO-KBLVERB)-(0,5-6QMM) ZEBRA 0714107108
WURTH(Würth) 壓線鉗 ABISOZANG-SELBSTJUST-(0,02-10QMM) 071410810
WURTH(Würth) 組套 BO-MET-SORT-DIN338-HSS-155TLG 0964625020
WURTH(Würth) 風(fēng)槍 HLUFTGEBLAESE-EL-HLG2000 MASTER 07022020
WURTH(Würth) 電鉆 BOSHRBR-AKKU-(BS96-A SOLID)-NICD-2X2AH MASTER 07001823
WURTH(Würth) 電鉆 LOT-NR1-ZN60/PB40-1KG-D1 0987112
WURTH(Würth) 組套 VERBMUFF-GEL-WGM6 0975350001
WURTH(Würth) 鉆頭 BO-SPRL-HO-SET-HSS-S1/4ZO-19TLG ZEBRA 0650010001
WURTH(Würth) 鉆頭 SAE-ZYL-SET-HSS-(19-76MM)-16TLG ORSY100 0964632
WURTH(Würth) 鉆頭 GWDREP-SET-KOMPL-M5/M6/M8/M10/M12 09649617
WURTH(Würth) 鉆頭 EDSTPFLEG-SPRAY-400ML 0893121
WURTH(Würth) 紅外激光測(cè)溫儀 B33963101
WURTH(Würth) 絲錐板牙組套 Artk.:096592200, SHNDEIS-SET-(M5-M20)-43TLG
WURTH(Würth) 潤(rùn)滑劑 Artk.:08931066, HAFTSHMIRST-(HHS DRYLUBE)-400ML
WURTH(Würth) 電焊臺(tái) Artk.:07159450, LOETSA-ANALOG-60W
WURTH(Würth) 膠棒 Artk.:0890100050, SCHMELZKLEBST-HOCHFEST-F.MLIFTR-10ST
WURTH(Würth) 熱風(fēng)槍 Artk.:07022030, HLG 2300-LCD
WURTH(Würth) Artk.:071553110
XENSOR 傳感器 XEN-GFL9722
ZEPPELIN 20053240 PN 137051
ZEPPELIN 20041315 PN 124344
ZEPPELIN 20041314 PN 124343
ZEPPELIN 20041309 PN 124338
ZIEHL-ABEGG 風(fēng)機(jī) LKD-050GC-104-N4WBKK
ZIEHL-ABEGG 軸流風(fēng)機(jī) RH25M-2DK.1E.2R
ZIMMER 夾緊裝置 UBPS3505AS1
ZIMMER 導(dǎo)軌鎖 MKS2501A
ZIMMER 導(dǎo)軌鎖 MKS2501A
ZIMMER 導(dǎo)軌鎖(夾緊裝置) MBPS3505AS1
ZIMMER 加緊單元 MKS 2501A
AB 門級(jí)驅(qū)動(dòng)板 SK-H1-GDB1-F13E(替代型號(hào):SK-H1-GDB1-F1314E)
AB 門級(jí)驅(qū)動(dòng)板 SK-H1-GDB1-F10E(替代型號(hào):SK-H1-GDB1-F1012E)
AB 門級(jí)驅(qū)動(dòng)板 SK-H1-GDB1-F11E
AB 電壓反饋板 SK-H1-SVFB2-E1
AB ASIC板 SK-H1-ASICBD-E1180
AB 傳感器 42EF-P2JBB-F4
齊人有言曰雖有智慧不如 Tesa 04224-00126-00 Kautschukmasse WEISS L?nge/m: 66,00 Breite/m 絕緣膠帶
齊人有言曰雖有智慧不如 Reckmann s-nr:103047 接頭
齊人有言曰雖有智慧不如 MEN 01A201S12 基板
齊人有言曰雖有智慧不如 BECKHOFF C9900-P208
齊人有言曰雖有智慧不如 Euchner KCA2A2A2A2A0000DV0W
齊人有言曰雖有智慧不如 Mahle PIS3097/2.2 Nr:7769948 壓差傳感器
齊人有言曰雖有智慧不如 microsonic zws-15/BE/MAN1.2B 感應(yīng)傳感器
齊人有言曰雖有智慧不如 Hasco z809/13/16X1.5 接頭
齊人有言曰雖有智慧不如 MP HP0653A10ANP01 濾芯
齊人有言曰雖有智慧不如 Wolfgang Warmbier GmbH & Co. KG 2200.111 電纜
齊人有言曰雖有智慧不如 EGE SC440/1-A4-GSP 流量傳感器
齊人有言曰雖有智慧不如 Turck NI15-S30-AZ3X/S100 Nr:13758 接近開關(guān)
齊人有言曰雖有智慧不如 INA ZKLN1747-2RS-PE 軸承
齊人有言曰雖有智慧不如 Schnorr S 3,00 ,NR.410750 碟形彈簧
齊人有言曰雖有智慧不如 ROESSEL-Messtechnik GmbH 2-1277-00431-11 熱電阻
齊人有言曰雖有智慧不如 SIEMENS 3NG1302 自動(dòng)控制器
齊人有言曰雖有智慧不如 igus MAT9660001 接頭電纜
齊人有言曰雖有智慧不如 COREMO OCMEA Anr:102603862 Type:SB-N 50 氣缸
齊人有言曰雖有智慧不如 Mankenberg EB1.12 3/4*16ST-6FV 排氣閥
齊人有言曰雖有智慧不如 Turck SWKP4-5/S90,NO:8007382 接頭
齊人有言曰雖有智慧不如 BECKHOFF CP6201-0001-0020
齊人有言曰雖有智慧不如 Beckhoff Automation GmbH KL2134 總線模塊
齊人有言曰雖有智慧不如 SIEMENS 7ML1830-2AN 液位計(jì)
齊人有言曰雖有智慧不如 pizzato FS3098 D024,Nr.028FS3098D 安全開關(guān)
齊人有言曰雖有智慧不如 Leuze MLC510R14-1500/A
齊人有言曰雖有智慧不如 IFM PN4221 PN-250-SBN14-HFBOW/LS/ /V
齊人有言曰雖有智慧不如 Turck BL20-4DI-24VDC-N Nr:6827013 總線模塊
齊人有言曰雖有智慧不如 Hoentzsch A000/522 流量計(jì)附件
齊人有言曰雖有智慧不如 lumberg PRKFM 4/0,5 M
齊人有言曰雖有智慧不如 ATOS SCLI-1632/2/3 閥門
齊人有言曰雖有智慧不如 HBC 1 Z-Z00007 Drehtaster, BCD-Drehschalter 開關(guān)
齊人有言曰雖有智慧不如 JOYNER DUJ-30/150 氣缸密封
齊人有言曰雖有智慧不如 Contrinex LTK-1040-301-506
齊人有言曰雖有智慧不如 Contrinex DW-AD-618-M18
齊人有言曰雖有智慧不如 heidenhain LB382C Id.Nr.315420-04 光學(xué)測(cè)量?jī)x零件(讀數(shù)頭)
齊人有言曰雖有智慧不如 Contrinex UTS-1302-107
齊人有言曰雖有智慧不如 Rexroth 3DR16P5-5X/100Y/00M R900916666 液壓閥
齊人有言曰雖有智慧不如 Stauff SPG063-00400-01-P-B04-U 壓力表
齊人有言曰雖有智慧不如 IFM E10056 MOUNTING CLAMP IG
齊人有言曰雖有智慧不如 Turck BS4151-0/13.5 Nr:6904716 接頭
齊人有言曰雖有智慧不如 APPOLDT GmbH PFE240D25-MS31XS 2011XS, 250VAC 10A 自動(dòng)控制器
齊人有言曰雖有智慧不如 SMW 29795 防護(hù)器
齊人有言曰雖有智慧不如 balluff BES M30MM-PSC30F-S04K BES00AZ 接近開關(guān)
齊人有言曰雖有智慧不如 suco 0166-407-02-3-026 壓力開關(guān)
齊人有言曰雖有智慧不如 AECO FT13-CF PNP NO oder NC 接近開關(guān)
齊人有言曰雖有智慧不如 OTT-JAKOB 9510135632 拉爪
齊人有言曰雖有智慧不如 Wilberg Z 141.001 編碼器零件
齊人有言曰雖有智慧不如 BERNSTEIN SN2-SU1Z DGHW Nr:603.3371.004 感應(yīng)傳感器
齊人有言曰雖有智慧不如 IFM E10411 ESTGH040MSS00,5E04 (PG9)
齊人有言曰雖有智慧不如 Argus 3923-0008-58.91.36 球閥
齊人有言曰雖有智慧不如 Euchner RGBF02R16-502-M
齊人有言曰雖有智慧不如 Leuze FRKR 95/44-350 L
齊人有言曰雖有智慧不如 Funke 2.79*05.2.11-53.20.29 teile Nr 210 001 936 0 換熱器
齊人有言曰雖有智慧不如 B&R Industrie-Elektronik GmbH 7CM211.7 混合模塊
齊人有言曰雖有智慧不如 Vahle VS 1 NO.310050 JOINT CLAMP
齊人有言曰雖有智慧不如 hydac 0660 R 003 BN4HC 濾芯
齊人有言曰雖有智慧不如 PFLITSCH 22052d13 線纜氣封栓
齊人有言曰雖有智慧不如 PILZ 773100 繼電器
齊人有言曰雖有智慧不如 FLOWSERVE 70-VD 300333.999.000 閥門
齊人有言曰雖有智慧不如 FSG PW70d AN:1700Z04-065.117 電位器
齊人有言曰雖有智慧不如 DANFOSS 084B7086 控制器
齊人有言曰雖有智慧不如 SERTO 016.0200.060 SO 40020-6 接頭
齊人有言曰雖有智慧不如 SCHUNK RPE 200-X0800-Y0800-Z500 381425
齊人有言曰雖有智慧不如 Leuze MLC500T40-900MG
齊人有言曰雖有智慧不如 ATOS PFE-31044/1DT 閥門
齊人有言曰雖有智慧不如 Sommer GD1708-SB 抓手
齊人有言曰雖有智慧不如 Contrinex DW-AV-513-M18-276
齊人有言曰雖有智慧不如 SCHUNK GmbH & Co. KG HKI 1A Id-no: 0324161 墊片
齊人有言曰雖有智慧不如 ATOS DLOH-3C-UX24DC 閥門
齊人有言曰雖有智慧不如 SCHUNK 0301032 MMS 22-S-M8-PNP 接近開關(guān)
齊人有言曰雖有智慧不如 hydac TFP104-000 壓力傳感器附件
齊人有言曰雖有智慧不如 SERTO 016.0200.060 SO 40020-6 接頭
齊人有言曰雖有智慧不如 Euchner TP3-4141A024MC2184
齊人有言曰雖有智慧不如 NEXEN 800621 SEM-700*SHEAVE,3-5V,07.10 OD
齊人有言曰雖有智慧不如 Honsberg RRI-025GVQ160V10KNS 轉(zhuǎn)子流量計(jì)
齊人有言曰雖有智慧不如 balluff SKI-FSA-M30-P-nb-x-pbt-y2 接近開關(guān)
齊人有言曰雖有智慧不如 Turck BI2-EG08K-AP6X-V1131 Nr:4669450 接近開關(guān)
齊人有言曰雖有智慧不如 PTR 015/G-D60-1.0N-AU-0.61C Art.Nr 610152072084 測(cè)試探針
齊人有言曰雖有智慧不如 M.D. Micro Detectors S.p.A. SSP/DP-1E 光電傳感器
齊人有言曰雖有智慧不如 SICK 6036924 UM30-214118 光柵
齊人有言曰雖有智慧不如 Klaschka Nr.131430-001 SIDENT/B-22fv20-4O1 總線模塊
齊人有言曰雖有智慧不如 hydac EDS348-5-250-000 壓力開關(guān)
齊人有言曰雖有智慧不如 GANTER GN5335-40-M6-E 插銷
齊人有言曰雖有智慧不如 GMW N11460 流量計(jì)配件
齊人有言曰雖有智慧不如 KSB SISTO-B PN10 DN050 ML108 TFM/PTFE 2-teilig (FDA) 膜片
齊人有言曰雖有智慧不如 ATOS KG-033/100 減壓閥
齊人有言曰雖有智慧不如 HARTING 9340162701
齊人有言曰雖有智慧不如 GUTEKUNST D-063B 彈簧
齊人有言曰雖有智慧不如 parker PWS-M1012 壓力開關(guān)
齊人有言曰雖有智慧不如 Rechner AF0127 KFA-1-1000-FL-Y70
齊人有言曰雖有智慧不如 Rexroth 3DMC060/0608820113 傳感器
齊人有言曰雖有智慧不如 Murrelektronik GmbH 27116 繼電器底座
齊人有言曰雖有智慧不如 HAUHINCO 6539408 電磁閥
齊人有言曰雖有智慧不如 Hengstler GEBER RI58-O/ 600EQ.42KD Nr.0550382 編碼器
齊人有言曰雖有智慧不如 BIKON Bikon 2006 260*330 脹套
齊人有言曰雖有智慧不如 ALSTOM 029.356.519 通訊模塊
齊人有言曰雖有智慧不如 Siba 2000113.16 感應(yīng)傳感器
齊人有言曰雖有智慧不如 HYDROTECHNIK 2103-01-18.00N 接頭
齊人有言曰雖有智慧不如 UPAT UKA 3 M 16 接頭
齊人有言曰雖有智慧不如 Turck ID:69710 接近開關(guān)附件
齊人有言曰雖有智慧不如 weidmueller HDC CM BUS 4BS,1814300000 接頭
齊人有言曰雖有智慧不如 ATOS DLOH-3C-U 21 24DC 閥門
齊人有言曰雖有智慧不如 Contrinex DW-AD-602-065-120
齊人有言曰雖有智慧不如 Leuze CML720i-R40-2850.A/CV-M12
齊人有言曰雖有智慧不如 SCHENCK IN-081/3/080/100 壓力傳感器探頭
齊人有言曰雖有智慧不如 hydac KH3-G1/2-L-3314-01x 702115 球閥
齊人有言曰雖有智慧不如 Leuze FRKR 97/4-100 L
齊人有言曰雖有智慧不如 Phoenix Nr.2963802 繼電器
齊人有言曰雖有智慧不如 Gavazzi DPA03CM48
齊人有言曰雖有智慧不如 DOLD BD5987.03/201 DC24V 0044397 自動(dòng)控制器
齊人有言曰雖有智慧不如 Turck WASS4-5/S366,NO:8019147 接頭電纜
齊人有言曰雖有智慧不如 SIEMENS 3VL9300-8CA31 繼電器
齊人有言曰雖有智慧不如 PAULY PP2441q/308/R153s/e2/Z3s/220VAC,supply:230VAC;Output:relay 繼電器輸出
齊人有言曰雖有智慧不如 FuehlerSysteme Artikel-Nr.: ST/E-40 插頭
齊人有言曰雖有智慧不如 Turck BI3-G18-Y1X/S903 1009503 接近開關(guān)
齊人有言曰雖有智慧不如 dunkermotoren D554 SNR88943.04075 馬達(dá)
齊人有言曰雖有智慧不如 HAMMELMANN GmbH 01.00739.0153 O型圈
齊人有言曰雖有智慧不如 El-O-Matic EL500 220/240V 50HZ 執(zhí)行機(jī)構(gòu)
齊人有言曰雖有智慧不如 Bürklin 91 F 662(100M) 接頭
齊人有言曰雖有智慧不如 XECRO IHT30N15APC55/A2S 電感器
齊人有言曰雖有智慧不如 heidenhain 735117-52 編碼器
齊人有言曰雖有智慧不如 CARLO RGC1A60D20KKE 繼電器
齊人有言曰雖有智慧不如 COMAT CINT-52/UC24V
齊人有言曰雖有智慧不如 Bürklin 91 F 708(100M) 接頭
齊人有言曰雖有智慧不如 Sommer-automatic GmbH & Co. KG MGP804N 工件夾具
齊人有言曰雖有智慧不如 LABOM GMBH CE6120-A1058-K1010-T110-H1 壓力傳感器
齊人有言曰雖有智慧不如 parker VAY175A06AA1 HR13023185 溢流閥
齊人有言曰雖有智慧不如 NELSON Art.-Nr. 87-07-27 O型圈
齊人有言曰雖有智慧不如 Vogel 248661 齒輪箱
齊人有言曰雖有智慧不如 Euchner TP4-4141A024SR11
齊人有言曰雖有智慧不如 ReSatron GmbH RSG10M13+12-G-3-V1-SS-H,Artikel :02.01.251334400 編碼器
齊人有言曰雖有智慧不如 IFM AC1154 開關(guān)電源
齊人有言曰雖有智慧不如 west USB-SO 電纜
齊人有言曰雖有智慧不如 Phoenix 2746346, IBS ECO-LINK 總線模塊
齊人有言曰雖有智慧不如 Contrinex DW-AD-623-C5
齊人有言曰雖有智慧不如 Clifford & Snell 204815 YL50/D50/A/RF/WR 報(bào)警指示燈
齊人有言曰雖有智慧不如 Beckhoff EL5101 總線模塊
齊人有言曰雖有智慧不如 Rexroth R911308869;HLC01.1D-05M0-A-007-NNNN 電容器
齊人有言曰雖有智慧不如 Beckhoff Automation GmbH EL2008 模塊
齊人有言曰雖有智慧不如 WEIDEMANN DBV20-E40-FM210-24 電磁閥
齊人有言曰雖有智慧不如 RAFI GmbH & Co. KG 9.10119.031/0000 權(quán)限鎖開關(guān)
齊人有言曰雖有智慧不如 SCHUNK QUENTES 5, (MINI) 300760
齊人有言曰雖有智慧不如 Dauphin Art.-Nr.14593 球閥
齊人有言曰雖有智慧不如 Siba 2000013.25 感應(yīng)傳感器
齊人有言曰雖有智慧不如 SIEMENS 6DD1684-0GC0 電纜
單元測(cè)試與其他測(cè)試不同,單元測(cè)試可看作是編碼??過了單元測(cè)試的代碼才是已完成的代碼,提交產(chǎn)品代碼時(shí)也要同時(shí)提交測(cè)試代碼。測(cè)試部門可以作一定程度的審核。
關(guān)于樁代碼,單元測(cè)試應(yīng)避免編寫樁代碼。樁代碼就是用來(lái)代替某些代碼的代碼,例如,產(chǎn)品函數(shù)或測(cè)試函數(shù)調(diào)用了一個(gè)未編寫的函數(shù),可以編寫樁函數(shù)來(lái)代替該被調(diào)用的函數(shù),樁代碼也用于實(shí)現(xiàn)測(cè)試隔離。采用由底向上的方式進(jìn)行開發(fā),底層的代碼先開發(fā)并先測(cè)試,可以避免編寫樁代碼,這樣做的好處有:減少了工作量;測(cè)試上層函數(shù)時(shí),也是對(duì)下層函數(shù)的間接測(cè)試;當(dāng)下層函數(shù)修改時(shí),通過回歸測(cè)試可以確認(rèn)修改是否導(dǎo)致上層函數(shù)產(chǎn)生錯(cuò)誤。
在一種傳統(tǒng)的結(jié)構(gòu)化編程語(yǔ)言中,比如C,要進(jìn)行測(cè)試的單元一般是函數(shù)或子過程。在象C++這樣的面向?qū)ο蟮恼Z(yǔ)言中, 要進(jìn)行測(cè)試的基本單元是類。對(duì)Ada語(yǔ)言來(lái)說,開發(fā)人員可以選擇是在獨(dú)立的過程和函數(shù),還是在Ada包的級(jí)別上進(jìn)行單元測(cè)試。單元測(cè)試的原則同樣被擴(kuò)展到第四代語(yǔ)言(4GL)的開發(fā)中,在這里基本單元被典型地劃分為一個(gè)菜單或顯示界面。
單元測(cè)試不僅僅是作為無(wú)錯(cuò)編碼一種輔助手段在一次性的開發(fā)過程中使用,單元測(cè)試必須是可重復(fù)的,無(wú)論是在軟件修改,或是移植到新的運(yùn)行環(huán)境的過程中。因此,所有的測(cè)試都必須在整個(gè)軟件系統(tǒng)的生命周期中進(jìn)行維護(hù)。
經(jīng)常與單元測(cè)試聯(lián)系起來(lái)的另外一些開發(fā)活動(dòng)包括代碼走讀(Code review),靜態(tài)分析(Static analysis)和動(dòng)態(tài)分析(Dynamic analysis)。靜態(tài)分析就是對(duì)軟件的源代碼進(jìn)行研讀,查找錯(cuò)誤或收集一些度量數(shù)據(jù),并不需要對(duì)代碼進(jìn)行編譯和執(zhí)行。動(dòng)態(tài)分析就是通過觀察軟件運(yùn)行時(shí)的動(dòng)作,來(lái)提供執(zhí)行跟蹤,時(shí)間分析,以及測(cè)試覆蓋度方面的信息。
一旦編碼完成,開發(fā)人員總是會(huì)迫切希望進(jìn)行軟件的集成工作,這樣他們就能夠看到實(shí)際的系統(tǒng)開始啟動(dòng)工作了。 這在外表上看來(lái)是一項(xiàng)明顯的進(jìn)步,而象單元測(cè)試這樣的活動(dòng)也許會(huì)被看作是通往這個(gè)階段點(diǎn)的道路上的障礙, 推遲了對(duì)整個(gè)系統(tǒng)進(jìn)行聯(lián)調(diào)這種真正有意思的工作啟動(dòng)的時(shí)間。
在這種開發(fā)步驟中,真實(shí)意義上的進(jìn)步被外表上的進(jìn)步取代了。系統(tǒng)能夠正常工作的可能性是很小的,更多的情況是充滿了各式各樣的Bug。在實(shí)踐中,這樣一種開發(fā)步驟常常會(huì)導(dǎo)致這樣的結(jié)果:軟件甚至無(wú)法運(yùn)行。更進(jìn)一步的結(jié)果是大量的時(shí)間將被花費(fèi)在跟蹤那些包含在獨(dú)立單元里的簡(jiǎn)單的Bug上面,在個(gè)別情況下,這些Bug也許是瑣碎和微不足道的,但是總的來(lái)說,他們會(huì)導(dǎo)致在軟件集成為一個(gè)系統(tǒng)時(shí)增加額外的工期, 而且當(dāng)這個(gè)系統(tǒng)投入使用時(shí)也無(wú)法確保它能夠可靠運(yùn)行。
在實(shí)踐工作中,進(jìn)行了完整計(jì)劃的單元測(cè)試和編寫實(shí)際的代碼所花費(fèi)的精力大致上是相同的。一旦完成了這些單元測(cè)試工作,很多Bug將被糾正,在確信他們手頭擁有穩(wěn)定可靠的部件的情況下,開發(fā)人員能夠進(jìn)行更高效的系統(tǒng)集成工作。這才是真實(shí)意義上的進(jìn)步,所以說完整計(jì)劃下的單元測(cè)試是對(duì)時(shí)間的更高效的利用。而調(diào)試人員的不受控和散漫的工作方式只會(huì)花費(fèi)更多的時(shí)間而取得很少的好處。
使用AdaTEST和Cantata這樣的支持工具可以使單元測(cè)試更加簡(jiǎn)單和有效。但這不是必須的,單元測(cè)試即使是在沒有工具支持的情況下也是一項(xiàng)非常有意義的活動(dòng)。
它僅僅是證明這些代碼做了什么
這是那些沒有首先為每個(gè)單元編寫一個(gè)詳細(xì)的規(guī)格說明而直接跳到編碼階段的開發(fā)人員提出的一條普遍的抱怨, 當(dāng)編碼完成以后并且面臨代碼測(cè)試任務(wù)的時(shí)候,他們就閱讀這些代碼并找出它實(shí)際上做了什么,把他們的測(cè)試工作基于已經(jīng)寫好的代碼的基礎(chǔ)上。當(dāng)然,他們無(wú)法證明任何事情。所有的這些測(cè)試工作能夠表明的事情就是編譯器工作正常。是的,他們也許能夠抓住(希望能夠)罕見的編譯器Bug,但是他們能夠做的僅僅是這些。
如果他們首先寫好一個(gè)詳細(xì)的規(guī)格說明,測(cè)試能夠以規(guī)格說明為基礎(chǔ)。代碼就能夠針對(duì)它的規(guī)格說明,而不是針對(duì)自身進(jìn)行測(cè)試。這樣的測(cè)試仍然能夠抓住編譯器的Bug,同時(shí)也能找到更多的編碼錯(cuò)誤,甚至是一些規(guī)格說明中的錯(cuò)誤。好的規(guī)格說明可以使測(cè)試的質(zhì)量更高,所以后的結(jié)論是高質(zhì)量的測(cè)試需要高質(zhì)量的規(guī)格說明。
在實(shí)踐中會(huì)出現(xiàn)這樣的情況: 一個(gè)開發(fā)人員要面對(duì)測(cè)試一個(gè)單元時(shí)只給出單元的代碼而沒有規(guī)格說明這樣吃力不討好的任務(wù)。你怎樣做才會(huì)有更多的收獲,而不僅僅是發(fā)現(xiàn)編譯器的Bug?*步是理解這個(gè)單元原本要做什么, --- 不是它實(shí)際上做了什么。 比較有效的方法是倒推出一個(gè)概要的規(guī)格說明。這個(gè)過程的主要輸入條件是要閱讀那些程序代碼和注釋, 主要針對(duì)這個(gè)單元, 及調(diào)用它和被它調(diào)用的相關(guān)代碼。畫出流程圖是非常有幫助的,你可以用手工或使用某種工具。 可以組織對(duì)這個(gè)概要規(guī)格說明的走讀(Review),以確保對(duì)這個(gè)單元的說明沒有基本的錯(cuò)誤, 有了這種小程度的代碼深層說明,就可以用它來(lái)設(shè)計(jì)單元測(cè)試了。
我是個(gè)很棒的程序員, 我是不是可以不進(jìn)行單元測(cè)試?
在每個(gè)開發(fā)組織中都至少有一個(gè)這樣的開發(fā)人員,他非常擅長(zhǎng)于編程,他們開發(fā)的軟件總是在*時(shí)間就可以正常運(yùn)行,因此不需要進(jìn)行測(cè)試。你是否經(jīng)常聽到這樣的借口?
在真實(shí)世界里,每個(gè)人都會(huì)犯錯(cuò)誤。即使某個(gè)開發(fā)人員可以抱著這種態(tài)度在很少的一些簡(jiǎn)單的程序中應(yīng)付過去。 但真正的軟件系統(tǒng)是非常復(fù)雜的。真正的軟件系統(tǒng)不可以寄希望于沒有進(jìn)行廣泛的測(cè)試和Bug修改過程就可以正常工作。
編碼不是一個(gè)可以一次性通過的過程。在真實(shí)世界中,軟件產(chǎn)品必須進(jìn)行維護(hù)以對(duì)操作需求的改變作出反應(yīng), 并且要對(duì)初的開發(fā)工作遺留下來(lái)的Bug進(jìn)行修改。你希望依靠那些原始作者進(jìn)行修改嗎? 這些制造出這些未經(jīng)測(cè)試的原始代碼的專業(yè)專家們還會(huì)繼續(xù)在其他地方制造這樣的代碼。在開發(fā)人員做出修改后進(jìn)行可重復(fù)的單元測(cè)試可以避免產(chǎn)生那些令人不快的負(fù)作用。
不管怎樣,集成測(cè)試將會(huì)抓住所有的Bug 我們已經(jīng)在前面的討論中從一個(gè)側(cè)面對(duì)這個(gè)問題進(jìn)行了部分的闡述。這個(gè)論點(diǎn)不成立的原因在于規(guī)模越大的代碼集成意味著復(fù)雜性就越高。如果軟件的單元沒有事*行測(cè)試,開發(fā)人員很可能會(huì)花費(fèi)大量的時(shí)間僅僅是為了使軟件能夠運(yùn)行,而任何實(shí)際的測(cè)試方案都無(wú)法執(zhí)行。
單元測(cè)試與其他測(cè)試不同,單元測(cè)試可看作是編碼??過了單元測(cè)試的代碼才是已完成的代碼,提交產(chǎn)品代碼時(shí)也要同時(shí)提交測(cè)試代碼。測(cè)試部門可以作一定程度的審核。
關(guān)于樁代碼,單元測(cè)試應(yīng)避免編寫樁代碼。樁代碼就是用來(lái)代替某些代碼的代碼,例如,產(chǎn)品函數(shù)或測(cè)試函數(shù)調(diào)用了一個(gè)未編寫的函數(shù),可以編寫樁函數(shù)來(lái)代替該被調(diào)用的函數(shù),樁代碼也用于實(shí)現(xiàn)測(cè)試隔離。采用由底向上的方式進(jìn)行開發(fā),底層的代碼先開發(fā)并先測(cè)試,可以避免編寫樁代碼,這樣做的好處有:減少了工作量;測(cè)試上層函數(shù)時(shí),也是對(duì)下層函數(shù)的間接測(cè)試;當(dāng)下層函數(shù)修改時(shí),通過回歸測(cè)試可以確認(rèn)修改是否導(dǎo)致上層函數(shù)產(chǎn)生錯(cuò)誤。
在一種傳統(tǒng)的結(jié)構(gòu)化編程語(yǔ)言中,比如C,要進(jìn)行測(cè)試的單元一般是函數(shù)或子過程。在象C++這樣的面向?qū)ο蟮恼Z(yǔ)言中, 要進(jìn)行測(cè)試的基本單元是類。對(duì)Ada語(yǔ)言來(lái)說,開發(fā)人員可以選擇是在獨(dú)立的過程和函數(shù),還是在Ada包的級(jí)別上進(jìn)行單元測(cè)試。單元測(cè)試的原則同樣被擴(kuò)展到第四代語(yǔ)言(4GL)的開發(fā)中,在這里基本單元被典型地劃分為一個(gè)菜單或顯示界面。
單元測(cè)試不僅僅是作為無(wú)錯(cuò)編碼一種輔助手段在一次性的開發(fā)過程中使用,單元測(cè)試必須是可重復(fù)的,無(wú)論是在軟件修改,或是移植到新的運(yùn)行環(huán)境的過程中。因此,所有的測(cè)試都必須在整個(gè)軟件系統(tǒng)的生命周期中進(jìn)行維護(hù)。
經(jīng)常與單元測(cè)試聯(lián)系起來(lái)的另外一些開發(fā)活動(dòng)包括代碼走讀(Code review),靜態(tài)分析(Static analysis)和動(dòng)態(tài)分析(Dynamic analysis)。靜態(tài)分析就是對(duì)軟件的源代碼進(jìn)行研讀,查找錯(cuò)誤或收集一些度量數(shù)據(jù),并不需要對(duì)代碼進(jìn)行編譯和執(zhí)行。動(dòng)態(tài)分析就是通過觀察軟件運(yùn)行時(shí)的動(dòng)作,來(lái)提供執(zhí)行跟蹤,時(shí)間分析,以及測(cè)試覆蓋度方面的信息。
一旦編碼完成,開發(fā)人員總是會(huì)迫切希望進(jìn)行軟件的集成工作,這樣他們就能夠看到實(shí)際的系統(tǒng)開始啟動(dòng)工作了。 這在外表上看來(lái)是一項(xiàng)明顯的進(jìn)步,而象單元測(cè)試這樣的活動(dòng)也許會(huì)被看作是通往這個(gè)階段點(diǎn)的道路上的障礙, 推遲了對(duì)整個(gè)系統(tǒng)進(jìn)行聯(lián)調(diào)這種真正有意思的工作啟動(dòng)的時(shí)間。
在這種開發(fā)步驟中,真實(shí)意義上的進(jìn)步被外表上的進(jìn)步取代了。系統(tǒng)能夠正常工作的可能性是很小的,更多的情況是充滿了各式各樣的Bug。在實(shí)踐中,這樣一種開發(fā)步驟常常會(huì)導(dǎo)致這樣的結(jié)果:軟件甚至無(wú)法運(yùn)行。更進(jìn)一步的結(jié)果是大量的時(shí)間將被花費(fèi)在跟蹤那些包含在獨(dú)立單元里的簡(jiǎn)單的Bug上面,在個(gè)別情況下,這些Bug也許是瑣碎和微不足道的,但是總的來(lái)說,他們會(huì)導(dǎo)致在軟件集成為一個(gè)系統(tǒng)時(shí)增加額外的工期, 而且當(dāng)這個(gè)系統(tǒng)投入使用時(shí)也無(wú)法確保它能夠可靠運(yùn)行。
在實(shí)踐工作中,進(jìn)行了完整計(jì)劃的單元測(cè)試和編寫實(shí)際的代碼所花費(fèi)的精力大致上是相同的。一旦完成了這些單元測(cè)試工作,很多Bug將被糾正,在確信他們手頭擁有穩(wěn)定可靠的部件的情況下,開發(fā)人員能夠進(jìn)行更高效的系統(tǒng)集成工作。這才是真實(shí)意義上的進(jìn)步,所以說完整計(jì)劃下的單元測(cè)試是對(duì)時(shí)間的更高效的利用。而調(diào)試人員的不受控和散漫的工作方式只會(huì)花費(fèi)更多的時(shí)間而取得很少的好處。
使用AdaTEST和Cantata這樣的支持工具可以使單元測(cè)試更加簡(jiǎn)單和有效。但這不是必須的,單元測(cè)試即使是在沒有工具支持的情況下也是一項(xiàng)非常有意義的活動(dòng)。
它僅僅是證明這些代碼做了什么
這是那些沒有首先為每個(gè)單元編寫一個(gè)詳細(xì)的規(guī)格說明而直接跳到編碼階段的開發(fā)人員提出的一條普遍的抱怨, 當(dāng)編碼完成以后并且面臨代碼測(cè)試任務(wù)的時(shí)候,他們就閱讀這些代碼并找出它實(shí)際上做了什么,把他們的測(cè)試工作基于已經(jīng)寫好的代碼的基礎(chǔ)上。當(dāng)然,他們無(wú)法證明任何事情。所有的這些測(cè)試工作能夠表明的事情就是編譯器工作正常。是的,他們也許能夠抓住(希望能夠)罕見的編譯器Bug,但是他們能夠做的僅僅是這些。
如果他們首先寫好一個(gè)詳細(xì)的規(guī)格說明,測(cè)試能夠以規(guī)格說明為基礎(chǔ)。代碼就能夠針對(duì)它的規(guī)格說明,而不是針對(duì)自身進(jìn)行測(cè)試。這樣的測(cè)試仍然能夠抓住編譯器的Bug,同時(shí)也能找到更多的編碼錯(cuò)誤,甚至是一些規(guī)格說明中的錯(cuò)誤。好的規(guī)格說明可以使測(cè)試的質(zhì)量更高,所以后的結(jié)論是高質(zhì)量的測(cè)試需要高質(zhì)量的規(guī)格說明。
在實(shí)踐中會(huì)出現(xiàn)這樣的情況: 一個(gè)開發(fā)人員要面對(duì)測(cè)試一個(gè)單元時(shí)只給出單元的代碼而沒有規(guī)格說明這樣吃力不討好的任務(wù)。你怎樣做才會(huì)有更多的收獲,而不僅僅是發(fā)現(xiàn)編譯器的Bug?*步是理解這個(gè)單元原本要做什么, --- 不是它實(shí)際上做了什么。 比較有效的方法是倒推出一個(gè)概要的規(guī)格說明。這個(gè)過程的主要輸入條件是要閱讀那些程序代碼和注釋, 主要針對(duì)這個(gè)單元, 及調(diào)用它和被它調(diào)用的相關(guān)代碼。畫出流程圖是非常有幫助的,你可以用手工或使用某種工具。 可以組織對(duì)這個(gè)概要規(guī)格說明的走讀(Review),以確保對(duì)這個(gè)單元的說明沒有基本的錯(cuò)誤, 有了這種小程度的代碼深層說明,就可以用它來(lái)設(shè)計(jì)單元測(cè)試了。
我是個(gè)很棒的程序員, 我是不是可以不進(jìn)行單元測(cè)試?
在每個(gè)開發(fā)組織中都至少有一個(gè)這樣的開發(fā)人員,他非常擅長(zhǎng)于編程,他們開發(fā)的軟件總是在*時(shí)間就可以正常運(yùn)行,因此不需要進(jìn)行測(cè)試。你是否經(jīng)常聽到這樣的借口?
在真實(shí)世界里,每個(gè)人都會(huì)犯錯(cuò)誤。即使某個(gè)開發(fā)人員可以抱著這種態(tài)度在很少的一些簡(jiǎn)單的程序中應(yīng)付過去。 但真正的軟件系統(tǒng)是非常復(fù)雜的。真正的軟件系統(tǒng)不可以寄希望于沒有進(jìn)行廣泛的測(cè)試和Bug修改過程就可以正常工作。
編碼不是一個(gè)可以一次性通過的過程。在真實(shí)世界中,軟件產(chǎn)品必須進(jìn)行維護(hù)以對(duì)操作需求的改變作出反應(yīng), 并且要對(duì)初的開發(fā)工作遺留下來(lái)的Bug進(jìn)行修改。你希望依靠那些原始作者進(jìn)行修改嗎? 這些制造出這些未經(jīng)測(cè)試的原始代碼的專業(yè)專家們還會(huì)繼續(xù)在其他地方制造這樣的代碼。在開發(fā)人員做出修改后進(jìn)行可重復(fù)的單元測(cè)試可以避免產(chǎn)生那些令人不快的負(fù)作用。
不管怎樣,集成測(cè)試將會(huì)抓住所有的Bug 我們已經(jīng)在前面的討論中從一個(gè)側(cè)面對(duì)這個(gè)問題進(jìn)行了部分的闡述。這個(gè)論點(diǎn)不成立的原因在于規(guī)模越大的代碼集成意味著復(fù)雜性就越高。如果軟件的單元沒有事*行測(cè)試,開發(fā)人員很可能會(huì)花費(fèi)大量的時(shí)間僅僅是為了使軟件能夠運(yùn)行,而任何實(shí)際的測(cè)試方案都無(wú)法執(zhí)行。
單元測(cè)試與其他測(cè)試不同,單元測(cè)試可看作是編碼??過了單元測(cè)試的代碼才是已完成的代碼,提交產(chǎn)品代碼時(shí)也要同時(shí)提交測(cè)試代碼。測(cè)試部門可以作一定程度的審核。
關(guān)于樁代碼,單元測(cè)試應(yīng)避免編寫樁代碼。樁代碼就是用來(lái)代替某些代碼的代碼,例如,產(chǎn)品函數(shù)或測(cè)試函數(shù)調(diào)用了一個(gè)未編寫的函數(shù),可以編寫樁函數(shù)來(lái)代替該被調(diào)用的函數(shù),樁代碼也用于實(shí)現(xiàn)測(cè)試隔離。采用由底向上的方式進(jìn)行開發(fā),底層的代碼先開發(fā)并先測(cè)試,可以避免編寫樁代碼,這樣做的好處有:減少了工作量;測(cè)試上層函數(shù)時(shí),也是對(duì)下層函數(shù)的間接測(cè)試;當(dāng)下層函數(shù)修改時(shí),通過回歸測(cè)試可以確認(rèn)修改是否導(dǎo)致上層函數(shù)產(chǎn)生錯(cuò)誤。
在一種傳統(tǒng)的結(jié)構(gòu)化編程語(yǔ)言中,比如C,要進(jìn)行測(cè)試的單元一般是函數(shù)或子過程。在象C++這樣的面向?qū)ο蟮恼Z(yǔ)言中, 要進(jìn)行測(cè)試的基本單元是類。對(duì)Ada語(yǔ)言來(lái)說,開發(fā)人員可以選擇是在獨(dú)立的過程和函數(shù),還是在Ada包的級(jí)別上進(jìn)行單元測(cè)試。單元測(cè)試的原則同樣被擴(kuò)展到第四代語(yǔ)言(4GL)的開發(fā)中,在這里基本單元被典型地劃分為一個(gè)菜單或顯示界面。
單元測(cè)試不僅僅是作為無(wú)錯(cuò)編碼一種輔助手段在一次性的開發(fā)過程中使用,單元測(cè)試必須是可重復(fù)的,無(wú)論是在軟件修改,或是移植到新的運(yùn)行環(huán)境的過程中。因此,所有的測(cè)試都必須在整個(gè)軟件系統(tǒng)的生命周期中進(jìn)行維護(hù)。
經(jīng)常與單元測(cè)試聯(lián)系起來(lái)的另外一些開發(fā)活動(dòng)包括代碼走讀(Code review),靜態(tài)分析(Static analysis)和動(dòng)態(tài)分析(Dynamic analysis)。靜態(tài)分析就是對(duì)軟件的源代碼進(jìn)行研讀,查找錯(cuò)誤或收集一些度量數(shù)據(jù),并不需要對(duì)代碼進(jìn)行編譯和執(zhí)行。動(dòng)態(tài)分析就是通過觀察軟件運(yùn)行時(shí)的動(dòng)作,來(lái)提供執(zhí)行跟蹤,時(shí)間分析,以及測(cè)試覆蓋度方面的信息。
一旦編碼完成,開發(fā)人員總是會(huì)迫切希望進(jìn)行軟件的集成工作,這樣他們就能夠看到實(shí)際的系統(tǒng)開始啟動(dòng)工作了。 這在外表上看來(lái)是一項(xiàng)明顯的進(jìn)步,而象單元測(cè)試這樣的活動(dòng)也許會(huì)被看作是通往這個(gè)階段點(diǎn)的道路上的障礙, 推遲了對(duì)整個(gè)系統(tǒng)進(jìn)行聯(lián)調(diào)這種真正有意思的工作啟動(dòng)的時(shí)間。
在這種開發(fā)步驟中,真實(shí)意義上的進(jìn)步被外表上的進(jìn)步取代了。系統(tǒng)能夠正常工作的可能性是很小的,更多的情況是充滿了各式各樣的Bug。在實(shí)踐中,這樣一種開發(fā)步驟常常會(huì)導(dǎo)致這樣的結(jié)果:軟件甚至無(wú)法運(yùn)行。更進(jìn)一步的結(jié)果是大量的時(shí)間將被花費(fèi)在跟蹤那些包含在獨(dú)立單元里的簡(jiǎn)單的Bug上面,在個(gè)別情況下,這些Bug也許是瑣碎和微不足道的,但是總的來(lái)說,他們會(huì)導(dǎo)致在軟件集成為一個(gè)系統(tǒng)時(shí)增加額外的工期, 而且當(dāng)這個(gè)系統(tǒng)投入使用時(shí)也無(wú)法確保它能夠可靠運(yùn)行。
在實(shí)踐工作中,進(jìn)行了完整計(jì)劃的單元測(cè)試和編寫實(shí)際的代碼所花費(fèi)的精力大致上是相同的。一旦完成了這些單元測(cè)試工作,很多Bug將被糾正,在確信他們手頭擁有穩(wěn)定可靠的部件的情況下,開發(fā)人員能夠進(jìn)行更高效的系統(tǒng)集成工作。這才是真實(shí)意義上的進(jìn)步,所以說完整計(jì)劃下的單元測(cè)試是對(duì)時(shí)間的更高效的利用。而調(diào)試人員的不受控和散漫的工作方式只會(huì)花費(fèi)更多的時(shí)間而取得很少的好處。
使用AdaTEST和Cantata這樣的支持工具可以使單元測(cè)試更加簡(jiǎn)單和有效。但這不是必須的,單元測(cè)試即使是在沒有工具支持的情況下也是一項(xiàng)非常有意義的活動(dòng)。
它僅僅是證明這些代碼做了什么
這是那些沒有首先為每個(gè)單元編寫一個(gè)詳細(xì)的規(guī)格說明而直接跳到編碼階段的開發(fā)人員提出的一條普遍的抱怨, 當(dāng)編碼完成以后并且面臨代碼測(cè)試任務(wù)的時(shí)候,他們就閱讀這些代碼并找出它實(shí)際上做了什么,把他們的測(cè)試工作基于已經(jīng)寫好的代碼的基礎(chǔ)上。當(dāng)然,他們無(wú)法證明任何事情。所有的這些測(cè)試工作能夠表明的事情就是編譯器工作正常。是的,他們也許能夠抓住(希望能夠)罕見的編譯器Bug,但是他們能夠做的僅僅是這些。
如果他們首先寫好一個(gè)詳細(xì)的規(guī)格說明,測(cè)試能夠以規(guī)格說明為基礎(chǔ)。代碼就能夠針對(duì)它的規(guī)格說明,而不是針對(duì)自身進(jìn)行測(cè)試。這樣的測(cè)試仍然能夠抓住編譯器的Bug,同時(shí)也能找到更多的編碼錯(cuò)誤,甚至是一些規(guī)格說明中的錯(cuò)誤。好的規(guī)格說明可以使測(cè)試的質(zhì)量更高,所以后的結(jié)論是高質(zhì)量的測(cè)試需要高質(zhì)量的規(guī)格說明。
在實(shí)踐中會(huì)出現(xiàn)這樣的情況: 一個(gè)開發(fā)人員要面對(duì)測(cè)試一個(gè)單元時(shí)只給出單元的代碼而沒有規(guī)格說明這樣吃力不討好的任務(wù)。你怎樣做才會(huì)有更多的收獲,而不僅僅是發(fā)現(xiàn)編譯器的Bug?*步是理解這個(gè)單元原本要做什么, --- 不是它實(shí)際上做了什么。 比較有效的方法是倒推出一個(gè)概要的規(guī)格說明。這個(gè)過程的主要輸入條件是要閱讀那些程序代碼和注釋, 主要針對(duì)這個(gè)單元, 及調(diào)用它和被它調(diào)用的相關(guān)代碼。畫出流程圖是非常有幫助的,你可以用手工或使用某種工具。 可以組織對(duì)這個(gè)概要規(guī)格說明的走讀(Review),以確保對(duì)這個(gè)單元的說明沒有基本的錯(cuò)誤, 有了這種小程度的代碼深層說明,就可以用它來(lái)設(shè)計(jì)單元測(cè)試了。
我是個(gè)很棒的程序員, 我是不是可以不進(jìn)行單元測(cè)試?
在每個(gè)開發(fā)組織中都至少有一個(gè)這樣的開發(fā)人員,他非常擅長(zhǎng)于編程,他們開發(fā)的軟件總是在*時(shí)間就可以正常運(yùn)行,因此不需要進(jìn)行測(cè)試。你是否經(jīng)常聽到這樣的借口?
在真實(shí)世界里,每個(gè)人都會(huì)犯錯(cuò)誤。即使某個(gè)開發(fā)人員可以抱著這種態(tài)度在很少的一些簡(jiǎn)單的程序中應(yīng)付過去。 但真正的軟件系統(tǒng)是非常復(fù)雜的。真正的軟件系統(tǒng)不可以寄希望于沒有進(jìn)行廣泛的測(cè)試和Bug修改過程就可以正常工作。
編碼不是一個(gè)可以一次性通過的過程。在真實(shí)世界中,軟件產(chǎn)品必須進(jìn)行維護(hù)以對(duì)操作需求的改變作出反應(yīng), 并且要對(duì)初的開發(fā)工作遺留下來(lái)的Bug進(jìn)行修改。你希望依靠那些原始作者進(jìn)行修改嗎? 這些制造出這些未經(jīng)測(cè)試的原始代碼的專業(yè)專家們還會(huì)繼續(xù)在其他地方制造這樣的代碼。在開發(fā)人員做出修改后進(jìn)行可重復(fù)的單元測(cè)試可以避免產(chǎn)生那些令人不快的負(fù)作用。
不管怎樣,集成測(cè)試將會(huì)抓住所有的Bug 我們已經(jīng)在前面的討論中從一個(gè)側(cè)面對(duì)這個(gè)問題進(jìn)行了部分的闡述。這個(gè)論點(diǎn)不成立的原因在于規(guī)模越大的代碼集成意味著復(fù)雜性就越高。如果軟件的單元沒有事*行測(cè)試,開發(fā)人員很可能會(huì)花費(fèi)大量的時(shí)間僅僅是為了使軟件能夠運(yùn)行,而任何實(shí)際的測(cè)試方案都無(wú)法執(zhí)行。
單元測(cè)試與其他測(cè)試不同,單元測(cè)試可看作是編碼??過了單元測(cè)試的代碼才是已完成的代碼,提交產(chǎn)品代碼時(shí)也要同時(shí)提交測(cè)試代碼。測(cè)試部門可以作一定程度的審核。
關(guān)于樁代碼,單元測(cè)試應(yīng)避免編寫樁代碼。樁代碼就是用來(lái)代替某些代碼的代碼,例如,產(chǎn)品函數(shù)或測(cè)試函數(shù)調(diào)用了一個(gè)未編寫的函數(shù),可以編寫樁函數(shù)來(lái)代替該被調(diào)用的函數(shù),樁代碼也用于實(shí)現(xiàn)測(cè)試隔離。采用由底向上的方式進(jìn)行開發(fā),底層的代碼先開發(fā)并先測(cè)試,可以避免編寫樁代碼,這樣做的好處有:減少了工作量;測(cè)試上層函數(shù)時(shí),也是對(duì)下層函數(shù)的間接測(cè)試;當(dāng)下層函數(shù)修改時(shí),通過回歸測(cè)試可以確認(rèn)修改是否導(dǎo)致上層函數(shù)產(chǎn)生錯(cuò)誤。
在一種傳統(tǒng)的結(jié)構(gòu)化編程語(yǔ)言中,比如C,要進(jìn)行測(cè)試的單元一般是函數(shù)或子過程。在象C++這樣的面向?qū)ο蟮恼Z(yǔ)言中, 要進(jìn)行測(cè)試的基本單元是類。對(duì)Ada語(yǔ)言來(lái)說,開發(fā)人員可以選擇是在獨(dú)立的過程和函數(shù),還是在Ada包的級(jí)別上進(jìn)行單元測(cè)試。單元測(cè)試的原則同樣被擴(kuò)展到第四代語(yǔ)言(4GL)的開發(fā)中,在這里基本單元被典型地劃分為一個(gè)菜單或顯示界面。
單元測(cè)試不僅僅是作為無(wú)錯(cuò)編碼一種輔助手段在一次性的開發(fā)過程中使用,單元測(cè)試必須是可重復(fù)的,無(wú)論是在軟件修改,或是移植到新的運(yùn)行環(huán)境的過程中。因此,所有的測(cè)試都必須在整個(gè)軟件系統(tǒng)的生命周期中進(jìn)行維護(hù)。
經(jīng)常與單元測(cè)試聯(lián)系起來(lái)的另外一些開發(fā)活動(dòng)包括代碼走讀(Code review),靜態(tài)分析(Static analysis)和動(dòng)態(tài)分析(Dynamic analysis)。靜態(tài)分析就是對(duì)軟件的源代碼進(jìn)行研讀,查找錯(cuò)誤或收集一些度量數(shù)據(jù),并不需要對(duì)代碼進(jìn)行編譯和執(zhí)行。動(dòng)態(tài)分析就是通過觀察軟件運(yùn)行時(shí)的動(dòng)作,來(lái)提供執(zhí)行跟蹤,時(shí)間分析,以及測(cè)試覆蓋度方面的信息。
一旦編碼完成,開發(fā)人員總是會(huì)迫切希望進(jìn)行軟件的集成工作,這樣他們就能夠看到實(shí)際的系統(tǒng)開始啟動(dòng)工作了。 這在外表上看來(lái)是一項(xiàng)明顯的進(jìn)步,而象單元測(cè)試這樣的活動(dòng)也許會(huì)被看作是通往這個(gè)階段點(diǎn)的道路上的障礙, 推遲了對(duì)整個(gè)系統(tǒng)進(jìn)行聯(lián)調(diào)這種真正有意思的工作啟動(dòng)的時(shí)間。
在這種開發(fā)步驟中,真實(shí)意義上的進(jìn)步被外表上的進(jìn)步取代了。系統(tǒng)能夠正常工作的可能性是很小的,更多的情況是充滿了各式各樣的Bug。在實(shí)踐中,這樣一種開發(fā)步驟常常會(huì)導(dǎo)致這樣的結(jié)果:軟件甚至無(wú)法運(yùn)行。更進(jìn)一步的結(jié)果是大量的時(shí)間將被花費(fèi)在跟蹤那些包含在獨(dú)立單元里的簡(jiǎn)單的Bug上面,在個(gè)別情況下,這些Bug也許是瑣碎和微不足道的,但是總的來(lái)說,他們會(huì)導(dǎo)致在軟件集成為一個(gè)系統(tǒng)時(shí)增加額外的工期, 而且當(dāng)這個(gè)系統(tǒng)投入使用時(shí)也無(wú)法確保它能夠可靠運(yùn)行。
在實(shí)踐工作中,進(jìn)行了完整計(jì)劃的單元測(cè)試和編寫實(shí)際的代碼所花費(fèi)的精力大致上是相同的。一旦完成了這些單元測(cè)試工作,很多Bug將被糾正,在確信他們手頭擁有穩(wěn)定可靠的部件的情況下,開發(fā)人員能夠進(jìn)行更高效的系統(tǒng)集成工作。這才是真實(shí)意義上的進(jìn)步,所以說完整計(jì)劃下的單元測(cè)試是對(duì)時(shí)間的更高效的利用。而調(diào)試人員的不受控和散漫的工作方式只會(huì)花費(fèi)更多的時(shí)間而取得很少的好處。
使用AdaTEST和Cantata這樣的支持工具可以使單元測(cè)試更加簡(jiǎn)單和有效。但這不是必須的,單元測(cè)試即使是在沒有工具支持的情況下也是一項(xiàng)非常有意義的活動(dòng)。
它僅僅是證明這些代碼做了什么
這是那些沒有首先為每個(gè)單元編寫一個(gè)詳細(xì)的規(guī)格說明而直接跳到編碼階段的開發(fā)人員提出的一條普遍的抱怨, 當(dāng)編碼完成以后并且面臨代碼測(cè)試任務(wù)的時(shí)候,他們就閱讀這些代碼并找出它實(shí)際上做了什么,把他們的測(cè)試工作基于已經(jīng)寫好的代碼的基礎(chǔ)上。當(dāng)然,他們無(wú)法證明任何事情。所有的這些測(cè)試工作能夠表明的事情就是編譯器工作正常。是的,他們也許能夠抓住(希望能夠)罕見的編譯器Bug,但是他們能夠做的僅僅是這些。
如果他們首先寫好一個(gè)詳細(xì)的規(guī)格說明,測(cè)試能夠以規(guī)格說明為基礎(chǔ)。代碼就能夠針對(duì)它的規(guī)格說明,而不是針對(duì)自身進(jìn)行測(cè)試。這樣的測(cè)試仍然能夠抓住編譯器的Bug,同時(shí)也能找到更多的編碼錯(cuò)誤,甚至是一些規(guī)格說明中的錯(cuò)誤。好的規(guī)格說明可以使測(cè)試的質(zhì)量更高,所以后的結(jié)論是高質(zhì)量的測(cè)試需要高質(zhì)量的規(guī)格說明。
在實(shí)踐中會(huì)出現(xiàn)這樣的情況: 一個(gè)開發(fā)人員要面對(duì)測(cè)試一個(gè)單元時(shí)只給出單元的代碼而沒有規(guī)格說明這樣吃力不討好的任務(wù)。你怎樣做才會(huì)有更多的收獲,而不僅僅是發(fā)現(xiàn)編譯器的Bug?*步是理解這個(gè)單元原本要做什么, --- 不是它實(shí)際上做了什么。 比較有效的方法是倒推出一個(gè)概要的規(guī)格說明。這個(gè)過程的主要輸入條件是要閱讀那些程序代碼和注釋, 主要針對(duì)這個(gè)單元, 及調(diào)用它和被它調(diào)用的相關(guān)代碼。畫出流程圖是非常有幫助的,你可以用手工或使用某種工具。 可以組織對(duì)這個(gè)概要規(guī)格說明的走讀(Review),以確保對(duì)這個(gè)單元的說明沒有基本的錯(cuò)誤, 有了這種小程度的代碼深層說明,就可以用它來(lái)設(shè)計(jì)單元測(cè)試了。
我是個(gè)很棒的程序員, 我是不是可以不進(jìn)行單元測(cè)試?
在每個(gè)開發(fā)組織中都至少有一個(gè)這樣的開發(fā)人員,他非常擅長(zhǎng)于編程,他們開發(fā)的軟件總是在*時(shí)間就可以正常運(yùn)行,因此不需要進(jìn)行測(cè)試。你是否經(jīng)常聽到這樣的借口?
在真實(shí)世界里,每個(gè)人都會(huì)犯錯(cuò)誤。即使某個(gè)開發(fā)人員可以抱著這種態(tài)度在很少的一些簡(jiǎn)單的程序中應(yīng)付過去。 但真正的軟件系統(tǒng)是非常復(fù)雜的。真正的軟件系統(tǒng)不可以寄希望于沒有進(jìn)行廣泛的測(cè)試和Bug修改過程就可以正常工作。
編碼不是一個(gè)可以一次性通過的過程。在真實(shí)世界中,軟件產(chǎn)品必須進(jìn)行維護(hù)以對(duì)操作需求的改變作出反應(yīng), 并且要對(duì)初的開發(fā)工作遺留下來(lái)的Bug進(jìn)行修改。你希望依靠那些原始作者進(jìn)行修改嗎? 這些制造出這些未經(jīng)測(cè)試的原始代碼的專業(yè)專家們還會(huì)繼續(xù)在其他地方制造這樣的代碼。在開發(fā)人員做出修改后進(jìn)行可重復(fù)的單元測(cè)試可以避免產(chǎn)生那些令人不快的負(fù)作用。
不管怎樣,集成測(cè)試將會(huì)抓住所有的Bug 我們已經(jīng)在前面的討論中從一個(gè)側(cè)面對(duì)這個(gè)問題進(jìn)行了部分的闡述。這個(gè)論點(diǎn)不成立的原因在于規(guī)模越大的代碼集成意味著復(fù)雜性就越高。如果軟件的單元沒有事*行測(cè)試,開發(fā)人員很可能會(huì)花費(fèi)大量的時(shí)間僅僅是為了使軟件能夠運(yùn)行,而任何實(shí)際的測(cè)試方案都無(wú)法執(zhí)行。
單元測(cè)試與其他測(cè)試不同,單元測(cè)試可看作是編碼??過了單元測(cè)試的代碼才是已完成的代碼,提交產(chǎn)品代碼時(shí)也要同時(shí)提交測(cè)試代碼。測(cè)試部門可以作一定程度的審核。
關(guān)于樁代碼,單元測(cè)試應(yīng)避免編寫樁代碼。樁代碼就是用來(lái)代替某些代碼的代碼,例如,產(chǎn)品函數(shù)或測(cè)試函數(shù)調(diào)用了一個(gè)未編寫的函數(shù),可以編寫樁函數(shù)來(lái)代替該被調(diào)用的函數(shù),樁代碼也用于實(shí)現(xiàn)測(cè)試隔離。采用由底向上的方式進(jìn)行開發(fā),底層的代碼先開發(fā)并先測(cè)試,可以避免編寫樁代碼,這樣做的好處有:減少了工作量;測(cè)試上層函數(shù)時(shí),也是對(duì)下層函數(shù)的間接測(cè)試;當(dāng)下層函數(shù)修改時(shí),通過回歸測(cè)試可以確認(rèn)修改是否導(dǎo)致上層函數(shù)產(chǎn)生錯(cuò)誤。
在一種傳統(tǒng)的結(jié)構(gòu)化編程語(yǔ)言中,比如C,要進(jìn)行測(cè)試的單元一般是函數(shù)或子過程。在象C++這樣的面向?qū)ο蟮恼Z(yǔ)言中, 要進(jìn)行測(cè)試的基本單元是類。對(duì)Ada語(yǔ)言來(lái)說,開發(fā)人員可以選擇是在獨(dú)立的過程和函數(shù),還是在Ada包的級(jí)別上進(jìn)行單元測(cè)試。單元測(cè)試的原則同樣被擴(kuò)展到第四代語(yǔ)言(4GL)的開發(fā)中,在這里基本單元被典型地劃分為一個(gè)菜單或顯示界面。
單元測(cè)試不僅僅是作為無(wú)錯(cuò)編碼一種輔助手段在一次性的開發(fā)過程中使用,單元測(cè)試必須是可重復(fù)的,無(wú)論是在軟件修改,或是移植到新的運(yùn)行環(huán)境的過程中。因此,所有的測(cè)試都必須在整個(gè)軟件系統(tǒng)的生命周期中進(jìn)行維護(hù)。
經(jīng)常與單元測(cè)試聯(lián)系起來(lái)的另外一些開發(fā)活動(dòng)包括代碼走讀(Code review),靜態(tài)分析(Static analysis)和動(dòng)態(tài)分析(Dynamic analysis)。靜態(tài)分析就是對(duì)軟件的源代碼進(jìn)行研讀,查找錯(cuò)誤或收集一些度量數(shù)據(jù),并不需要對(duì)代碼進(jìn)行編譯和執(zhí)行。動(dòng)態(tài)分析就是通過觀察軟件運(yùn)行時(shí)的動(dòng)作,來(lái)提供執(zhí)行跟蹤,時(shí)間分析,以及測(cè)試覆蓋度方面的信息。
一旦編碼完成,開發(fā)人員總是會(huì)迫切希望進(jìn)行軟件的集成工作,這樣他們就能夠看到實(shí)際的系統(tǒng)開始啟動(dòng)工作了。 這在外表上看來(lái)是一項(xiàng)明顯的進(jìn)步,而象單元測(cè)試這樣的活動(dòng)也許會(huì)被看作是通往這個(gè)階段點(diǎn)的道路上的障礙, 推遲了對(duì)整個(gè)系統(tǒng)進(jìn)行聯(lián)調(diào)這種真正有意思的工作啟動(dòng)的時(shí)間。
在這種開發(fā)步驟中,真實(shí)意義上的進(jìn)步被外表上的進(jìn)步取代了。系統(tǒng)能夠正常工作的可能性是很小的,更多的情況是充滿了各式各樣的Bug。在實(shí)踐中,這樣一種開發(fā)步驟常常會(huì)導(dǎo)致這樣的結(jié)果:軟件甚至無(wú)法運(yùn)行。更進(jìn)一步的結(jié)果是大量的時(shí)間將被花費(fèi)在跟蹤那些包含在獨(dú)立單元里的簡(jiǎn)單的Bug上面,在個(gè)別情況下,這些Bug也許是瑣碎和微不足道的,但是總的來(lái)說,他們會(huì)導(dǎo)致在軟件集成為一個(gè)系統(tǒng)時(shí)增加額外的工期, 而且當(dāng)這個(gè)系統(tǒng)投入使用時(shí)也無(wú)法確保它能夠可靠運(yùn)行。
在實(shí)踐工作中,進(jìn)行了完整計(jì)劃的單元測(cè)試和編寫實(shí)際的代碼所花費(fèi)的精力大致上是相同的。一旦完成了這些單元測(cè)試工作,很多Bug將被糾正,在確信他們手頭擁有穩(wěn)定可靠的部件的情況下,開發(fā)人員能夠進(jìn)行更高效的系統(tǒng)集成工作。這才是真實(shí)意義上的進(jìn)步,所以說完整計(jì)劃下的單元測(cè)試是對(duì)時(shí)間的更高效的利用。而調(diào)試人員的不受控和散漫的工作方式只會(huì)花費(fèi)更多的時(shí)間而取得很少的好處。
使用AdaTEST和Cantata這樣的支持工具可以使單元測(cè)試更加簡(jiǎn)單和有效。但這不是必須的,單元測(cè)試即使是在沒有工具支持的情況下也是一項(xiàng)非常有意義的活動(dòng)。
它僅僅是證明這些代碼做了什么
這是那些沒有首先為每個(gè)單元編寫一個(gè)詳細(xì)的規(guī)格說明而直接跳到編碼階段的開發(fā)人員提出的一條普遍的抱怨, 當(dāng)編碼完成以后并且面臨代碼測(cè)試任務(wù)的時(shí)候,他們就閱讀這些代碼并找出它實(shí)際上做了什么,把他們的測(cè)試工作基于已經(jīng)寫好的代碼的基礎(chǔ)上。當(dāng)然,他們無(wú)法證明任何事情。所有的這些測(cè)試工作能夠表明的事情就是編譯器工作正常。是的,他們也許能夠抓住(希望能夠)罕見的編譯器Bug,但是他們能夠做的僅僅是這些。
如果他們首先寫好一個(gè)詳細(xì)的規(guī)格說明,測(cè)試能夠以規(guī)格說明為基礎(chǔ)。代碼就能夠針對(duì)它的規(guī)格說明,而不是針對(duì)自身進(jìn)行測(cè)試。這樣的測(cè)試仍然能夠抓住編譯器的Bug,同時(shí)也能找到更多的編碼錯(cuò)誤,甚至是一些規(guī)格說明中的錯(cuò)誤。好的規(guī)格說明可以使測(cè)試的質(zhì)量更高,所以后的結(jié)論是高質(zhì)量的測(cè)試需要高質(zhì)量的規(guī)格說明。
在實(shí)踐中會(huì)出現(xiàn)這樣的情況: 一個(gè)開發(fā)人員要面對(duì)測(cè)試一個(gè)單元時(shí)只給出單元的代碼而沒有規(guī)格說明這樣吃力不討好的任務(wù)。你怎樣做才會(huì)有更多的收獲,而不僅僅是發(fā)現(xiàn)編譯器的Bug?*步是理解這個(gè)單元原本要做什么, --- 不是它實(shí)際上做了什么。 比較有效的方法是倒推出一個(gè)概要的規(guī)格說明。這個(gè)過程的主要輸入條件是要閱讀那些程序代碼和注釋, 主要針對(duì)這個(gè)單元, 及調(diào)用它和被它調(diào)用的相關(guān)代碼。畫出流程圖是非常有幫助的,你可以用手工或使用某種工具。 可以組織對(duì)這個(gè)概要規(guī)格說明的走讀(Review),以確保對(duì)這個(gè)單元的說明沒有基本的錯(cuò)誤, 有了這種小程度的代碼深層說明,就可以用它來(lái)設(shè)計(jì)單元測(cè)試了。
我是個(gè)很棒的程序員, 我是不是可以不進(jìn)行單元測(cè)試?
在每個(gè)開發(fā)組織中都至少有一個(gè)這樣的開發(fā)人員,他非常擅長(zhǎng)于編程,他們開發(fā)的軟件總是在*時(shí)間就可以正常運(yùn)行,因此不需要進(jìn)行測(cè)試。你是否經(jīng)常聽到這樣的借口?
在真實(shí)世界里,每個(gè)人都會(huì)犯錯(cuò)誤。即使某個(gè)開發(fā)人員可以抱著這種態(tài)度在很少的一些簡(jiǎn)單的程序中應(yīng)付過去。 但真正的軟件系統(tǒng)是非常復(fù)雜的。真正的軟件系統(tǒng)不可以寄希望于沒有進(jìn)行廣泛的測(cè)試和Bug修改過程就可以正常工作。
編碼不是一個(gè)可以一次性通過的過程。在真實(shí)世界中,軟件產(chǎn)品必須進(jìn)行維護(hù)以對(duì)操作需求的改變作出反應(yīng), 并且要對(duì)初的開發(fā)工作遺留下來(lái)的Bug進(jìn)行修改。你希望依靠那些原始作者進(jìn)行修改嗎? 這些制造出這些未經(jīng)測(cè)試的原始代碼的專業(yè)專家們還會(huì)繼續(xù)在其他地方制造這樣的代碼。在開發(fā)人員做出修改后進(jìn)行可重復(fù)的單元測(cè)試可以避免產(chǎn)生那些令人不快的負(fù)作用。
不管怎樣,集成測(cè)試將會(huì)抓住所有的Bug 我們已經(jīng)在前面的討論中從一個(gè)側(cè)面對(duì)這個(gè)問題進(jìn)行了部分的闡述。這個(gè)論點(diǎn)不成立的原因在于規(guī)模越大的代碼集成意味著復(fù)雜性就越高。如果軟件的單元沒有事*行測(cè)試,開發(fā)人員很可能會(huì)花費(fèi)大量的時(shí)間僅僅是為了使軟件能夠運(yùn)行,而任何實(shí)際的測(cè)試方案都無(wú)法執(zhí)行。
法國(guó)PREVOST RPCMR0800 備件
法國(guó)PREVOST RPCMR0800 備件