Kiểm thử phần mềm có thực sự cần thiết?


33

Tôi là một sinh viên làm việc trên BE (CS) và câu hỏi của tôi là như sau:

  1. Là thử nghiệm trong lĩnh vực phần mềm cần thiết?
  2. Nếu chúng ta tạo ra một phần mềm hết sức cẩn thận thì tại sao chúng ta phải thử nghiệm?
  3. Sau khi thử nghiệm, chúng tôi có thể chắc chắn rằng chúng tôi đã đạt được mục tiêu này (sản phẩm / phần mềm hoạt động như dự định) bởi vì chúng tôi đã thực hiện thử nghiệm cho nó? Có thể không?

Câu hỏi của tôi: Kiểm tra phần mềm có cần thiết không?


34
If we create a software with care in during its development period then why should we go for Test?- bởi vì không có vấn đề gì, ngay cả lập trình viên lành nghề nhất cũng mắc lỗi.
sukhbir

6
@anto Rất có khả năng bạn đến từ một trường học Ấn Độ? Tôi không có ý xấu, tôi chỉ có thể có ý tưởng về nền tảng của bạn với BE ở đây ....
gideon

7
Kiểm tra phần mềm chỉ cần thiết nếu bạn không cung cấp bằng chứng chính thức về tính chính xác :-)
rsp

13
@jwenting: Bạn sẽ học được trong tương lai rằng ngôn ngữ nói không tương quan tốt với kỹ năng lập trình. Bởi vì một người nói tiếng Anh không phải là người bản ngữ không thể nói tiếng Anh không có nghĩa là anh ta không thể lập trình. Tôi thấy thật ô nhục với cộng đồng rằng bạn rất sẵn lòng đâm đầu vào một người đang tìm kiếm sự hướng dẫn.
Chris

10
Tất nhiên là không. Cầu nguyện cũng tốt không kém.
gruszczy

Câu trả lời:


79

Vâng. Bởi vì dù bạn giỏi đến đâu, bạn cũng không thể nghĩ ra mọi thứ.

  • Bạn cũng sẽ được yêu cầu làm cho phần mềm của bạn làm những việc mà bạn không bao giờ có ý định làm cho nó.
  • Bạn cũng sẽ không bao giờ có các yêu cầu rõ ràng đến mức bạn sẽ có thể nghĩ đến mọi khả năng để đảm bảo mã không bị hỏng.
  • Bạn cũng sẽ làm việc với phần mềm của người khác và apis sẽ không luôn hoạt động như dự định, nhưng bạn sẽ cho rằng nó làm, hoặc nên, dẫn đến một khiếm khuyết trong trường hợp "hoàn hảo" của bạn.

+1 Bạn thực hiện các điểm thế giới thực cực kỳ tốt !! Chúc tôi có thể bỏ phiếu gấp đôi!
gideon

8
+1 cho "Bạn cũng sẽ không bao giờ có yêu cầu rõ ràng đến mức bạn sẽ có thể nghĩ mọi khả năng để đảm bảo mã không bị hỏng." Nơi làm việc của tôi ít bị rối loạn chức năng hơn hầu hết và nhóm Quản lý sản phẩm của chúng tôi viết các yêu cầu khá tốt. Tôi vẫn thường xuyên có một số ít "những gì về trường hợp này?" câu hỏi trước khi tôi nhận được một tính năng kết thúc. Và sau đó QA và đôi khi người dùng cuối vẫn tìm thấy lỗi trong các trường hợp góc mà không ai xem xét.
Mason Wheeler

1
+1 cho điểm # 3. Trình biên dịch, thư viện hệ điều hành, các thành phần của bên thứ ba - trừ khi bạn viết đúng trên kim loại, bạn sẽ luôn kết thúc tùy thuộc vào mã nằm ngoài tầm kiểm soát của bạn.
TMN

78

Vâng

Vì lý do tương tự mà một đầu bếp nếm thức ăn của mình trong khi nấu nó.


7
Ngay cả các bậc thầy cũng không nên cho rằng công việc của họ không bao giờ cần điều chỉnh.
gablin

