--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

CNPM (3) - Quản lý dự án phần mềm

-----

Bài 3: Quản lý dự án phần mềm

Ở bài học trước, chúng ta đã tìm hiểu về các mô hình phát triển phần mềm. Đó là những phương thức tổ chức các công đoạn để tạo ra một phần mềm, tùy thuộc vào tính chất và quy mô cụ thể của từng dự án.

Tuy nhiên, trong thực tế, quá trình xây dựng phần mềm không chỉ gói gọn trong nội bộ nhóm phát triển. Một dự án luôn có sự tham gia và tác động từ nhiều bên liên quan như: khách hàng, nhà đầu tư và những người quản lý. Nhiệm vụ của chúng ta không chỉ dừng lại ở việc hoàn thiện các tính năng kỹ thuật, mà còn phải đảm bảo tính hiệu quả về mặt kinh tế và hoàn thành đúng thời hạn quy định.

Để có thể cân bằng được lợi ích của các bên liên quan, đồng thời đảm bảo sản phẩm ra đời đầy đủ chức năng, đúng tiến độ và nằm trong phạm vi ngân sách cho phép, chúng ta cần đến kiến thức chuyên sâu về Quản lý dự án phần mềm.

3.1 Quản lý là gì

Quản lý (nói chung) là sự tác động của chủ thể quản lý lên đối tượng quản lý, nhằm đạt được mục tiêu nhất định, trong điều kiện biến động của môi trường.

Các yếu tố trong quản lý:

- Có chủ thể quản lý (người quản lý)

- Có đối tượng quản lý (người bị quản lý)

- Có mục tiêu cần đạt được

- Có môi trường quản lý

Một số khái niệm khác về quản lý:

- Quản lý là nghệ thuật đạt được mục đích, thông qua nỗ lực của những người khác

- Quản lý là công tác phối hợp có hiệu quả các hoạt động của những cộng sự khác nhau trong cùng một tổ chức

- Quản lý là quá trình lập kế hoạch, tổ chức, chỉ huy, lãnh đạo và kiểm tra các nguồn lực cơ quan, nhằm đạt được mục đích với hiệu quả cao, trong điều kiện môi trường luôn luôn biến động

- Quản lý là một nghệ thuật, một khoa học và là một nghề

Quản lý là một nghệ thuật?

- Sự đa dạng, phong phú, muôn màu muôn vẻ của sự vật, hiện tượng

- Quản lý cơ quan hành chính <> doanh nghiệp <> trường học <> dự án. Quản lý dự án thường có áp lực cao hơn về tiến độ

- Quản lý là sự tác động lên con người, do vậy phải khéo léo, linh hoạt

- Hiệu quả của quản lý phụ thuộc vào kinh nghiệm, cá tính của người quản lý

Quản lý là khoa học?

- Tổng hợp và vận hành các quy luật kinh tế, công nghệ, xã hội

- Vận dụng những thành tựu khoa học, công nghệ trong quản lý: các phương pháp dự báo, tâm lý học, tin học

Quản lý là một nghề?

- Phải học mới làm được

- Phải có năng khiếu nghề nghiệp

3.2 Dự án là gì

Dự án là một nỗ lực có thời hạn nhằm tạo ra một sản phẩm, một dịch vụ, hoặc một kết quả duy nhất.

Một dự án chỉ được triển khai một lần, nếu việc đó được lặp lại thì nó không được coi là dự án nữa.

Bốn yếu tố quan trọng của một dự án:

- Tập thể thực hiện dự án (chất lượng thực hiện)(performance)

- Thời gian dự kiến để thực hiện dự án (time)

- Kết quả dự kiến (scope)

- Kinh phí dự kiến (cost)

Ví dụ:

Dự án “xây dựng một ngôi nhà”

- Tập thể thực hiện dự án: kiến trúc sư, công nhân xây dựng, giám sát

- Thời gian dự kiến để thực hiện dự án: 6 tháng, khởi công ngày N1, dự kiến kết thúc ngày N2

- Kinh phí dự kiến: 1 tỷ đồng

- Kết quả cần đạt được: một ngôi nhà 3 tầng, đầy đủ tiện nghi cho một gia đình sinh sống

Hiểu nôm na, một dự án cần có thời điểm bắt đầu và điểm kết thúc cụ thể, một khoản ngân sách (chi phí), một phạm vi hoặc quy mô được xác định rõ ràng và các yêu cầu cụ thể cần đạt được. Các yếu tố này thường được gọi là PCTS (Performance, Cost, Time, Scope – Chất lượng thực hiện, Chi phí, Thời hạn, Quy mô).

Các thuộc tính của dự án:

- Dự án có mục đích rõ ràng

- Dự án mang tính tạm thời: có ngày bắt đầu và ngày kết thúc

- Dự án có sử dụng các loại tài nguyên khác nhau: con người, phần cứng, phần mềm, công cụ, thiết bị, các thành phần hỗ trợ khác

- Dự án phải có khách hàng và/hoặc nhà tài trợ

- Dự án thường mang tính không chắc chắn, nghĩa là để đạt được các mục tiêu, trong một khoảng thời gian, với một số tiền và nhân lực cho trước là một công việc nhiều thách thức

3.3 Quản lý dự án là gì

Quản lý dự án là hoạt động áp dụng các kiến thức, kĩ năng, công cụ và kỹ thuật để lên kế hoạch hành động, nhằm đạt được các yêu cầu của dự án.

Công tác quản lý dự án được thực hiện thông qua việc áp dụng và phối hợp 5 nhóm quy trình gồm: Khởi xướng, Lập kế hoạch, Triển khai thực hiện, Giám sát và kiểm soát, Kết thúc.

Vai trò của quản lý dự án:

- Kiểm soát tốt hơn các tài nguyên: nhân lực, tài chính, vật liệu

