Kiểm thử chất lượng

GS John Vu03/10/2024 12:00
Kiểm thử chất lượng

Trong quá khứ khi phần mềm còn nhỏ, chỉ vài trăm dòng mã, thì kiểm thử là tương đối dễ dàng. Là người phát triển phần mềm, điều tôi đã làm là phải chắc rằng thuật toán đúng và phân tích kết cấu chương trình để chắc chắn nó được biên dịch đúng.

Nếu tôi có lỗi, tôi sửa chúng rồi biên dịch lại cho nên kiểm thử không thành vấn đề. Tuy nhiên, khi kích cỡ phần mềm trở nên lớn hơn, tôi bắt đầu thấy rằng tôi bị nhiều lỗi sau khi đưa ra cho khách hàng (một lỗi là chồng bị tràn) cho nên tôi bắt đầu cẩn thận hơn về kiểm thử. Tôi bắt đầu viết các trường hợp kiểm thử để chắc chắn rằng chương trình chạy đúng và đáp ứng nhu cầu với dữ liệu vào và dữ liệu ra (kiểm thử hộp đen). Cuối cùng, nhiều chương trình tôi đã viết đã được tích hợp với các chương trình khác cho nên là một tổ chúng tôi đã phân chia công việc của mình thành các chức năng và tính năng tách bạch dựa trên phương pháp phân tích cấu trúc nhưng chúng tôi vẫn làm việc một cách độc lập, chỉ thảo luận với nhau khi cần.

Từng người vẫn làm kiểm thử riêng và chúng tôi tin tưởng rằng mọi thứ phải làm việc theo cách chúng tôi nghĩ, nhưng đến cuối cùng nó lại không làm việc tốt. Có quá nhiều lỗi trong sản phẩm cuối cùng của chúng tôi cho nên người quản lí của tôi quyết định thành lập nhóm kiểm thử bao gồm nhiều người lập trình mới tuyển, người được trao cho việc kiểm tra lại phần mềm để chắc chắn chúng làm việc được trước khi chúng được đưa ra.  Là người phát triển phần mềm, chúng tôi chỉ phải tập trung hầu hết vào thiết kế và viết mã.

Chúng tôi đã kiểm thử mã riêng của mình và không lo nghĩ nhiều về phần còn lại của phần mềm cuối cùng. Cho nên tổ của chúng tôi bao gồm hai nhóm, nhóm người phát triển và nhóm kiểm thử và quan niệm này đã được chấp nhận trong nhiều công ti phần mềm và nó vẫn là cách thức nhiều công ti vận hành ngày nay.

Bây giờ nhìn lại sao nhiều năm, ngạc nhiên lớn nhất của tôi là làm sao nhiều người vẫn tin rằng bạn có thể “kiểm thử chất lượng” trong sản phẩm phần mềm. Ngày nay phần lớn các phần mềm đều rất lớn và phức tạp, nhiều dự án của tôi có khoảng 5 tới 20 triệu dòng lệnh và không thể nào kiểm thử hết mọi thứ cho nên thay vì hội tụ vào kiểm thử, chúng tôi hội tụ vào cách tiếp cận có kỉ luật để “xây dựng trong chất lượng” khi chúng tôi làm việc.

Điều này cũng là khác biệt chính giữa đào tạo kĩ nghệ phần mềm và khoa học máy tính. Với kĩ nghệ phần mềm, bạn phải hội tụ vào qui trình tạo ra sản phẩm và “xây dựng chất lượng trong qui trình” cho nên sản phẩm cuối sẽ có chất lượng. Tất nhiên, không ai hoàn hảo cho nên bạn phải dựa vào người khác để hỗ trợ cho bạn và nhận diện sai lầm của bạn để cho bạn có thể sửa nó. Do đó, kiểm điểm phần mềm, giám định mã, lập trình cặp, suy nghĩ theo pha, và rút ra bài học được áp dụng để đảm bảo rằng chúng ta sẽ có sản phẩm chất lượng.

