Get in touch
or send us a question?
CONTACT

Lộ trình học tập của Kỹ sư kiểm thử phần mềm (Quality Engineer)

Hướng dẫn dành cho người mới bắt đầu về các kỹ năng, công cụ và kỹ thuật bạn cần cho sự nghiệp Kỹ sư chất lượng.

Bạn nên học gì để trở thành Kỹ sư chất lượng? Bạn nên học ngôn ngữ nào, bạn nên thành thạo công cụ nào, bạn nên rèn luyện những kỹ năng nào? Nếu ai đó quan tâm đến nghề nghiệp này, bạn sẽ bảo họ bắt đầu từ đâu—điều gì là quan trọng, cái gì nên có, và công nghệ gì của ngày hôm qua không còn phù hợp nữa?

Đây không phải là một câu hỏi dễ trả lời — các kỹ sư chất lượng phụ thuộc vào mọi thứ, từ khoa học máy tính cơ bản và các nguyên tắc đảm bảo chất lượng đến các framework tự động hóa mới nhất, các ngăn xếp ứng dụng và các tool kiểm tra. Chỉ liệt kê mọi thứ thôi cũng đã đủ khó khăn rồi. Lộ trình học tập (learning roadmap) mô tả tất cả các kỹ năng, công cụ và công nghệ cần thiết để thành công với tư cách là một kỹ sư chất lượng.

Vai trò (role) của kỹ sư chất lượng

Trước hết, “kỹ ​​sư chất lượng” là gì?

Mặc dù có nhiều cách để xây dựng phần mềm nhưng chúng tôi tin rằng cách tốt nhất là tạo ra phần mềm bởi các nhóm hợp tác nhỏ, đa chức năng. Đặc điểm ‘đa chức năng’ mô tả một nhóm có tất cả các vai trò và kỹ năng cần thiết để xây dựng giải pháp mà không cần dựa vào skillset hay team bên ngoài tổ chức.

Một vai trò trong các nhóm này là kỹ sư chất lượng (QE). QE không chỉ là người thử nghiệm hoặc người tự động hóa, họ trao quyền cho các nhóm bằng cách đưa tư duy chất lượng vào mọi khía cạnh của việc xây dựng phần mềm. Họ là những chuyên gia về đảm bảo chất lượng, tự động hóa thử nghiệm, phân tích rủi ro, các quy trình Agile, CI/CD và mọi thứ khác có thể ảnh hưởng đến chất lượng sản phẩm. Họ cộng tác với tất cả các vai trò khác để đảm bảo chất lượng được tích hợp ngay từ ngày đầu tiên, từ story đầu tiên, trước khi viết dòng mã đầu tiên. Một số công ty gọi vị trí này là SDET (Software Deveopment Engineer in Test – Kỹ sư phát triển phần mềm đang thử nghiệm), nhưng mỗi công ty xác định các vai trò khác nhau, do đó, những gì SDET hoặc QE làm ở một công ty có thể không khớp chính xác với công ty tiếp theo.

Mặc dù lộ trình này được xây dựng đặc biệt cho vai trò Kỹ sư chất lượng, nhưng nó sẽ phù hợp với bất kỳ ai muốn bắt đầu sự nghiệp trong lĩnh vực liên quan đến chất lượng, bất kể tên hay chức danh.

Lộ trình học tập

Mặc dù ban đầu chúng tôi tìm cách giữ cho Lộ trình Kỹ sư Chất lượng của mình trở nên đơn giản, nhưng số lượng chủ đề và kỹ năng quá lớn nên trước tiên chúng tôi quyết định sắp xếp nó thành các lĩnh vực nghiên cứu chung. Như bạn có thể thấy trong sơ đồ bên dưới, có hàng trăm chủ đề riêng lẻ. tất cả được sắp xếp thành một tập hợp gồm mười tám phần dễ quản lý hơn. Đừng quá chú ý đến chế độ xem đầy đủ ngay bây giờ vì chúng ta sẽ đi qua từng phần riêng lẻ.

Như bạn có thể thấy, vai trò của Kỹ sư chất lượng rất rộng và việc học tất cả các kỹ năng liên quan là một khoản đầu tư đáng kể!

Khi đi qua từng khu vực, chúng ta sẽ sử dụng chú giải đơn giản hóa này. Các khái niệm chính sẽ có màu trắng, các khái niệm phụ có màu xanh lục, các công cụ, ngôn ngữ hoặc framework có màu xanh lam. Khi thấy nhưng ô xanh lục/xanh lam gắn với những ô trắng, có thể hiểu đường nooiso như “ví dụ”. Danh sách các khái niệm hoặc công cụ phụ sẽ không đầy đủ mà chỉ biểu thị loại nội dung mà chúng tôi đang mô tả. Đối với các hộp màu xanh lam, các ví dụ được đưa ra sẽ thể hiện những gì chúng tôi cảm thấy phù hợp nhất hoặc có giá trị nhất đối với kỹ sư chất lượng.

Vì vậy, không cần giới thiệu thêm, hãy đi vào lộ trình!

Nguyên tắc cơ bản về đảm bảo chất lượng

Để bắt đầu, chúng ta cần hiểu ý nghĩa của “chất lượng” đối với phần mềm. Biết được điều đó, chúng ta có thể tiếp tục xác định trường hợp kiểm thử là gì và cách phát triển các bộ kiểm thử và kế hoạch kiểm thử bằng cách sử dụng các kỹ thuật khám phá kiểm thử. là các khái niệm như trường hợp đặc biệt, lớp tương đương, phân tích ranh giới, phân tích tổ hợp và kiểm thử dựa trên rủi ro. Có thuật ngữ cụ thể được sử dụng để mô tả các kiểm thử, vì vậy biết cách mô tả, phân loại và nhóm các trường hợp kiểm thử hoặc các loại kiểm thử bằng cách sử dụng các điểm khác biệt như hộp đen , thử nghiệm hộp trắng hoặc hộp xám, thử nghiệm chức năng so với phi chức năng, thử nghiệm tiêu cực so với tích cực, hoặc thử nghiệm tĩnh so với động sẽ rất quan trọng.