- Cải tiến quan hệ với khách hàng

- Rút ngắn thời gian phát triển

- Giảm chi phí, tăng lợi nhuận

- Tăng chất lượng và độ tin cậy

- Cải tiến năng suất lao động

- Phối hợp nội bộ tốt hơn

- Tinh thần làm việc cao hơn

Một số công cụ và kỹ thuật sử dụng trong quản lý dự án:

- Project charter (tôn chỉ dự án, công bố hay tuyên bố về dự án), scope statement (bản tuyên bố phạm vi), WBS (Work Breakdown Structure – Cấu trúc phân rã công việc)

- Biểu đồ Gantt, biểu đồ mạng, phân tích đường tới hạn

- Ước lượng chi phí và quản trị giá trị đạt được (cost)

Các công việc trong quản lý dự án gồm:

- Nhận diện các yêu cầu

- Cân đối được các nhu cầu, mối quan tâm, mong đợi khác nhau từ các thành phần liên quan (stakeholder) khi lên kế hoạch và thực thi dự án

- Cân đối giữa các ràng buộc có tính cạnh tranh như: phạm vi (scope), chất lượng (quality), lịch biểu (schedule), ngân sách (budget), tài nguyên (resource), rủi ro (risk)

Dự án gồm một nhân viên (dự án cá nhân) thì không nhất thiết phải quản lý dự án.

Nhà quản lý dự án không nên tham gia vào phần việc cụ thể của dự án, nghĩa là vừa quản lý dự án vừa thực hiện dự án, vì khi đó anh ta sẽ bị "giằng xé" giữa trách nhiệm quản lý và trách nhiệm phải hoàn thành phần việc của mình.

Một trong những nguyên nhân phổ biến dẫn đến thất bại của các dự án là do nhà tài trợ yêu cầu nhà quản lý dự án phải hoàn thành công việc trong một thời gian nhất định, với ngân sách được cấp và ở quy mô xác định, trong khi vẫn phải đạt được chất lượng thực hiện cụ thể. Nói cách khác, nhà tài trợ quyết định cả bốn yêu cầu (PCTS) ràng buộc của dự án. Cách tiếp cận này không thể đem lại kết quả.

Nhà quản lý dự án đóng vai trò của một tác nhân (enabler). Công việc của anh ta là khuyến khích đội dự án hoàn thành công việc, giúp đội giải quyết các khó khăn, đáp ứng các nguồn lực khan hiếm mà đội cần và che chắn cho họ khỏi sự cản trở của các thế lực bên ngoài. Anh ta không phải là ông vua của dự án, mà phải là một nhà lãnh đạo trong mọi việc theo đầy đủ ý nghĩa của từ này. Nghĩa là quản lý dự án không đơn giản chỉ là việc lập kế hoạch, xây dựng tiến độ và giám sát công việc.

Khoảng 83% dự án (dự án phần mềm) gặp vấn đề liên quan đến mục tiêu PCTS, và khoảng 30% chi phí để phát triển một sản phẩm sẽ phải sử dụng để sửa sai cho dự án (nghĩa là ba người kỹ sư làm việc cho dự án thì sẽ có hai người làm và một người sửa sai).

Lý do các dự án thường gặp trục trặc bởi tâm lý vội vàng trong quá trình thực hiện dự án. Nghĩa là chỉ cần xác định mục tiêu, là bắt tay vào làm, không đưa ra kế hoạch ngay từ đầu.

Mối liên hệ giữa các yếu tố PCTS:

C = f(PTS)

Nhà tài trợ sẽ quyết định ba yếu tố bất kì, trong khi nhà quản lý dự án nhất định phải quyết định yếu tố còn lại.

Hình dưới đây là mô tả mối quan hệ giữa C, P, T, S:

Vòng đời của một dự án


Có cách tiếp cận đơn giản hơn, vòng đời dự án gồm: giai đoạn xác định nhiệm vụ (có liên quan đến chiến lược), giai đoạn lập kế hoạch triển khai (có liên quan đến chiến thuật và hậu cần), giai đoạn thực thi & kiểm soát, và giai đoạn kết thúc dự án.


Chiến lược là cách tiếp cận chung (game plan), còn được gọi là định hướng hoạt động.

3.4 Các bước quản lý một dự án



3.5 Các quy trình quản lý dự án

Quy trình là cách thức thực hiện một việc gì đó. Như đã đề cập, quản lý dự án được thực hiện thông qua việc áp dụng và phối hợp năm nhóm quy trình gồm: Khởi xướng, Lập kế hoạch, Triển khai thực hiện, Giám sát và kiểm soát, Kết thúc.

Phần sau đây sẽ giải thích tóm tắt năm nhóm quy trình:

Quy trình khởi xướng (hay khởi động) dự án

– Chọn người quản lý dự án

– Xác định các thành phần liên quan (stakeholder) chính

– Đưa ra được bản công bố (tuyên bố, tôn chỉ, project charter) của dự án. Bản công bố này sẽ được sử dụng làm cơ sở cho việc triển khai các công việc của dự án; xác định thẩm quyền, trách nhiệm và nghĩa vụ của đội dự án; thiết lập giới hạn quy mô cho công việc.

Quy trình lập kế hoạch

Hướng dẫn thực hiện dự án. Kết quả:

– Hợp đồng nhóm (nội quy làm việc) (team contract)

– Phát biểu về phạm vi dự án (scope statement)

– Biểu đồ phân rã công việc (WBS)

– Lịch biểu của dự án, dưới dạng biểu đồ Gantt với các tài nguyên sử dụng và các mối quan hệ phụ thuộc

– Danh mục các rủi ro

Quy trình thực thi

– Chiếm nhiều thời gian và tài nguyên nhất để thực thi dự án, sản phẩm của dự án được tạo ra ở giai đoạn này