26
Không bao giờ ăn một món ăn được nấu bởi một đầu bếp mỏng
JBRWilkinson

5
@JBRWilkinson: Một đầu bếp gầy có thể là một đầu bếp giỏi hơn nếu anh ta nhận được các món ăn của mình thường xuyên hơn và do đó không nếm thức ăn của anh ta mọi lúc, hơn là một đầu bếp 'béo' luôn phải nếm thức ăn của anh ta. : P
chiurox

8
@gablin - Bạn có thể nói rằng các bậc thầy biết rằng công việc của họ là NGAY LẬP TỨC cần được sửa chữa.
Dan Ray

18

Tôi làm việc với một người có suy nghĩ như vậy, anh ta nghĩ rằng vì anh ta là một lập trình viên cao cấp nên anh ta không còn cần phải kiểm tra mã của mình nữa. Công ty không hiểu thái độ này nguy hiểm như thế nào và thay vì sa thải anh ta ngay lập tức, họ đã thuê nhiều lập trình viên hơn để giải quyết vấn đề tồn đọng lỗi. Không biết nơi tồn đọng này đến từ đâu họ nghĩ rằng đó là một phần của những gì lập trình là tất cả về. Về cơ bản chúng tôi có 3 lập trình viên làm việc theo chế độ này và một nhóm 20 người không làm gì khác hơn là kiểm tra và sửa các lỗi mà ba người này tạo ra.

VẮNG HÀNH PROPER KIỂM TRA giết chết .

Vì vậy, trừ khi bạn là THIÊN CHÚA hoặc bất kỳ phiên bản nào của một số người hoàn hảo đều biết (bây giờ tôi muốn xem) hoặc trừ khi bạn chủ động muốn bị đuổi việc rất nhanh, tôi khuyên bạn nên bắt đầu thử nghiệm.


Therac-25 không thực sự là một ví dụ hay vì nó cực kỳ khó để phơi bày điều đó trong thử nghiệm.
Loren Pechtel

4
Ngay cả "Chúa" cũng có thể đã sử dụng một số người thử nghiệm (mặc dù tôi nghĩ rằng anh ta giải quyết tất cả các lỗi là "theo thiết kế"): P
Tester101

1
@Newtoplan, xem xét nói với sếp của bạn?

2
@Thorbjorn: Tôi đã nói với anh ấy nhưng họ (quản lý nói chung) thậm chí không nhận ra tình hình thực sự. Trên thực tế, họ coi anh ta là thần lập trình và đổ lỗi cho phần còn lại của nhóm vì đã không tìm và sửa các lỗi như họ được thuê để làm .... cộng với, anh ta tạo ra mã bí mật như vậy đôi khi đào tạo ai đó đủ quen để thử đơn giản thay đổi có thể mất tới 2 năm, một lần nữa quản lý cảm thấy điều này là bình thường với cơ sở mã địa phương 750k (thực tế họ đo được ở mức 1,5m nhưng một nửa trong số đó là nhận xét) (xin lỗi tôi không biết làm thế nào để có được dấu gạch chéo đúng cách :-( )
Newtopian

1
Đó là chưa kể đến Ariane-5 và London Ambulance Service Computer Aided Depatch
StuperUser

9

Phần mềm được viết bởi mọi người.

Con người không hoàn hảo và phạm sai lầm.

Khi sự phức tạp của một cam kết tăng lên, con số tiềm năng (và tác động) của những sai lầm, sự vượt quá hoặc những thứ bị lãng quên tăng lên - thường là theo cấp số nhân.

Vì vậy, có, kiểm tra là cần thiết. Nó mang lại sự cân bằng và quan điểm.


6

Bạn sẽ lên một chuyến bay chạy HĐH mà bạn biết bạn đã sử dụng trên máy tính xách tay của bạn và đưa cho bạn một màn hình tử thần với màu sắc yêu thích của bạn? Hãy suy nghĩ về nó.

Không có coder là hoàn hảo. Xa, xa, xa thật đấy. Bạn cần thử nghiệm và người kiểm tra thường đưa ra quan điểm (còn được gọi là trường hợp sử dụng) mà các nhà phát triển đã thiếu.

Thực hiện tìm kiếm trên các lỗi phần mềm nổi tiếng nhất trên Google để biết ý tôi là gì.

Và ở cấp đại học, hãy đọc một số thông tin về phát triển dựa trên kiểm tra, kiểm tra đơn vị và thực hành nhanh để biết mọi thứ đang ở đâu.


cảm ơn. Bạn có thể nói cho tôi một số tài nguyên để học thử nghiệm đơn vị, thực hành nhanh như bạn đã đề cập!
Ant's

1
Tôi chắc chắn đăng ký vào "không hoàn hảo", tôi có một kiến thức rất reasonnable của C ++ và một số quy tắc phức tạp của nó ... nhưng tôi regurlarly mess lên bằng cách đảo ngược điều kiện boolean: / Thử nghiệm là cần thiết , nghĩ vì xét nghiệm một cái gì đó vượt qua không không có nghĩa là (tất cả) mà nó hoạt động;)
Matthieu M.