Khi sinh viên tới lớp của tôi tại CMU, nhiều người có thái độ “Sao lại chú ý tới lỗi khi đằng nào chúng ta cũng có thể sửa được nó” hay “Viết mã trước, sửa lỗi sau” cho nên tôi kể cho họ một kịch bản: “Giả sử rằng bạn đang bay trong máy bay và bạn nghe phi công nói rằng anh ta gặp lỗi phần mềm trong hệ thống điều khiển và phải “khởi động lại” hệ thống. Khởi động lại hệ thống sẽ mất bao nhiêu thời gian? Chỉ mười hay hai mươi phút và điều đó có nghĩa là máy bay sẽ không có nguồn trong thời gian đó và tất nhiên sẽ rơi” và tôi hỏi: “Bạn có thực sự quan tâm tới lỗi phần mềm hay không?”

Khi cả lớp cười to, tôi nói thêm: “Tôi chắc chắn điều đó tuỳ thuộc vào quan điểm của bạn, bạn có lẽ quan tâm nếu bạn đang ở trên máy bay và không quan tâm nếu bạn đang ở trên mặt đất. Cho nên vấn đề thực là liệu lỗi có vấn đề theo nghĩa lí thuyết không nhưng liệu nó có là vấn đề cho bạn không. Để tôi cho bạn ví dụ khác, bạn là người chủ của một công ti phần mềm và bạn có hàng trăm người lập trình  làm việc cho bạn. Nếu khách hàng thấy lỗi phần mềm trong sản phẩm của bạn thì bạn phải sửa nó.

Chi phí để phát hiện, phục hồi, báo cáo, sửa chữa, phân phối lại và chi phí cài đặt lại cho mọi lỗi trung bình sẽ là quãng $ 4000 cho từng lỗi và có hàng trăm hay hàng nghìn lỗi cho sản phẩm bạn bán. Bạn có thực sự quan tâm không?  Bạn bán phần mềm đó được bao nhiêu và bạn phải chi bao nhiêu tiền để sửa lỗi? Bất kể nguyên nhân của chúng, chi phí lỗi đều rất đắt, nếu bạn phải trả chi phí này, bạn sẽ thực sự quan tâm về lỗi. Câu hỏi của tôi là, là người chủ công ti phần mềm, bạn vẫn thuê những người không quan tâm về lỗi sao?

Theo nghiên cứu của giáo sư Watt Humphrey tại Carnegie Mellon, người phát triển phần mềm có kinh nghiệm đưa vào một lỗi cứ trong mỗi 10 dòng mã. Trong khi các con số này thay đổi lớn từ người phát triển phần mềm này sang người phát triển khác, và họ đưa vào mọi thứ lỗi, thậm chí cả những lỗi được tìm thấy trong kiểm điểm hay bởi trình biên dịch, vẫn có nhiều lỗi. Tuy nhiên, nhiều người phát triển phần mềm tin rằng trình biên dịch sẽ tìm ra mọi lỗi. Không may có nhiều lỗi gõ vào mà trình biên dịch lại không tìm ra.

Chẳng hạn, trong C, gõ “=“ thay cho “= =“ có thể tạo ra phép gán thay vì phép so sánh. Mặc dầu trình biên dịch có thể tìm ra 90% lỗi nhưng còn 10% kia thì sao? Nhiều người tin rằng 10% kia có thể được thực hiện bằng kiểm thử. Tuy nhiên, nhiều chương trình sẽ chạy ngay cả khi chúng có lỗi. Thực tế, chúng có thể có nhiều lỗi và vẫn qua được nhiều kiểm thử. Ngay cả để tìm ra số phần trăm lỗi lớn trong một chương trình, chúng ta vẫn phải kiểm thử gần như tất cả các con đường và điều kiện logic. Và để tìm ra tất cả các lỗi trong ngay cả chương trình nhỏ, chúng ta sẽ phải cho chạy kiểm thử vét cạn mà có thể tốn kém và yêu cầu nhiều nỗ lực.