– Người quản lý dự án cần sử dụng kĩ năng lãnh đạo, để giải quyết các trở ngại trong quá trình thực hiện, nhằm đạt được kết quả

Quy trình giám sát và kiểm soát

– Đảm bảo công việc thực hiện đúng kế hoạch, trong một số trường hợp cần bổ sung, điều chỉnh lại kế hoạch cho phù hợp với tình hình thực tế.

– Biết được công việc đã đạt được đến đâu

– Kiểm soát là việc so sánh tiến triển trên thực tế của dự án với yêu cầu về tiến độ trong kế hoạch, sau đó đưa ra hành động để chỉnh đốn bất kỳ hoạt động nào đang làm cho dự án xa rời mục tiêu đề ra.

Quy trình kết thúc

– Khi sản phẩm đã thỏa mãn được các yêu cầu của khách hàng

– Họp tổng kết, rút kinh nghiệm

3.6 Phân biệt quản lý dự án và thực hiện dự án


Những người làm trong bộ phận “Quản lý dự án” sẽ nhận yêu cầu từ người quản lý cấp cao hơn, lập kế hoạch và giao cho những người làm trong bộ phận “Thực hiện dự án” để thực thi.

Đầu ra của bộ phận “Quản lý dự án” là các bảng kế hoạch, yêu cầu, hướng dẫn. Trong khi đầu ra của bộ phận “Thực hiện dự án” là sản phẩm thật của dự án.

Bộ phận “Quản lý dự án” thường xuyên hỗ trợ, giám sát và kiểm soát để đảm bảo kế hoạch được thực hiện đúng tiến độ.

3.7 Các kiến thức mà người quản lý dự án cần có

– Quản lý tích hợp dự án

Nhằm đảm bảo dự án được lập kế hoạch, thực thi và kiểm soát phù hợp. Trong thực tế, một hoạt động bất kỳ trong dự án luôn cần có sự phối hợp hay tích hợp với các hoạt động khác mới có thể đạt được kết quả như mong muốn.

– Quản lý quy mô dự án

Việc thay đổi quy mô dự án có thể là nguyên nhân làm cho dự án bị thất bại, do vậy cần phải quản lý quy mô dự án. Bao gồm việc xác nhận chính thức nhiệm vụ; soạn thảo một bảng kê về quy mô dự án, trong đó xác định các giới hạn của dự án; chia công việc thành các tác vụ khác nhau để người quản lý dự án có thể quản lý được bằng các kết quả (tạo WBS); thẩm tra lại khối lượng các công việc đã làm xong; kiểm soát những thay đổi về quy mô của dự án.

– Quản lý thời gian dự án (xây dựng bảng tiến độ)

Là việc xây dựng một bảng tiến độ khả thi, sau đó tiến hành kiểm soát để đảm bảo rằng tiến độ này được tuân thủ. Ví dụ, xác định thời gian hoàn thành cho mỗi công việc, xác định trình tự thực hiện các công việc.

– Quản lý chi phí dự án

Liên quan đến việc dự toán chi phí các nguồn lực, gồm nhân lực, trang thiết bị, nguyên liệu, công tác phí và các chi tiết hỗ trợ khác. Sau đó, các nội dung chi phí được cấp ngân sách dự toán và được giám sát chặt chẽ để đảm bảo rằng dự án sẽ chi tiêu trong ngân sách dự kiến đó. Kiểm soát những thay đổi về kinh phí trong quá trình thực hiện.

– Quản lý chất lượng dự án

Để tránh tình trạng đội dự án chấp nhận hạ thấp chất lượng của dự án để đảm bảo hoàn thành đúng thời hạn. Sẽ là vô nghĩa nếu sản phẩm làm đúng thời hạn mà không dùng được.

Vì vậy, cần bảo đảm các sản phẩm hoàn thành phải đáp ứng được yêu cầu về chất lượng. Cụ thể: cần thực hiện xác định các chuẩn mực về chất lượng của mỗi sản phẩm giao nộp; bảo đảm chất lượng của mỗi sản phẩm giao nộp; quản lý về thay đổi chất lượng.

– Quản lý nguồn nhân lực của dự án

Xác định các nhân viên cụ thể cần cho công việc của dự án; xác định vai trò, trách nhiệm của họ và nghiên cứu các mối quan hệ của họ; thu hút họ tham gia vào dự án và sau đó quản lý họ trong quá trình thực hiện dự án. Lưu ý rằng công việc này không có nghĩa là nhà quản lý dự án thực sự quản lý các hoạt động thường nhật của từng nhân viên. Phát triển và bồi dưỡng nguồn nhân lực.

– Quản lý truyền thông dự án

Đảm bảo thông tin được tạo ra, thu thập, lưu trữ và trao đổi trong quá trình thực hiện dự án là kịp thời và chính xác. Thông tin này có thể liên quan đến tình trạng dự án, những kết quả đạt được và những sự kiện có thể tác động đến các bên liên quan hoặc đến các dự án khác.

Xác định nhu cầu thông tin đối với mỗi thành viên dự án: ai cần những thông tin gì, khi nào cần, cách thức và phương tiện trao đổi thông tin.

– Quản lý rủi ro dự án

Là một quy trình có hệ thống nhằm xác định, lượng hóa, phân tích và phản ứng trước các rủi ro của dự án. Công tác này bao gồm việc tối đa hóa khả năng xảy ra và tác động của các sự kiện tích cực; đồng thời giảm thiểu khả năng xảy ra và hậu quả tiêu cực của các sự kiện không có lợi cho mục tiêu của dự án.

Thực hiện trong quá trình lên kế hoạch.

– Quản lý việc mua sắm, trang bị cho dự án

