Articles by "QA"

Trong kiểm thử phần mềm thì hai khái niệm Độ ưu tiên (Priority) và Độ nghiêm trọng (Severity) là những khái niệm cơ bản trong quản lý bug. Nó đã trở nên quá quen thuộc và phổ biến, tuy nhiên đôi khi chúng ta vẫn nhầm lẫn và không phân biệt được ý nghĩa cũng như sự khác nhau giữa hai khái niệm đó. Mặc dù độ ưu tiên và độ nghiêm trọng của bug không phải là những yếu tố quan trọng nhất, nhưng một khi xác định một cách đúng đắn sẽ giúp chúng ta làm việc hiệu quả, tiết kiệm thời gian, có thể đánh giá đúng tiến độ cũng như chất lượng của sản phẩm.
severity-vs-priority-testing-e1433244769589.jpg
Mặc dù log một bug hoàn chỉnh sẽ phải liệt kê đầy đủ cả độ nghiêm trọng và mức độ ưu tiên của bug, tuy nhiên nhiều công ty chỉ sử dụng chỉ một, thường là mức độ ưu tiên.
1. Độ nghiêm trọng
Mức độ nghiêm trọng của một bug thường chỉ mức độ tác động của bug đó đến sản phẩm/ người dùng. Mỗi dự án hay sản phẩm có tiêu chí đánh giá độ nghiêm trọng khác nhau nhưng thông thường sẽ có 4-5 mức độ khác nhau từ nghiêm trọng nhất đến ít nghiêm trọng hơn:
  • Critical - Mức độ nghiêm trọng: Những lỗi nghiêm trọng khiến người dùng không thể sử dụng được ứng dụng như hệ thống sập, dữ liệu bị mất, ứng dụng không cài đặt được...
  • Major - Mức độ cao: Chức năng chính của sản phẩm không hoạt động
  • Medium - Mức độ trung bình: Sản phẩm hoặc ứng dụng hoạt động không đáp ứng tiêu chí nhất định hoặc vẫn còn bộc lộ một số hành vi không mong muốn, tuy nhiên các chức năng khác của hệ thống không bị ảnh hưởng.
  • Low - Mức độ thấp: Lỗi xảy ra hầu như không ảnh hưởng gì đến chức năng, nhưng vẫn là lỗi và vẫn cần được sửa. Ví dụ như các lỗi về sai text, sai vị trí button,
Việc xác định được độ nghiêm trọng của bug giúp nhà quản lí dự án, chủ sản phẩm có cái nhìn tốt hơn và thuận lợi hơn về tình hình chất lượng của sản phẩm. Số lượng bug là chưa đủ để đánh giá tình hình. Việc đội kiểm thử tìm được 50 bug trong 1 tháng cũng không nói lên nhiều về tình hình chất lượng của sản phẩm. Tuy nhiên, nếu biết được trong 50 bug đó có đến hơn 1 nửa là bug với độ nghiêm trọng ở cấp độ 1 và 2 sẽ hữu ích hơn nhiều. Ngoài ra, với góc độ của kỹ sư kiểm thử, việc đánh giá đúng độ nghiêm trọng của bug cũng sẽ gây được sự chú ý và tăng cơ hội bug đó được sửa.
2. Độ ưu tiên
Độ ưu tiên của bug xác định thứ tự sửa bug. Thực tế thì đội phát triển không thể fix hết tất cả các bug của sản phẩm cùng 1 lúc, do vậy sẽ cần phải dựa vào độ ưu tiên của bug để xác định bug nào sửa trước, bug nào sửa sau.
Tương tự mức độ nghiêm trọng, mức độ ưu tiên cũng như ý nghĩa của chúng có thể sẽ khác nhau ở những sản phẩm, dự án khác nhau. Thông thường mức độ nghiêm trọng của bug được chia thành 3 mức cơ bản nhất:
  • High: Bug phải được sửa ngay lập tức sau khi phát hiện bug
  • Medium: Bug có thể được sửa trong lần cập nhật phiên bản sau
  • Low: Bug không cần sửa ngay, có thể sửa sau khi các bug High và Medium đã được sửa hết