4

Kiểm tra là một điều bắt buộc đối với bất kỳ ứng dụng không tầm thường (về kích thước hoặc chức năng) nào thực sự được sử dụng. Bạn sẽ không tìm thấy một nhà phát triển nào quan tâm đến nghề của anh ấy / cô ấy (bằng chứng là họ truy cập trang web này) sẽ phản hồi và nói rằng việc kiểm tra là không cần thiết.

Ngoài những gì đã được đăng, việc có một bộ đầy đủ các bài kiểm tra đơn vị tự động trên bất kỳ ứng dụng nào sẽ giúp bạn tự tin hơn trong các thay đổi mã trong tương lai. Độ tin cậy cao hơn này (vì các thử nghiệm đơn vị cung cấp mạng lưới an toàn LỚN) sẽ dẫn đến thay đổi mã nhanh hơn cho các ứng dụng hiện có (do ít quay lại / kiểm tra kép)


4

Errare humanum est

Không có thứ gọi là phần mềm không có lỗi.

Các nhà phát triển lành nghề nhất viết mã với các lỗi. Ngay cả khi một nhà phát triển hoàn hảo tồn tại, vẫn sẽ có lỗi do sự khác biệt giữa:

  • nhu cầu người dùng và tài liệu đặc tả
  • đặc điểm kỹ thuật và thiết kế
  • môi trường phần cứng và phần mềm dự kiến ​​và thực tế
  • sự thật ngày hôm qua và hôm nay: mọi thứ được liệt kê ở trên đều có thể thay đổi mà không được báo cáo hoàn hảo trong mỗi bước của quá trình phát triển.

Nhà phát triển hoàn hảo chỉ là một phần của toàn bộ. Và các nhà phát triển hoàn hảo không tồn tại.


Bạn cho thấy một kiến ​​thức tốt về cách phần mềm thất bại. Nhưng lý do cuối cùng khiến phần mềm thất bại không phải vì lỗi của con người. Thay vào đó là vì không tồn tại bất kỳ phương pháp đã được chứng minh nào để tạo ra hệ thống phần mềm không có lỗi. Tôi sẽ viết về điều này sau.
CườngHuyTo

@CuongHuyTo - Bạn có phương pháp chính thức nào trong đầu không?
mouviciel

3

Hầu hết các chương trình thực tế:

a) chứa hàng trăm dòng mã trở lên, được phân tán trên nhiều tệp;
b) được phát triển bởi nhiều hơn một lập trình viên;
c) được sử dụng trong các môi trường khác với môi trường của nhà phát triển

Do đó, nếu bạn không kiểm tra xem chương trình hoạt động như thế nào trong tình huống thực tế, thì khả năng chương trình đó hoàn toàn không hoạt động sẽ gần 100%.


3