Ngoài ra còn có các hoạt động được mô tả bằng thử nghiệm phi chức năng  những thứ như hiệu suất, bảo mật, khả năng truy cập, khả năng tương thích, bản địa hóa, v.v. Mặc dù bạn KHÔNG cần phải là chuyên gia trong bất kỳ lĩnh vực nào trong số đó, cũng không phải một kỹ sư chất lượng mới cần trở thành, bạn nên biết các thuật ngữ và loại test mà chúng mô tả.

Trên hết, có các công cụ để quản lý dự án, theo dõi lỗi, quản lý trường hợp thử nghiệm và báo cáo mà Jira là công cụ phổ biến nhất để quản lý dự án chung và các công cụ như Zephyr , TestLinkTestRail là phổ biến cho việc quản lý case.

Có nhiều chủ đề trong phần này hơn số lượng chúng tôi có để mô tả ở đây. Tuy nhiên, mỗi chủ đề trong số đó đều quan trọng – việc nắm vững các nguyên tắc cơ bản sẽ tạo ra kỹ sư chất lượng tuyệt vời và việc nắm vững các chủ đề này là rất quan trọng khi bạn tiến vào. các chủ đề sau này tập trung vào kỹ thuật hơn.

Nguyên tắc cơ bản về Vòng đời phát triển phần mềm (SDLC)

Phát triển phần mềm không còn là hoạt động đơn lẻ nữa và với những trường hợp ngoại lệ hiếm hoi (git? Minecraft?), tất cả phần mềm hiện đại đều được xây dựng bởi các nhóm. Để trở thành một kỹ sư chất lượng hiệu quả, điều quan trọng là phải hiểu cách nhiều cá nhân trong nhóm phần mềm làm việc cùng nhau. để phát triển và vận chuyển một sản phẩm. Đây là một danh mục rộng – chúng ta sẽ không đi sâu vào bất kỳ phương pháp hoặc triết lý phát triển cụ thể nào (điều đó sẽ được đề cập sau), nhưng chúng ta cần hiểu những gì hiện có, những gì đã được sử dụng trước đây và những gì hiện đang được sử dụng ngày nay.

Tại đây, bạn nên tìm hiểu ý nghĩa khi mọi người nói về mô hình thác nước, mô hình chữ V hoặc mô hình xoắn ốc, ngay cả khi chúng mô tả điều gì đó rất giống nhau. Bạn nên tìm hiểu những kiến ​​thức cơ bản về các phương pháp tiếp cận hiện đại như: scrumkanban, đồng thời đưa ra những lập luận ủng hộ và phản đối việc sử dụng các loại phương pháp này trong phát triển phần mềm hiện đại.

Mặc dù danh mục này có vẻ quá lý thuyết, nhưng việc có nền tảng vững chắc về Nguyên tắc cơ bản phát triển phần mềm SDLC sẽ mang lại lợi ích khi bạn bắt đầu hành trình trở thành kỹ thuật chất lượng của mình.

Nguyên tắc cơ bản về Internet

Năm 1995, Bill Gates đã viết một bản ghi nhớ nổi tiếng cho các giám đốc điều hành của Microsoft nói rằng Internet hiện là “mức độ quan trọng cao nhất” đối với công ty. Ông đã không sai, và ngày nay hầu như tất cả các phần mềm đều là phần mềm Internet, theo cách này hay cách khác. Để hiểu cách phần mềm hoạt động và cách thức hoạt động của nó, bạn sẽ cần biết Internet hoạt động như thế nào.

Mặc dù điều này có vẻ khó khăn nhưng đừng để nó làm bạn nản lòng. Bạn không cần hiểu biết sâu sắc về bất kỳ một công nghệ cụ thể nào, mà cần phải hiểu biết ở mức độ cao về cách mọi thứ kết hợp với nhau. Ví dụ bạn không cần biết độ ưu tiên gói (packet) được đặt trong từ thứ hai của 8-bit, trong tiêu đề gói (packet header) IPv4, nhưng bạn nên biết rằng IP (“Giao thức Internet”) liên quan đến các gói và là thứ tạo nên IP trong TCP/IP.

Các công nghệ internet quan trọng khác mà bạn nên làm quen bao gồm những thứ như DNS, HTTP và mô hình OSI. Hãy nhớ rằng Nguyên tắc cơ bản về ứng dụng web là một danh mục trong tương lai, vì vậy những thứ như HTML/JS/CSS đều có thể được hoãn lại sau này.

Mặc dù Nguyên tắc cơ bản về Internet sẽ không đóng vai trò quan trọng trong trách nhiệm kỹ thuật chất lượng hàng ngày của bạn nhưng nó lại là nền tảng của nhiều công nghệ, khái niệm và công cụ quan trọng khác. Việc tìm hiểu cách một thứ như AWS Route 53 phù hợp với ngăn xếp ứng dụng đám mây điển hình sẽ dễ dàng hơn đáng kể nếu. bạn có nền tảng cơ bản về Internet để xây dựng.

Nguyên tắc cơ bản về khoa học và kỹ thuật máy tính

Được rồi, tôi có thể nghe thấy tiếng hét ngay bây giờ. “Khoa học máy tính! Kỹ thuật máy tính! Đó là những bằng đại học bốn năm, làm sao bạn có thể mong đợi tôi tự học tất cả những thứ đó?” Đừng lo lắng, có vài lý do không cần phải sợ.

  1. Có nhiều khía cạnh của khoa học máy tính hàn lâm và kỹ thuật không liên quan đến kỹ thuật chất lượng. Ví dụ, biết loại vấn đề tính toán nào có thể được phân loại là NP, NP-complete hoặc NP-hard là một chủ đề quan trọng trong khoa học máy tính hàn lâm. , nhưng sẽ không giúp ích nhiều cho bạn với tư cách là một kỹ sư chất lượng.
  2. Mặc dù giáo dục chính quy về khoa học/kỹ thuật máy tính LÀ nền tảng tốt cho kỹ thuật chất lượng, nhưng không có sự ghen tị được bảo vệ bằng phép thuật nào trong các tòa tháp ngà của học viện. Mọi thứ bạn có thể học bên trong, bạn có thể học bên ngoài và hầu như tất cả đều có sẵn miễn phí. ở đâu đó trên internet.

