电子产业一站式赋能平台

PCB联盟网

搜索
查看: 82|回复: 0
收起左侧

为何国内程序员普遍不愿意编写单元测试?

[复制链接]

1001

主题

1001

帖子

8807

积分

高级会员

Rank: 5Rank: 5

积分
8807
发表于 2024-12-16 08:01:00 | 显示全部楼层 |阅读模式

n5sg2ttjskf64087723.gif

n5sg2ttjskf64087723.gif

/ h; j6 @& C- C5 d: R2 C! f* _- f点击上方蓝色字体,关注我们
4 |) N9 l7 G$ A$ R2 F" R
+ r% h5 D  p' v" K" W; n- ~1 G
& h6 Q6 v$ {4 x9 W
速度与效率的“文化”
$ ^* c/ t/ q& G7 b- T, [# |: L2 q在中国职场文化中,速度通常被视为生产力的核心,尤其是在互联网公司,开发者面临“快上线、快迭代”的目标。( [( W0 U* r6 B1 d

% ?& F/ P4 Y+ _" j: A' M* O- A; @由于时间的压力,许多程序员更注重功能的实现,而忽视单元测试的必要性。
  n7 g7 _  [: x# U: ^" b& [$ ~+ H1 k! O# X* Y8 R1 w) V
他们认为,单元测试是“可有可无”的附加成本,不仅耗时,还可能拖慢开发进度。
0 p4 T: v- H, v7 S# H4 ~$ h
) B/ B5 h# [& W, A) e因此,很多人更倾向于“边写边调试”,以尽快完成需求。
' R' W$ u; [9 W& T5 X* P+ T6 b7 d7 k+ `3 t
这种追求短期效益的心态,使得单元测试往往被视为“额外负担”。+ T2 _/ {" e' P* p7 P

9 q) ?# `- g" f/ @: ^4 m/ q& p

& P( R: g6 q  M4 r领导和客户的误解
. v. J8 L: L/ @, r" {5 c: Q许多项目中,单元测试并未被纳入正式的开发流程或考核指标。0 [8 o# A+ V. v; `5 g: a( W
) }* `: _4 T# A. f' f9 c" ^
一些领导甚至认为,编写单元测试是“浪费时间”,因为测试结果并不能直接展现给客户。
% \6 _. E  J" u/ i; D8 f
9 D6 `1 T, a, v* J5 Q相较于前端的炫酷界面或新功能的上线,单元测试的价值往往不易被直接感知。4 G2 Y1 w. T: X% x) c
, J8 z$ C/ v# d
因此,程序员缺乏写单元测试的内在动力,导致其在项目中的实际应用受到限制。
3 M, J9 R/ H* e$ n/ K5 M) ^3 Y
! a* [. T6 w2 B9 X, u1 T1 b

( b4 z/ x, H( u) ~& n, l历史包袱和遗留代码的影响
3 J9 ~3 }3 @0 d) v4 R* H' S, d
9 b5 A, P8 H; W4 k在许多老项目中,代码的架构和开发流程并不理想,遗留代码往往缺乏测试友好性。
4 q% [3 g- s) [
! ~7 J0 o/ Y6 ]4 t6 {面对臃肿且充满依赖关系的代码库,编写单元测试的难度增大,程序员可能更倾向于选择“鸵鸟策略”,通过手动调试的方式来解决问题,而不是为这些遗留代码添加单元测试,这不仅影响了新功能的开发,也使得代码质量难以提升。1 _8 r' J7 L+ q4 f2 v

) M0 A, j% {" k( l% ]
; W0 c0 D' p% x8 |  [
教育与培训的不足$ O8 d0 ^5 x3 \
国内高校和培训机构在培养程序员时,往往侧重算法、数据结构和框架使用,而较少系统地讲解测试驱动开发(TDD)或单元测试的重要性。
( @4 g$ j( K1 I$ s! r1 s2 Z5 s# D
% {; a* o7 i- g6 U! n结果是,很多程序员入行时对单元测试缺乏基本认知,甚至认为这是测试工程师的工作。
$ F: U7 D- e. X  N
1 A! h; E* G/ b: ?与此同时,许多培训课程为了追求“快速出效果”,往往忽视了单元测试这一重要环节,进一步加剧了这种状况。' }# U  X% ]2 @$ v& F0 U

. i6 L: |! t: T- d" G' H

3 b  b( Z2 r, L* P& x心态:写单元测试不够“酷”
$ w0 L1 v* W/ J- R" x! C% T程序员更倾向于从事具有挑战性的工作,如优化算法、设计系统架构或解决复杂的Bug。  I3 q. m: ?- U- a: P

! j7 J3 {; M  Q, x这些任务不仅能带来成就感,更容易在团队中引起关注。9 @5 [% j* m3 F; {1 d6 U/ `
) J# _, L" g! [
而相比之下,编写单元测试常被视为“低级”任务,难以体现个人价值。2 p% L9 r5 p$ p* `6 A; b) B$ G
1 {) r9 x4 T8 ]: ~* l  n/ P
在追求技术炫酷的环境中,单元测试显得不够吸引人,程序员宁愿投入时间学习新技术或参与高难度开发任务,而不是编写看似“无趣”的测试代码。
- x. o5 L  v! t! B! H2 m1 C5 I
) C. B, Q# v, g' Y3 X/ v8 J! i

, M! J' I% ]0 o4 @* w4 @不信任和不习惯  ^: Q) p; {" z6 M9 [, B' }" I
一些程序员依赖手动测试,认为自己调试得足够细致,单元测试并不会发现更多错误。
8 B* e2 e% I, W  L( D9 ?4 v
- a6 O8 |: Z3 _, F; B3 U) H) q4 _) ~' m这种自信往往源自缺乏单元测试的经验和信任感,尤其是在没有系统学习过单元测试的情况下。
- E4 @+ F" P5 u- ^5 P1 v3 v2 Y1 Z6 E* H5 d7 q, _3 g
对他们来说,测试的“反馈周期”和“维护成本”似乎比直接调试更“麻烦”,导致单元测试的实施受到限制。* W% u8 t$ m. N: }
* [) w8 M9 h' |. b0 H) t
/ N$ W( [6 |7 X8 B" W& f
过度加班的无奈
% u7 D1 Z: ]" s在高压的工作环境中,很多程序员长期处于“救火”的状态,常常是修Bug或加班赶需求。
+ S" [8 b5 C5 D0 a. S: A: P1 a+ \$ g6 j+ u$ I  T7 J5 b$ ?
在这种情况下,维护现有代码和快速响应客户需求往往优先于编写单元测试。. @5 b/ K8 @" t: ?
9 P9 |: I, G* o+ _% k
而当项目交付后,程序员已没有精力去弥补这些“技术债”。
" p/ ]0 _- h& e( V4 e9 n+ f3 v+ h1 S$ q8 r1 y, j
这就像拼命赶路的人,即使知道需要休息,但总觉得停下来会“浪费时间”。! ^& c& A8 a/ f6 A7 g0 E
; `8 N3 T; B; |3 J
& X' F2 b4 ^" w; a& _4 e' m" d
对质量的重视不足
- x) X% I& a3 F3 Q% p5 ~许多程序员在工作中对软件质量的认知较低,缺乏对单元测试所能带来的质量保障的理解。8 Y( s3 j. C  X0 v$ s: a  u

) ^/ Y2 B3 `5 ^8 v/ k由于没有意识到单元测试能够有效减少Bug数量、提高代码可维护性,程序员对编写单元测试的积极性自然不高。1 u/ W! q: z7 r' ~" q3 s( f
7 Q) C9 S) m& h) r: ?1 B
这种短视的态度可能导致项目长期面临更高的维护成本和潜在风险。
3 p; `% x1 P5 P/ [9 ~  h* v
( C7 `( C& C5 ], S- M/ T3 s9 l+ G尽管国内对单元测试的重视程度较低,但也有一些企业在逐渐改善这种情况。+ K; F) D  d# {8 n+ ^& i5 M
, x3 K- T0 ~4 u- D; X
引入敏捷开发、DevOps实践,以及要求开发人员具备更全面的测试能力,都在推动单元测试的普及。/ v0 }1 w) t. [% R$ p! j) A

1 [0 E" O" U# e; u1 O! j然而,要让单元测试在国内成为常态,还需从文化、领导认知和开发人员习惯等多方面进行深层次的变革。0 |: N8 Y$ [7 p8 ^
7 j3 W) \6 m4 I+ y
这个过程或许会较长,但只要开发者们开始意识到单元测试带来的质量提升和长期效益,未来单元测试的普及度自然会提高。0 R" L' B$ r! M. u! X% O
, W) }6 f& ]" A% N7 {
希望不久的将来,“代码就是自带测试的代码”能够成为程序员们的共识!
$ r1 b6 r( d' b: F" w- u2 c3 K

onos1wbbanl64087823.jpg

onos1wbbanl64087823.jpg

1 G0 d' F! {% y* v

0yzoxntlmfu64087923.gif

0yzoxntlmfu64087923.gif

( j5 Y! s1 Y9 N/ s, ^点击阅读原文,更精彩~
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表