Nhằm đảm bảo có được hàng hóa và dịch vụ có chất lượng, đáp ứng được các yêu cầu sử dụng trong quá trình thực hiện dự án. Cụ thể gồm: lập kế hoạch mua sắm (mua gì, nguồn cung cấp); thực hiện kế hoạch mua sắm (lấy báo giá, mời thầu); lựa chọn nhà cung cấp; quản lý hợp đồng mua sắm.

3.8 Vai trò của nhà quản lý dự án

Do thực tế, có nhiều nhà quản lý dự án bắt tay đảm đương công việc quản lý dự án giống như một bước phát triển tự nhiên từ các vị trí trước đây của họ như là kỹ sư, lập trình viên, nhà khoa học và nhiều loại công việc khác nhau, nên cả họ và sếp của họ đều coi quản lý dự án là một công việc mang tính kỹ thuật. Điều này hoàn toàn không đúng.

Công tác quản lý dự án được hoàn thành thông qua việc áp dụng và phối hợp áp dụng 42 quy trình quản lý dự án được phân thành 5 nhóm: Khởi xướng, Lập kế hoạch, Triển khai thực hiện, Giám sát và kiểm soát, và Kết thúc”

Trách nhiệm chính của nhà quản lý dự án là đảm bảo rằng mọi tác vụ được hoàn thành đúng thời gian, trong ngân sách được cấp, theo quy mô xác định và đạt yêu cầu chất lượng. Nói gọn lại là anh ta phải thấy được rằng dự án đã đạt các mục tiêu PCTS. Vai trò chính của anh ta là quản lý dự án, chứ không phải là làm công việc của một nhân viên!

Nhà quản lý dự án trước tiên phải hiểu nhiệm vụ và tầm nhìn của tổ chức; tiếp theo, họ phải thấy được dự án mà họ đang quản lý thống nhất như thế nào trong tổng thể nhiệm vụ của tổ chức; và rồi họ phải chèo lái con thuyền dự án nhằm đảm bảo dự án sẽ đem lại lợi ích cho tổ chức.

Làm việc với con người.

Kỹ năng nhân văn là quan trọng, sau đó đến kỹ năng quản lý và kỹ năng kĩ thuật.

Thẩm quyền theo hình kim tự tháp ngược. Cụ thể, nhân viên là người làm việc trực tiếp với khách hàng, do vậy, họ mới là yếu tố then chốt. Họ cần được sự hỗ trợ nhiều nhất để có được sự hài lòng từ khách hàng. Nhà quản lý là "nô bộc" cho nhân viên thay vì sếp của họ.

Lãnh đạo là nghệ thuật sai khiến, khiến người khác muốn làm điều mà bạn tin là cần phải làm.

Một số ý quan trọng cần nhớ:

– Nhà quản lý dự án trước tiên phải hiểu nhiệm vụ và tầm nhìn của tổ chức; tiếp theo, họ phải thấy được dự án mà họ đang quản lý thống nhất như thế nào trong tổng thể nhiệm vụ của tổ chức; và rồi họ phải chèo lái con thuyền dự án nhằm đảm bảo dự án sẽ đem lại lợi ích cho tổ chức

– Các kỹ năng đầu tiên mà một nhà quản lý dự án cần có là sự nhân văn

– Một trong những cái bẫy lớn nhất đối với nhà quản lý dự án chính là việc đảm nhiệm công việc chuyên môn bên cạnh nhiệm vụ quản lý dự án bởi khi xảy ra xung đột giữa hai công việc đó, nhà quản lý dự án không thể bỏ bê các khía cạnh của công tác quản lý

– Thay vì đề nghị được trao thêm thẩm quyền, bạn hãy tự mình đưa ra quyết định, triển khai các hành động phù hợp miễn là không vi phạm chính sách, sau đó thông báo cho sếp những việc bạn đã làm

– Công việc của một nhà quản lý dự án là đảm bảo rằng mọi thành viên của đội dự án nhận được mọi nguồn lực mà họ cần để thực hiện công việc của họ một cách tốt nhất

– Một nhà quản lý dự án phải thực hiện có hiệu quả cả hai nhóm kỹ năng lãnh đạo và quản lý

– Nhà lãnh đạo có thể  khiến mọi người làm việc mà không cần giám sát họ chặt chẽ.

3.9 Bài tập và câu hỏi

Bài tập 3a. Dự án của cá nhân

Yêu cầu:

­– Mỗi cá nhân viết nội dung cho mỗi giai đoạn của dự án (theo mẫu Vòng đời của dự án) 

– Viết trên Microsoft Word

– Mỗi bạn tạo một thư mục của cá nhân trên Google drive để chứa các kết quả làm việc của mình

– Chia sẻ thư mục của cá nhân cho giáo viên (khi có yêu cầu)

Bài tập 3b. Viết tôn chỉ dự án.

– Dịch bản tôn chỉ dự án mẫu ra tiếng Việt (Project_Charter_Sample.docx)

– Tham khảo bản dịch, viết bản tôn chỉ dự án của cá nhân/nhóm

– Chép kết quả lên thư mục dự án của nhóm trên Google drive

Bài tập 3c. Tự đọc thêm, cài đặt và trải nghiệm với Jira, Trello.

Câu hỏi 3.1 Về định nghĩa và các yếu tố của quản lý. Phát biểu nào sau đây là không đúng?

A. Quản lý là sự tác động của đối tượng quản lý lên chủ thể quản lý nhằm thay đổi mục tiêu ban đầu của tổ chức. 

B. Một trong những yếu tố bắt buộc của quản lý là phải có mục tiêu nhất định cần đạt được. 

C. Hoạt động quản lý diễn ra trong điều kiện môi trường luôn có những biến động, đòi hỏi sự thích nghi của chủ thể. 

D. Các yếu tố cơ bản trong quản lý bao gồm: chủ thể quản lý, đối tượng quản lý, mục tiêu và môi trường quản lý.