Ngày nay hầu hết những người phát triển phần mềm dành nhiều thời gian cố gắng làm cho phần mềm của họ làm việc rồi dành nhiều thời gian hơn để chữa lỗi và các vấn đề được báo cáo. Đây là vấn đề chính cho doanh nghiệp nhưng nhiều người quản lí phần mềm không được huấn luyện để giải quyết điều này. Họ chỉ hội tụ vào lịch biểu, cách chuyển giao bên trong ngày tháng nào đó nhưng không biết nhiều về kinh doanh tài chính. Tất nhiên người quản lí cấp cao biết nhưng họ quá bận quản lí công ti và không chú ý tới dự án cho nên những người cuối cùng thực sự quan tâm là khách hàng. Tất nhiên khách hàng có chọn lựa và khi họ không thoả mãn với chất lượng, họ làm kinh doanh với ai đó khác.

Tôi cũng thấy rằng hầu hết những người phát triển phần mềm không được đào tạo trong việc nhận diện và sửa lỗi an ninh. Lỗi an ninh là bất kì lỗi thiết kế nào cho phép các hắc khách, kẻ phạm tội, hay kẻ khủng bố thu được quyền truy nhập hay dùng hệ thống phần mềm. Vì nhiều trong số các lỗi này không gây ra vấn đề chức năng, hay lỗi khi chạy, chúng sẽ qua mọi kiểm thử chức năng nhưng phần mềm vẫn có những mong manh an ninh tiềm năng mà có thể tạo ra vấn đề trong tương lai.

Quan điểm của tôi là để đảm bảo chất lượng, chúng ta phải xây dựng chất lượng trong cách chúng ta làm việc và rằng lỗi là vấn đề nghiêm chỉnh yêu cầu sự chú ý lớn từ mọi người. Cách tốt nhất để ngăn cản lỗi là đào tạo tốt hơn và đào tạo nên bắt đầu sớm nhất có thể được trong mọi đại học và nên được nhấn mạnh trong mọi lớp tính toán.

English version

Testing quality

In the past when software was small, only few hundred lines of code then testing was relatively easy. As a software developer, what I did was to make sure that the algorithms were right and analyzed the program construction to make sure that it compiled correctly. If I had errors, I fixed them then re-compiled so testing was not an issue. However, as software size getting larger, I began to see that I had several defects after released to the customer (One was overflow stack) so I started to be more careful about testing. I began to write test cases to make sure that the program ran correctly and meet the requirements with input data and output data (Black-box testing). Eventually, many programs that I wrote have to be integrated with other programs so as a team we divided our works into separate functions and features based on structure analysis method but we were still working independently, only discussed with each other when needed. Each person did its own tests and we were confident that everything should work the way we think but in the end it did not worked well. There were so many defects in our final product so my managers decided to form a testing group consisted of many newly hired programmers who were given the job of checking softwares to make sure they worked before they were released.  As software developers, we only have to focus mostly on design and code. We tested our own code and not worried much about the rest of the final software. So our team consisted of two groups, developer group and testing group and this concept had been adopted in many software companies and it still is the way many companies operate today.

Now looking back for so many years my biggest surprise is how many people still believe that you can “test quality” into a software product. Today most software are very large and complex, many of my projects have about 5 to 20 million lines of code and it is impossible to test everything so instead of focus on testing, we focus on a disciplined approach to “build in quality” as we work. This is also a major difference between software engineering and computer science training. With software engineering, you must focusing on the process that creates the product and “build quality into the process” so the final product will have quality. Of course, nobody is perfect so you must rely on others to support you and identify your mistakes so you can fix it. Therefore, software reviews, code inspections, pair-programming, phase reflection, and lesson learned are applied to ensure that we will have quality product.

When students come to my class at CMU, many have an attitude of “Why cares about defect when we can fix it anyway” or “Code first, fix defects later” so I tell them a scenario: “Assume that you are flying in an airplane and you hear the pilot said that he has software defect in the control system and must “reboot” the system. How long will it take to reboot the system? Only ten or twenty minutes and that mean the airplane will have no power during that time and of course will crash” and I ask: “Do you really care about software defect or not?” As the class laughing aloud, I add: “I am sure it depends on your point of view, you probably care if you are on the plane and do not care if you are on the ground. So the real issue is whether defect matter in a theoretical sense but whether it matter to you. Let me give you another example, you are the owner of a software company and you have hundred software developers working for you. If customer finds software defects in your product then you have to fix it. The cost of discovery, recovery, reporting, repairing, redistribution, and reinstallation costs for every defect would average about $ 4000 each and there are hundreds or thousands defects for every product that you sell. Do you really care?  How much do you sell the software for and how much you have to spend on fixing defects? Regardless of their causes, defect costs are very expensive, if you had to pay this cost, you would really care about defects. My question is, as the owner of a software company, do you still hiring people that do not care about defects?