Thế chúng ta sẽ dựa vào đâu để xác định độ ưu tiên? Bug nào sửa trước bug nào sửa sau (hoặc không sửa)? Quá dễ, dựa vào độ nghiêm trọng của bug. Bug nào nghiêm trọng nhất, tác động đến người dùng nhiều nhất thì sẽ được ưu tiên sửa trước. Bug nào ít nghiêm trọng hơn sẽ được sửa sau. Đúng…nhưng không phải lúc nào cũng đúng. Nó còn tùy thuộc vào nhiều yếu tố. Giả sử chúng ta tìm được một bug làm sập hệ thống hoặc chức năng chính không hoạt động. Đáng ra bug này sẽ phải được sửa ngay lập tức nhưng để làm sập hệ thống thì phải trải qua quá nhiều bước hoặc chỉ xảy ra trên một môi trường cụ thể cũng như rất ít người dùng chạy sản phẩm trên môi trường đó và khả năng người dùng gặp phải lỗi đó là rất thấp. Vì thế nên, ở thời điểm đó độ ưu tiên của bug làm sập hệ thống chưa chắc bằng độ ưu tiên của một bug sai text nhỏ khác.
3. Một số ví dụ về priority và serverity
Defect-Priority-and-Severity.jpg
  • High priority, high severity bug: Có lỗi xảy ra trên các chức năng cơ bản của ứng dụng và người dùng không thể sử dụng được hệ thống. Ví dụ: Khi đăng nhập vào một hệ thống, lỗi "Run time error" hiển thị trên trang web và người dùng không thể thực hiện được bất cứ thao tác nào nữa. Bug này được thể hiện là đường màu đỏ trên ảnh.
  • High Severity – Low Priority bug: Điều này xảy ra khi các lỗi gây ra vấn đề lớn, nhưng chỉ xảy ra với 1 số điều kiện hoặc tình huống mà thực tế rất hiếm gặp. Bug này sẽ được sửa nhưng không cần sửa ngay lập tức. Ví dụ, khách hàng sử dụng các trình duyệt rất cũ và không thể tiếp tục đặt hàng trực tuyến được. Vì số lượng khách hàng sử dụng trình duyệt phiên bản cũ cũ là rất thấp, nên nó không phải là bug có độ ưu tiên cao. Bug này được thể hiện là đường màu hồng trên ảnh
  • High Priority – Low Severity bug: Bug sẽ được sửa ngay nhưng không ảnh hưởng đến các chức năng khác của hệ thống. Ví dụ: Logo hoặc tên của công ty không được hiển thị trên trang web. Bug này phải được sửa càng sớm càng tốt mặc dù nó có thể không gây ra nhiều thiệt hại. Đường màu xanh biển thể hiện chính xác loại bug này.
  • Low Priority – Low Severity bug: Loại bug này được thể hiện bằng màu xanh lá cây như trên hình. Lỗi không ảnh hưởng đến chức năng của hệ thống nhưng vẫn không đáp ứng được các tiêu chuẩn ở mức độ thấp. Ví dụ: Không có nhiều người quan tâm và xem trang chính sách quyền riêng tư trên một website bất kỳ, và việc trang này tải rất chậm cũng không ảnh hưởng quá nhiều đến người sử dụng. Bug này sẽ được xếp vào loại Low Priority – Low Severity.
