Trở thành một người sửa lỗi tốt hơn


24

Tôi thích trở thành một lập trình viên. Ở đó, tôi đã nói nó. Tuy nhiên, như đã nói, gần đây tôi đã nhận ra rằng tôi thực sự không thể sửa lỗi. Ở tất cả.

Trên thực tế, trong khi tôi đang phát triển một thứ gì đó, năng suất của tôi cực kỳ cao. Ngay cả khi viết bài kiểm tra đơn vị và tự kiểm tra sự phát triển của mình, tôi vẫn thực sự hiệu quả. Tôi có thể tập trung tốt, và tôi có thể hoàn thành nhiệm vụ.

Tuy nhiên, khi thời gian QA xuất hiện và tôi đang làm việc để sửa lỗi, nguồn cảm hứng của tôi mất rất nhiều thời gian. Tôi phải ép buộc bản thân bằng các biện pháp cực đoan (bạn biết đấy, nhạc BPM cao, lượng caffeine quá mức, v.v.) để hoàn thành mọi việc . Công việc của tôi thường liên quan đến việc bước vào một dự án lớn hiện có và thêm các tính năng mới hoặc sửa lỗi, vì vậy tôi không thể nói chính xác với chủ nhân của mình rằng tôi cần một vài tuần để viết bài kiểm tra đơn vị cho tất cả mã của họ :) Ngoài ra, công nghệ máy chủ mà chúng ta thường sử dụng rất nghiêm ngặt đối với cả kiểm thử đơn vị và tích hợp, vì nó có khá nhiều vấn đề về trình nạp lớp Java. Tôi không hoàn toàn chống lại sửa lỗi, đôi khi nó có thể vui, nhưng nó không vui chút nào khi bạn phải thực hiện các thay đổi nhỏ và đợi 30 giây đến 3 phút để có thể xem chúng có hoạt động hay không (do cách hệ thống hoạt động).

Làm cách nào tôi có thể cải thiện năng suất và động lực của mình khi sửa lỗi? Đây có phải là điều mà hầu hết các lập trình viên đối phó?


4
"vì vậy tôi không thể nói chính xác với chủ nhân của mình rằng tôi cần một vài tuần để viết bài kiểm tra đơn vị cho tất cả mã của họ" . Có một lý do cho điều đó? Tôi làm điều đó rất nhiều, và nó thực sự mang lại kết quả cho tất cả mọi người. Ý tôi là, nếu bạn mất 3 tuần để kiểm tra đơn vị, bạn có thể chỉ cần lưu 3 tuần sửa lỗi. Thông thường tôi thậm chí còn tìm thấy vô số lỗi cuối cùng hoàn toàn nằm dưới radar của QA. Chắc chắn, bạn có thể không muốn làm điều đó một mình.
netcoder

10
Đừng viết lỗi trong mã của bạn ... vấn đề đã được giải quyết.
Michael Brown

3
Tôi gần như thích sửa lỗi để viết mã mới. Tôi đặc biệt thích nó để viết bài kiểm tra đơn vị. Có lẽ tôi là lạ.
Paul Tomblin

1
@PaulTomblin Tôi hiểu bạn đang nói gì. Tôi biết một số nhà phát triển yêu thích phát triển frontend ... tôi thích mã không phải UI nhất. Viết mã mới đôi khi rất khó vì đôi khi bạn nhận được "khối nhà văn"
Michael Brown

1
Thật khó để đo lường "năng suất" của việc sửa lỗi vì bạn có thể mất nhiều thời gian để tìm hiểu "không phải là vấn đề", giống như Edision có ý định nói rằng ông đã tìm ra "1000 cách KHÔNG để tạo ra bóng đèn ", Và tôi nghĩ rằng các bản sửa lỗi thường mang tính hướng dẫn trong việc dạy cho bạn những manh mối nào là quan trọng và nhiệm vụ sửa lỗi hiện tại (và tương lai).
Zeke Hansell

Câu trả lời:


21

Thật không vui chút nào khi bạn phải thực hiện những thay đổi nhỏ và đợi 30 giây đến 3 phút để có thể xem chúng có hoạt động hay không