According to the research of Professor Watt Humphrey at Carnegie Mellon, experienced software developers inject one defect in about every 10 lines of code. While these numbers vary widely from one software developer to others, and they include all the defects, even those found in reviewing or by the compiler, there are still lots of defects. However, many software developers believe that the compiler will find all defects. Unfortunately there are many typing error mistakes that are not found by the compiler. For example, in C, typing “=“instead of “= =“can cause an assignment instead of a comparison. Although compiler can find about 90% defects but what’s about the other 10%? Many people believe that the other 10% could be done by testing. However, many programs will run even when they have defects. In fact, they can have a lot of defects and still pass many tests. To find even a large percentage of the defects in a program, we would have to test almost all the logical paths and conditions. And to find all of the defects in even small programs, we would have to run an exhaustive test that could be expensive and require a lot of efforts.

Today most software developers spend a lot of time trying to get their software to work then spend more time fixing defects and reported problems. This is a major issue for the business but many software managers are not trained to deal with this. They only focus on the schedule, how to deliver within certain date but do not know much about the financial business. Of course senior managers know but they are too busy running company and not pay attention at project so the ultimate people who really care are customers. Of course the customers have choices and when they are not happy with the quality, they do business with somebody else.

I also found that most software developers are not trained in identify and fixing security defects. A security defect is any design error that allows hackers, criminals, or terrorists to obtain unauthorized access or use of a software system. Since many of these defects do not cause functional problems, or runtime errors they will pass all of their functional tests but the software has potential security vulnerabilities that could create problems in the future.

My view is to ensure quality, we must build quality into the way we work and that defects are serious issue that require significant attention from everybody. The best way to prevent defects is better training and training should start as early as possible in every university and should be emphasized in all computing classes.

 


Gửi bình luận
(0) Bình luận
1

Giáo sư và việc dạy

Một người bạn bảo tôi: “Tôi không biết điều gì xảy ra cho sinh viên đại học của tôi ngày nay. Dường như là nhiều người KHÔNG muốn học cái gì cả. Chúng ta đã lớn lên trong thời khó khăn khi việc vào đại học là đặc quyền. Ngày nay sinh viên không biết họ được may mắn thế nào để có cơ hội tốt như thế.”
2

Phần mềm mã nguồn mở

Phần mềm “nguồn mở” là phần mềm được viết theo cách mã nguồn để mở, sẵn có cho mọi người dùng, thay đổi, cải tiến và tự do phân phối lại nó.
3

Điều nước Mỹ cần

Theo báo cáo của chính phủ Mĩ, trong năm thứ hai liên tiếp, kĩ sư phần mềm là việc làm số một ở Mĩ.
4

Kỹ nghệ phần mềm và khoa học máy tính

Một sinh viên hỏi tôi: “Tại sao tôi cần học Kĩ nghệ phần mềm thay vì Khoa học máy tính? Sau rốt, chúng là như nhau và sau khi tốt nghiệp đằng nào chúng tôi cũng sẽ làm việc trong công nghiệp phần mềm?”
5

Tri thức và kỹ năng

Tuần trước, tôi đã thảo luận với sinh viên về kĩ năng mà công nghiệp phần mềm cần. Khi tôi bảo họ rằng có nhiều việc làm cho xây dựng ứng dụng di động và làm việc với các ứng dụng bán sẵn trên thị trường Commercial Off The Shelf (COTS) như SAP và PeopleSoft, một sinh viên lập tức lên tiếng lo ngại rằng những điều đó không được dạy trong trường.

Hội cựu sinh viên CMU