4. Chọn độ nghiêm trọng và độ ưu tiên của bug chính xác
Dưới đây là những gợi ý mà tester cần chú ý để chọn chính xác độ nghiêm trọng và độ ưu tiên của bug:
  • Hiểu và nắm chắc khái niệm độ ưu tiên và độ nghiêm trọng của bug, tránh nhầm lẫn và sử dụng thay thế cho nhau.
  • Luôn luôn chọn mức độ nghiêm trọng dựa trên các vấn đề sẽ ảnh hưởng đến ưu tiên của nó. Trên thực tế là việc xác định độ nghiêm trọng của bug không hẳn lúc nào cũng mang tính chất tuyệt đối. Sẽ không có gì ngạc nhiên nếu chúng ta cho rằng vấn đề này là nghiêm trọng trong khi chủ sản phẩm, nhà quản lý dự án lại không nghĩ như vậy. Có thể cách chúng ta cung cấp thông tin không thể hiện được đầy đủ mức độ nghiêm trọng của vấn đề. Hãy phân tích và cung cấp thêm thông tin để cho thấy tác động nghiêm trọng của bug đối với sản phẩm cũng như người dùng như thế nào như xảy ra trên nhiều môi trường nào; tính lặp đi lặp lại của bug; có khả năng ảnh hưởng đến các thành phần, chức năng khác; hình ảnh thương mại của công ty v.v. Từ đó có thể lựa chọn độ ưu tiên của bug một cách hợp lý.
  • Hiểu chức năng của hệ thống hoạt động như thế nào, phân tích, suy luận và hiểu kịch bản kiểm thử hoặc trường hợp kiểm thử trên thực tế sẽ ảnh hưởng như thế nào đến người sử dụng. Điều này cần rất nhiều sự hợp tác và tương tác với đội phát triển, trưởng nhóm test, trưởng nhóm phát triển... Trong các cuộc trao đổi đó bạn cũng cần phải tính đến yếu tố mất bao nhiêu thời gian để sửa các bug đó dựa vào độ phức tạp và thời gian xác nhận bug.
  • Độ ưu tiên và độ nghiêm trọng của bug có thể sẽ khác nhau ở từng thời điểm và giai đoạn phát triển sản phẩm.
**4. Kết luận **
Cả mức độ nghiêm trọng và mức độ ưu tiên đều là hai thuộc tính của một bug mà chúng ta cần phải cung cấp trong mỗi report của bugs. Vì vậy, là một QA/ tester chúng ta cần nắm rõ được sự khác biệt giữa chúng để tiết kiệm thời gian, công sức hay trên hết là để đánh giá đúng tiến độ cũng như chất lượng của sản phẩm.

Tất cả các phần mềm có những yêu cầu và mục đích sử dụng của nó. Tuy nhiên, phần mềm mà không có tài liệu yêu cầu, tài liệu yêu cầu không đầy đủ, không chính xác hoặc là tài liệu đã lỗi thời... là một thực tế mà không may hầu hết chúng ta gặp phải, đó hẳn là điều mà chúng ta không hề mong muốn. Và trên thực tế thì điều này rất hay xảy ra. Nó không những gây khó khăn trong công việc mà còn không thể đánh giá và lập kế hoạch test một cách chính xác, ảnh hưởng đến chất lượng sản phẩm phần mềm.
Trong bài viết này sẽ thảo luận về vấn đề Làm thế nào để thực hiện kiểm thử phần mềm khi mà không có bất cứ tài liệu yêu cầu nào. Không SRS, không FRD và làm thế nào tester có thể thực hiện công việc của mình một cách hiệu quả.
Làm thể nào để kiểm thử phần mềm mà không có bất kỳ yêu cầu nào?
Hãy cùng thảo luận những khó khăn mà tester phải đối mặt khi thực hiện kiểm thử phần mềm mà không hề có bất kỳ tài liệu đặc tả yêu cầu nào.
  1. Việc thiết kế Test cases hoặc Test Scenarios trở nên khó khăn vì bạn không hề có bất kỳ tài liệu nào để tham khảo.
  2. Khi bạn có tài liệu yêu cầu cụ thể, bạn sẽ biết được phần mềm hoạt động như thế nào khi chúng được hoàn thành nhưng ở đây bạn chỉ có thể tiếp cận ở mức tối thiểu mà thôi.
  3. Ngoài ra tài liệu yêu cầu cũng có thể dễ dàng gây ra hiểu lầm hoặc thay đổi thường xuyên dẫn đến việc hệ thống không ổn định và khó khăn trong việc kiểm thử.