Câu hỏi 3.2 Về khái niệm và các yếu tố của dự án, phát biểu nào sau đây là không đúng?

A. Dự án là một nỗ lực có thời hạn nhằm tạo ra một sản phẩm, dịch vụ hoặc kết quả duy nhất.

B. Một dự án có thể được lặp đi lặp lại nhiều lần trong quá trình vận hành để tối ưu hóa kết quả.

C. Bốn yếu tố quan trọng để đánh giá một dự án bao gồm: chất lượng thực hiện, thời gian, kết quả và kinh phí. 

D. Khi một công việc được lặp lại tương tự như trước đó, nó không còn được coi là một dự án nữa.

Câu hỏi 3.3: Về khái niệm và quy trình Quản lý dự án, phát biểu nào sau đây là không đúng?

A. Quản lý dự án là hoạt động áp dụng các kiến thức, kĩ năng, công cụ và kỹ thuật để lên kế hoạch hành động, nhằm đạt được các yêu cầu của dự án.

B. Quản lý dự án chỉ tập trung vào việc triển khai thực hiện mà không cần thiết phải lập kế hoạch hành động.

C. Quản lý dự án là việc áp dụng các kiến thức, kĩ năng, công cụ và kỹ thuật để đạt được các yêu cầu của dự án.

D. Năm nhóm quy trình quản lý dự án bao gồm: Khởi xướng, Lập kế hoạch, Triển khai, Giám sát và kiểm soát, Kết thúc.

-----
Bài sau: 

Python (12) - Xử lý trên chuỗi (tiếp)

Bài trước: Python (11) - Một số xử lý trên chuỗi
-----

12. Xử lý trên chuỗi (tiếp)

Ở bài trước, bạn đã thực hiện một số thao tác trên chuỗi, như kiểm tra chuỗi con có trong một chuỗi hay không bằng từ khóa in, not in; cắt chuỗi. 

Phần này, chúng ta sẽ thực hiện thêm một số thao tác trên chuỗi.

12.1 Hiệu chỉnh chuỗi

Python cung cấp một tập hợp các phương thức (methods) có sẵn giúp bạn xử lý chuỗi một cách dễ dàng.

Chuyển thành chữ in hoa (upper case)

Phương thức upper() trả về chuỗi với tất cả các ký tự được chuyển sang chữ in hoa.

Ví dụ:

a = "Van Teo"

print(a.upper()) 

# Kết quả: "VAN TEO"


Chuyển thành chữ thường (lower case)

Phương thức lower() trả về chuỗi với tất cả các ký tự được chuyển sang chữ thường.

Ví dụ:

a = "Van Teo"

print(a.lower()) 

# Kết quả: "van teo"


Xóa khoảng trắng (remove whitespace)

Khoảng trắng dư thừa là các dấu cách ở trước và/hoặc sau nội dung văn bản. Phương thức strip() sẽ loại bỏ toàn bộ khoảng trắng dư thừa ở hai đầu chuỗi.

Ví dụ:

a = " Hello, World! "

print(a.strip()) 

# Kết quả: "Hello, World!"


Thay thế chuỗi (replace string)

Phương thức replace() thay thế một chuỗi con này bằng một chuỗi con khác.

Ví dụ:

a = "Hello, World!"

print(a.replace("H", "J")) 

# Kết quả: "Jello, World!"


Tách chuỗi (split string)

Phương thức split() trả về một danh sách (list), trong đó các phần tử của danh sách là các chuỗi con được tách ra dựa trên ký tự phân cách (separator) được chỉ định.

Ví dụ:

a = "Hello, World!"

print(a.split(",")) 

# Kết quả: ['Hello', ' World!']


12.2 Nối chuỗi (concatenate strings)

Để nối hoặc kết hợp hai hay nhiều chuỗi lại với nhau, bạn có thể sử dụng toán tử +.

Ví dụ

Gộp biến a và biến b thành biến c:

a = "Hello"

b = "World"

c = a + b

print(c) 

# Kết quả: "HelloWorld"


Ví dụ

Để thêm khoảng cách giữa hai từ, hãy cộng thêm một chuỗi trống " ":

c = a + " " + b

print(c) 

# Kết quả: "Hello World"


12.3 Định dạng chuỗi (format strings)

Như đã học ở phần trước, chúng ta không thể nối trực tiếp một chuỗi với một số bằng toán tử + như thế này:

age = 15

txt = "Toi la Teo. Tuoi: " + age 

# Sẽ gây ra lỗi


Để sửa lỗi trên, chúng ta sử dụng định dạng chuỗi của Python (f-strings). Bạn chỉ cần thêm chữ f trước dấu ngoặc kép và đặt các biến vào trong dấu ngoặc nhọn {}.

Ví dụ

age = 15

txt = f"Toi la Teo. Tuoi: {age}"

print(txt)


Bộ giữ chỗ (placeholder) và Bộ sửa đổi (modifier)

Ngoài ra, bên trong dấu {}, bạn có thể chứa biến, phép tính, hàm và các bộ sửa đổi định dạng.

Ví dụ

Sử dụng bộ sửa đổi: .2f để lấy 2 chữ số thập phân:

price = 59

txt = f"The price is {price:.2f} dollars"

print(txt) 

# Kết quả: "The price is 59.00 dollars"


Ví dụ

Thực hiện phép tính toán ngay trong placeholder:

txt = f"The price is {20 * 59} dollars"

print(txt) 

# Kết quả: "The price is 1180 dollars"

12.4 Dấu xuyệt ngược

Để chèn những ký tự "đặc biệt" vào chuỗi (ví dụ: dấu ngoặc kép bên trong một chuỗi cũng được bao bởi dấu ngoặc kép), chúng ta sử dụng dấu xuyệt ngược (\).

Ví dụ 

Cách dùng sai (gây lỗi):