Vậy loại chủ đề khoa học và kỹ thuật máy tính nào PHẢI phù hợp để thúc đẩy kỹ sư chất lượng? Các chủ đề như phần cứng máy tính và cách nó được điều khiển bởi hệ điều hành và chương trình người dùng. Chương trình được viết như thế nào, những loại ngôn ngữ lập trình để làm điều đó. Bạn nên hiểu các đặc điểm chung của ngôn ngữ lập trình và cách chúng có thể được phân loại, chẳng hạn như cấp độ cao hay cấp độ thấp, được biên dịch so với thông dịch, hướng chức năng so với hướng đối tượng và các cách tiếp cận khác nhau đối với các loại hệ thống.

Ngoài các khái niệm cơ bản này, bạn nên tìm hiểu về các thuật toán, độ phức tạp và phân tích thuật toán, xử lý đồng thời (concurrency) và phân luồng (threading) cũng như các khái niệm chung khác về lập trình. Hãy nhớ rằng bản thân lập trình (chẳng hạn như học một ngôn ngữ thực sự) là một phạm trù sau.

Một số người có thể phản đối sự khởi đầu mang tính lý thuyết quá mức này đối với khoa học máy tính. Tại sao cần phải học các hệ thống kiểu chữ chỉ để tự động hóa script?

Đầu tiên là giả định rằng tự động hóa kiểm thử lập trình bằng cách nào đó ít phức tạp hơn hoặc đòi hỏi ít nghiêm ngặt hơn so với lập trình “thực”. Điều này không đúng và chúng tôi thường không thích gọi sự phát triển của tự động hóa kiểm thử là “viết kịch bản” (scripting) vì lý do này. Thứ 2 là giả sử bạn có thể học một ngôn ngữ chỉ bằng cách đọc lướt phần trên, thay vì hiểu các khái niệm cơ bản mà tất cả các ngôn ngữ được xây dựng dựa trên đó, những người có hiểu biết sâu sắc này có thể tiếp thu ngôn ngữ mới nhanh hơn những ngôn ngữ còn thiếu. Ví dụ: tôi biết các QA đang gặp khó khăn với khái niệm đóng trong JS mặc dù đã sử dụng ngôn ngữ này trong nhiều năm, trong khi những người hiểu các nguyên tắc cơ bản của lý thuyết ngôn ngữ sẽ tiếp thu nó một cách nhanh chóng và dễ dàng.

Kỹ sư chất lượng chỉ là một loại kỹ sư phần mềm chuyên biệt. Nền tảng vững chắc về khoa học và kỹ thuật máy tính sẽ thúc đẩy phần lớn quá trình học tập sau này của bạn; nó sẽ cho phép bạn hiểu thay vì chỉ biết. Đừng đánh giá thấp tầm quan trọng của nền tảng này chỉ vì nó dường như không hữu ích ngay lập tức.

Nguyên tắc cơ bản của ứng dụng web

Bây giờ chúng ta đã có nền tảng về khoa học máy tính và các nguyên tắc cơ bản về Internet, chúng ta đã sẵn sàng tìm hiểu về các ứng dụng web. Mặc dù không phải tất cả phần mềm bạn làm việc đều nhất thiết phải có giao diện web, nhưng công nghệ web rất phổ biến nên cần được đặc biệt chú ý để hiểu nó hoạt động như thế nào.

Mức độ hiểu biết có thể chấp nhận được sẽ bao gồm kiến ​​thức về cách các trang web được phát triển bằng cách sử dụng các công nghệ như HTML, CSS và JavaScript. Bạn sẽ cần hiểu cách các trình duyệt hoạt động để tiếp nhận các ngôn ngữ này và hiển thị chúng dưới dạng giao diện. Một khi bạn hiểu những điều cơ bản về ứng dụng web, bạn có thể chuyển sang thực hiện những thứ như AJAX, ứng dụng trang đơn (SPA) và Ứng dụng web lũy tiến (PWA), tiếp theo là mã hóa, hệ thống quản lý nội dung và các chủ đề nâng cao như kết xuất phía máy khách (client) so với phía máy chủ (server) và các ứng dụng web thích ứng (adaptive) so với phản ứng (reactive).

Bạn có cần biết cách xây dựng một ứng dụng web từ đầu không? Không, thực sự không phải vậy. Nhưng điều đó sẽ không sao cả. Và việc thực hiện nó một vài lần trong một vài framework khác nhau (Angular, React, v.v.) sẽ làm sáng tỏ quy trình và cung cấp những hiểu biết sâu sắc hơn nhiều về việc thử nghiệm chúng. Ngoài ra, xu hướng trong công nghệ web là ngày càng có nhiều ứng dụng web được thử nghiệm “bên dưới bề mặt”, chẳng hạn như bằng cách mô phỏng mô hình dữ liệu và thử nghiệm hành vi giao diện người dùng dưới dạng thử nghiệm đơn vị hoặc với các trình duyệt không có giao diện người dùng. Việc xây dựng một vài ứng dụng web đơn giản sẽ giúp bạn hiểu rõ hơn về cách sử dụng các loại thử nghiệm khác nhau này và sẽ cung cấp thông tin cho chiến lược tự động hóa và thử nghiệm tổng thể.

Lập trình

Trước đây chúng ta đã nói về khoa học máy tính, nhưng thực tế không bao gồm lập trình. Chúng ta biết về các hệ thống kiểu, bộ nhớ và hệ điều hành, v.v., nhưng bây giờ chúng ta cần biến kiến ​​thức đó thành thực tế bằng cách học cách làm việc với ngôn ngữ lập trình.

Để trở thành một lập trình viên hiệu quả, bạn phải cảm thấy thoải mái với môi trường mà bạn sẽ phát triển. Điều này có nghĩa là hiểu rõ môi trường phát triển tích hợp (IDE) và shell của bạn Khi lập trình, bạn nên nghĩ về mã chứ không phải tìm một button hoặc cài đặt cụ thể.

Ngoài ngôn ngữ, bạn nên nghiên cứu các cấu trúc cấp cao hơn để tổ chức mã và thông báo các phương pháp lập trình tốt: mẫu thiết kế, các khái niệm như DRY và SOLID, v.v. Những khái niệm này — và cách chúng được hiện thực hóa trong mã — phụ thuộc vào bản chất của ngôn ngữ bạn chọn để học, tức là SOLID áp dụng cho ngôn ngữ hướng đối tượng trong đó các mẫu như function thuần túy áp dụng cho các ngôn ngữ chức năng.