Đó là vấn đề thực sự ở đây. Bạn cảm thấy không hiệu quả khi bạn phải chờ đợi phản hồi quá lâu, tôi biết cảm giác đó. Có lẽ có thể giả mạo nhiều dịch vụ hơn và tạo ra các công cụ kiểm tra tốt hơn để bạn có thể nhận được phản hồi ngay lập tức.

Mã kế thừa thử nghiệm đơn vị là đắt tiền hoặc có thể liên quan đến tái cấu trúc nguy hiểm. Tuy nhiên, việc tạo đồ đạc kiểm tra tốt hơn có thể cho phép bạn kiểm tra bằng tay trong vài giây so với phút và bạn có thể có được năng suất gần như tương đương với làm việc với mã kiểm tra đơn vị mới.

Chờ đợi quá lâu cho phản hồi là nhàm chán và giảm điều kiện, không phải là hành động sửa lỗi.


Bao giờ đọc Tháng huyền thoại? Chỉ cần hình ảnh chờ đến sáng hôm sau và cố gắng phân tích nội dung stack stack / đăng ký có mặt tại thời điểm thất bại ...
sq33G

@ sq33G Hoặc thậm chí tệ hơn, có nhóm thử nghiệm của bạn ở Ấn Độ mà bạn chỉ nói chuyện qua email (câu chuyện thực tế).
Hội trường Garrett

13

Sửa lỗi là một kỹ năng cực kỳ quan trọng mà bạn nên học hỏi. Tôi đã đọc ở đâu đó rằng, thông thường một người dành 80% thời gian để sửa 20% các vấn đề trong một ứng dụng.

Tôi tin vào việc học hỏi từ những sai lầm, và sửa lỗi là một cơ hội để học hỏi từ những sai lầm khác . Bạn có thể học nó và sẽ giúp trở thành một lập trình viên tốt hơn trong tương lai. Đây là động lực tôi có khi tôi bắt đầu sửa rất nhiều lỗi và tiến về phía trước để xác nhận lại mã .


1
Những gì bạn viết là đúng sự thật; tuy nhiên, 80% / 20% của bạn chỉ đúng vì có quá nhiều mã tào lao trong tự nhiên. Ý tôi là, crappy, được thiết kế quá mức hoặc quá kiến ​​trúc hoặc bị kiến ​​trúc sai hoặc chỉ là những thực hành cẩu thả (lập trình crack-head). Điều đó đang được nói, không có gì sai với một nhà phát triển thích phát triển hơn để sửa lỗi. Thêm vào thực tế là hầu hết các phần mềm được thiết kế kém ngay từ đầu và bạn đã thiết lập hầu hết các bản sửa lỗi cho lỗi.
Wil Moore III

@wilmoore: Bạn đúng với mã crappy, và cũng có yêu cầu thay đổi.
ManuPK

6

Cá nhân, tôi thấy thật hữu ích khi ngừng nghĩ về các lỗi là "những điều nhỏ nhặt" mà là các trình chiếu lớn cũng quan trọng như các tính năng khổng lồ mặc dù chúng chỉ liên quan đến việc thay đổi một vài dòng mã sau nhiều giờ gỡ lỗi. Bằng cách đó, việc dành cả ngày để tiêu diệt 3 mục theo dõi lỗi là cách ít gây phiền toái hơn (cách tiếp cận phụ thuộc một chút vào khả năng cá nhân của bạn để nói về việc tin vào điều đó :-).

Có lẽ nó giúp biến nó thành một trò chơi, ví dụ như cùng với đồng nghiệp của bạn ( người sửa nhiều lỗi nhất mỗi ngày? Hay thậm chí tệ hơn, ai đã làm ít nhất số lần xây dựng lại mỗi ngày? )


Tôi hoàn toàn không đồng ý với việc biến nó thành một trò chơi sửa nhiều lỗi nhất trong một ngày, hoặc những thứ tương tự. Một số lỗi không quan trọng để cô lập và sửa chữa một khi bạn biết cách kích hoạt chúng: dán giá trị cụ thể đó vào trường này và xem: độ dài còn lại bây giờ là sai. (Có thể bạn đang đếm byte thay vì ký tự và quên khoảng trống ở trên, giả sử, U + 007F.) xảy ra trong lĩnh vực này. Cả hai đều chỉ đảm bảo một mục duy nhất trong trình theo dõi lỗi.
một CVn