Để làm việc với những dự án như vậy, bạn cần có sự hiểu biết tốt, giao tiếp hiệu quả bằng lời nói cũng như bằng văn bản và có một kế hoạch thích hợp. Có một vài điều quan trọng cần biết trước khi bắt đầu giai đoạn kiểm thử, chẳng hạn như:
  1. Xác định kỹ thuật kiểm thử sẽ sử dụng trong quá trình kiểm thử hệ thống (kiểm thử chức năng, kiểm thử hồi quy, kiểm thử tải...)
  2. Sử dụng version cũ của phần mềm như một tài liệu tham khảo để kiểm thử phiên bản tương lai của sản phẩm phần mềm.
  3. Những tài liệu mà developer tham khảo cho mục đích code thì Tester cũng có thể tham khảo để có ý tưởng phần mềm sẽ hoạt động thế nào.
  4. Những rủi ro liên quan đến các sản phẩm phần mềm.
Một khi đã phân tích tất cả các điểm trên, sẽ dễ dàng hơn cho chúng ta lập kế hoạch phù hợp và thực hiện kiểm thử. Bây giờ chúng ta hãy xem một số điểm quan trọng trong khi kiểm thử sản phẩm phần mềm như vậy:
  1. Đọc các tài liệu mà dev phát triển sản phẩm dựa trên tài liệu ấy và chia sẻ test cases của bạn với họ. Bằng cách này, bạn sẽ biết dev đang phát triển phần mềm như thế nào và bạn có thể thiết kế test cases của bạn dựa trên đó. Ngoài ra, bằng cách chia sẻ các trường hợp thử nghiệm của bạn với họ, bạn được đảm bảo rằng bạn hiểu các chức năng và sẽ test nó một cách đúng đắn.
  2. Trong trường hợp của bất kỳ sự mơ hồ nào, hãy làm cho nó rõ ràng càng sớm càng tốt. Liên quan đến tất cả các team như là testers, developers, business analysts và clients. Hãy chắc chắn rằng sau khi buổi họp tất cả các đội bóng đang ở trên mức độ hiểu biết cùng và sau đó tiến hành với quá trình này.
  3. Lập tài liệu về những gì bạn đã test và work flow cho phần mềm, nên sử dụng sơ đồ sẽ giúp bạn hiểu rõ hơn về hệ thống.
  4. Chuẩn bị một danh sách các mục In-Scope, Out-of-Scope và chia sẻ với tất cả các thành viên trong team và được manager của bạn phê duyệt. Bạn có thể cập nhật danh sách bất cứ lúc nào sau này sau khi thảo luận với các thành viên trong team.
  5. Đôi khi, người dùng cuối (tại phía khách hàng) có thể thử nghiệm các sản phẩm ở giai đoạn sớm hơn, nên nếu có thể, hãy lập ra những test case từ cách sử dụng hệ thống của người dùng biết những mong muốn và lợi ích của các phần mềm của họ.
  6. Thực hiện Exploratory Testing nhiều lần, vì bạn không có bất cứ yêu cầu cụ thể nào, bạn có thể thường xuyên kiểm tra ngẫu nhiên và bất cứ điều gì bạn cảm thấy là không đúng, bạn có thể thảo luận với khách hàng và làm cho nó chính xác hơn bằng cách gửi nó cho team developer.
  7. Hãy suy nghĩ từ quan điểm của tất cả người sử dụng và làm cho phần mềm hữu ích hơn. Đề xuất ý kiến và giải pháp của bạn. Có nhiều cách sử dụng khác nhau từ phía người dùng, nếu bạn có thể suy nghĩ từ quan điểm của họ sau đó phần mềm sẽ trở nên tương thích và linh hoạt hơn.
  8. Chia toàn bộ hệ thống thành các module nhỏ và hiểu chúng một cách chi tiết. Bằng cách này bạn sẽ test của mỗi một phần của việc tạo ra phần mềm tối đa vùng phủ sóng thử nghiệm. Nó là dễ dàng hơn để kiểm thử một module nhỏ hơn là kiểm thử toàn bộ hệ thống cùng một lúc.
  9. Tự động hoá các test case những chức năng đã được cố định để tiết kiệm thời gian và nguồn lực. Trong những giai đoạn đầu của dự án khi mà yêu cầu liên tục thay đổi, bước này có thể thấy không cần thiết, nhưng sau một thời gian khi các yêu cầu hoặc chức năng được cố định, bạn có thể tạo test case tự động. Ví dụ, một màn hình đăng nhập. Bạn biết chắc chắn những thông tin đầu vào có trên màn hình như Username, password, Captcha... vv, do đó bạn có thể viết các test case cơ bản liên quan đến màn hình này và tự động hóa chúng.