Các ngôn ngữ lập trình hiện tại mà chúng ta sẽ tập trung vào là JavaScript/TypeScript, Java hoặc C#Python.

JavaScript là ngôn ngữ ban đầu tuyệt vời vì nó làm nền tảng cho mọi hoạt động phát triển web. Ngoài ra, nó đã dần dần lấn sân sang các lĩnh vực khác của doanh nghiệp thông qua các framework như Node.js. Do được sử dụng nhiều trong phát triển web, JavaScript cũng được sử dụng rất nhiều trong tự động hóa web thông qua các công cụ như Protractor, WebdriverIOCypress.io. JavaScript liên tục được xếp hạng là một trong những ngôn ngữ lập trình phổ biến nhất.

Mặc dù TypeScript về cơ bản là một ngôn ngữ khác với JavaScript, nhưng chúng tôi sẽ gộp cả hai lại với nhau vì TypeScript chuyển mã thành JavaScript nên phần lớn hệ sinh thái xung quanh giống hệt nhau và việc học TypeScript song song với JavaScript sẽ mang lại cho bạn lợi ích khi có ngôn ngữ vừa mạnh mẽ – tĩnh và yếu – động (static-strong dynamic-weak) trong kho vũ khí của bạn.

Sau JavaScript/TypeScript, chúng tôi khuyên bạn nên sử dụng Java hoặc C#. Các ngôn ngữ này rất giống nhau và cả hai đều được sử dụng chủ yếu trong quá trình phát triển ứng dụng doanh nghiệp, C# sẽ rủi ro hơn một chút vì các công ty tận dụng C# có xu hướng “tham gia” (all in) vào hệ sinh thái . NET / Microsoft, vì vậy bạn có thể không tiếp xúc với nhiều thứ khác. Mặc dù Java và C# không phải là những ngôn ngữ mới và hấp dẫn nhưng chúng lại là những con ngựa thồ của ngành công nghiệp phần mềm.

Nói về các ngôn ngữ hấp dẫn (nhưng không mới!), Python đã xuất hiện về mặt kỹ thuật từ đầu những năm 90, nhưng gần đây đã chứng kiến ​​sự hồi sinh do nó được sử dụng trong các ứng dụng phân tích dữ liệu và đặc biệt là trong AI/ML. Tất nhiên nó cũng chỉ là một ngôn ngữ mạnh mẽ và dễ tiếp cận.

Một lời cảnh báo khi chúng ta nói về việc học lập trình: lập trình là một trong những thứ rất dễ học nhưng rất khó thành thạo. Điều này thường dẫn đến nhầm lẫn hoặc xung đột khi mọi người bắt đầu hành trình học tập hoặc tương tác với những người đã đi xa hơn. Đôi khi bạn nghe thấy những câu như “Tôi đã học Python, nhưng không ai thuê tôi cả! Thật bất công”.

Hãy nghĩ về việc lập trình giống như học chơi cờ: hầu hết chúng ta có thể ghi nhớ hoàn toàn 100% luật chơi trong một buổi chiều. Điều đó có nhất thiết khiến chúng ta trở thành đại kiện tướng không? Rất khó. Trong bối cảnh tương tự, bạn có thể học các quy tắc của một ngôn ngữ lập trình mới trong vài tuần, nhưng điều đó không nhất thiết khiến bạn đủ điều kiện để tự gọi mình là bậc thầy (master). Và điều đó không có nghĩa là bạn đã sẵn sàng đảm nhận các vai trò phát triển ứng dụng quan trọng. Bạn sẽ học tất cả các quy tắc trong hai tuần đầu tiên, nhưng giống như cờ vua, bạn sẽ dành cả cuộc đời còn lại để cố gắng thành thạo chúng.

Có một số người trong ngành đảm bảo chất lượng nói rằng chuyên gia chất lượng không cần kỹ năng lập trình. Chúng tôi không đồng ý. Chúng tôi cảm thấy việc học hỏi và liên tục cải tiến về lập trình là năng lực cốt lõi của kỹ sư chất lượng và sẽ được sử dụng chủ yếu khi bạn bắt đầu viết bài kiểm thử tự động phức tạp, cũng như khi bạn cộng tác với các nhà phát triển đang xây dựng phần mềm mà bạn đang thử nghiệm.

Kiến trúc doanh nghiệp

Các ứng dụng doanh nghiệp có vô số loại, kích cỡ và cấu hình. Để hiểu cách các hệ thống này hoạt động — và cách chúng chia ra — bạn cần hiểu những kiến ​​thức cơ bản về kiến ​​trúc doanh nghiệp.

Đây là một danh mục rộng, nhưng bao gồm các chủ đề như ứng dụng ba tầng, dịch vụ REST, kiến ​​trúc vi dịch vụ, kiến ​​trúc phát trực tuyến và hướng sự kiện, chiến lược bền vững (lưu trữ quan hệ và lưu trữ đối tượng, v.v.), sao chép, bộ nhớ đệm, proxy, v.v. Phần này không được liệt kê tuần tự vì hầu hết đều độc lập và có thể học theo bất kỳ thứ tự nào.

Ngoài việc hiểu cách tổ chức các hệ thống doanh nghiệp, bạn cũng nên hiểu chúng được xây dựng trên nền tảng gì. Điều này có nghĩa là biết các tùy chọn IaaS, PaaS và SaaS, cũng như hiểu biết sâu sắc về các dịch vụ đám mây từ các nhà cung cấp lớn như AWS, GCP, và Azure. Công nghệ đám mây đang trở nên phổ biến trong các kiến ​​trúc hiện đại, vì vậy chúng tôi không thể nhấn mạnh đủ tầm quan trọng của các chủ đề này. Tất cả các nhà cung cấp đám mây lớn đều cung cấp tài nguyên học tập phong phú và nhiều tài nguyên học tập của bên thứ ba (cả miễn phí và trả phí) đã phát triển để đáp ứng nhu cầu này. .