Đếm các lỗi như vậy có nghĩa là mọi người sẽ chỉ sửa các lỗi đơn giản thay vì xử lý các điều kiện cuộc đua .. nhưng đó không phải là trường hợp có lỗi không được điều chỉnh, không tập trung? :-) Không để các lỗi "khó" nghỉ ngơi có lợi cho những điều đơn giản là một chủ đề hoàn toàn khác.
Alexander Gessler

Ngoài ra còn có vấn đề về chất lượng của bản sửa lỗi. Trong nhiều trường hợp, bạn có thể khắc phục nhanh lỗi này mà không khắc phục được lỗi, nhưng sau đó, một lỗi tương tự sẽ xuất hiện ở một nơi khác hoặc trong một số tình huống khác. Hiểu và sửa bản chất của lỗi thường mất nhiều thời gian hơn, nhưng nói chung dẫn đến một sửa chữa mạnh mẽ hơn nhiều. Trừ khi đó là "điều này không thành công trong quá trình sản xuất và chúng tôi phải công bố bản sửa lỗi ngay bây giờ ", tôi biết cách tiếp cận nào tôi thích (và ngay cả khi nó là, quay trở lại để sửa chữa xương gãy thay vì chỉ cắt bỏ vết cắt một ý tưởng tốt).
một CVn

5

Tôi đã ở trong đôi giày của bạn. Xây dựng các bài kiểm tra tự động khi và nơi bạn có thể. Nó không phải là tất cả cùng một lúc. Khi bạn tìm thấy một lỗi, hãy dành một phút để thử lập trình một trường hợp thử nghiệm. Nếu bạn không thể lập trình một trường hợp thử nghiệm, hãy viết một bản giới thiệu nhanh ở đâu đó về cách kiểm tra thủ công, ví dụ: nhấp vào đây, nhập nội dung này, v.v. và đặt nó vào một số Cơ sở Kiến thức.

Gỡ lỗi có thể rất mệt mỏi, đặc biệt là với mã phức tạp bạn không viết. Hãy đến với một mục tiêu, "Sửa lỗi 13533 vào thứ Sáu". Sau đó thiết lập phần thưởng nếu bạn đạt được mục tiêu, "Lấy một pint với bạn bè của tôi vào tối thứ Sáu". Điều này sẽ giúp làm cho nó một chút bổ ích.

Ngoài ra, đôi khi công việc chỉ là ... công việc.


Đối với dự án hiện tại này, trên thực tế, tôi đã kiểm tra đơn vị bằng văn bản. Vấn đề duy nhất là bất kể những gì tôi dường như có thể chứng minh bằng cách sử dụng các bài kiểm tra đơn vị của mình, mọi thứ đều đi vào địa ngục trong sản xuất / đời thực, do các vấn đề với công nghệ máy chủ. Thật không may, không có sự thay thế nào khác và tôi không thể thay đổi động cơ.
Naftuli Kay

Bạn cần phải viết một thói quen "xử lý lỗi không mong muốn" để giúp bạn nắm bắt những điều đó ;-)
Zeke Hansell

2

Trong loại tình huống này, bạn cần một số loại thử thách sáng tạo. Thông thường, đó là viết mã, nhưng ở đây thì không.

Nhưng mọi thứ chưa hẳn đã mất. Làm việc để giải quyết các vấn đề meta của bạn và đổ năng lượng của bạn vào đó. Tại sao phải mất 30 giây đến 3 phút để nhận phản hồi? Làm thế nào bạn có thể rút ngắn thời gian đó? (Có lẽ bạn có thể viết một số loại kịch bản hoặc ứng dụng tiện ích mà bạn không đăng ký để giúp bạn làm điều này). Đó là miền vấn đề mới của bạn - thách thức sáng tạo mới của bạn.