Ngoài tất cả các câu trả lời tuyệt vời khác, ngay cả khi bạn biết nó hoàn hảo và không có lỗi, hãy nghĩ về các lập trình viên khác phải xử lý mã của bạn trong tương lai. Họ sẽ không biết điều đó giống như bạn và sẽ muốn dựa vào các bài kiểm tra của bạn để đảm bảo họ không phá vỡ bất cứ điều gì sau khi họ đã thực hiện thay đổi. Điều này tất nhiên cũng áp dụng cho chính bạn sau khi bạn chưa thấy mã của mình trong một năm!


3

VÂNG.

Đây là một viễn cảnh tinh tế hơn một chút chưa được đề cập đến:

Không bao giờ đánh giá thấp nhu cầu "xác minh độc lập" . Đó là cùng một lý do tại sao thật tốt khi có một vài biên tập viên độc lập tiếp tục công việc của bạn trước khi gửi một bài viết lớn để xuất bản. Cho dù bạn là một nhà văn giỏi đến đâu, thỉnh thoảng bạn cũng sẽ cân não - và viết một cái gì đó như "in" thay cho "nó", hoặc một cái gì đó. Nếu bạn tự đọc lại, thậm chí khá cẩn thận, bạn vẫn sẽ thường xuyên bỏ lỡ nó, bởi vì bộ não của bạn sẽ tự động chấp nhận dòng quy trình suy nghĩ của bạn là chính xác và khắc phục lỗi. Đối với một đôi mắt mới, loại sai lầm đó thường khá chói.

Bạn nhận được điều tương tự trong lập trình: khá dễ dàng để đi vào một luồng trong đó mã của bạn hoặc "thử nghiệm phát triển" cơ bản của mã của bạn - có vẻ đúng bởi vì bạn đang thử nghiệm nó và sử dụng nó theo một cách nhất định. Nhưng sau đó khi một đôi tay khác xuất hiện và nhấp vào mọi thứ theo một cách hoặc thứ tự hơi khác, mọi thứ sẽ sụp đổ.

Tất nhiên, về mặt lý thuyết , bạn có thể đi theo con đường chính thức xác minh từng nhánh logic và khả năng duy nhất trong mã của mình, nhưng đối với phần mềm không tầm thường, việc này sẽ tốn kém và mất thời gian hơn nhiều so với việc người khác đập vào mã cho bạn. Và bạn có thể vẫn sẽ bỏ lỡ những điều mà bạn chưa bao giờ nghĩ đến.


2

Điều chưa được chạm tới: ngay cả khi mã của bạn hoàn hảo, bạn vẫn không an toàn. Trình biên dịch có lỗi có thể khiến mã thậm chí hoàn hảo hoạt động không chính xác sau khi biên dịch. Hệ điều hành có lỗi có thể khiến nhị phân hoàn hảo hoạt động không chính xác khi chạy. Phần cứng có lỗi có thể gây ra vấn đề.

Đó cũng là lý do tại sao thử nghiệm trên một máy không đủ cho các sản phẩm thương mại. Chúng cần phải được kiểm tra dưới nhiều kết hợp phần cứng và phần mềm có thể có trong tự nhiên.


2

Trưởng nhóm viết phần mềm cho tàu con thoi đã bay ra trước mỗi lần phóng để ký rằng phần mềm sẽ không gây hại cho tàu con thoi.

Bạn nghĩ gì đã cho anh ấy sự tự tin để làm như vậy?


1

Bạn liên tục kiểm tra mã chỉ bằng cách biên dịch và sử dụng nó. Trong một số IDE, bạn sẽ nhận được kiểm tra độ tỉnh táo khi bạn nhập. Trừ khi bạn không bao giờ thực sự chạy mã của bạn, bạn đang làm thử nghiệm.

Bao nhiêu bạn kiểm tra thực sự là gốc rễ của loại câu hỏi này và câu trả lời cho điều đó có nguy cơ. Bạn kiểm tra nhiều như nó có ý nghĩa để kiểm tra từ quan điểm quản lý rủi ro. Kiểm tra mọi thứ hoặc không có gì thường là không thể. Kiểm tra bên cạnh không có gì thường là một động thái xấu. Tất cả mọi thứ ở giữa là trò chơi công bằng tùy thuộc vào mức độ rủi ro và mức độ tiếp xúc của bạn.