Kiến trúc doanh nghiệp là một lĩnh vực kiến ​​thức rộng lớn, vì vậy hãy tập trung vào các lĩnh vực nghiên cứu cụ thể thú vị hoặc phù hợp với mục tiêu của bạn. Một số chủ đề trong số này có thể áp dụng rộng rãi hơn cho nhiều loại kiến ​​trúc (như chiến lược kiên trì), trong khi những chủ đề khác có thể chỉ áp dụng được trong một số tình huống hoặc trong một số vai trò (như phát trực tuyến sự kiện – event streaming). Tuy nhiên, việc hiểu các hệ thống bạn đang thử nghiệm và cách chúng kết hợp với nhau là điều quan trọng nếu bạn muốn thành công với tư cách là một kỹ sư chất lượng (QE), vì những kỳ vọng của vai trò này vượt xa những kỳ vọng của một người thử nghiệm (tester), khi mà vẫn ổn với thử nghiệm hộp đen và hiểu biết hạn chế về những gì diễn ra bên dưới.

Kiểm tra các nguyên tắc cơ bản về tự động hóa

Cuối cùng! Có nhiều loại tự động hóa thử nghiệm – thử nghiệm đơn vị, thử nghiệm API, v.v. – và các kỹ sư chất lượng cần phải có chuyên môn về tất cả chúng. Tuy nhiên, trước khi có thể đi sâu vào bất kỳ loại nào, chúng ta cần xem xét thử nghiệm tự động hóa như một lý thuyết khái niệm.

Để tự động hóa thử nghiệm có giá trị, chúng ta cần hiểu lý do tại sao chúng ta viết nó, chúng ta cần xem tự động hóa thử nghiệm như một khoản đầu tư, cách tự động hóa thử nghiệm có thể được mô tả bằng các khái niệm như Kim tự tháp thử nghiệm và cách dữ liệu thử nghiệm phụ thuộc vào mọi thứ như test oracle, test surface, test data.

Chúng tôi cũng cần hiểu rõ mức độ phù hợp của tính năng tự động hóa ở mức độ thấp hoặc không có mã, những lợi ích và hạn chế hoặc các công cụ ghi và phát lại cũng như cách sử dụng các ngôn ngữ BDD như Gherkin.

Mặc dù chúng ta sẽ đi vào chi tiết sau về tự động hóa đơn vị, API và giao diện người dùng, nhưng việc hiểu rõ những loại này là gì cũng như những lợi ích và hạn chế tương ứng của chúng sẽ là cần thiết liên quan đến những thứ như kim tự tháp thử nghiệm và tự động hóa như một khoản đầu tư.

Mặc dù chúng ta chưa cần đi sâu vào các công cụ tự động hóa cụ thể, nhưng việc biết các danh mục công cụ và một số ví dụ phổ biến trong mỗi danh mục sẽ hữu ích. Ví dụ: các dịch vụ mô phỏng hoặc giả mạo để cô lập hệ thống đang được thử nghiệm là thách thức chính trong hầu hết các chiến lược tự động hóa. , vì vậy việc biết những thứ như WireMock hoặc Montebank hỗ trợ điều này sẽ hữu ích như thế nào.

Tự động hóa thử nghiệm là một chủ đề liên tục và có một số ý kiến ​​​​mạnh mẽ và đôi khi có những bất đồng trong lĩnh vực này, việc biết cả hai bên, thay vì chỉ những gì bạn quen thuộc nhất, sẽ khiến bạn kém nổi bật hơn những người khác. kỹ sư chất lượng thông báo.

Giao hàng Agile hiện đại

Trước khi đi sâu vào các loại tự động hóa thử nghiệm khác nhau, chúng ta cần đi sâu vào một số lĩnh vực ít kỹ thuật hơn nhưng vẫn rất quan trọng. Mặc dù trước đây chúng ta đã xem xét các nguyên tắc cơ bản về SDLC, nhưng bây giờ chúng ta cần đi sâu vào agile delivery một cách cụ thể.

Để hoạt động hiệu quả trong một nhóm phát triển linh hoạt, bạn cần biết nhiều hơn ngoài lý thuyết về linh hoạt, bạn còn cần phải làm quen với các khía cạnh chiến thuật, thực tế. Và cách tốt nhất để học nhiều về điều này là trải nghiệm trực tiếp với một nhóm Agile delivery, việc hiểu biết trước sẽ không có hại gì.

Mặc dù mỗi công ty áp dụng phương pháp linh hoạt khác nhau – cụm từ thường được nghe nhất về agile là câu nói cực kỳ bực tức “đó không phải là linh hoạt thực sự!” – nhưng có nhiều cách tiếp cận, nghi thức và thuật ngữ phổ biến mà bạn nên làm quen với tư cách là một kỹ sư chất lượng. Chúng bao gồm những thứ như: định nghĩa story, xác định tiêu chí chấp nhận, kỹ thuật ước tính story, cũng như mục đích của các buổi lễ thông thường như stand-up, retro, showcase. Ngoài ra, sẽ rất có giá trị nếu bạn làm quen với các công cụ quản lý dự án linh hoạt điển hình nhất. Phổ biến nhất là Jira, nhưng Rally, MS Project và những thứ khác cũng được sử dụng. Ngoài ra, bạn sẽ nhận được thêm lợi ích khi làm quen với các ứng dụng agile trong doanh nghiệp như Scaled Agile (SAFe), LeSS hoặc Nexus .

Biết cách nhóm linh hoạt của bạn vận hành và có thể xác định khi nào nhóm hoạt động tốt và khi nào không, là điều quan trọng đối với vai trò của kỹ sư chất lượng – thường thì những thách thức này là nguyên nhân cốt lõi của các vấn đề về chất lượng phần mềm.

Vai trò của Kỹ thuật Chất lượng

Chính xác thì kỹ sư chất lượng sẽ làm gì? Vai trò này kết thúc ở đâu và vai trò của kỹ sư phần mềm bắt đầu như thế nào và khi nào kỹ sư chất lượng cộng tác với tất cả các vai trò khác của nhóm phát triển linh hoạt? những câu hỏi này trước khi bắt đầu.

Thật không may, câu trả lời cho những câu hỏi này không chỉ khác nhau giữa các công ty mà còn giữa các nhóm. Bộ kỹ năng, lĩnh vực, kỳ vọng, tiến trình và văn hóa của mỗi nhóm và công ty sẽ ảnh hưởng đến công việc của một kỹ sư chất lượng. vì vậy đây sẽ phải là một phương pháp điều trị mang tính lý thuyết ở cấp độ cao hơn. Dù vậy, việc biết được vai trò của bạn sẽ vô cùng có giá trị để thành công.