Cá nhân, bất cứ khi nào tôi đang trong giai đoạn sửa lỗi, tôi xác định những rào cản lớn nhất của mình để hoàn thành nó một cách nhanh chóng và không đau đớn, và tôi tự động hóa những gì tôi cần để tự động hóa để loại bỏ những rào cản đó. Điều này thường dẫn đến tăng năng suất và bổ sung vào danh mục đầu tư cá nhân của tôi để khởi động.

Vì vậy, trong ngắn hạn, tôi muốn nói "luôn luôn được phát triển." :)


Tôi nghe bạn. Tôi ước tôi có thể làm một cái gì đó để tự động hóa mọi thứ. Tôi đã có một máy chủ và một máy khách và tôi không thể tự động hóa chính xác máy khách một cách dễ dàng. Có nhiều giai đoạn trong quy trình làm việc của điều này và nhiều lỗi phát sinh giữa các giai đoạn, vì vậy tôi phải thực hiện giai đoạn 30 giây, sau đó là giai đoạn 3 phút hoặc ngược lại. Điểm mấu chốt, đó là cơn ác mộng đẹp> :)
Naftuli Kay

2

Là vấn đề của bạn gỡ lỗi hoặc sửa lỗi? Nếu bạn có thể gỡ lỗi đủ để cô lập thành phần gây ra sự cố, thì hãy xem nó như một nhiệm vụ phát triển mới.

  1. Viết một số bài kiểm tra đơn vị cho chỉ đoạn mã bị phá vỡ. Hãy chắc chắn rằng bạn đã kiểm tra xác thực tất cả các chức năng mong muốn của nó, cộng với một số cách đặc biệt cô lập hành vi lỗi.
  2. Viết mã mới vượt qua tất cả các bài kiểm tra bạn vừa viết.
  3. Thay thế mã cũ bằng mã mới.
  4. Chạy một số bài kiểm tra tích hợp. Đây là nơi bạn sẽ chạy vào máy chủ khởi động lại trong ba phút, nhưng nó sẽ được giảm thiểu nếu bạn thực hiện tốt các bước 1-3.
  5. Voila!

2

Có lẽ bạn nên xem Bản sửa lỗi của Brian Hayes , một bài báo xuất hiện trên Nhà khoa học Mỹ năm 1995. Bạn có thể thực hiện các bước (như sử dụng thói quen Yoda theo thói quen ) để giảm hoặc loại bỏ các loại lỗi đáng ghét nhất mà bạn tạo ra.

Tôi cho rằng gỡ lỗi là một kỹ năng khác với lập trình, mặc dù có liên quan. Cụ thể, việc gỡ lỗi các chương trình đa luồng gần như hoàn toàn khác với việc viết chúng.


1

Nếu phát triển phần mềm là nhàm chán, bạn đang làm sai. Nói cách khác, đó không phải là vấn đề với bạn, mà là vấn đề với nền tảng và quy trình của bạn. Bạn đã cân nhắc tìm kiếm một vị trí bằng ngôn ngữ động (ví dụ: Python, Ruby, JavaScript), nơi bạn không phải đợi máy chủ khởi động lại?


Thật không may, nó không phải là một lựa chọn ở giai đoạn này. Thêm vào đó, quy trình làm việc, như đã đề cập ở trên, đòi hỏi nhiều giai đoạn và các bước và các lỗi xuất hiện giữa các giai đoạn này. Nếu tôi viết nó từ đầu, tôi chắc chắn sẽ xem xét việc sử dụng ngôn ngữ kịch bản, nhưng chúng tôi bị mắc kẹt với những gì chúng tôi có bây giờ.
Naftuli Kay

1
@TK: Tại công ty cuối cùng của tôi, chúng tôi đã thành công lớn khi tích hợp Groovy vào quy trình phát triển Java của chúng tôi để tự động hóa các quy trình thủ công trước đây. Đó không phải là Java, nhưng nó đủ gần và hiệu quả đến mức chúng tôi có rất ít sự đẩy lùi.
kevin cline

1

Thật không may, đó là một phần của công việc. Bạn sẽ có những dự án nhảm nhí và những nhà tuyển dụng nhảm nhí (tôi không nói là trường hợp ở đây, chỉ là khái quát hóa).

Bạn có thể viết bài kiểm tra đơn vị chống lại mã của họ. Lén nó trong khi bạn có thể. Một khi bạn có thứ gì đó bạn có thể chỉ cho các ông chủ, bạn có thể xoay chuyển tình thế.