Trong cuộc họp cựu sinh viên CMU hàng năm năm nay, (9/8/2009), đã có cuộc tụ họp của một số người hàng đầu trong công nghiệp phần mềm và đây là báo cáo:

Kỹ sư phần mềm chuyên nghiệp

Trong nhiều năm, ô tô Mĩ đã là tốt nhất trên thế giới nhưng cái gì đó đã thay đổi trong những năm 1970 khi cấp quản lí quyết định rằng chất lượng không quan trọng bằng số lượng.

Xây dựng kỹ năng trong ngành công nghiệp Công nghệ thông tin Ấn Độ

Báo cáo NASSCOM-McKinsey năm 2008 chỉ ra rằng, mỗi năm các đại học Ấn Độ cho tốt nghiệp hơn ba triệu sinh viên với quá nửa là kĩ sư và khoa học máy tính, chỉ một số phần trăm rất nhỏ mới được công nghiệp sử dụng trực tiếp.

Qui trình SCRUM

Agile là qui trình phát triển phần mềm “hướng theo tổ” được thiết kế cho dự án nhỏ nơi yêu cầu không ổn định và liên tục thay đổi.

Thay đổi quy trình

Bạn tôi, người quản lí một công ti lớn bảo tôi rằng anh ấy đã đem một sản phẩm phần mềm mới ra cải tiến về năng suất và hiệu quả nhưng anh ấy gặp thời gian khó khăn khi để nó làm việc trong công ti của anh ấy.

Một lời khuyên khác cho sinh viên

Tôi đã nhận được nhiều email từ các sinh viên hỏi về lời khuyên trong cuộc khủng hoảng tài chính này. Nhiều người thực sự lo sợ cho tương lai của mình và không biết phải làm gì.

Việc nóng cho sinh viên

Cuộc khủng hoảng tài chính hiện thời đã tạo ra “nhận biết thực tế” trong các sinh viên về cơ hội việc làm.

Xu hướng mới nổi lên

Thế giới công nghệ đang thay đổi rất nhanh chóng, kể cả các kĩ năng kĩ thuật và sự linh động được yêu cầu để hỗ trợ cho các thay đổi này.

Minh triết từ nỗi bất an - Khi hiểu biết làm con người mệt mỏi hơn

Trong “Minh triết từ nỗi bất an”, Alan Watts viết về một nghịch lý rất gần với con người hiện đại: càng cố hiểu, cố dự đoán và kiểm soát đời sống để thấy an toàn, ta lại càng dễ mắc kẹt trong lo âu.

Lập mục đích

Blog GS John VU - GS John Vu - 19/06/2026 12:00
Bạn có biết thuyền trưởng dẫn hướng con thuyền của mình trên đại dương thế nào không?

Tâm lý CEO: Nghệ thuật giữ bình tĩnh, ra quyết định và dẫn dắt trong áp lực

Kỹ năng - Vũ Anh - 19/06/2026 11:00
Giữ được sự minh mẫn, kiểm soát cảm xúc và ra quyết định tỉnh táo trong khủng hoảng — đó là “môn võ thượng thừa” mà không trường lớp nào có thể dạy.

"Thần đồng" Đại học Thanh Hoa, 49 tuổi vẫn thất nghiệp: Khi ra tới biển lớn, mới biết bản thân chỉ là hạt cát nhỏ

Suy ngẫm - Nguyễn Phượng - 19/06/2026 10:00
Khi vào đại học Thanh Hoa, nam sinh được mệnh danh là "thần đồng" mới biết còn nhiều người giỏi hơn mình.

Con trai duy nhất của Gia Cát Lượng vì sao không thể nối nghiệp cha?

Phong cách sống - Linh Lan - 19/06/2026 09:00
Gia Cát Lượng chỉ có một con trai ruột, rất thông tuệ và sớm được trọng dụng, nhưng "bên ngoài chẳng giúp được quốc gia, bên trong chẳng thể thay đổi triều chính".

Minh triết từ nỗi bất an - Khi hiểu biết làm con người mệt mỏi hơn