Bất kể công ty cụ thể của bạn hoạt động như thế nào, sẽ rất hữu ích nếu bạn có hiểu biết sâu rộng về cách các công ty công nghệ mô hình khác nhau tiếp cận một vấn đề. Ví dụ: xem Cách Google kiểm tra phần mềm , đọc về Phương pháp tiếp cận kỹ thuật kết hợp của Microsoft , Hỗ trợ chất lượng của Atlassian , Spotify. Mô hình và đặc biệt là (tự cắm!) Nguyên tắc cốt lõi về kỹ thuật chất lượng của Slalom Build .

Kiểm tra đơn vị

Mặc dù kiểm thử đơn vị thường được thực hiện bởi các kỹ sư phần mềm, nhưng các kỹ sư chất lượng cũng cần phải có chuyên môn sâu về các công cụ và khuôn khổ, biết những hạn chế và cạm bẫy trong ngôn ngữ và ứng dụng cụ thể của họ, đồng thời biết chính xác cách tăng cường và hỗ trợ phạm vi kiểm thử đơn vị. các lớp tự động hóa cấp cao hơn khác Các kỹ sư chất lượng sẽ không gặp vấn đề gì khi xem xét mã các bài kiểm tra đơn vị hoặc thậm chí tự mình thực hiện các bài kiểm tra.

Mức độ chuyên môn mà chúng tôi yêu cầu ở các kỹ sư chất lượng cho một loại thử nghiệm hầu hết do các kỹ sư phần mềm thực hiện có thể làm bạn ngạc nhiên. Tuy nhiên, sự hiểu biết này rất quan trọng do vai trò và những kỳ vọng đã nêu trong các phần trước. họ phải suy nghĩ một cách tổng thể về chất lượng ứng dụng và hiểu mọi thứ có thể ảnh hưởng đến chất lượng đó. Thử nghiệm đơn vị tạo nên một vòng phản hồi lớn và quan trọng cho các nhóm phát triển và các kỹ sư chất lượng cần có khả năng cộng tác như những người ngang hàng với các kỹ sư phần mềm và phát triển trong việc triển khai và bảo trì. sức khỏe của các xét nghiệm này.

Trong thử nghiệm đơn vị, bạn nên hiểu và thoải mái tận dụng TDD để phát triển thử nghiệm đơn vị. Bạn nên hiểu sự khác biệt giữa thử nghiệm đơn vị một chức năng so với ngôn ngữ hướng đối tượng và các mẫu giúp thử nghiệm đơn vị trở nên dễ dàng. về chức năng, có đủ sự khác biệt để làm cho việc học nhiều ngôn ngữ mà bạn đang tập trung vào có giá trị.

Mặc dù lĩnh vực này tập trung vào thử nghiệm đơn vị, nhưng các chuyên gia tự động hóa sẽ biết rằng tự động hóa thử nghiệm không nhất thiết phải phù hợp với các lớp rõ ràng và nên được coi là một chuỗi liên tục từ các thử nghiệm nhỏ và rời rạc đến các thử nghiệm lớn và mở rộng. Việc kết hợp các thử nghiệm với nhau là rất quan trọng để phát triển một chiến lược tự động hóa gắn kết và là một lý do khác khiến các kỹ sư chất lượng phải có kiến ​​thức và hiểu biết sâu sắc về tất cả các loại thử nghiệm, ngay cả khi họ không nhất thiết phải là người thực hiện chúng.

Tự động hóa API

Tự động hóa API là một loại vòng phản hồi khác rất quan trọng đối với bất kỳ hệ thống phần mềm không tầm thường nào và là loại mà tất cả các kỹ sư chất lượng phải hiểu sâu. Mặc dù những gì cấu thành nên API hơi linh hoạt, nhưng chúng ta thường nói về các dịch vụ REST, dịch vụ web, dịch vụ SOAP, chủ đề và hàng đợi trong kiến ​​trúc phát trực tuyến, giao diện tệp và thậm chí có thể cả các giao thức nhị phân cấp thấp hơn.

API được xây dựng để máy tính sử dụng (có tên như vậy!), vì vậy không có gì ngạc nhiên khi chúng tạo ra các bề mặt thử nghiệm tốt cho tự động hóa thử nghiệm. Do những hạn chế của cả thử nghiệm đơn vị và thử nghiệm E2E / UI, các kỹ sư chất lượng cần có khả năng xây dựng. , thực thi, gỡ lỗi và duy trì các loại thử nghiệm này.

Ngoài tự động hóa API, các công cụ như PostMan hỗ trợ thử nghiệm API đặc biệt cũng có giá trị. Hầu hết các quy trình phát triển tự động hóa API phổ biến sẽ chứa một lượng đáng kể việc thẩm vấn API bằng các công cụ như Postman trong khi xây dựng các thử nghiệm thực tế bằng ngôn ngữ lập trình.

Mặc dù chúng tôi đã nêu ra hai khung API phổ biến: RestAssured và Karate , nhưng việc kiểm tra API có thể đạt được chỉ với một trình chạy thử nghiệm (như JUnit ), một thư viện để giao tiếp với dịch vụ (như HttpClient ) và một thư viện xác nhận (như Hamcrest Every Programming). ngôn ngữ có những điều này.

Tùy thuộc vào nhóm của bạn, trách nhiệm đối với các thử nghiệm API, chẳng hạn như thử nghiệm đơn vị, có thể là trách nhiệm của nhà phát triển. Bất kể, bạn sẽ cần phải rất quen thuộc và thoải mái khi xây dựng, mở rộng, gỡ lỗi và thực thi tự động hóa API.

Tự động hóa giao diện người dùng web

Thật không may, tự động hóa giao diện người dùng là điều mà hầu hết mọi người nghĩ về tự động hóa. Mặc dù chúng tôi biết rằng nó chỉ chiếm một lớp trong kim tự tháp tự động hóa tổng thể của chúng tôi (và lớp nhỏ nhất ở đó), nhưng nó vẫn đóng một vai trò quan trọng trong chiến lược tự động hóa lớn hơn. Nếu ứng dụng của bạn có giao diện người dùng (và hầu hết đều có), thì việc tự động hóa giao diện người dùng là cách duy nhất để tạo thử nghiệm toàn diện thực sự và đó là thử nghiệm toàn diện phản ánh trải nghiệm gần đúng nhất của người dùng cuối.