Kết luận:
Khi chúng ta làm việc với một dự án mà không có yêu cầu, kế hoạch cụ thể, sẽ có những thách thức mà chúng ta vừa thảo luận, nhưng có nhiều cách để xử lý chúng. Giao tiếp tốt với khách hàng và developer, lấy ý kiến phản hồi của họ thường xuyên để biết mong muốn của họ là gì. Khi bạn biết cần phải test gì và test như thế nào, bạn có thể tự tạo tài liệu yêu cầu và có thể tham khảo hoặc cập nhật suốt quá trình kiểm thử.

Đây là bài viết được lấy ra từ link sau: http://www.testingexcellence.com/transitioning-waterfall-agile-testing/
Khi một công ty quyết định chuyển từ kiểm thử theo mô hình thác nước sang kiểm thử theo mô hình agile, điều gì là quan trọng nhất mà ta phải tập trung quan tâm để test theo mô hình agile được hiệu quả?
Điều gì tạo nên sự khác biệt của kiểm thử theo mô hình agile và mô hình thác nước? Một người tester cần biết và thực hiện các công việc quan trọng nào?

Kiểm thử trong suốt quá trình phát triển

Điều đầu tiên ta cần hiểu rằng trong mô hình phát triển agile, kiểm thử được thực hiện trong suốt vòng lặp nghĩa là kiểm thử phần mềm diễn ra liên tục trong suốt quá trình phát triển sản phẩm.
Trong mô hình thác nước truyền thống, kiểm thử rất tốn effort và là phần cuối cùng để kết thúc việc phát triển, trong khi theo mô hình Agile, kiểm thử là một phần nhỏ nhưng lặp lại thường xuyên và xảy ra trong suốt quá trình phát triển phần mềm.
waterfall-model.png
Agile-Development-diagram_03.png
Kiểm thử trong suốt quá trình phát triển cũng đồng nghĩa với việc phần mềm luôn được đặt trong điều kiện có thể release, do đó nó có thể được bàn giao sản phẩm bất cứ lúc nào.
Trong mô hình thác nước, chúng ta làm việc theo từng giai đoạn, cụ thể là giai đoạn thiết kế, giai đoạn code và giai đoạn kiểm thử. Phát triển theo agile ta sẽ không còn chia giai đoạn kiểm thử ra riêng biệt như vậy nữa. Các developer cũng sẽ có vai trò quan trọng hơn khi tham gia vào việc kiểm thử, viết unit test tự động để validate code.

Sự tham gia của developer trong kiểm thử

Với unit test tự động, việc kiểm thử có thể được hoàn thành như một phần trong việc xây dựng, đảm bảo rằng tất cả các feature được thực hiện chính xác mỗi khi build. Từ độ bao phủ tốt của unit test, developer sẽ cảm thấy tự tin hơn để refractor code.
Kiểm thử trong agile cũng sẽ bắt đầu sớm. Tức là QA sẽ phải tham gia ngay từ giai đoạn design, hiểu các feature và story và bắt đầu chuẩn bị viết tescase.