1

Mùi như một câu hỏi bài tập về nhà.

Là thử nghiệm trong lĩnh vực phần mềm cần thiết?

Vâng. Chắc chắn rồi. Ở tất cả các cấp. Ngoài một vài lĩnh vực chuyên ngành, chúng ta chưa ở giai đoạn mà chúng ta có thể toán học chứng minh một cách mã của chúng tôi là đúng với các lỗi cụ thể (ít nhất là không trong khung thời gian hợp lý), vì vậy chúng tôi phải ném đá vào đó để xem và nơi nó phá vỡ.

Nếu chúng ta tạo ra một phần mềm hết sức cẩn thận thì tại sao chúng ta phải thử nghiệm?

Kiểm tra không chỉ là tìm lỗi mã hóa. Đó cũng là về việc đảm bảo rằng bạn đã đáp ứng tất cả các yêu cầu của bạn và hệ thống tổng thể hoạt động như mong đợi. Nếu tôi có một yêu cầu rằng một giao dịch thất bại phải trả về một mã lỗi cụ thể, thì tôi cần phải viết một bài kiểm tra để xác minh cả hai chức năng đó tồn tại và nó hoạt động chính xác.

Và tất cả những gì giả định rằng đặc điểm kỹ thuật và thiết kế là hoàn chỉnh, chính xác và nhất quán trong nội bộ, thường không phải là trường hợp. Ngay cả khi bạn đáp ứng các đặc điểm kỹ thuật của chữ cái và theo thiết kế xuống dấu chấm và dấu chấm phẩy cuối cùng, nếu thông số kỹ thuật hoặc thiết kế xấu, thì sẽ có vấn đề tại thời điểm tích hợp. Thông thường, kiểm tra hệ thống hoặc tích hợp là khi bạn phát hiện ra rằng bản thân thông số kỹ thuật có lỗi và cần được sửa đổi (xem câu chuyện chiến tranh dưới đây).

Sau khi thử nghiệm, chúng tôi có thể chắc chắn rằng chúng tôi đã đạt được mục tiêu này (sản phẩm / phần mềm hoạt động như dự định) bởi vì chúng tôi đã thực hiện thử nghiệm cho nó? Có thể không?

Không, không đến 100%. Chúng tôi không thể kiểm tra mọi kết hợp có thể hiểu được của các đầu vào hoặc đường dẫn thực hiện trong bất kỳ mã nào đơn giản nhất. Chúng tôi không thể giải thích cho tất cả các yếu tố môi trường. Chúng tôi không thể tưởng tượng tất cả các chế độ thất bại có thể.

Chúng tôi có thể kiểm tra đến một điểm mà chúng tôi hợp lý chắc chắn không có bất kỳ vấn đề lớn. Một lần nữa, đây là lý do tại sao chúng ta cần kiểm tra ở tất cả các cấp. Viết một bộ kiểm tra để đảm bảo mã của bạn xử lý đúng các điều kiện cạnh (đầu vào xấu, kết quả không mong muốn, ngoại lệ, v.v.). Kiểm tra đơn vị để xác minh rằng mã của bạn đáp ứng yêu cầu của nó. Kiểm tra hệ thống để xác minh xử lý đầu cuối. Kiểm tra tích hợp để xác minh rằng tất cả các thành phần nói chuyện với nhau một cách chính xác. Kiểm tra khả năng sử dụng để đảm bảo rằng toàn bộ hoạt động theo cách mà khách hàng không muốn bắn bạn.

Kịch bản trong thế giới thực - Tôi đang làm việc trên một hệ thống back-end thỉnh thoảng gửi các bản cập nhật cho dịch vụ GUI để hiển thị trong một bảng trên màn hình. Trong dự án, một yêu cầu đã được thêm vào để thêm tính năng lọc vào màn hình (ví dụ: toán tử có thể chọn hiển thị một tập hợp con của các mục trong bảng). Thiết kế sai lầm # 1 - lọc nên đã được thực hiện bởi các dịch vụ GUI (Tôi có kỳ lạ này, khái niệm sưu tầm đồ cổ mà chức năng quản lý màn hình nên là trách nhiệm của các phần mềm quản lý màn hình), nhưng do chính trị và sự bất lực của tôi để nhận ra vấn đề trước khi chúng trở nên vấn đề , yêu cầu đó đã được đặt trên dịch vụ back-end. Chà, không sao, không vấn đề gì, tôi có thể làm điều đó. Lọc thay đổi trạng thái, tôi nhận được một tin nhắn và sau đó tôi gửi tin nhắn tạo hoặc xóa chomỗi hàng trong bảng , vì đó là cách giao diện hoạt động (lỗi thiết kế số 2 - không có cách nào để gửi cập nhật cho nhiều hàng trong một tin nhắn; chúng tôi thậm chí không thể gửi một tin nhắn "xóa" hoặc "xóa" để xóa toàn bộ bảng).

Vâng, mọi thứ hoạt động tốt trong quá trình phát triển; kiểm tra đơn vị, hệ thống và tích hợp cho thấy rằng tôi gửi đúng thông tin và xử lý các thay đổi bộ lọc một cách chính xác. Sau đó, chúng tôi nhận được để kiểm tra khả năng sử dụng, và toàn bộ điều này rơi xuống khó khăn , bởi vì khối lượng dữ liệu là quá nhiều. Độ trễ mạng giữa dịch vụ phụ trợ của tôi và GUI là theo thứ tự từ 15 đến 0,25 giây. Không tệ nếu bạn chỉ phải gửi thông tin cập nhật cho hàng tá hàng. Rất nguy hiểm khi bạn phải gửi thông tin cập nhật cho vài trăm. Chúng tôi bắt đầu nhận được báo cáo lỗi rằng GUI đã bị đóng băng sau khi thay đổi trạng thái bộ lọc; tốt, không, những gì đang xảy ra là nó đã diễn ra trong vài phút khi cập nhật màn hình vì giao thức tin nhắn cập nhật một hàng đầu không thể xử lý một kịch bản trong thế giới thực.

Lưu ý rằng tất cả những điều đó có thể đã và nên được dự đoán bởi tất cả mọi người từ nhà thầu chính cho đến khi tôi già đi nếu chúng tôi bận tâm làm ngay cả những phân tích cơ bản nhất trước đó. Biện pháp bảo vệ duy nhất tôi sẽ đưa ra là chúng tôi đã kết thúc năm thứ hai của một dự án kéo dài sáu tháng sẽ bị hủy gần như ngay lập tức sau khi giao hàng, và tất cả chúng tôi đều tuyệt vọng khi nhìn thấy mặt sau của nó.

Điều này đưa chúng ta đến lý do cuối cùng để kiểm tra - CYA. Các dự án trong thế giới thực thất bại vì nhiều lý do, nhiều trong số đó là chính trị, và không phải ai cũng hành động một cách thiện chí khi mọi thứ đi sai. Ngón tay bị chỉ, những lời buộc tội được đưa ra, và vào cuối ngày, bạn cần có thể chỉ ra một bản ghi cho thấy rằng ít nhất công cụ của bạn hoạt động như mong muốn.


0

Kiểm tra sẽ luôn luôn được thực hiện và lỗi sẽ luôn được tìm thấy. Chỉ là thử nghiệm sẽ được thực hiện bởi nhóm của bạn hoặc người dùng cuối sẽ là người thử nghiệm. Chi phí của một lỗi được tìm thấy bởi người dùng cuối cao hơn rất nhiều so với lỗi được tìm thấy trong quá trình thử nghiệm.


0

Tôi sẽ đề nghị tham gia một khóa học tính toán chống lỗi tốt. Thiết kế cẩn thận của phần mềm chỉ là một trong những trụ cột để đạt được sự mạnh mẽ trong sản phẩm phần mềm của bạn. Hai trụ cột khác là thử nghiệm đầy đủ và thiết kế dự phòng. Mục đích cơ bản là để đáp ứng số lượng các điều kiện thất bại chưa biết theo cấp số nhân và ưu tiên xử lý một số điều đã biết:

1.) loại bỏ càng nhiều lỗi có thể xảy ra thông qua thiết kế và thực hiện đúng 2.) loại bỏ các lỗi không lường trước được từ giai đoạn thiết kế và thực hiện không chính xác thông qua các hình thức thử nghiệm khác nhau (đơn vị, tích hợp, ngẫu nhiên) 3.) đối phó với mọi thất bại còn sót lại thông qua dự phòng ( tạm thời => tính toán lại, thử lại hoặc không gian => giữ bản sao, tính chẵn lẻ)

Nếu bạn loại bỏ giai đoạn thử nghiệm, bạn sẽ chỉ để lại các giai đoạn thiết kế và dự phòng để giải quyết các thất bại.

Ngoài ra, từ quan điểm sản phẩm, các bên liên quan của bạn (ví dụ: quản lý, người dùng, nhà đầu tư) sẽ muốn một số loại đảm bảo rằng sản phẩm của bạn đáp ứng các thông số, tiêu chí an toàn và chất lượng nhất định, v.v. Ngoài ra, bạn đã thử nghiệm phần mềm bạn xây dựng chỉ để có một 'kiểm tra vệ sinh'? Tất cả những lý do này làm cho thử nghiệm phần mềm hấp dẫn hơn.


0

Tất cả các chương trình đều có lỗi, ít nhất là bắt đầu với.

Đã có một số nghiên cứu hội tụ khoảng 1 lỗi trên mỗi năm dòng mã chưa được kiểm tra.

Một bài học lịch sử:

Trở lại những năm 1960, IBM cần một chương trình "NOP" để họ có thể thực thi một số chức năng trong JCL mà không cần thực sự chạy một chương trình. Các nhà phát triển đã đưa ra một chương trình biên dịch mã một dòng trong đó toàn bộ mã được chứa trong tên "IEFBR14" của mã thực tế là:

       BR 14 * brach to return address in register 14

Trong thời gian dài, chương trình một dòng này đã phải chịu 2 báo cáo lỗi và năm sửa đổi.


-1

Tái cấu trúc mã thực sự nhanh hơn khi bạn có bài kiểm tra đơn vị. Một bài kiểm tra đơn vị cũng cho bạn thấy cách sử dụng đơn giản của hàm cụ thể, do đó bạn có một chút "hướng dẫn" có thể thực sự hữu ích trong các dự án lớn nơi các lập trình viên không biết chính xác toàn bộ mã.

Khi bạn đang phát triển với TDD (phát triển theo hướng kiểm tra), bạn không có getter / setters không cần thiết, v.v. Bạn chỉ cần tạo những gì bạn cần.


-1

Để trả lời # 3 câu hỏi của bạn:

Đã từng là một lập trình viên và một người kiểm thử phần mềm, vâng, bạn có thể chắc chắn rằng bạn đang đáp ứng các yêu cầu của phần mềm trong quá trình kiểm tra.

{đội mũ QA lên}

Làm sao? Bạn có thể làm điều này bằng cách truy tìm các thử nghiệm của bạn từ mã kiểm tra đến các tiêu chí chấp nhận, tiêu chí chấp nhận đối với các tính năng và các tính năng theo yêu cầu. Nếu bạn theo dõi từng thử nghiệm trong chuỗi thiết kế và chúng ánh xạ tới một hoặc nhiều yêu cầu, bạn có thể chắc chắn rằng các thử nghiệm của mình đang được sử dụng để đảm bảo mã đáp ứng các yêu cầu của nó (mặc dù điều này đưa ra khái niệm về phạm vi thử nghiệm đầy đủ, đó là một chủ đề khác). Nếu bạn không thể theo dõi thử nghiệm chuỗi thiết kế, thì có khả năng bạn đang thử nghiệm những thứ không bắt buộc và điều này thật lãng phí thời gian. Tiêu chí chấp nhận cũng có thể bao gồm kiểm tra các hành vi không mong muốn - bạn cũng có thể kiểm tra các hành vi đó, điều này giúp bạn tiến gần hơn đến một bản phát hành chất lượng.