Thật không may, nó cũng là một trong những loại tự động hóa thách thức nhất. Trong khi API được tạo ra để sử dụng cho các ứng dụng, thì giao diện người dùng được tạo ra để sử dụng bởi… à… người dùng. Yêu cầu một ứng dụng (như tự động hóa thử nghiệm) thúc đẩy thứ gì đó được xây dựng cho. Người dùng thường giống như đóng một cái chốt tròn vào một cái lỗ hình vuông. Để giải quyết vấn đề này, rất nhiều công cụ, khung và ứng dụng tự động hóa đã được tạo ra để trợ giúp.

Cho đến nay, phổ biến nhất trong số này là Selenium và các hàm bao và dẫn xuất của nó ( WebDriver.io , Protractor , Appium , v.v.). Có quá nhiều thứ để tìm hiểu tất cả chúng, nhưng thay vào đó, hãy cố gắng hiểu Selenium đang làm gì và làm thế nào nó giải quyết thách thức trong việc điều khiển trình duyệt web. Khi bạn hiểu điều này và nắm vững các ngôn ngữ lập trình mà bạn sẽ sử dụng, việc chọn khung tự động hóa giao diện người dùng hợp thời trang tiếp theo dựa trên Selenium sẽ không khó chút nào.

Ngoài Selenium, còn có các khung tự động hóa trình duyệt cố gắng thúc đẩy tự động hóa web mà không sử dụng giao thức WebDriver cơ bản của Selenium . Các công cụ này thường tương tác với các API dành riêng cho trình duyệt như DevTools của Chrome và có thể giúp tự động hóa giao diện người dùng cho các trình duyệt này dễ dàng và mạnh mẽ hơn đáng kể. tuy nhiên có một số hạn chế. Các công cụ như Puppeteer và Playwright thuộc loại này. Cypress.io là một công cụ mới và đầy hứa hẹn khác trong danh mục không chứa selen đáng để học hỏi. , kết hợp với nền tảng về kiến ​​trúc và lập trình web sẽ cho phép bạn tiếp thu bất kỳ công cụ mới nào một cách nhanh chóng.

Ngoài selen và tự động hóa giao diện người dùng “không phải selen”, còn có nhiều công cụ tự động hóa thương mại, độc quyền. Chúng thường được tiếp thị cho những người ít hiểu biết về mặt kỹ thuật và có thể hữu ích để thực hiện những việc đơn giản. thì không, và việc có thể xem qua nhiều tài liệu tiếp thị (Chúng tôi sử dụng AI để tự động hóa mọi thứ miễn phí!) là điều quan trọng để hiểu được vai trò của chúng so với các phương pháp tiếp cận tập trung vào mã hơn.

Tích hợp, phân phối và triển khai liên tục

Tự động hóa thử nghiệm có giá trị nhất (một số người cho rằng nó CHỈ có giá trị) khi nó tự động cung cấp phản hồi trực tiếp và ngay lập tức cho tất cả các thay đổi của hệ thống, có nghĩa là tích hợp tự động hóa thử nghiệm với các quy trình tích hợp/triển khai liên tục và các thử nghiệm nằm trong một kho lưu trữ. chỉ chạy khi ai đó nhấp vào chúng nhanh chóng mục nát và chắc chắn bị ném vào thùng rác. Là một kỹ sư chất lượng, bạn sẽ cần hiểu các khái niệm về CI/CD, thành thạo với các công cụ liên quan và có thể cộng tác với các kỹ sư và nhà phát triển. các kỹ sư phần mềm để triển khai phương pháp tự động hóa thử nghiệm tổng thể có giá trị cho mọi người.

Mức độ hiểu biết này được triển khai ở mức độ nào sẽ khác nhau ở mỗi nhóm, nhưng theo kinh nghiệm của chúng tôi, không có gì lạ khi các kỹ sư chất lượng tham gia trực tiếp vào việc triển khai cơ sở hạ tầng quy trình. Điều này có thể có nghĩa là viết các quy trình Jenkins hoặc làm việc với các tập lệnh Cloud Formation hoặc. bất kể công nghệ nào khác được nhóm của bạn tận dụng đối với những gì được sử dụng, các kỹ sư chất lượng không nên bị đe dọa và phải sẵn sàng hỗ trợ hoặc hỗ trợ tất cả các hoạt động CI/CD.

Chiến lược CI/CD của bạn nhất thiết sẽ trùng lặp với chiến lược môi trường thử nghiệm của bạn và đây là một lĩnh vực khác mà các kỹ sư chất lượng nên làm quen. Kiểm tra cổng là gì, khi nào nên sử dụng môi trường dùng chung, sự phụ thuộc giữa môi trường thử nghiệm và quản lý dữ liệu thử nghiệm là gì. ? Các kỹ sư chất lượng phải sẵn sàng trả lời tất cả những câu hỏi này và hơn thế nữa.

Kiểm tra năng suất

Sẽ không có vấn đề gì nếu các ứng dụng hoạt động nếu chúng quá chậm để sử dụng hoặc bị hết thời gian chờ khi tải. Kiểm tra hiệu suất đảm bảo phần mềm đáp ứng mong đợi về hiệu suất và là một lĩnh vực chuyên môn quan trọng đối với các kỹ sư chất lượng.

Mặc dù bản thân kiểm thử hiệu năng là một chủ đề sâu và rộng và có những chuyên gia kiểm thử không chuyên gì NHƯNG kiểm thử hiệu suất, bạn nên hiểu các loại và danh pháp của các kiểm thử này, các công cụ hỗ trợ chúng và cách tích hợp các kiểm thử này vào Quy trình CI/CD và quy trình linh hoạt.

Nhà vô địch về các công cụ kiểm tra hiệu suất độc lập là Apache JMeter , nhưng vẫn tồn tại rất nhiều công cụ dựa trên mã và GUI. Giống như các lĩnh vực khác của máy kiểm tra tự động, chúng tôi khuyên bạn nên sử dụng các công cụ học tập phù hợp với nhóm công nghệ mà bạn quan tâm nhất.

Thử nghiệm di động

Việc sử dụng Internet trên thiết bị di động đã vượt qua mức sử dụng trên máy tính để bàn, vì vậy việc kiểm tra giao diện trên thiết bị di động cũng không kém phần quan trọng so với việc kiểm tra giao diện web. Trong danh mục “di động”, bạn nên hiểu các sắc thái của việc kiểm tra ứng dụng gốc, ứng dụng lai và giao diện web dành cho thiết bị di động. trong danh mục này, bạn sẽ cần biết cách kiểm tra cả nền tảng Android và iOS — vì tất nhiên là có những khác biệt.

Việc tự động hóa các ứng dụng di động đặt ra những thách thức riêng cũng như rất nhiều công cụ và khung được sử dụng để vượt qua chúng. Có các công cụ dành riêng cho nền tảng như Espresso cho Android và XCUITest cho iOS, nhưng cũng có các công cụ đa nền tảng như Appium . đề xuất các công cụ học tập tận dụng triết lý ưu tiên mã thay vì các công cụ tập trung vào GUI.

Ngoài tự động hóa thiết bị di động, bạn nên hiểu cách sử dụng trang trại thiết bị (cả tại chỗ và đám mây) để tiến hành thử nghiệm trên số lượng lớn các loại thiết bị và phiên bản hệ điều hành. Chúng ta nên hiểu cách sử dụng trình mô phỏng và trình mô phỏng để thực hiện thử nghiệm. phản hồi không có thiết bị vật lý, cách phân phối và phát hành ứng dụng di động khác với các loại phần mềm khác như thế nào và các lĩnh vực thử nghiệm khác dành riêng cho ứng dụng di động sẽ không được tìm thấy khi thử nghiệm phần mềm dựa trên web thông thường.

Kiểm tra khả năng tiếp cận

Cũng giống như tất cả các dịch vụ thương mại, phần mềm phải dễ tiếp cận đối với những người khiếm thị, thính giác hoặc các khiếm khuyết khác. Với tư cách là kỹ sư chất lượng, chúng ta nên hiểu các yêu cầu này cũng như các phương pháp và công cụ được sử dụng để xác thực chúng.

Tại Hoa Kỳ, khả năng truy cập được xác định theo Tiêu chuẩn truy cập 508 của chính phủ và Nguyên tắc truy cập nội dung web (WCAG) do tập đoàn W3 xác định. Nếu bạn định làm việc trên giao diện web hoặc thiết bị di động, hãy hiểu rõ các tiêu chuẩn này và rất nhiều hoạt động quét. công cụ được sử dụng để đánh giá sự tuân thủ là rất quan trọng.

Kiểm tra bảo mật

Bảo mật phần mềm cực kỳ quan trọng đối với chất lượng tổng thể của hệ thống phần mềm, vậy tại sao chủ đề này lại xuất hiện tương đối muộn trong lộ trình học tập của chúng ta? Tầm quan trọng của bảo mật và tính chất kỹ thuật cao của hầu hết các thử nghiệm bảo mật đã thúc đẩy ngành áp dụng các vai trò bảo mật chuyên biệt; ví dụ: an ninh mạng, bảo mật giao thức, bảo mật doanh nghiệp, v.v. Là một kỹ sư chất lượng mới, bạn có thể sẽ không tham gia vào bất kỳ công việc nào trong số này. Tuy nhiên, bạn vẫn nên biết những điều cơ bản về bảo mật, bao gồm cả cách bảo mật quá trình xây dựng. bản thân phần mềm.

Điều này bao gồm các khái niệm như cách sử dụng xác thực/ủy quyền để hạn chế quyền truy cập, Nguyên tắc đặc quyền tối thiểu, cách hoạt động của mật mã (ví dụ: mã hóa khóa công khai) và hiểu biết về Top 10 của OWASP . Bạn nên hiểu thuật ngữ bảo mật như vectơ tấn công và bề mặt. , cách xác định một số lỗ hổng bằng cách sử dụng máy quét và các kiến ​​thức cơ bản về kiểm tra thâm nhập Trừ khi bạn quyết định theo đuổi sự nghiệp cụ thể về bảo mật phần mềm, những chủ đề này sẽ đủ để bạn bắt đầu trở thành một kỹ sư chất lượng.

Tín dụng bổ sung: Kiểm tra AI/ML và Kỹ thuật dữ liệu

AI/ML và Kỹ thuật dữ liệu đều là những chủ đề nóng trong phát triển phần mềm, nhưng chúng tôi đã quyết định bỏ chúng khỏi lộ trình cốt lõi vì 1) quá trình này đã khá dài và 2) đây là những chuyên ngành có thể không áp dụng được tùy thuộc vào vai trò và công ty Tuy nhiên, nếu bạn muốn đi theo con đường này, nền tảng bạn đã phát triển trong các phần trước như kiến ​​trúc doanh nghiệp và các nguyên tắc cơ bản về tự động hóa sẽ phục vụ tốt cho bạn và sẽ không có vấn đề gì khi thêm AI/ML hoặc kỹ thuật dữ liệu. thử nghiệm vào hộp công cụ thử nghiệm của bạn.

Kết luận

Quy mô và phạm vi của lộ trình học tập này có thể đáng sợ – 144 chủ đề trong 18 phần, một số trong số đó khá sâu sắc! và giống như giải quyết các vấn đề phức tạp, khi nắm vững những chủ đề này, giá trị bạn có thể mang lại cho tổ chức là rất lớn.

Nếu bạn đã làm việc trong lĩnh vực chất lượng và có thể nghĩ ra điều gì đó mà chúng tôi đã bỏ sót, vui lòng nói điều đó trong phần nhận xét bên dưới. Mặc dù chúng tôi đã dành rất nhiều thời gian để phát triển lĩnh vực này, nhưng tôi đảm bảo rằng mọi thứ đã bị bỏ qua nếu bạn mới bắt đầu tham gia lĩnh vực này. sự nghiệp: Chào mừng bạn và chúc may mắn trên hành trình học tập của bạn.

Tham khảo: https://medium.com/slalom-build/quality-engineer-learning-roadmap-fddfcb77409e