Tag: software

  • Ước lượng Story Point trong Scrum: Liệu còn hữu dụng?

    Blog, Development | Apr 26, 2018
    PHẦN MỘT
    Chúng ta hẳn còn nhớ lần đầu đọc Tuyên ngôn Agile (The Agile Manifesto). Nó đem đến cảm giác cực kì phấn khích. Những giá trị của nó thúc đẩy và gia tăng sức mạnh của đội nhóm. Nó tạo ra giá trị sâu sắc hơn cho khách hàng và đẩy lùi những chuyện vớ vẩn khỏi công việc phát triển phần mềm. Mọi thứ đã đâu vào đấy.
    Tua nhanh đến năm 2018, và “Houston, có biến”.
    Scrum hữu dụng, và mọi thứ vẫn đâu vào đấy, nhưng… việc áp dụng Agile và Scrum một cách nhanh chóng đã tạo ra một cơn ác mộng cho những người lên kế hoạch ở cấp độ tổ chức (enterprise-level planners) – những người chịu trách nhiệm cho việc ước lượng Epic/Portfolio. Lĩnh vực này đã lấy một thông lệ được tạo ra cho những nhóm nhỏ làm việc mật thiết với nhau một cách đồng bộ – sau đó cải tiến để áp dụng cho số đông.
    Một nhóm Scrum trở thành vài nhóm hay hàng chục nhóm, mỗi nhóm có một cách hiểu khác nhau về “thế nào là một Story Point”. Hiện nay, không hề có nhóm nào có cùng trải nghiệm, cơ sở hạ tầng hay các bộ kĩ năng giống với nhóm nào; do đó, không hề có nhóm nào định nghĩa Story Point giống nhóm nào.
    Rồi đột nhiên, các quản lý cấp cao cố gắng chia Epic backlog dựa trên hơn 25 diễn giải khác nhau về một Story Point. Càng nhiều nhóm đang làm trên một sản phẩm, ngọn núi phải leo càng lớn [Xin thứ lỗi cho sự châm biếm này]
    17 anh chàng ở Snowbird (17 người tham gia cuộc họp ở Snowbird, từ đó đi đến Tuyên ngôn Agile năm 2001 – ND) sẽ nói gì?
    Scrum cơ bản sẽ nói rằng đừng cố thử ước lượng một Epic backlog, vì việc đó chỉ phí công và đầy chỗ không chính xác. Các chi tiết chắc chắn sẽ thay đổi, và mọi thứ sẽ lại được sắp xếp lại thứ tự ưu tiên vào phút cuối. Nhưng nói điều đó với Epic/Portfolio Manager đang phải đảm đương việc đưa ra một lịch trình tiến độ để cấp vốn, hẳn bạn sẽ nhận được ánh mắt hình viên đạn!
    Ước lượng Epic bị lệch từ số ngày của các nhóm Scrum đơn lẻ khi việc ước lượng vốn vô cùng đơn giản. Các dependency, bộ kĩ năng sẵn có, các công cụ để hoàn thiện công việc được lặp đi lặp lại. Các thành viên riêng lẻ biết về năng lực và giới hạn của từng người. Khi ai đó nói rằng một story là 5 point, mọi người trong team biết chính xác điều người đó ngụ ý là gì. Khi Scrum mở rộng (grew legs), ý nghĩa của “5 points” dần trở nên mơ hồ. Càng thêm nhiều nhóm, càng khó cho các nhà quản lý để diễn giải Story Point. Ở khoảng 10 hay 20 nhóm Scrum… thì tất cả hoàn toàn là một đống hỗn độn! Nếu không có một đường trung đạo (center line) cho việc ước lượng, cả nhóm sẽ trở nên bất ổn rất nhanh.
    Điều này làm dấy lên câu hỏi: “Liệu Story Point có còn là cách hiệu quả để ước lượng các Epic trong Scrum?”
    Một số người cho là có, bạn vẫn có thể dùng Story Point với framework mở rộng (scaling framework) đúng đắn. Một số khác cho là Scrum đã đi quá xa so với những nguyên lý Agile vì công việc không thể chia nhỏ. Khi quy mô của Scrum tăng lên, làm thế nào để các nhóm có thể thiết lập một tiêu chuẩn thống nhất cho việc ước lượng Epic backlog để những nhà quản lý cấp cao, những bên liên quan và những nhóm khác có thể đồng ý với nhau?
    ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA STORY POINTS
    Chúng tôi đã có vài cuộc thảo luận nội bộ và đi đến những ưu điểm và nhược điểm của việc sử dụng Story Point đối với việc ước lượng trong Scrum ở cấp cao. Hãy đọc qua danh sách dưới đây và cho chúng tôi biết ý kiến của bạn về chủ đề này, về những điều bạn chưa đồng ý và những chỗ chúng tôi còn thiếu sót nhé.
    Ưu điểm: Story Points giúp chia nhỏ những backlog lớn.
    Story Points có thể rất hữu dụng với vai trò là một phần của một scaling framework như SAFe và NEXUS. Những framework này cung cấp những phương pháp ước lượng có khả năng mở rộng (scalable estimation techniques) để chia nhỏ công việc ở các cấp độ Epic, Program và Portfolio:
    · SAFe xem xét bức tranh lớn về cách công việc đi từ quản lý sản phẩm (Product Management) đến quản trị sản phẩm (Governance), các nhóm Program và các nhóm Dev, rồi đến khách hàng.
    · NEXUS thiên về cách tiếp cận từ dưới lên, tập trung vào việc việc hợp nhất nhiều nhóm Scrum làm việc trên cùng một sản phẩm. Thông qua sự minh bạch, NEXUS cố gắng bảo vệ và tăng cường những kết nối giữa các nhóm và giữ cho việc thay đổi đồng bộ nhất có thể.
    Từ góc độ chiến thuật, một phương pháp được các nhà huấn luyện khuyên dùng là để cho nhóm đang làm công việc ước lượng đảm đương các cuộc họp về ước lượng (meeting the estimate). Cùng một nhóm đó luôn làm trên cùng một module nên ý nghĩa của các Story Point được duy trì rõ ràng và thống nhất từ Sprint này sang Sprint khác. Nhược điểm là năng lực cho mỗi module (capacity per module) trong mỗi lần phát hành (release) bị cố định, vì các nhóm không thể [đồng thời] nhảy từ module này sang module khác (across the modules). Bạn bị bó buộc trong lượng công việc có thể được hoàn thành trong một lần release cho mỗi module.
    Một cách tiếp cận khác là chỉ định một hoặc hai đại diện từ mỗi Scrum để tham gia một buổi họp ước lượng chính thức. Những người đại diện này có thể đưa ra quyết định về các story size mà không cần bắt cả nhóm phải ngừng công việc của mình. Phương pháp này giả định rằng mỗi người đại diện đều có kiến thức về cách nhóm của họ định nghĩa một Story Point, để họ có thể chia sẻ, thảo luận và tìm ra những lý do chung để ước lượng các story. Nhược điểm ở đây là mỗi nhóm Scrum phải tin và làm theo bất cứ điều gì mà những người đại diện mà họ đã chọn đặt ra về ước lượng cho mỗi story. Đồng thời, rủi ro có thể xảy ra là những người đại diện bị ảnh hưởng từ những cách tiếp cận về ước lượng của các đại diện từ những nhóm khác.
    Nhược điểm: Đây không phải là Scrum!
    Những chuyên gia về Agile sẽ cho rằng các phương pháp này không đại diện cho Scrum. Nếu cùng một nhóm luôn làm trên cùng một module, liệu điều này có đe dọa khả năng mở rộng không? Khái niệm về các nhóm tự quản lý thì sao? Từ quan điểm năng lực, việc giới hạn một nhóm thành một module không thúc đẩy khả năng mở rộng. Điều này không còn là agile mở rộng (scaled agile) nữa. Từ góc độ của nhóm, nếu chỉ có một sự ước lượng mang tính đại diện xa rời với cả nhóm, tính ổn định của nhóm sẽ gặp rủi ro vì (1) người đại diện không có kiến thức đúng về vấn đề dependency hay integration cụ thể hoặc (2) người đó có thể trở nên chịu ảnh hưởng từ những kinh nghiệm của một nhóm khác không phù hợp với cách thức hoạt động của nhóm mình. Trong cả hai trường hợp, người ta lo sợ rằng mọi thứ đang trở nên đi từ trên xuống (top-down) quá mức, tạo ra những cách biệt về tốc độ (Velocity gap) và một đống hỗn độn ngu ngốc trong PMO.
    PHẦN HAI:
    Trong phần dưới đây, chúng ta sẽ đi qua những ưu điểm và nhược điểm của các story point để thiết lập một cơ sở (baseline) thiết yếu nhằm huy động ngân sách, và liệu chúng có đang bao hàm nhiều hơn so với thứ mà Scrum dự định cho chúng không.
    Ưu điểm: Story Points thiết lập một baseline thiết yếu để huy động ngân sách
    Story Points đem đến cho nhà quản lý một điểm tham chiếu dữ liệu cơ sở để ước lượng và tính toán tốc độ (Velocity) giữa nhiều nhóm với nhau, vốn là điều mà ai cũng biết là chuyện ác thiết yếu nếu cần gọi vốn cho bất kì dự án lớn nào.
    Trong waterfall, các nhà quản lý có thể nói chuyện với các bên liên quan trên phương diện những con số (giờ, ngày, tuần, tháng). Ai cũng có thể hiểu những con số. Chẳng có gì tốn ít hơn một giờ. Khi Internet và Agile xuất hiện, không còn dùng giờ được nữa vì nhiều task có thể được hoàn thành còn nhanh hơn cả thời gian dự định họp để lên kế hoạch cho nó! Mặt khác, một số story có những Timeline và Dependency cần cung cấp tài liệu cho những bên liên quan. Story Point cung cấp cho các nhà quản lý một ý tưởng cơ bản về chỗ mà một story đổ vào spectrum, liên quan đến kinh nghiệm trước đó của một nhóm và cách họ đóng gói nó.
    CTO của chúng tôi, Kaushal Amin so sánh việc ước lượng Epic với việc hỏi xem cần bao nhiêu cái thùng (công sức – Effort) để chuyển đồ:
    Công ty A nói rằng họ sẽ chuyển hết đồ với 150 thùng. Công ty B có thể chuyển hết với 100 thùng. Nhìn qua thì có vẻ công ty B năng suất hơn, nhưng nếu công ty B dùng những cái thùng lớn hơn thì sao? Công sức cần bỏ ra có thể y như nhau, chỉ là các công ty đó ước lượng “kích thước thùng” (bucket size) khác nhau mà thôi.
    Ở cấp độ Program, bạn không thể ép buộc cùng một “kích thước thùng” (bucket size) giữa các nhóm. Tuy nhiên, Story Point có thể giúp các nhóm chia nhỏ công việc đến từng đơn vị chức năng nhỏ nhất để theo thời gian, những người lập kế hoạch cấp cao có thể nghiên cứu và hiểu từng nhóm đang dùng bucket size nào để ước lượng.
    Nhược điểm: Story Point [đang] bao hàm nhiều ý nghĩa hơn so với vai trò mà Scrum sắp đặt cho nó
    Ưu điểm cũng chính là nhược điểm. Story Point chưa bao giờ được tạo ra với dự định là sẽ trở thành một thước đo hiệu suất. Việc ước lượng Story Point chỉ là ước lượng, không phải dự báo. Nhưng, chúng đang được sử dụng để so sánh năng lực giữa các nhóm với nhau.
    Scrum chưa bao giờ dự định bó buộc các nhóm vào một cam kết “làm hay là chết”. Story Point tượng trưng cho một sự ước tính theo kiểu vừa ước đoán vừa lập luận “tốt vừa đủ” về quy mô liên quan trong một dự án. Nếu toàn bộ dự định về tính linh động (intent of Agility) là để cho phép các tổ chức phản ứng với những thay đổi theo kế hoạch, thì chúng ta không có được lợi ích đẩy đủ của Scrum.
    Trong phần sau và cũng là phần cuối về ước lượng story point, chúng ta sẽ xem xét những ưu điểm và nhược điểm của story point để tạo điều kiện cho các nhóm nâng cao chất lượng và những vai trò nhất định không hiểu story point từ góc độ kinh doanh.
    KAUSHAL AMIN
    Chief Technology Officer

    Người dịch: Trà Giang, 20180510

  • Hỏi đáp cùng James Bach (tại KMS Technology Việt Nam, mùa hè 2016)

    Bài gốc được đăng tại: https://www.kms-technology.com/blog/testing/q-a-with-james-bach.html
    Lời người dịch:

    James Bach ghé thăm KMS Technology Việt Nam vào mùa hè năm 2016. Vài tháng sau thì tôi mới gia nhập KMS (tiếc ơi là tiếc), và mãi đến năm 2018 thì tình cờ tôi mới được một tiền bối giới thiệu bài viết này và đề nghị tôi dịch thử. Quả thật là một thử thách cho một cô nàng chẳng biết gì nhiều về thế giới IT vào thời điểm đó, nhưng bài viết này cũng tạo phần nào cảm hứng để tôi tiếp tục dấn thân vào chuyện bếp núc của ngành làm phần mềm. Cảm ơn James Bach và chị Hòa Lê 😀

    Tôi có vinh dự được nói chuyện cùng James Bach vào mùa hè năm 2016 khi ông đến thăm Việt Nam. Ông là cha đẻ của siêu nhận thức (metacognition) về kiểm thử phần mềm và cũng là người thầy đã khai sáng cho nhiều người về lĩnh vực này. Kiến thức của ông bao hàm nhiều lĩnh vực trong kiểm thử phần mềm, từ kiểm thử theo ngữ cảnh (context-driven testing), heuristics (tự nghiệm), sự nghiêp của tester, cho đến cuộc sống bí mật của tester. Nếu bạn có cơ hội được học hỏi từ ông, chắc hẳn bạn sẽ hoàn toàn đồng ý với tôi rằng ông thật tài năng.

    • Ông làm thế nào để đảm bảo chất lượng của một dự án Agile đa vùng (co-located Agile project)?
      James: Bạn sẽ cần giao tiếp có kế hoạch trước rất nhiều, vì giao tiếp không tự nhiên xảy ra khi người ta ở xa nhau. Tôi đề nghị nên điện đàm (conference call) hàng ngày. Những dự án được phân bổ (distributed projects) cần có bộ phận lãnh đạo mạnh mẽ để đưa mọi người lại gần nhau. Tôi cũng đề nghị những người then chốt nên đến thăm nhau định kì, thay vì chỉ dựa dẫm vào giao tiếp qua phương tiện điện tử.
      (“Dự án Agile đa vùng (co-located Agile) có nghĩa là các thành viên nhóm Agile làm việc ở những địa điểm khác nhau hoặc nhiều nhóm Agile đang làm những phần khác nhau của sản phẩm từ những địa điểm khác nhau”).
      Chúng ta đều biết trong môi trường Agile, tốc độ cao và chất lượng cao là ưu tiên hàng đầu. Người ta có khuynh hướng làm không nghỉ, nhưng vì chất được được đo dựa trên những đặc điểm của dự án và nhóm, nên yếu tố con người là nhân tố then chốt để đảm bảo chất lượng dự án. Điều này nghĩa là giao tiếp hiệu quả và tư duy sắc bén có thể ảnh hưởng lên sự thành công của dự án. Ý kiến của James đem đến một số ý tưởng về việc giao tiếp được củng cố trong các dự án.
      Thứ nhất, giao tiếp hiệu quả được quyết định dựa trên ngôn ngữ, sản phẩm, công cụ/công nghệ, và kiến thức về quy trình (process knowledge) của nhóm. Để giao tiếp một cách hiệu quả vượt qua khoảng cách địa lý và múi giờ, các nhóm được phân bổ cần nói cùng một “ngôn ngữ”. Ngôn ngữ ở đây không chỉ nói đến thuật ngữ về mặt ngôn ngữ (speaking terms) như tiếng Anh, Đức hay Pháp, mà còn là thuật ngữ về sản phẩm và những tính năng hay quy trình của công cụ/công nghệ, mà mỗi nhóm sẽ cần ở trình độ hiểu biết tương đương nhau để nói và hiểu lẫn nhau.
      Để đồng bộ, cần làm thêm một số bước. Các nhóm cần hỏi những câu hỏi súc tích và hợp lý, để làm rõ các yêu cầu hay đề nghị và để xem lại các kết quả trước khi phát hành (release). Sự đồng đều về kiến thức giữa các nhóm được phân bổ nên tạo điều kiện cho họ ra quyết định ở các vấn đề nội bộ, thực hiện “nguyên tắc tự quản lý”. Một nhóm không nên bảo nhóm khác cái gì [cần] và/hoặc làm thế nào để hoàn thành một task.
      Thứ hai, áp dụng những công cụ và cách thức giao tiếp thích hợp cũng đóng một vai trò quan trọng đối với việc giao tiếp của nhóm. Có khá nhiều lựa chọn từ giao tiếp trực tiếp (nói chuyện mặt đối mặt hay Video call) cho đến những dạng gián tiếp (Email, Forum, hay Text chat). Có nhiều công cụ phổ biến và hữu dụng để cân nhắc, bao gồm: Skype, Slack, Confluence, GoToMeeting, hay Google Drive, những thứ hỗ trợ giao tiếp và cộng tác một cách dễ dàng giữa các nhóm onshore và offshore. Những cách thức và ứng dụng này có thể giúp thu hẹp khoảng cách múi giờ và địa lý.
      Thêm vào đó, để giao tiếp được hiệu quả hơn, phạm vi công việc cần được sắp xếp một cách hợp lý để hoàn toàn hỗ trợ khách hàng một cách thích hợp và đem lại sự kết nối suôn sẻ. Bạn nên lên lịch cho các chuyến thăm onshore/offshore đều đặn để thiết lập mối quan hệ với các thành viên và phản hồi ngay với các thay đổi trong việc phát hành, các cột mốc quan trọng (milestone), hay công nghệ.
    • Ông định nghĩa code kiểm thử được là như thế nào? Các tiêu chí của ông là gì?
      James: Mọi code đều kiểm thử được. Một số code dễ kiểm thử hơn các code khác. Tính có thể kiểm thử trong code chỉ có nghĩa là nó dễ kiểm thử như thế nào. Code dễ kiểm thử hơn khi nó có thể quan sát (observable) được và có để kiểm soát được. Hãy hỏi về logging ở mức độ chức năng (functional-level logging) và giao diện scriptable (scriptable interface). Đồng thời, code dễ kiểm thử hơn khi chúng đơn giản và có thể phân tích được. Tính có thể phân tích được (decomposability) là khả năng có thể phân tích các thành phần và kiểm thử biệt lập một cách tương đối.
      Cụ thể hơn, có nhiều cách đơn giản để định nghĩa code có thể kiểm thử, chẳng hạn: logic của code (code logic), quy ước đặt tên code (code naming conventions) và cấu trúc/kiến trúc của dự án (project structure/architecture). Code kiểm thử được luôn bao gồm khả năng mở rộng, tính dễ bảo trì, tính có thể sử dụng lại, và tính có thể nâng cấp (ability of extension, easy maintenance, re-usability, and upgradability). Burak Guzel của EnvatoTuts đã liệt kê 15 cách tốt nhất để viết code có thể đọc được.
    • Một tester cần loại kĩ năng nào để có thể tiến vào thế giới DEVOPS?
      James: Tôi không biết nhiều đến thế về thế giới DEVOPS. Nhưng thế giới đó không chào đón tester. Nó chào đón lập trình viên. Do đó kĩ năng được yêu cầu đầu tiên là lập trình. Sau đó bạn cần tìm kiếm những công cụ để hỗ trợ công việc kiểm thử của mình.
      Có một số chiến thuật mà tester cần nắm bắt để tiến vào thế giới DEVOPS:
      · Live site testing: Testers cần phải kiểm thử sản phẩm trong quá trình sản xuất, ngay khi nó được phát hành (release).
      · Thu thập và phân tích phản hồi từ người dùng trong lĩnh vực đó. Phản ứng nhanh với bất kì vấn đề phát sinh nào của người dùng.
      · Ủng hộ tính có thể kiểm thử. Việc xây dựng sản phẩm với tư duy kiểm thử trong đầu là thứ có tính quyết định.
      James đã đưa ra những luận điểm vững chắc. Tester cần nâng cao khả năng hiểu coding, build-production, công cụ, và hệ điều hành như Linux và Windows.
    • Ông làm thế nào để quyết định loại thông tin nào nên đưa vào báo cáo cuối cho khách hàng? Loại thông tin nào thì hữu ích và loại nào thì không?
      James: Không có báo cáo nào là hoàn hảo. Chỉ có báo cáo đem đến giá trị cho khách hàng.
      Dưới đây là một số lời khuyên của tôi:
      · Xây dựng lòng tin (bằng cách trở nên đáng tin).
      · Biết ngữ cảnh của việc kiểm thử của mình (test framing).
      · Không bao giờ dùng một con số không nằm trong ngữ cảnh (ví dụ: no test case counts).
      · Nhấn mạnh những hoạt động test về mặt tổng thể (đặt test vào đúng ngữ cảnh).
      · Nhấn mạnh rủi ro của sản phẩm (đặt bug vào đúng ngữ cảnh).
      Chúng ta có thể xây dựng báo cáo cuối với 3 cấp độ:
    • Cấp độ 1: Thực trạng và sự thật (facts and truth) về bug và những điều quan sát được (observations)
    • Cấp độ 2: Làm thế nào mà bạn nắm được những thực trạng đó? Làm thế nào để kiểm thử những thực trạng đó
    • Cấp độ 3: Làm thế nào mà bạn biết việc kiểm thử có tốt không? Tại sao nó đủ tốt, tại sao không?
    • Ông ước lượng công sức bỏ ra cho việc kiểm thử trong một dự án như thế nào?
      James: Không có một bảng tính thần kì nào có thể cho bạn biết việc kiểm thử sẽ mất bao lâu, nhưng ước lượng tốt bắt đầu từ sự hình dung (visualization). Bạn có thể hình dung ra quy trình kiểm thử trong đầu không? Nhiều tester gặp vấn đề khi làm chuyện đó. Nhưng nếu họ không rõ ràng về cái mà việc kiểm thử sẽ trông ra sao hay cảm thấy như thế nào, họ sẽ không nảy ra được ý nào về việc nó sẽ kéo dài bao lâu.
      Đi kèm với điều này là một danh sách những câu hỏi khác cùng câu trả lời, có thể giúp ước lượng công sức dành cho việc kiểm thử trong một dự án:
      · Thật sự cần bao nhiêu thời gian để kiểm thử?
      · Sẽ tốn bao nhiêu thời gian để hoàn tất việc kiểm thử?
      · Lượng thời gian tối thiểu có thể dùng để kiểm thử là bao nhiêu?
      · Cần kiểm thử bao nhiêu để đảm bảo giải pháp đạt chất lượng cao?
      · Cần bao nhiêu test case?
      · Cần bao nhiêu tester?
      · Yêu cầu những kĩ năng test nào?
      · Việc kiểm thử sẽ tốn bao nhiêu tiền?
      · Ta có cần phải kiểm thử tất cả không?
      Cảm ơn James đã dành thời gian trả lời những câu hỏi của chúng tôi. Kiến thức và kinh nghiệm sâu sắc của ông đã mở rộng kiến thức về kiểm thử của chúng tôi và quả là một cơ hội tuyệt vời khi được học hỏi từ ông.
      Cảm ơn James rất nhiều.
      HOA LE

    Người dịch: Trà Giang, 20180517