txt = "Hoc la mot cach "dau tu" cho tuong lai!"


Cách dùng đúng với \":

txt = "Hoc la mot cach \"dau tu\" cho tuong lai!"

print(txt)

Trong lập trình một số ký tự đặc biệt, hay ký tự chức năng (tiếng Anh là escape characters), nghĩa là khi gặp các ký tự này, Python sẽ thực hiện một chức năng nào đó.

Ví dụ:

- \': Dấu nháy đơn

- \": Dấu nháy kép

- \\: Dấu xuyệt ngược

- \n: Tạo dòng mới (xuống dòng)

- \t: Dấu Tab (khoảng cách rộng)

- \b: Xóa ngược (backspace)

Ví dụ

txt = "Hoc \n la mot cach \ndau tu \ncho tuong lai!"

print(txt)

#Hoc 

# la mot cach 

#dau tu 

#cho tuong lai!

12.5 Danh sách các phương thức xử lý chuỗi

Python cung cấp rất nhiều phương thức (built-in methods) để bạn có thể sử dụng để xử lý chuỗi.

Lưu ý: Tất cả các phương thức xử lý chuỗi đều trả về giá trị mới. Chúng không làm thay đổi chuỗi gốc ban đầu.

Các phương thức:

Phương thức

Mô tả

capitalize()

Viết hoa chữ cái đầu tiên của chuỗi.

casefold()

Chuyển đổi chuỗi thành chữ thường (mạnh hơn lower(), dùng để so khớp không phân biệt hoa thường).

center()

Trả về một chuỗi được căn giữa.

count()

Trả về số lần một giá trị cụ thể xuất hiện trong chuỗi.

encode()

Trả về một phiên bản đã được mã hóa của chuỗi.

endswith()

Trả về True nếu chuỗi kết thúc bằng giá trị cụ thể.

expandtabs()

Thiết lập kích thước tab của chuỗi.

find()

Tìm kiếm một giá trị cụ thể và trả về vị trí (chỉ số) nơi nó được tìm thấy.

format()

Định dạng các giá trị cụ thể trong một chuỗi.

format_map()

Định dạng các giá trị cụ thể trong một chuỗi (sử dụng một từ điển).

index()

Tìm kiếm một giá trị cụ thể và trả về vị trí tìm thấy (gây lỗi nếu không tìm thấy).

isalnum()

Trả về True nếu tất cả các ký tự trong chuỗi là chữ cái hoặc chữ số.

isalpha()

Trả về True nếu tất cả các ký tự trong chuỗi đều nằm trong bảng chữ cái.

isascii()

Trả về True nếu tất cả các ký tự trong chuỗi là ký tự ASCII.

isdecimal()

Trả về True nếu tất cả các ký tự trong chuỗi là số thập phân.

isdigit()

Trả về True nếu tất cả các ký tự trong chuỗi là chữ số.

isidentifier()

Trả về True nếu chuỗi là một định danh hợp lệ (tên biến, hàm...).

islower()

Trả về True nếu tất cả các ký tự trong chuỗi đều là chữ thường.

isnumeric()

Trả về True nếu tất cả các ký tự trong chuỗi là ký số.

isprintable()

Trả về True nếu tất cả các ký tự trong chuỗi có thể in ra được.

isspace()

Trả về True nếu tất cả các ký tự trong chuỗi là khoảng trắng.

istitle()

Trả về True nếu chuỗi tuân thủ quy tắc của một tiêu đề (mỗi từ đều viết hoa chữ đầu).

isupper()

Trả về True nếu tất cả các ký tự trong chuỗi là chữ in hoa.

join()

Nối các phần tử của một đối tượng có thể lặp (như list) vào cuối chuỗi.

ljust()

Trả về phiên bản chuỗi được căn lề trái.

lower()

Chuyển đổi chuỗi thành chữ thường.

lstrip()

Trả về phiên bản chuỗi đã được cắt bỏ khoảng trắng bên trái.

maketrans()

Trả về một bản dịch được sử dụng trong các phép chuyển đổi.

partition()

Trả về một tuple trong đó chuỗi được chia thành ba phần.

replace()

Trả về một chuỗi trong đó một giá trị cụ thể được thay thế bằng một giá trị khác.

rfind()

Tìm kiếm một giá trị cụ thể và trả về vị trí cuối cùng tìm thấy giá trị đó.

rindex()

Tìm kiếm một giá trị cụ thể và trả về vị trí cuối cùng tìm thấy (gây lỗi nếu không có).

rjust()

Trả về phiên bản chuỗi được căn lề phải.

rpartition()

Trả về một tuple trong đó chuỗi được chia thành ba phần (tính từ bên phải).

rsplit()

Tách chuỗi tại ký tự phân cách được chỉ định và trả về một danh sách (tính từ bên phải).

rstrip()

Trả về phiên bản chuỗi đã được cắt bỏ khoảng trắng bên phải.

split()

Tách chuỗi tại ký tự phân cách được chỉ định và trả về một danh sách.

splitlines()

Tách chuỗi tại các vị trí ngắt dòng và trả về một danh sách.

startswith()

Trả về True nếu chuỗi bắt đầu bằng giá trị cụ thể.

strip()

Trả về phiên bản chuỗi đã được cắt bỏ khoảng trắng ở cả hai đầu.

swapcase()

Đảo ngược kiểu chữ: chữ thường thành chữ hoa và ngược lại.

title()

Chuyển đổi chữ cái đầu tiên của mỗi từ thành chữ hoa.

translate()

Trả về một chuỗi đã được dịch (thay đổi ký tự theo bảng dịch).

upper()

Chuyển đổi chuỗi thành chữ in hoa.

zfill()

Thêm các số 0 vào đầu chuỗi cho đến khi đạt được độ dài chỉ định.


12.6 Bài tập và câu hỏi