{Mũ QA tắt}

Không có mã nào là không có lỗi, chỉ tốn ít chi phí hơn theo thời gian khi có nhiều nỗ lực hơn để đánh giá chất lượng của nó trong quá trình phát triển.


-1

Tôi đã là một người kiểm thử phần mềm trong 3 năm nay. Ban đầu, bản thân tôi đã hoài nghi về sự cần thiết phải kiểm tra, vì tôi nghĩ nếu bộ phận phát triển và quản lý dự án làm công việc của họ thì không có lỗi nào xảy ra trong phần mềm.

NHƯNG đây không phải là trường hợp. ++++++++

Những sai lầm xảy ra thường xuyên, một số trong số chúng rất quan trọng đối với hoạt động của một dự án. Ngoài ra còn có thử nghiệm trình duyệt chéo (có nghĩa là thử nghiệm trên các trình duyệt hiện có khác nhau như SAFARI, FIREFOX, CHROME và Internet Explorer) và tôi đã làm việc trong dự án nơi các nút giao diện đơn giản như CÓ và KHÔNG trên cửa sổ khảo sát không hoạt động trong tất cả các trình duyệt vài người trong số họ.

Tôi đã làm việc trên thử nghiệm trang internet, và đang thử nghiệm các THAY ĐỔI VĂN BẢN đơn giản và tự nghĩ rằng không có cách nào trên trái đất có thể có khiếm khuyết trên công việc đơn giản này, nhưng không có gì xảy ra.

Ngoài ra, tôi đã thấy khi các nhà phát triển mới gia nhập nhóm và được cung cấp một bản cập nhật cho một mẫu ứng dụng internet phức tạp hiện có với một số liên kết / cuộc gọi đến các trang bên ngoài, đã xảy ra lỗi do thiếu giao tiếp giữa các nhà phát triển cũ và mới, vì nhiều lý do (không có thời gian để giáo dục, không có ý chí giáo dục và vân vân).


-3

VÂNG

Hãy tưởng tượng phần mềm của bạn chỉ là một hàm logic VÀ (b1, b2) trong đó b1 và b2 chỉ là các bit. Với điều đó, bạn cần 4 trường hợp kiểm tra để chắc chắn rằng phần mềm của bạn không có lỗi, nếu môi trường xung quanh bạn cung cấp chính xác những gì chúng được chỉ định.

Bây giờ hệ thống của bạn được tạo bởi rất nhiều hàm mà hàm đơn giản nhất phức tạp hơn hàm logic đó. Làm thế nào bạn có thể chắc chắn rằng nó không có lỗi?

(còn tiếp)


Tùy thuộc vào việc triển khai AND và các phần khác của thông số kỹ thuật, bạn có thể cần nhiều hơn bốn trường hợp thử nghiệm: thử nghiệm ứng suất với môi trường (nhiệt độ, bức xạ ...), thử nghiệm hiệu suất (ví dụ: tần số tối đa của b1 và b2) ... Ngay cả trong miền logic, bạn có thể muốn chứng minh rằng hàm luôn cho kết quả chính xác bất kể chuỗi b1 và b2 (ví dụ: hãy tưởng tượng một cửa sau trong đó một chuỗi cụ thể trên b1 thay đổi AND thành XOR)
mouviciel

điều này dường như không cung cấp bất cứ điều gì đáng kể so với 21 câu trả lời trước
gnat

@moviciel: bạn một lần nữa đưa ra một số điểm rất tốt, nhưng nếu phần cứng mà hệ thống phần mềm của bạn chạy trên cung cấp chính xác những gì nó được chỉ định, thì bạn không cần phải thực hiện kiểm tra căng thẳng cho chức năng AND () nhỏ này. Tôi sẽ trở lại nhận xét kiểm tra hiệu suất của bạn sau.
CườngHuyTo
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.