Từ sách - Phim - Bảo Lam - 19/06/2026 08:00
Trong “Minh triết từ nỗi bất an”, Alan Watts viết về một nghịch lý rất gần với con người hiện đại: càng cố hiểu, cố dự đoán và kiểm soát đời sống để thấy an toàn, ta lại càng dễ mắc kẹt trong lo âu.

Công nghệ và cơ hội

Blog GS John VU - GS John Vu - 18/06/2026 12:00
Nếu chúng ta nhìn lại thành tựu của công nghệ, chúng ta sẽ ngạc nhiên về tiến bộ đã được thực hiện.

Warren Buffett tiết lộ nguyên tắc vàng, đảm bảo sự thành công bền vững

Phong cách sống - Thiên Di - 18/06/2026 11:41
Bên cạnh những phân tích sắc sảo về báo cáo tài chính hay các thương vụ đầu tư trị giá hàng tỷ USD, huyền thoại Warren Buffett mới đây đã chia sẻ về một triết lý sống cốt lõi mà ông cho rằng là chìa khóa để duy trì sự thành công và bền vững cho mọi tổ chức.

Sắp phát hành: Sức mạnh của nghỉ ngơi

Tủ sách - FN - 18/06/2026 08:00
Chúng ta thường nghĩ rằng nghỉ ngơi là ngủ một giấc, nằm yên một lúc, tạm rời công việc rồi cơ thể sẽ tự hồi phục lại. Nhưng có lúc ta ngủ đủ mà vẫn thức dậy trong trạng thái nặng nề. Cơ thể có thể không quá mỏi, nhưng đầu óc vẫn quay cuồng; ta vẫn thấy mình phải trả lời tin nhắn, phải tỏ ra ổn, phải chiều lòng người khác, phải tiếp tục.

Phần mềm mã nguồn mở

Blog GS John VU - GS John Vu - 17/06/2026 12:00
Phần mềm “nguồn mở” là phần mềm được viết theo cách mã nguồn để mở, sẵn có cho mọi người dùng, thay đổi, cải tiến và tự do phân phối lại nó.

Người già khôn ngoan thường giả bộ 3 điều này với con cái

Kỹ năng - Thanh Hương - 17/06/2026 11:00
Có những thứ nên giả bộ cho qua

Tỷ phú Rockefeller: Miễn phí là cái bẫy đáng sợ nhất, muốn thành công phải ghi nhớ 3 điều sau

Suy ngẫm - Ứng Hà Chi - 17/06/2026 10:00
Một số người chết trong nghịch cảnh, trong khi những người khác nhìn thấy cơ hội.

Sống giữa 25 triệu người vẫn cô đơn: Vì sao giới trẻ Hà Nội và TP.HCM vẫn tìm đến AI để được yêu thương?

Phong cách sống - Minh Ngọc - 17/06/2026 09:00
Khi công nghệ vô tri trở thành nơi nương tựa cảm xúc duy nhất, liệu AI đang thực sự "chữa lành" hay chỉ đang làm sâu sắc thêm nỗi cô đơn của con người thời đại số?

Sắp phát hành: Để thanh thản khi về già

Tủ sách - FN - 17/06/2026 08:00
“Để thanh thản khi về già” – Bí quyết sống vui cho người cao tuổi là một trong những quyển sách bán chạy nhất Hàn Quốc và được Thư viện Quốc gia Hàn Quốc khuyên đọc!

Người kiểm thử và người lập trình

Blog GS John VU - GS John Vu - 16/06/2026 12:00
Người lập trình không thích người kiểm thử và chúng tôi không thích họ. Làm sao chúng tôi có thể xây dựng được cách làm việc tổ trong tình huống này?

Một kiểu cha mẹ nhìn qua thì dễ bị người đời chê trách nhưng thực tế: Họ mới là bậc thầy dạy con!

Kỹ năng - Thanh Hương - 16/06/2026 11:00
Cách dạy dỗ của họ mới thực sự có lợi cho con.
HẠT GIỐNG TÂM HỒN
2019 Bản quyền thuộc về hatgiongtamhon.com.vn. Phát triển bởi ONECMS