Bài tập 12a. Viết chương trình nhập vào s1, s2; tạo s3 bằng cách chèn s2 vào giữa s1.

Đầu vào:

Nhap chuoi s1: abcd

Nhap chuoi s2: xyz


Kết quả mong đợi:

Chuoi ket qua s3: abxyzcd

Bài tập 12b. Định dạng mã số học sinh

Yêu cầu: Viết chương trình cho người dùng nhập vào mã số viết tắt (chỉ phần số) và tên trường (viết thường). Chương trình sẽ tự động chuyển tên trường thành chữ hoa và thêm các số 0 vào trước mã số để đủ 6 ký tự, sau đó nối chúng lại.

- Gợi ý: Sử dụng upper()zfill()

Đầu vào:

Nhap ma so: 123

Nhap ten truong: btx

Kết quả mong đợi:

Ma hoc sinh: BTX000123

Bài tập 12c. Đếm và thay thế từ khóa

Yêu cầu: Viết chương trình cho người dùng nhập vào một đoạn văn bản ngắn và một từ khóa cần tìm. Hãy cho biết từ khóa đó xuất hiện bao nhiêu lần và in ra đoạn văn bản mới sau khi đã thay thế từ khóa đó bằng dấu sao ***.

- Gợi ý: Sử dụng count() và replace()

Đầu vào:

Nhap doan van: hoc lap trinh python rat vui, hoc python giup tu duy tot

Nhap tu khoa: python

Kết quả mong đợi:

So lan xuat hien: 2

Van ban moi: hoc lap trinh *** rat vui, hoc *** giup tu duy tot

Bài tập 12d. Chuẩn hóa tiêu đề sách

Yêu cầu: Khi nhập liệu, người dùng thường gõ thừa khoảng trắng ở hai đầu và viết hoa lộn xộn. Viết chương trình nhập vào một tên sách, thực hiện xóa khoảng trắng dư thừa ở hai đầu và chuyển đổi chuỗi đó về dạng tiêu đề (viết hoa chữ cái đầu mỗi từ).

- Gợi ý: Sử dụng strip() và title().

Đầu vào:

Nhap ten sach:    lap trinh python can ban

Kết quả mong đợi:

Ten sach chuan hoa: Lap Trinh Python Can Ban

Câu hỏi 12.1 Cú pháp nào đúng để in chuỗi ở dạng in hoa?

A. 'Welcome'.upper()

B. 'Welcome'.toUpper()

C. 'Welcome'.toUpperCase()

D. 'Welcome'.setUpper()

Câu hỏi 12.2 Điền vào chỗ trống để loại bỏ khoảng trắng dư thừa ở hai đầu:

txt = " Hello World "

x = _______

A. txt.split()

B. txt.strip()

C. txt.trim()

D. trim(txt)

Câu hỏi 12.3 Các biến x và y đang chứa dữ liệu kiểu chuỗi. Cú pháp nào để nối biến x và y thành z?

A. z = x, y

B. z = x = y

C. z = x + y

D. z = x * y

12.4 Kết quả của đoạn mã sau là gì?

x = 'Welcome', y = 'Coders', print(x + y)

A. Welcome Coders

B. WelcomeCoders

C. Welcome (xuống dòng) Coders

D. Welcome+Coders

12.5 Nếu x = 9, cú pháp nào in ra: The price is 9.00 dollars?

A. print(f'The price is {x:.2f} dollars')

B. print(f'The price is {x:2} dollars')

C. print(f'The price is {x:format(2)} dollars')

D. print("The price is {x:.2f} dollars")

12. String Operations (Continued)

In the previous lesson, you performed several operations on strings, such as checking if a substring exists within a string using the in and not in keywords, as well as string slicing.

In this section, we will explore additional string manipulation techniques.

12.1 Modifying Strings

Python provides a set of built-in methods that allow you to handle strings easily.

Upper case

The upper() method returns the string with all characters converted to upper case.

Example:

a = "Van Teo"

print(a.upper()) 

# Output: "VAN TEO"


Lower case

The lower() method returns the string with all characters converted to lower case.

Example:

a = "Van Teo"

print(a.lower()) 

# Output: "van teo"


Remove whitespace

Extra whitespace refers to spaces before and/or after the actual text. The strip() method removes any leading and trailing whitespace from the string.

Example:

a = " Hello, World! "

print(a.strip()) 

# Output: "Hello, World!"


Replace string

The replace() method replaces a specified substring with another substring.

Example:

a = "Hello, World!"

print(a.replace("H", "J")) 

# Output: "Jello, World!"


Split string

The split() method returns a list where the elements are substrings separated by a specified separator.

Example:

a = "Hello, World!"

print(a.split(",")) 

# Output: ['Hello', ' World!']


12.2 Concatenate Strings

To join or combine two or more strings, you can use the + operator.

Example 

Combine variable a and variable b into variable c:

a = "Hello"

b = "World"

c = a + b

print(c) 

# Output: "HelloWorld"


Example

To add a space between them, add a whitespace string " ":

c = a + " " + b

print(c) 

# Output: "Hello World"


12.3 Format Strings

As learned previously, we cannot directly concatenate a string with a number using the + operator like this:

age = 15

txt = "I am Teo. Age: " + age 

# This will cause an Error


To fix this, we use Python's f-strings. Simply add the letter f before the quotation marks and place variables inside curly brackets {}.

Example:

age = 15

txt = f"I am Teo. Age: {age}"

print(txt)


Placeholders and modifiers

Additionally, inside the {} (placeholder), you can include variables, mathematical operations, functions, and formatting modifiers.

Example

Using the modifier :.2f to display 2 decimal places:

price = 59

txt = f"The price is {price:.2f} dollars"

print(txt) 

# Output: "The price is 59.00 dollars"


Example 

Performing a calculation directly inside the placeholder:

txt = f"The price is {20 * 59} dollars"

print(txt) 

# Output: "The price is 1180 dollars"


12.4 Backslashes (Escape Characters)

To insert "special" characters into a string (for example, double quotes inside a string that is already enclosed in double quotes), we use the backslash \.

Example

Incorrect usage (causes an error):

txt = "Learning is an "investment" for the future!"


Example

Correct usage with \":

txt = "Learning is an \"investment\" for the future!"

print(txt)


In programming, these are called escape characters. When Python encounters them, it performs a specific function.

Common escape characters:

- \': Single Quote

- \": Double Quote

- \\: Backslash

- \n: New Line (Moves text to the next line)

- \t: Tab (Creates a wide space)

- \b: Backspace

Example

txt = "Learning \n is an \ninvestment \nfor the future!"

print(txt)

# Output:

# Learning 

#  is an 

# investment 

# for the future!


12.5 List of String Methods

Python provides many built-in methods for string manipulation.

Note: All string methods return a new value. They do not modify the original string (Strings are immutable).

Method

Description

capitalize()

Converts the first character to upper case.

casefold()

Converts string into lower case (aggressive, used for caseless matching).

center()

Returns a centered string.

count()

Returns the number of times a specified value occurs in a string.

encode()

Returns an encoded version of the string.

endswith()

Returns True if the string ends with the specified value.

expandtabs()

Sets the tab size of the string.

find()

Searches the string for a specified value and returns the position (index) where it was found.

format()

Formats specified values in a string.

format_map()

Formats specified values in a string using a mapping (dictionary).

index()

Searches the string for a specified value and returns the position (raises an error if not found).

isalnum()

Returns True if all characters in the string are alphanumeric.

isalpha()

Returns True if all characters in the string are in the alphabet.

isascii()

Returns True if all characters in the string are ASCII characters.

isdecimal()

Returns True if all characters in the string are decimals.

isdigit()

Returns True if all characters in the string are digits.

isidentifier()

Returns True if the string is a valid identifier (variable name, function name, etc.).

islower()

Returns True if all characters in the string are lower case.

isnumeric()

Returns True if all characters in the string are numeric.

isprintable()

Returns True if all characters in the string are printable.

isspace()

Returns True if all characters in the string are whitespaces.

istitle()

Returns True if the string follows the rules of a title (first letter of each word is capitalized).

isupper()

Returns True if all characters in the string are upper case.

join()

Joins the elements of an iterable (e.g., list) to the end of the string.

ljust()

Returns a left justified version of the string.

lower()

Converts a string into lower case.

lstrip()

Returns a left trim version of the string.

maketrans()

Returns a translation table to be used in translations.

partition()

Returns a tuple where the string is parted into three parts.

replace()

Returns a string where a specified value is replaced with a new value.

rfind()

Searches the string for a specified value and returns the last position of where it was found.

rindex()

Searches the string for a specified value and returns the last position of where it was found (raises error if not found).

rjust()

Returns a right justified version of the string.

rpartition()

Returns a tuple where the string is parted into three parts (starting from the right).

rsplit()

Splits the string at the specified separator and returns a list (starting from the right).

rstrip()

Returns a right trim version of the string.

split()

Splits the string at the specified separator and returns a list.

splitlines()

Splits the string at line breaks and returns a list.

startswith()

Returns True if the string starts with the specified value.

strip()

Returns a trimmed version of the string (both ends).

swapcase()

Swaps cases: lower case becomes upper case and vice versa.

title()

Converts the first character of each word to upper case.

translate()

Returns a translated string based on a mapping table.

upper()

Converts a string into upper case.

zfill()

Fills the string with a specified number of 0 values at the beginning.


12.6 Exercises and Questions

Exercise 12a. Write a program to input s1 and s2; create s3 by inserting s2 into the middle of s1.

Input: 

s1: abcd

s2: xyz

Expected Output:

abxyzcd

Exercise 12b. Student ID Formatting

Requirement: Write a program where the user enters a numeric ID and a school name (in lower case). The program should convert the school name to upper case and pad the ID with leading zeros to reach 6 characters, then concatenate them.

Input: 

ID: 123 

School: btx

Expected Output: 

BTX000123

Exercise 12c. Count and Replace Keywords

Requirement: Write a program to input a short text and a keyword. Display how many times the keyword appears and print the new text after replacing the keyword with three asterisks ***.

Input: 

Text: learning python is fun, python helps logic, 

Keyword: python

Expected Output: 

Count: 2

New Text: learning *** is fun, *** helps logic

Exercise 12d. Book Title Normalization

Requirement: Users often enter extra spaces and inconsistent casing. Write a program to input a book title, remove leading/trailing spaces, and convert it to Title Case.

Input: 

basic python programming

Expected Output: 

Basic Python Programming

Question 12.1 Which syntax correctly prints a string in upper case?

A. 'Welcome'.upper()

B. 'Welcome'.toUpper()

C. 'Welcome'.toUpperCase()

D. 'Welcome'.setUpper()

Question 12.2 Fill in the blank to remove leading and trailing whitespace:

x = txt._______

A. split()

B. strip()

C. trim()

D. trim(txt)

Question 12.3 Which syntax concatenates string variables x and y into z?

A. z = x, y

B. z = x = y

C. z = x + y

D. z = x * y

Question 12.4 What is the result of x = 'Welcome', y = 'Coders', print(x + y)?

A. Welcome Coders

B. WelcomeCoders

C. Welcome\nCoders

D. Welcome+Coders

Question 12.5 If x = 9, which syntax prints: The price is 9.00 dollars?

A. print(f'The price is {x:.2f} dollars')

B. print(f'The price is {x:2} dollars')

C. print(f'The price is {x:format(2)} dollars')

D. print("The price is {x:.2f} dollars")

-----
Bài sau: