电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

1001

主题

1001

帖子

8803

积分

高级会员

Rank: 5Rank: 5

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

n5sg2ttjskf64087723.gif

n5sg2ttjskf64087723.gif

6 m) [; G4 Y$ Y( `9 a点击上方蓝色字体,关注我们
7 d. _* w! b2 a" l1 m0 g9 A9 G5 r
: k0 k  C0 h! P- z  s+ q- [
$ j/ M5 z: P  ]7 l7 S2 t" f
速度与效率的“文化”
1 R$ j9 i$ x2 ~: B在中国职场文化中,速度通常被视为生产力的核心,尤其是在互联网公司,开发者面临“快上线、快迭代”的目标。
8 s8 x/ G& d7 L, H
6 t/ J7 E% J+ {) Y7 O5 d由于时间的压力,许多程序员更注重功能的实现,而忽视单元测试的必要性。9 k  G& r/ m; V
5 u' u/ ^2 k# U6 ?6 {. O' z
他们认为,单元测试是“可有可无”的附加成本,不仅耗时,还可能拖慢开发进度。
% v+ h$ s8 v' ?) q4 J* G& S2 L: F* \% f9 p
因此,很多人更倾向于“边写边调试”,以尽快完成需求。# p  C0 i: b; M3 m3 h7 v3 ]/ Z
0 U7 D3 |  s# v$ [
这种追求短期效益的心态,使得单元测试往往被视为“额外负担”。
" [) e5 v7 K$ ]: y3 _1 z: b0 N, S8 M7 \7 G

0 [3 x4 ?" i  T0 ~领导和客户的误解
3 j( R4 i0 t2 t5 V# K7 U- z4 D许多项目中,单元测试并未被纳入正式的开发流程或考核指标。
4 B1 J) {! u. W8 g- ]: }0 ?5 q- x* b8 S# }9 n% m) T+ E- ~
一些领导甚至认为,编写单元测试是“浪费时间”,因为测试结果并不能直接展现给客户。
" d! h# p9 Q3 O( j5 H  I
+ [: H8 V4 H( @9 \+ Y相较于前端的炫酷界面或新功能的上线,单元测试的价值往往不易被直接感知。
+ @5 k; i* N; M/ ?+ A" |  q. E1 }
& D8 N+ V" p1 h4 F( @/ t8 o因此,程序员缺乏写单元测试的内在动力,导致其在项目中的实际应用受到限制。
$ q9 `3 N0 p6 E0 V4 m+ z7 i+ l' k8 d* d2 A

2 S+ P8 W0 A* {' u: R7 \0 d2 e历史包袱和遗留代码的影响
. H/ z8 n  \6 O7 ?+ W5 H
& F1 z- A/ G7 Z1 w在许多老项目中,代码的架构和开发流程并不理想,遗留代码往往缺乏测试友好性。
# W2 t; Z% y8 l+ W) J, p' e, D, H+ o
面对臃肿且充满依赖关系的代码库,编写单元测试的难度增大,程序员可能更倾向于选择“鸵鸟策略”,通过手动调试的方式来解决问题,而不是为这些遗留代码添加单元测试,这不仅影响了新功能的开发,也使得代码质量难以提升。
. f/ a) J4 D% q: m0 O, C6 P4 w  ]* D& c- z

9 H+ b0 M7 L4 \( j教育与培训的不足8 M% Y3 ?( b3 p+ \; D" ]
国内高校和培训机构在培养程序员时,往往侧重算法、数据结构和框架使用,而较少系统地讲解测试驱动开发(TDD)或单元测试的重要性。
# H7 z7 m. y) c8 t$ Q
+ H% [& ]0 D# N1 B2 |5 r: ^结果是,很多程序员入行时对单元测试缺乏基本认知,甚至认为这是测试工程师的工作。& B& e4 s& Z# l1 b! A9 J5 j& x

- K. s7 J+ ^" l4 N" T4 u/ J与此同时,许多培训课程为了追求“快速出效果”,往往忽视了单元测试这一重要环节,进一步加剧了这种状况。
8 B  d& ?$ L7 F$ [% K0 g+ e/ e
+ u8 c5 M  d# H* d/ X* p0 p: m
+ o' Z" r8 s' _* C( g+ {
心态:写单元测试不够“酷”( g/ G9 T8 w: N
程序员更倾向于从事具有挑战性的工作,如优化算法、设计系统架构或解决复杂的Bug。$ q) Q1 T; \" F7 Y' p
" A. O% T0 Z) S; J' n) c, w' l
这些任务不仅能带来成就感,更容易在团队中引起关注。9 S4 ^5 {- G6 h* J* B5 v7 u( a

# b' W; g/ A, `. k7 T" _" k# H8 U而相比之下,编写单元测试常被视为“低级”任务,难以体现个人价值。
" v) a" f! c( ]$ |0 G# S3 S( W- D% W, N/ v
在追求技术炫酷的环境中,单元测试显得不够吸引人,程序员宁愿投入时间学习新技术或参与高难度开发任务,而不是编写看似“无趣”的测试代码。
0 D+ V, p4 C6 k
9 Z4 V% n) ?% D* I' J# O& f
7 k1 J  b% p- j+ T2 O9 g
不信任和不习惯. J8 J+ s6 |; `
一些程序员依赖手动测试,认为自己调试得足够细致,单元测试并不会发现更多错误。
' M2 Z2 i% @  B  r; `
5 M- b8 A% x+ l+ Y- H9 [这种自信往往源自缺乏单元测试的经验和信任感,尤其是在没有系统学习过单元测试的情况下。
% M' R% S2 }8 O
7 E; T3 v' f* @- r对他们来说,测试的“反馈周期”和“维护成本”似乎比直接调试更“麻烦”,导致单元测试的实施受到限制。
0 G8 _* s. T4 a& {" V1 P
( L: n0 |8 u+ B) @8 b7 V, D! x

9 {8 U6 Y, d* B) {& {* r过度加班的无奈# p% y% ^( ?7 U
在高压的工作环境中,很多程序员长期处于“救火”的状态,常常是修Bug或加班赶需求。
' H4 T: g7 C, G/ {  n5 S6 y, k, ^+ k5 T+ B. k" J. W" s" J+ i# I
在这种情况下,维护现有代码和快速响应客户需求往往优先于编写单元测试。; i( \  l1 ^& y5 w4 z
8 [8 G: z$ y+ _: r" u' X
而当项目交付后,程序员已没有精力去弥补这些“技术债”。
5 T+ C6 V, _6 d1 |3 c! f1 ^4 {! Z* q
这就像拼命赶路的人,即使知道需要休息,但总觉得停下来会“浪费时间”。
. z7 ~. A# I2 }3 g: l2 B+ G2 M( q- p5 t; ^' J! f
, `+ u3 Z% u7 @9 M: E% H  c
对质量的重视不足8 j6 |- g2 T( ?6 S" \
许多程序员在工作中对软件质量的认知较低,缺乏对单元测试所能带来的质量保障的理解。) M5 N. L$ b/ l; ^
/ a4 }0 ]- n8 Z5 a& |/ s3 a! j7 Z
由于没有意识到单元测试能够有效减少Bug数量、提高代码可维护性,程序员对编写单元测试的积极性自然不高。% p3 |0 W2 z. ?5 n. U# P

' D. l: b: |. Z+ Y, L, `- F* O这种短视的态度可能导致项目长期面临更高的维护成本和潜在风险。) i6 I; M! H+ I

' V7 o% G- T) f; k/ N尽管国内对单元测试的重视程度较低,但也有一些企业在逐渐改善这种情况。$ t/ x; Y3 S8 j5 d
0 j* u9 F* A. J  D- v. W
引入敏捷开发、DevOps实践,以及要求开发人员具备更全面的测试能力,都在推动单元测试的普及。, e7 L# h+ b: _4 a6 t+ i$ h
7 _3 {9 A1 \" [5 d' l# L2 C+ T4 g- \
然而,要让单元测试在国内成为常态,还需从文化、领导认知和开发人员习惯等多方面进行深层次的变革。
3 d( j8 d) h' H; h; p
0 U0 @, l  x3 R" j0 `* _这个过程或许会较长,但只要开发者们开始意识到单元测试带来的质量提升和长期效益,未来单元测试的普及度自然会提高。2 h* W3 Q9 ?, Y  z+ j

8 |1 n4 u5 i1 l# j希望不久的将来,“代码就是自带测试的代码”能够成为程序员们的共识!( ~! J  S+ e" \6 {

onos1wbbanl64087823.jpg

onos1wbbanl64087823.jpg

% S1 \5 m# i) `1 |4 r# l3 C

0yzoxntlmfu64087923.gif

0yzoxntlmfu64087923.gif
3 }9 U- q$ [) r! x
点击阅读原文,更精彩~
回复

使用道具 举报

发表回复

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

本版积分规则


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