Sử dụng các công cụ gỡ lỗi để khắc phục sự chậm chạp, sử dụng các bài kiểm tra đơn vị để kiểm tra mã mới và sử dụng chúng để khắc phục các sự cố của mã hiện có cũng như phân tách mã hiện có thành các phần nhỏ hơn.

Bạn có thể biến nó thành một thách thức và trở thành một anh hùng cải tiến quy trình. Và, nếu nó không hoạt động, bạn sẽ có kinh nghiệm tốt để đưa đến nhà tuyển dụng tiếp theo.


1

Hầu hết các lập trình viên phải đối phó với các vấn đề cá nhân sửa lỗi tại một số điểm trong sự nghiệp của họ.

Ý thức đúng về khoảng cách giữa người với người là rất cần thiết cho động lực của bạn. Đừng quá hoặc quá hiểu với công việc của bạn. Nếu bạn quá tự nhận mình với công việc của mình, các vấn đề như những gì bạn đã mô tả có thể xuất hiện: Bạn có thể rất miễn cưỡng sửa các lỗi vì bạn là một nửa thời gian tự trách mình. Có một số khoảng cách bên trong và tìm hiểu làm thế nào bạn có thể giải quyết vấn đề của bạn một cách hợp lý.

Liên quan đến các vấn đề cụ thể trên nền tảng của bạn, có một số cách để giảm thiểu thời gian triển khai và thử nghiệm lâu dài (và, về phía bạn, không đặc biệt dài).

Thứ nhất, thời gian thử nghiệm của bạn càng dài, bạn càng không nên tôn sùng hàng hóa. Nếu bạn thực hiện một thay đổi, hãy suy nghĩ về nó cho đến khi bạn tự tin rằng nó sẽ sửa lỗi . Tất nhiên, mức độ tự tin tùy thuộc vào độ dài của chu kỳ kiểm tra của bạn. Nhưng nếu chu kỳ kiểm tra của bạn dài hơn và không thể tránh được các bài kiểm tra dài, hãy dành nhiều thời gian hơn để suy nghĩ và bạn sẽ được thưởng và hạnh phúc hơn khi gỡ lỗi vì nó nhanh hơn có tác dụng bổ ích cho một khoảnh khắc tuyệt vời của "fiat lux ".

Thứ hai, thiên vị nhiều hơn đối với các bài kiểm tra đơn vị và ít hơn đối với các bài kiểm tra tích hợp. Xóa mọi điểm lỗi khỏi nền tảng khó gỡ lỗi mà bạn có thể.


1

Sửa lỗi có thể là "tuyệt vời" hoặc "tẻ nhạt". Tôi có một số khoản tín dụng trò chơi hoàn toàn do sửa một lỗi duy nhất - lỗi sự cố mà không ai khác có thể sửa. Nhưng sự chải chuốt hàng ngày của bugzilla là phiền não. Lỗi nhỏ là tẻ nhạt. Lỗi lớn là xứng đáng.

Đây là sự nhận ra: Việc bạn có một danh sách khổng lồ các lỗi nhỏ chính là một lỗi lớn. Nó chỉ không phải là một lỗi mã. Đó là một quá trình hoặc lỗi quản lý.

Tìm lỗi đó và sửa nó.


1

Một điều tôi đã tìm thấy giữa các đồng nghiệp và người quen là "người sửa lỗi / người sửa lỗi / người giải quyết vấn đề" tốt là họ thường thích giải câu đố. Điều đó có thể có nghĩa là câu đố ô chữ, trò chơi số (như Sudoku) và câu đố logic, v.v ...

Vì vậy, một cách bạn có thể trở thành một người sửa lỗi tốt hơn là dành thời gian làm việc cho các kỹ năng giải quyết vấn đề hoặc giải câu đố của bạn.

Đây là một liên kết Wikipedia có thể là điểm khởi đầu tốt cho những thứ giúp bạn trở thành người giải quyết vấn đề tốt hơn.

Tâm trí bạn, một số người chỉ giỏi giải quyết vấn đề hơn, hoặc họ chỉ thích nó hơn. Một số người hoàn toàn không thích điều đó, điều này khiến bạn khó có thể ép buộc bản thân làm điều đó - nhưng đừng nhầm lẫn - nếu bạn buộc bản thân phải học cách trở thành người giải câu đố, điều đó sẽ giúp bạn trở thành một người sửa lỗi tốt trong tương lai .


0

Sửa lỗi thường cảm thấy như một việc vặt vì nó có thể khiến bạn cảm thấy như bọ đang chiếm hết thời gian của bạn và khiến bạn tránh xa những thứ mới thú vị. Tuy nhiên, thực tế là sửa lỗi là một phần rất lớn trong những gì chúng ta làm và nó bắt đầu ngay khi viết dòng mã đầu tiên và thực thi trình biên dịch. Khi bạn phát hành mã lần đầu tiên, có lẽ bạn đã mất hàng giờ để sửa lỗi, chỉ có điều nó không có vẻ như vậy bởi vì bạn đã sửa chúng như một phần của quá trình triển khai các tính năng. Nói một cách thực tế, cho dù bạn là một lập trình viên giỏi đến đâu, các lỗi cũng sẽ xâm nhập vào hệ thống của bạn.

Vì vậy, làm thế nào để bạn làm cho nó vui vẻ? Chà, tôi thực sự không thể trả lời điều đó cho bạn vì tôi thực sự không thể tưởng tượng được cái gì trôi nổi trên chiếc thuyền cá nhân của bạn. Đối với tôi, tôi là một người nghiện công cụ, vì vậy câu trả lời là có một chuỗi công cụ rất đáng tin cậy và một quy trình phát triển linh hoạt, tất cả đều góp phần làm cho việc sửa lỗi ít hơn, và đơn giản hơn là một vấn đề cần giải quyết Mau. Hiện tại tôi đang phát triển chủ yếu trong C # và tôi luôn tìm kiếm các công cụ sẽ loại bỏ thời gian tẻ nhạt lãng phí các phần của phần mềm viết. Tôi sử dụng phương pháp tiếp cận phát triển đầu tiên được thử nghiệm được hỗ trợ với API BDD rất tốt có tên là StoryQ . Tôi sử dụng Resharper để tự động hóa phần lớn việc tái cấu trúc và StyleCop của mình để theo dõi những thứ như phong cách mã hóa. Bổ sung mới nhất của tôi vào chuỗi công cụ đã được bao gồmNCrunch chạy thử nghiệm của tôi liên tục và đồng thời trong nền trong khi tôi viết mã, và đó thực sự là NCrunch đã được chứng minh là người thay đổi trò chơi.

Sự kết hợp của tất cả các công cụ này đã cho thấy năng suất của tôi đi qua mái nhà gần đây, vì tôi lãng phí rất ít thời gian chờ đợi mọi thứ được biên dịch hoặc thực thi. Tôi nhận được phản hồi tức thì một cách trực quan trong IDE của mình để cho tôi biết rằng tôi có vấn đề cần khắc phục và tôi đưa ra mã kiểm tra của mình theo cách mà tôi có thể xác định chính xác trong một vài dòng mã, nơi không chỉ chính xác thất bại xảy ra, nhưng đến nơi mà nguyên nhân của sự thất bại xảy ra do báo cáo dài dòng đáng yêu mà tôi nhận được từ StoryQtrong đó cho tôi biết chính xác những phần nào trong bài kiểm tra của tôi vượt qua, phần nào thất bại và lỗi trong mã. Với tất cả các lãng phí thời gian được loại bỏ khỏi thời gian phát triển của tôi, tôi dành rất ít thời gian để chủ động gỡ lỗi, và có nhiều thời gian hơn để giải quyết các vấn đề và viết các bài kiểm tra và mã. Các vấn đề về doanh thu cao khiến tôi bận rộn và mang lại nhiều sự thay đổi trong công việc. Nó cũng đã cho tôi rất nhiều thời gian để theo đuổi các lĩnh vực quan tâm khác trong ngày làm việc để tôi có thể đưa những ý tưởng mới và sáng tạo vào dòng sản phẩm và quy trình của chúng tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.