{"id":41249,"date":"2023-12-10T02:35:53","date_gmt":"2023-12-10T02:35:53","guid":{"rendered":"https:\/\/masterskills.org\/blog\/tam-su-cua-mot-coder-tim-bug-phai-dua-vao-ca-linh-cam-lan-quy-tac.html"},"modified":"2023-12-13T04:43:01","modified_gmt":"2023-12-13T04:43:01","slug":"tam-su-cua-mot-coder-tim-bug-phai-dua-vao-ca-linh-cam-lan-quy-tac","status":"publish","type":"post","link":"https:\/\/masterskills.org\/blog\/tam-su-cua-mot-coder-tim-bug-phai-dua-vao-ca-linh-cam-lan-quy-tac.html","title":{"rendered":"T\u00e2m s\u1ef1 c\u1ee7a m\u1ed9t Coder: T\u00ecm bug ph\u1ea3i d\u1ef1a v\u00e0o c\u1ea3 linh c\u1ea3m l\u1eabn quy t\u1eafc"},"content":{"rendered":"<div class=\"content-detail textview\">\n<p>T\u00f4i b\u1eaft \u0111\u1ea7u vi\u1ebft nh\u1eefng d\u00f2ng code \u0111\u1ea7u ti\u00ean c\u00e1ch \u0111\u00e2y g\u1ea7n 32 n\u0103m \u2013 khi t\u00f4i l\u00ean 6 tu\u1ed5i. T\u00f4i ph\u00e1t tri\u1ec3n n\u0103ng khi\u1ebfu coding r\u1ea5t m\u1ea1nh. T\u00f4i c\u00f3 th\u1ec3 hi\u1ec3u r\u00f5 m\u1ecdi v\u1ea5n \u0111\u1ec1 v\u00e0 ngay l\u1eadp t\u1ee9c bi\u1ebft c\u00e1ch gi\u1ea3i quy\u1ebft ch\u00fang, ch\u1ec9 b\u1eb1ng tr\u1ef1c gi\u00e1c.<\/p>\n<p>Theo th\u1eddi gian, t\u00f4i ki\u1ebfm s\u1ed1ng b\u1eb1ng ngh\u1ec1 &#8220;code d\u1ea1o&#8221;, t\u00f4i c\u1ea3m th\u1ea5y m\u00ecnh nh\u01b0 m\u1ed9t ng\u01b0\u1eddi n\u1ed5i ti\u1ebfng, m\u1ed9t &#8220;rock star coder&#8221; th\u1eadt s\u1ef1. T\u00f4i ph\u00e1t hi\u1ec7n v\u00e0 s\u1eeda l\u1ed7i (fix bug) nhanh h\u01a1n t\u1ea5t c\u1ea3 c\u00e1c \u0111\u1ed3ng nghi\u1ec7p. Tr\u01b0\u1edfng nh\u00f3m b\u1eaft \u0111\u1ea7u giao cho t\u00f4i c\u00e1c nhi\u1ec7m v\u1ee5 kh\u00f3 nh\u1ea5t v\u00e0 c\u00e1c bug h\u00f3c b\u00faa nh\u1ea5t. H\u1ecd g\u1ecdi t\u00f4i l\u00e0 &#8220;ph\u00f9 th\u1ee7y&#8221;.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy\" title=\"Coder\" src=\"https:\/\/st.Masterskills.com\/photos\/image\/2016\/07\/14\/Debug-code-1.gif\" alt=\"Coder\" width=\"375\" height=\"211\" \/><\/p>\n<p>Tuy nhi\u00ean, l\u00e0m theo tr\u1ef1c gi\u00e1c kh\u00f4ng th\u1ec3 \u0111\u01b0a t\u00f4i ti\u1ebfn xa h\u01a1n. T\u00f4i c\u00f3 nh\u1eefng b\u01b0\u1edbc ti\u1ebfn r\u00f5 r\u1ec7t nh\u01b0ng sau \u0111\u00f3 d\u1eebng l\u1ea1i v\u00e0 ch\u1eb3ng c\u00f3 g\u00ec n\u1ed5i b\u1eadt n\u1eefa. N\u0103ng khi\u1ebfu vi\u1ebft code c\u0169ng kh\u00f4ng th\u1ec3 n\u00e0o \u0111\u1ea9y t\u00f4i v\u1ec1 ph\u00eda tr\u01b0\u1edbc.<\/p>\n<h2>R\u1eafc r\u1ed1i khi tin v\u00e0o linh c\u1ea3m<\/h2>\n<p>\u0110i\u1ec1u kh\u00f4ng may r\u1eb1ng, tr\u1ef1c gi\u00e1c (hay linh c\u1ea3m) l\u00e0 m\u1ed9t k\u1ef9 thu\u1eadt d\u1ef1a v\u00e0o nh\u1eadn th\u1ee9c \u0111\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 l\u00e0m m\u1ed9t ti\u00eau chu\u1ea9n \u0111\u00e1nh gi\u00e1 t\u1ed1t \u0111\u01b0\u1ee3c. Khi ch\u1ec9 d\u1ef1a v\u00e0o tr\u1ef1c gi\u00e1c v\u00e0 n\u0103ng khi\u1ebfu, b\u1ea1n s\u1ebd v\u01b0\u1edbng ph\u1ea3i m\u1ed9t \u0111\u01b0\u1eddng cong c\u00f3 d\u1ea1ng nh\u01b0 h\u00ecnh d\u01b0\u1edbi:<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy\" style=\"border: 1px solid #000\" title=\"Coder\" src=\"https:\/\/st.Masterskills.com\/photos\/image\/2016\/07\/14\/Debug-code.png\" alt=\"Coder\" width=\"650\" height=\"358\" \/><br \/><span style=\"color: #00f\"><em>M\u1ed1i quan h\u1ec7 gi\u1eefa s\u1ef1 ph\u1ee9c t\u1ea1p c\u1ee7a v\u1ea5n \u0111\u1ec1 (Problem Complexity), kinh nghi\u1ec7m (Experience) v\u00e0 gi\u1edbi h\u1ea1n v\u1ec1 kh\u1ea3 n\u0103ng gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 c\u1ee7a m\u1ed7i ng\u01b0\u1eddi<\/em><\/span><\/p>\n<p>Ch\u1eafc ch\u1eafn l\u00e0 b\u1ea1n c\u00f3 th\u1ec3 ch\u1ecdn ch\u1ea5p nh\u1eadn gi\u1edbi h\u1ea1n v\u00e0 ch\u1ec9 gi\u1ea3i quy\u1ebft nh\u1eefng v\u1ea5n \u0111\u1ec1 n\u1eb1m d\u01b0\u1edbi \u0111\u01b0\u1eddng n\u00e0y. M\u1eb7c d\u00f9 c\u00f3 v\u1ebb khi\u1ebfn cho m\u1ed9t &#8220;rock star coder&#8221; nh\u01b0 b\u1ea1n c\u1ea3m th\u1ea5y th\u00edch th\u00fa nh\u01b0ng ch\u00ednh n\u00f3 s\u1ebd b\u1eaft \u0111\u1ea7u gi\u1edbi h\u1ea1n s\u1ef1 t\u0103ng tr\u01b0\u1edfng v\u00e0 s\u1ef1 nghi\u1ec7p c\u1ee7a b\u1ea1n nhanh ch\u00f3ng. Th\u00eam n\u1eefa, l\u1ef1a ch\u1ecdn n\u00e0y c\u0169ng ch\u1eb3ng c\u00f3 g\u00ec th\u00fa v\u1ecb c\u1ea3.<\/p>\n<p>Khi \u0111\u1ea9y b\u1ea3n th\u00e2n m\u00ecnh ti\u1ebfn xa h\u01a1n trong s\u1ef1 nghi\u1ec7p, t\u00f4i b\u1eaft \u0111\u1ea7u c\u1ea3m th\u1ea5y kh\u00f3 kh\u0103n v\u00e0 kh\u00f4ng th\u1ec3 d\u1ef1a v\u00e0o linh c\u1ea3m \u0111\u01b0\u1ee3c n\u1eefa \u2013 t\u00f4i nh\u1eadn ra \u0111\u00f3 l\u00e0 m\u1ed9t h\u01b0\u1edbng \u0111i h\u1ed7n lo\u1ea1n. T\u00f4i kh\u00f4ng c\u00f2n l\u00e0 m\u1ed9t \u0111\u1ee9a tr\u1ebb c\u1ea3m th\u1ea5y h\u00e1o h\u1ee9c \u0111\u01b0\u1ee3c h\u1ecdc h\u1ecfi khi \u1edf trong m\u00f4i tr\u01b0\u1eddng m\u1edbi.<\/p>\n<p>T\u00f4i bi\u1ebft r\u1eb1ng cu\u1ed1i c\u00f9ng, m\u00ecnh c\u0169ng s\u1ebd ph\u1ea3i \u0111\u1ed1i m\u1eb7t v\u1edbi nh\u1eefng ng\u01b0\u1eddi th\u00f4ng minh v\u00e0 t\u00e0i n\u0103ng h\u01a1n t\u00f4i (\u1ea2o t\u01b0\u1edfng c\u1ee7a t\u00f4i v\u1ec1 s\u1ef1 v\u0129 \u0111\u1ea1i l\u00e0 th\u1eadt. T\u00f4i kh\u00f4ng ph\u1ea3i l\u00e0 thi\u00ean t\u00e0i).<\/p>\n<p>Nh\u01b0ng khi nh\u00ecn xung quanh, t\u00f4i nh\u1eadn ra r\u1eb1ng m\u1ed9t v\u00e0i ng\u01b0\u1eddi \u0111\u00e1nh b\u1ea1i t\u00f4i kh\u00f4ng ph\u1ea3i b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng &#8220;si\u00eau tr\u00ed tu\u1ec7&#8221; hay \u0111\u1ea1i lo\u1ea1i l\u00e0 m\u1ed9t th\u1ee9 g\u00ec \u0111\u00f3 thu\u1ed9c v\u1ec1 kh\u1ea3 n\u0103ng code &#8220;b\u1ea9m sinh&#8221;. H\u1ecd ch\u1ec9 c\u00f3 m\u1ed9t &#8220;v\u0169 kh\u00ed&#8221; b\u00ed m\u1eadt m\u00e0 t\u00f4i ho\u00e0n to\u00e0n thi\u1ebfu: <strong>quy t\u1eafc.<\/strong><\/p>\n<p>\u0110i\u1ec1u n\u00e0y ch\u1ec9 ra r\u1eb1ng m\u1ed9t c\u00e1ch ti\u1ebfp c\u1eadn ki\u00ean tr\u00ec, c\u00f3 ph\u01b0\u01a1ng ph\u00e1p, l\u1eb7p \u0111i l\u1eb7p l\u1ea1i \u0111\u1ed1i v\u1edbi qu\u00e1 tr\u00ecnh nh\u1eadn th\u1ee9c v\u00e0 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 cu\u1ed1i c\u00f9ng s\u1ebd t\u1ea1o ra th\u00e0nh qu\u1ea3 l\u1edbn g\u1ea5p b\u1ed9i so v\u1edbi b\u1ea5t c\u1ee9 th\u1ee9 g\u00ec \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 &#8220;b\u1ea9m sinh&#8221; hay n\u0103ng khi\u1ebfu \u2013 m\u00e0 c\u00f3 l\u1ebd b\u1ea1n \u0111\u00e3 ph\u00e1t tri\u1ec3n \u0111\u01b0\u1ee3c.<\/p>\n<h2>H\u00e3y trang b\u1ecb cho m\u00ecnh c\u00e1c k\u1ef9 n\u0103ng gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1<\/h2>\n<p>B\u1ea5t k\u1ec3 b\u1ea1n l\u00e0 ai, \u0111am m\u00ea c\u1ee7a b\u1ea1n nh\u01b0 th\u1ebf n\u00e0o hay c\u00f3 kh\u1ea3 n\u0103ng thi\u00ean b\u1ea9m v\u1ec1 Coding th\u00ec cu\u1ed1i c\u00f9ng, b\u1ea1n c\u0169ng s\u1ebd g\u1eb7p ph\u1ea3i m\u1ed9t gi\u1edbi h\u1ea1n nh\u1ea5t \u0111\u1ecbnh. Tuy nhi\u00ean, v\u1edbi m\u1ed9t v\u00e0i k\u1ef9 thu\u1eadt sau \u0111\u00e2y, t\u00f4i ch\u1eafc ch\u1eafn b\u1ea1n s\u1ebd c\u1ea3i thi\u1ec7n \u0111\u01b0\u1ee3c c\u00e1c k\u1ef9 n\u0103ng gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 c\u1ee7a m\u00ecnh r\u1ea5t l\u1edbn \u0111\u1ea5y.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy\" title=\"Coder\" src=\"https:\/\/st.Masterskills.com\/photos\/image\/2016\/07\/14\/Debug-code-1.png\" alt=\"Coder\" width=\"650\" height=\"443\" \/><\/p>\n<div id=\"articleads2\" class=\"adbox in-article adsense\">\u00a0<\/div>\n<p>Gi\u1ea3 s\u1eed, b\u1ea1n c\u00f3 m\u1ed9t ch\u01b0\u01a1ng tr\u00ecnh debugger. B\u1ea1n \u0111\u00e3 ch\u1ea1y n\u00f3, &#8220;Google&#8221; th\u1eed k\u1ebft qu\u1ea3 v\u00e0 b\u1ea1n kh\u00f4ng th\u1ec3 ph\u00e1t hi\u1ec7n ra l\u1ed7i.<\/p>\n<p>Ti\u1ebfp t\u1ee5c, gi\u1ea3 s\u1eed n\u1ebfu v\u1ea5n \u0111\u1ec1 \u0111\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c ch\u1ec9 ra b\u1edfi ai \u0111\u00f3, b\u1ea1n c\u1ea7n l\u1eb7p l\u1ea1i (reproduce) l\u1ed7i \u0111\u00f3. N\u1ebfu kh\u00f4ng, b\u1ea1n c\u1ea7n t\u1ea1o ra l\u1ed7i tr\u01b0\u1edbc. Sau \u0111\u00f3, h\u00e3y so s\u00e1nh b\u1ed1i c\u1ea3nh v\u00e0 m\u00f4i tr\u01b0\u1eddng xu\u1ea5t hi\u1ec7n l\u1ed7i m\u00e0 b\u1ea1n \u0111ang c\u1ed1 g\u1eafng l\u1eb7p l\u1ea1i. H\u00e3y b\u1eaft \u0111\u1ea7u lo\u1ea1i b\u1ecf m\u1ecdi s\u1ef1 kh\u00e1c bi\u1ec7t, t\u1eebng c\u00e1i m\u1ed9t cho t\u1edbi khi b\u1ea1n l\u1eb7p l\u1ea1i l\u1ed7i th\u00e0nh c\u00f4ng.<\/p>\n<h2>RTFM (Read The File Manual)<\/h2>\n<p>\u0110\u1ecdc nhanh t\u00e0i li\u1ec7u, b\u1ea1n \u0111\u00e3 sai l\u1ea7m!<\/p>\n<p>H\u00e3y \u0111\u1ecdc n\u00f3 th\u1ef1c s\u1ef1 &#8211; nhi\u1ec1u h\u01a1n m\u1ed9t l\u1ea7n n\u1ebfu c\u1ea3m th\u1ea5y c\u1ea7n thi\u1ebft. \u0110\u1eebng ch\u1ec9 \u0111\u1ecdc l\u01b0\u1edbt \u0111\u1ec3 t\u00ecm ki\u1ebfm nh\u1eefng th\u1ee9 m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 copy &#8211; paste v\u00e0 sau \u0111\u00f3, hy v\u1ecdng l\u00e0 ch\u00fang ho\u1ea1t \u0111\u1ed9ng \u0111\u01b0\u1ee3c v\u1edbi h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n.<\/p>\n<p>V\u1ea5n \u0111\u1ec1 \u1edf \u0111\u00e2y l\u00e0 b\u1ea1n mu\u1ed1n \u0111\u1ecdc th\u1eadt nhanh c\u00e2u tr\u1ea3 l\u1eddi. B\u1ea1n mu\u1ed1n nhanh ch\u00f3ng c\u00f3 \u0111\u01b0\u1ee3c k\u1ebft qu\u1ea3. B\u1ea1n kh\u00f4ng s\u1eb5n s\u00e0ng b\u1ecf s\u1ee9c ra \u0111\u1ec3 l\u00e0m vi\u1ec7c. Th\u1ebf n\u00ean, h\u00e3y ch\u1eadm l\u1ea1i, th\u1edf, u\u1ed1ng m\u1ed9t t\u00e1ch caf\u00e9 v\u00e0 \u0111\u1ecdc c\u00e1c t\u00e0i li\u1ec7u li\u00ean quan th\u1eadt k\u1ef9.<\/p>\n<p>N\u1ebfu kh\u00f4ng c\u00f3 t\u00e0i li\u1ec7u, h\u00e3y t\u1ef1 x\u00e2y d\u1ef1ng v\u00e0 chia s\u1ebb n\u00f3 v\u1edbi nh\u1eefng ng\u01b0\u1eddi kh\u00e1c sau khi b\u1ea1n \u0111\u00e3 gi\u1ea3i quy\u1ebft \u0111\u01b0\u1ee3c v\u1ea5n \u0111\u1ec1.<\/p>\n<h2>Ki\u1ec3m tra c\u00e1c gi\u1ea3 thuy\u1ebft<\/h2>\n<p>N\u1ebfu mong \u0111\u1ee3i \u0111i\u1ec1u g\u00ec x\u1ea3y ra v\u00e0 k\u1ebft qu\u1ea3 l\u00e0 kh\u00f4ng th\u00ec \u0111\u00f3 l\u00e0 b\u1edfi v\u00ec b\u1ea1n \u0111\u00e3 \u0111\u01b0a ra m\u1ed9t gi\u1ea3 thuy\u1ebft sai l\u1ea7m \u1edf m\u1ed9t giai \u0111o\u1ea1n n\u00e0o \u0111\u00f3 trong qu\u00e1 tr\u00ecnh. Do v\u1eady, h\u00e3y c\u1ed1 g\u1eafng ki\u1ec3m \u0111\u1ecbnh nhi\u1ec1u gi\u1ea3 thuy\u1ebft v\u00e0 ch\u1ee9ng minh m\u1ed9t c\u00e1i \u0111\u00fang.<\/p>\n<p>H\u00e3y b\u1eaft \u0111\u1ea7u v\u1edbi c\u00e1c gi\u1ea3 thuy\u1ebft \u0111\u01a1n gi\u1ea3n nh\u1ea5t m\u00e0 c\u00f3 th\u1ec3 ki\u1ec3m tra nhanh nh\u1ea5t. M\u00e1y ch\u1ee7 c\u00f3 th\u1ef1c s\u1ef1 ho\u1ea1t \u0111\u1ed9ng kh\u00f4ng? \u0110\u00e3 \u0111\u01b0\u1ee3c k\u1ebft n\u1ed1i m\u1ea1ng ch\u01b0a? M\u1ecdi th\u1ee9 c\u00f3 \u0111\u01b0\u1ee3c \u0111\u00e1nh v\u1ea7n ch\u00ednh x\u00e1c? T\u1ea5t c\u1ea3 c\u00e1c d\u1ea5u ch\u1ea5m ph\u1ea9y v\u00e0 d\u1ea5u ngo\u1eb7c \u0111\u01a1n \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1eb7t \u0111\u00fang ch\u1ed7?<\/p>\n<p>N\u1ebfu kh\u00f4ng b\u1eaft \u0111\u1ea7u v\u1edbi nh\u1eefng th\u1ee9 \u0111\u01a1n gi\u1ea3n nh\u01b0ng cu\u1ed1i c\u00f9ng m\u1ed9t trong s\u1ed1 ch\u00fang l\u1ea1i \u0111\u00fang l\u00e0 c\u00e1i b\u1ea1n c\u1ea7n t\u00ecm th\u00ec b\u1ea1n c\u00f3 th\u1ec3 &#8220;ph\u00e1t \u0111i\u00ean&#8221; v\u00ec \u0111\u00e3 t\u1ed1n qu\u00e1 nhi\u1ec1u th\u1eddi gian \u0111\u1ea5y. Th\u1ebf n\u00ean, \u0111\u1eebng ph\u1ee9c t\u1ea1p h\u00f3a v\u1ea5n \u0111\u1ec1.<\/p>\n<h2>Disassemble (th\u00e1o g\u1ee1) v\u00e0 Reassemble (l\u1eafp r\u00e1p)<\/h2>\n<p>H\u00e3y lo\u1ea1i b\u1ecf c\u00e1c th\u00e0nh ph\u1ea7n trong gi\u1ea3i ph\u00e1p cho t\u1edbi khi n\u00f3 ho\u1ea1t \u0111\u1ed9ng tr\u1edf l\u1ea1i, sau \u0111\u00f3, l\u1ea7n l\u01b0\u1ee3t \u0111\u1eb7t ch\u00fang tr\u1edf v\u1ec1 v\u1ecb tr\u00ed ban \u0111\u1ea7u \u0111\u1ec3 t\u00ecm ra y\u1ebfu t\u1ed1 b\u1ecb ph\u00e1 v\u1ee1.<\/p>\n<p>\u0110i\u1ec1u n\u00e0y c\u00f3 v\u1ebb nh\u1ea1t nh\u1ebdo v\u00e0 nh\u00e0m ch\u00e1n nh\u01b0ng \u0111\u00e2y l\u00e0 m\u1ed9t trong nh\u1eefng c\u00e1ch hi\u1ec7u qu\u1ea3 nh\u1ea5t v\u00e0 c\u00f3 t\u00ednh k\u1ef7 lu\u1eadt nh\u1ea5t \u0111\u1ec3 ph\u00e1t hi\u1ec7n nguy\u00ean nh\u00e2n g\u00e2y ra l\u1ed7i trong code c\u1ee7a b\u1ea1n. Tuy nhi\u00ean, h\u00e3y ch\u1eafc ch\u1eafn l\u00e0 \u0111\u00e3 th\u1ef1c hi\u1ec7n sao l\u01b0u tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u.<\/p>\n<p>N\u1ebfu r\u01a1i v\u00e0o t\u00ecnh c\u1ea3nh kh\u00f4ng bi\u1ebft c\u00e1ch l\u1eafp r\u00e1p c\u00e1c m\u00e3 tr\u1edf v\u1ec1 \u0111\u00fang th\u1ee9 t\u1ef1 ban \u0111\u1ea7u c\u1ee7a n\u00f3 th\u00ec d\u1ea5u hi\u1ec7u n\u00e0y cho th\u1ea5y b\u1ea1n \u0111ang \u0111\u1ed1i m\u1eb7t v\u1edbi m\u1ed9t v\u1ea5n \u0111\u1ec1 nghi\u00eam tr\u1ecdng h\u01a1n: b\u1ea1n kh\u00f4ng hi\u1ec3u codebase m\u00e0 m\u00ecnh \u0111ang l\u00e0m vi\u1ec7c. L\u00fac n\u00e0y, c\u00e1ch t\u1ed1t nh\u1ea5t l\u00e0 nh\u1edd ai \u0111\u00f3 gi\u1ea3i th\u00edch ho\u1eb7c kh\u00f4ng th\u00ec b\u1ea1n ph\u1ea3i d\u00e0nh c\u1ea3 \u0111\u00eam \u0111\u1ec3 t\u00ecm hi\u1ec3u v\u1ec1 n\u00f3 c\u0169ng nh\u01b0 c\u00e1ch m\u00e0 m\u00e3 n\u00e0y l\u00e0m vi\u1ec7c.<\/p>\n<h2>Lo\u1ea1i b\u1ecf c\u00e1c bi\u1ebfn (Variable)<\/h2>\n<p>B\u1ea5t c\u1ee9 th\u1ee9 g\u00ec m\u00e0 thay \u0111\u1ed5i t\u1eeb l\u1ea7n th\u1eed \u0111\u1ea7u sang l\u1ea7n th\u1eed ti\u1ebfp theo th\u00ec c\u0169ng n\u00ean \u0111\u01b0\u1ee3c \u0111\u1eb7t \u1edf tr\u1ea1ng th\u00e1i t\u0129nh trong khi b\u1ea1n \u0111ang debug.<\/p>\n<div id=\"articleads3\" class=\"adbox in-article\">\u00a0<\/div>\n<p>\u0110\u00e2y ch\u00ednh l\u00e0 c\u00e1ch Test Driven Development (TDD) l\u00e0m vi\u1ec7c. N\u1ebfu \u0111ang s\u1eed d\u1ee5ng TDD th\u00ec b\u1ea1n n\u00ean c\u00f3 m\u1ed9t v\u00e0i \u0111\u1ed1i t\u01b0\u1ee3ng gi\u1ea3 \u0111\u1ecbnh (mock object) trong qu\u00e1 tr\u00ecnh lo\u1ea1i b\u1ecf.<\/p>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"lazy\" title=\"Coder\" src=\"https:\/\/st.Masterskills.com\/photos\/image\/2016\/07\/14\/Debug-code-2.jpg\" alt=\"Coder\" width=\"650\" height=\"366\" \/><\/p>\n<p>C\u00e1c mock object \u0111\u1ec1u l\u00e0 nh\u1eefng \u0111\u1ed1i t\u01b0\u1ee3ng &#8220;gi\u1ea3 v\u1edd&#8221; m\u00e0 c\u00f3 th\u1ec3 b\u1eaft ch\u01b0\u1edbc h\u00e0nh vi c\u1ee7a nh\u1eefng \u0111\u1ed1i t\u01b0\u1ee3ng th\u1ef1c theo nhi\u1ec1u c\u00e1ch c\u00f3 th\u1ec3 ki\u1ec3m so\u00e1t. M\u1ed9t l\u1eadp tr\u00ecnh vi\u00ean \u0111\u1eb7c th\u00f9 c\u00f3 th\u1ec3 t\u1ea1o ra m\u1ed9t mock \u0111\u1ec3 test h\u00e0nh vi c\u1ee7a c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng kh\u00e1c theo c\u00e1ch gi\u1ed1ng nh\u01b0 m\u1ed9t nh\u00e2n vi\u00ean thi\u1ebft k\u1ebf xe h\u01a1i s\u1eed d\u1ee5ng m\u1ed9t h\u00ecnh nh\u00e2n trong c\u00e1c b\u00e0i test tai n\u1ea1n \u0111\u1ec3 k\u00edch th\u00edch h\u00e0nh vi c\u1ee7a con ng\u01b0\u1eddi d\u01b0\u1edbi t\u00e1c \u0111\u1ed9ng c\u1ee7a c\u00e1c v\u1ee5 va ch\u1ea1m xe c\u1ed9.<\/p>\n<p>N\u1ebfu kh\u00f4ng th\u1ef1c hi\u1ec7n TDD, b\u1ea1n c\u1ea7n gi\u1ea3 \u0111\u1ecbnh m\u1ed9t bi\u1ebfn b\u1ea5t k\u1ef3 \u0111\u1ec3 c\u00f3 th\u1ec3 ph\u00e1t hi\u1ec7n ra l\u1ed7i trong \u0111i\u1ec1u ki\u1ec7n c\u00e1c y\u1ebfu t\u1ed1 kh\u00e1c kh\u00f4ng thay \u0111\u1ed5i.<\/p>\n<p><em><span style=\"text-decoration: underline\" data-mce-mark=\"1\">L\u01b0u \u00fd<\/span>: N\u1ebfu b\u1ea1n gi\u1ea3 m\u1ed9t \u0111\u1ed1i t\u01b0\u1ee3ng v\u00e0 bug \u0111\u1ed9t nhi\u00ean bi\u1ebfn m\u1ea5t th\u00ec khi \u0111\u00f3 nhi\u1ec1u kh\u1ea3 n\u0103ng l\u1ed7i n\u1eb1m trong \u0111\u1ed1i t\u01b0\u1ee3ng m\u00e0 b\u1ea1n \u0111\u00e3 gi\u1ea3 \u0111\u1ecbnh.<\/em><\/p>\n<h2>S\u1eed d\u1ee5ng k\u1ef9 thu\u1eadt &#8220;Saff Squeeze&#8221;<\/h2>\n<p>\u0110\u00e2y l\u00e0 m\u1ed9t k\u1ef9 thu\u1eadt \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean v\u00e0 ph\u1ed5 bi\u1ebfn b\u1edfi Kent Back, ph\u00e1t tri\u1ec3n t\u1eeb 2 \u00fd t\u01b0\u1edfng tr\u00ean.<\/p>\n<p>Kent Back m\u00f4 t\u1ea3 nh\u01b0 sau: <em>&#8220;\u0110\u1ec3 t\u00ecm ra \u0111\u01b0\u1ee3c sai s\u00f3t, h\u00e3y b\u1eaft \u0111\u1ea7u ki\u1ec3m tra \u1edf c\u1ea5p h\u1ec7 th\u1ed1ng v\u00e0 ti\u1ebfp t\u1ee5c nh\u01b0 v\u1eady cho t\u1edbi khi b\u1ea1n ti\u1ebfn h\u00e0nh m\u1ed9t b\u00e0i test v\u1edbi kh\u1ea3 n\u0103ng nh\u1ecf nh\u1ea5t s\u1ebd xu\u1ea5t hi\u1ec7n sai s\u00f3t \u0111\u00f3&#8221;.<\/em><\/p>\n<p>Th\u1ebf n\u00ean thay v\u00ec th\u00e1o r\u1eddi c\u00e1c mock hay m\u00e3 th\u00ec \u0111\u01a1n gi\u1ea3n l\u00e0 th\u00eam c\u00e1c ch\u1ee9c n\u0103ng m\u00e0 b\u1ea1n \u0111ang ki\u1ec3m tra v\u00e0o trong ch\u00ednh c\u00e1c b\u00e0i test, sau \u0111\u00f3, gi\u1ea3m m\u1ee9c \u0111\u1ed9 c\u1ee7a c\u00e1c x\u00e1c nh\u1eadn (assertions) cho t\u1edbi khi l\u1ed7i bi\u1ebfn m\u1ea5t.<\/p>\n<p>\u0110i\u1ec1u n\u00e0y r\u1ea5t c\u00f3 l\u1ee3i trong vi\u1ec7c gi\u00fap b\u1ea1n c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n c\u00e1c b\u00e0i test c\u1ee5 th\u1ec3 v\u00e0 quy m\u00f4 nh\u1ecf h\u01a1n.<\/p>\n<h2>Sau khi s\u1eeda l\u1ed7i, l\u1eb7p l\u1ea1i n\u00f3 v\u00e0 s\u1eeda l\u1ea1i m\u1ed9t l\u1ea7n n\u1eefa<\/h2>\n<p>\u0110\u1eebng bao gi\u1edd b\u1ecf qua m\u1ed9t l\u1ed7i cho t\u1edbi khi b\u1ea1n ho\u00e0n to\u00e0n hi\u1ec3u r\u00f5 v\u1ec1 c\u00e1ch s\u1eeda n\u00f3. B\u1ea1n n\u00ean l\u1eb7p l\u1ea1i l\u1ed7i v\u00e0 ti\u1ebfp t\u1ee5c s\u1eeda.<\/p>\n<p>\u0110\u1eebng c\u1ea3m th\u1ea5y c\u0103ng th\u1eb3ng b\u1edfi v\u00ec n\u1ebfu s\u1eeda m\u1ed9t bug v\u00e0 b\u1ea1n kh\u00f4ng ch\u1eafc ch\u1eafn ch\u00ednh x\u00e1c nguy\u00ean nh\u00e2n hay l\u00e0m th\u1ebf n\u00e0o m\u00e0 b\u1ea1n \u0111\u00e3 s\u1eeda \u0111\u01b0\u1ee3c n\u00f3 th\u00ec l\u1ed7i c\u00f3 kh\u1ea3 n\u0103ng s\u1ebd xu\u1ea5t hi\u1ec7n \u1edf m\u1ed9t th\u1eddi \u0111i\u1ec3m kh\u00e1c m\u00e0 b\u1ea1n kh\u00f4ng h\u1ec1 ng\u1edd t\u1edbi.<\/p>\n<h2>N\u0103ng khi\u1ebfu th\u00ec sao?<\/h2>\n<p>B\u1ea1n \u0111\u00e3 h\u1ecdc \u0111\u01b0\u1ee3c c\u00e1c k\u1ef9 thu\u1eadt debug quan tr\u1ecdng r\u1ed3i \u0111\u1ea5y v\u00e0 v\u1ea5n \u0111\u1ec1 \u0111\u1eb7t ra l\u00e0 lu\u00f4n lu\u00f4n s\u1eed d\u1ee5ng ch\u00fang \u0111\u1ea7u ti\u00ean thay v\u00ec d\u1ef1a v\u00e0o n\u0103ng khi\u1ebfu c\u1ee7a m\u00ecnh? Kh\u00f4ng, tuy\u1ec7t \u0111\u1ed1i kh\u00f4ng!<\/p>\n<p>N\u1ebfu b\u1ea1n c\u00f3 linh c\u1ea3m m\u1ea1nh v\u1ec1 v\u1ea5n \u0111\u1ec1 x\u1ea3y ra v\u00e0 c\u00f3 th\u1ec3 ki\u1ec3m tra n\u00f3 r\u1ea5t nhanh th\u00ec h\u00e3y th\u1ef1c hi\u1ec7n \u0111i\u1ec1u n\u00e0y \u0111\u1ea7u ti\u00ean. N\u1ebfu l\u1ed7i n\u1eb1m d\u01b0\u1edbi \u0111\u01b0\u1eddng m\u00e0u xanh trong bi\u1ec3u \u0111\u1ed3 tr\u00ean th\u00ec kh\u1ea3 n\u0103ng l\u1edbn l\u00e0 d\u1ef1a v\u00e0o tr\u1ef1c gi\u00e1c s\u1ebd gi\u00fap b\u1ea1n t\u00ecm ra gi\u1ea3i ph\u00e1p nhanh nh\u1ea5t.<\/p>\n<p>M\u1ed9t khi b\u1ea1n \u0111\u00e3 th\u1eed d\u1ef1a tr\u00ean linh c\u1ea3m nh\u01b0ng l\u1ea1i t\u00ecm sai l\u1ed7i th\u00ec h\u00e3y \u00e1p d\u1ee5ng c\u00e1c quy t\u1eafc m\u00e0 t\u00f4i \u0111\u00e3 \u0111\u1ec1 c\u1eadp.<\/p>\n<p>Linh c\u1ea3m v\u00e0 c\u00e1c quy t\u1eafc s\u1ebd gi\u00fap b\u1ea1n tr\u1edf th\u00e0nh m\u1ed9t trong nh\u1eefng Coder n\u1ed5i tr\u1ed9i nh\u1ea5t c\u1ee7a b\u1ea5t k\u1ef3 m\u1ed9t Team l\u00e0m vi\u1ec7c n\u00e0o, mi\u1ec5n l\u00e0 b\u1ea1n bi\u1ebft ph\u00e1t huy c\u1ea3 hai \u0111i\u1ec1u \u0111\u00f3.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>T\u00f4i b\u1eaft \u0111\u1ea7u vi\u1ebft nh\u1eefng d\u00f2ng code \u0111\u1ea7u ti\u00ean c\u00e1ch \u0111\u00e2y g\u1ea7n 32 n\u0103m \u2013 khi t\u00f4i l\u00ean 6 tu\u1ed5i. T\u00f4i ph\u00e1t tri\u1ec3n n\u0103ng khi\u1ebfu coding r\u1ea5t m\u1ea1nh. T\u00f4i c\u00f3 th\u1ec3 hi\u1ec3u r\u00f5 m\u1ecdi v\u1ea5n \u0111\u1ec1 v\u00e0 ngay l\u1eadp t\u1ee9c bi\u1ebft c\u00e1ch gi\u1ea3i quy\u1ebft ch\u00fang, ch\u1ec9 b\u1eb1ng tr\u1ef1c gi\u00e1c.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[452],"tags":[],"_links":{"self":[{"href":"https:\/\/masterskills.org\/blog\/wp-json\/wp\/v2\/posts\/41249"}],"collection":[{"href":"https:\/\/masterskills.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/masterskills.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/masterskills.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/masterskills.org\/blog\/wp-json\/wp\/v2\/comments?post=41249"}],"version-history":[{"count":0,"href":"https:\/\/masterskills.org\/blog\/wp-json\/wp\/v2\/posts\/41249\/revisions"}],"wp:attachment":[{"href":"https:\/\/masterskills.org\/blog\/wp-json\/wp\/v2\/media?parent=41249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/masterskills.org\/blog\/wp-json\/wp\/v2\/categories?post=41249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/masterskills.org\/blog\/wp-json\/wp\/v2\/tags?post=41249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}