Cross Functional Teams (Nhóm liên chức năng)

understanding-roles-on-an-agile-project-7-728.jpg
Chuyển sang Agile nghĩa là các hoạt động của team trong project sẽ có chức năng như nhau. Việc cùng tham gia kiểm thử này không gây cản trở gì cho việc kiểm thử của tester. Các developer sẽ hỗ trợ bằng các test framework, các business analysts hỗ trợ bằng cách chỉnh lại các story cho chuẩn xác.
Mỗi thành viên trong team làm việc theo story cho tới khi toàn bộ story được thực hiện xong, điều đó có nghĩa là vừa code vừa kiểm thử. Các designer, developer và tester làm việc song song cùng nhau để đạt được mục tiêu chung và họ cần biết điều gì cần thiết phải làm để hoàn thành công việc (không có ai giao việc cho họ).
Làm việc theo đội là điểm đáng chú ý nhất khi chuyển từ mô hình kiểm thử thác nước sang mô hình agile. Các công ty có thể quyết định thay đổi để chuyển sang mô hình kiểm thử agile nhưng mỗi cá nhân trong team cần phải hỗ trỡ lẫn nhau cùng thực hiện thì sự thay đổi mới có thể thành công.

Mục tiêu ngăn ngừa lỗi hơn là phát hiện lỗi

a-brief-introduction-to-agile-duong-trong-tan-201406-65-638.jpg
Nhìn lên hình trên ta có thể nhận thấy ngay, lỗi được phát hiện càng muộn chi phí càng tăng cao. Với sự tham gia ngay từ lúc bắt đầu của tester trong dự án, họ có thể hỗ trợ trong việc xác định các kịch bản chính để kiểm thử một story. Các acceptance criteria (tiêu chí chấp nhận) sẽ thường xuyên được tạo bởi cả Product Owner, developer và tester.
Điều này đảm bảo rằng bất cứ điều gì đang được xây dựng thì tất cả các bên liên quan đều có thể kiểm thử và hiểu rõ ràng. Ngoài ra, càng nhiều người đang tham gia vào việc xác định các tiêu chí chấp nhận và "Định nghĩa thế nào là hoàn thành", lỗi có thể được sửa chữa sớm hơn và sản phẩm cuối cùng đảm bảo đúng các yêu cầu.
Mọi người đều có liên quan và chịu trách nhiệm về chất lượng của sản phẩm.

Ít tài liệu hơn, tăng tính cộng tác

Trong mô hình phát triển Agile, người ta chú trọng nhiều vào đối thoại và hợp tác để làm rõ yêu cầu hơn là dựa trên đặc tả và tài liệu như mô hình phát triển truyền thống .

Trong mô hình phát triển agile, mặc dù các yêu cầu có thể được làm sáng tỏ ở một mức độ nhất định, nó vẫn có thể có các yêu cầu không rõ ràng và không đầy đủ, dẫn đến các thành viên trong nhóm có sự hiểu biết khác nhau về yêu cầu.Điều đó có ý nghĩa như thế nào cho một Agile Tester? Một vấn đề chung cho các tester khi họ chuyển sang mô hình phát triển Agile là họ không biết chính xác những gì họ cần phải kiểm thử. Họ không có spec chi tiết để kiểm tra đối chiếu, vậy làm thế nào họ có thể có thể kiểm tra nó? Bạn không cần phải có tài liệu chi tiết để bắt đầu kiểm thử. Sẽ có rất nhiều trường hợp, tester phải tự xem xét và dùng cảm nhận chung để xác nhận sản phẩm. Việc có kiến thức rộng, có kinh nghiệm trở nên hết sức quan trọng. Tester cần có sự tự tin về kiến thức của mình nhiều hơn để làm việc hiệu quả.

MKRdezign

Contact Form

Name

Email *

Message *

Powered by Blogger.
Javascript DisablePlease Enable Javascript To See All Widget