Thử làm lập trình viên trong 20 phút

Một buổi làm lập trình viên · 6 bước · khoảng 20 phút · không cần đăng nhập

Bạn là thực tập sinh ở một công ty nhỏ chuyên làm phần mềm sổ điểm cho các trường THPT.

Sáng nay cô Lan, giáo viên chủ nhiệm một lớp 10, gửi thư: phần mềm tính điểm trung bình môn của một học sinh ra 7,2, trong khi cô tính tay được 7,3. Trưởng nhóm giao cho bạn tìm hiểu và sửa.

Bài gồm 6 bước, mỗi bước là một việc lập trình viên làm hằng ngày. Không cần biết lập trình trước; gặp khó thì xem giải thích rồi đi tiếp.

Bước 1 / 6

Đọc yêu cầu

Trước khi đọc code, lập trình viên phải hiểu phần mềm cần tính cái gì. Quy định tính điểm (Thông tư 22/2021/TT-BGDĐT, Điều 9):

Điểm trung bình môn học kỳ = (tổng điểm thường xuyên + 2 × điểm giữa kỳ + 3 × điểm cuối kỳ) ÷ (số điểm thường xuyên + 5)

Nhà trường đặt hàng phần mềm yêu cầu thêm: kết quả làm tròn đến một chữ số thập phân, chữ số bỏ đi từ 5 trở lên thì làm tròn lên.

Học sinh An có 4 điểm thường xuyên là 8, 7, 9, 6; điểm giữa kỳ 7; điểm cuối kỳ 8. Điểm trung bình môn học kỳ của An là bao nhiêu?

Trong bài, điểm từng bài là số nguyên cho gọn; thực tế điểm có thể có một chữ số thập phân.

Xem đáp án và giải thích

Đáp án: 7,6

Đúng. Tổng có hệ số là 30 + 2 × 7 + 3 × 8 = 68, chia cho 4 + 5 = 9 được 7,555..., làm tròn thành 7,6. Hiểu đúng yêu cầu là việc đầu tiên: hiểu sai ở đây thì code viết khéo đến đâu cũng ra số sai.

Trong mô tả nghề (QĐ 34/2020): Nghiên cứu, phân tích và đánh giá các yêu cầu đối với ứng dụng phần mềm và hệ điều hành

Bước 2 / 6

Đọc code

Đây là hàm tính điểm học kỳ trong phần mềm, viết bằng Python. Dòng cuối gọi hàm với 2 điểm thường xuyên 8 và 9, giữa kỳ 6, cuối kỳ 7.

Khi chạy đoạn code này, máy sẽ in ra gì?

def diem_hoc_ky(thuong_xuyen, giua_ky, cuoi_ky):
    tong = sum(thuong_xuyen) + 2 * giua_ky + 3 * cuoi_ky
    so_diem = len(thuong_xuyen) + 5
    return tong / so_diem

print(diem_hoc_ky([8, 9], 6, 7))

Python dùng dấu chấm cho số thập phân: 7.5 nghĩa là 7,5.

Xem đáp án và giải thích

Máy in ra: 7.142857142857143

Đúng. 17 + 2 × 6 + 3 × 7 = 50, chia 7 ra 7,142857... Python in đủ các chữ số vì hàm chưa làm tròn. Đó cũng là chỗ phần mềm còn thiếu so với yêu cầu ở bước 1.

Trong mô tả nghề (QĐ 34/2020): Tiến hành chạy thử các chương trình và ứng dụng phần mềm để xác nhận tạo ra thông tin mong muốn

Bước 3 / 6

Thiết kế từng bước

Một đồng nghiệp viết lại hàm thành nhiều bước nhỏ cho dễ đọc, nhưng các dòng bị xáo trộn.

Bấm lần lượt từng dòng để xếp lại cho đúng thứ tự. Bấm vào dòng đã xếp để gỡ ra.

def diem_hoc_ky(thuong_xuyen, giua_ky, cuoi_ky):
    return tong / so_diem
    tong = tong + 3 * cuoi_ky
    tong = sum(thuong_xuyen)
    so_diem = len(thuong_xuyen) + 5
    tong = tong + 2 * giua_ky
Xem đáp án và giải thích
def diem_hoc_ky(thuong_xuyen, giua_ky, cuoi_ky):
    tong = sum(thuong_xuyen)
    tong = tong + 2 * giua_ky
    tong = tong + 3 * cuoi_ky
    so_diem = len(thuong_xuyen) + 5
    return tong / so_diem

Đúng. Phải có tong trước rồi mới cộng thêm vào tong; hai dòng cộng đổi chỗ cho nhau vẫn đúng; return phải ở cuối vì Python thoát khỏi hàm ngay tại dòng return.

Bước 4 / 6

Sửa lỗi

Quay lại thư của cô Lan. Học sinh có điểm thường xuyên 7, 7, 7; giữa kỳ 8; cuối kỳ 7. Tính tay: (21 + 2 × 8 + 3 × 7) ÷ 8 = 58 ÷ 8 = 7,25, làm tròn thành 7,3. Phần mềm lại ra 7,2.

Đây là hàm phần mềm đang dùng. Bấm vào dòng gây ra lỗi, rồi chọn cách sửa.

def diem_hoc_ky(thuong_xuyen, giua_ky, cuoi_ky):
    tong = sum(thuong_xuyen) + 2 * giua_ky + 3 * cuoi_ky
    so_diem = len(thuong_xuyen) + 5
    return round(tong / so_diem, 1)
Xem đáp án và giải thích

Dòng lỗi: return round(tong / so_diem, 1)

Sửa thành: return int(tong / so_diem * 10 + 0.5) / 10

Đúng. round() của Python không làm tròn kiểu "từ 5 trở lên thì lên": khi giá trị nằm đúng giữa, nó làm tròn về số chẵn gần nhất, nên round(7.25, 1) ra 7.2. Cách nhân 10, cộng 0,5 rồi bỏ phần lẻ cho ra đúng quy tắc của trường. Chúng tôi đã cho máy thử cách này trên toàn bộ 1.947.253 bảng điểm có thể có (2 đến 4 điểm thường xuyên, điểm nguyên): không sai bảng nào.

Trong mô tả nghề (QĐ 34/2020): Sửa phần mềm lỗi, thích ứng với phần cứng mới hoặc nâng cấp giao diện và cải thiện hiệu suất

Bước 5 / 6

Viết code

Cô Lan nhờ thêm một việc: tính điểm trung bình môn cả năm. Quy định:

Điểm trung bình môn cả năm = (điểm học kỳ I + 2 × điểm học kỳ II) ÷ 3

Kết quả cũng làm tròn đến một chữ số thập phân như bước 1. Viết hàm diem_ca_nam(hk1, hk2) trả về điểm cả năm, rồi bấm "Chạy thử" để máy chạy các ca thử.

Xem đáp án và giải thích
def diem_ca_nam(hk1, hk2):
    tb = (hk1 + 2 * hk2) / 3
    return int(tb * 10 + 0.5) / 10
Điểm HK I, HK IIĐiểm cả năm
7,6; 8,38,1
8; 6,57
5; 97,7
9,5; 7,28
10; 1010

Đúng hết các ca thử. Viết code theo yêu cầu rồi tự chạy thử trước khi giao là việc hằng ngày của lập trình viên.

Trong mô tả nghề (QĐ 34/2020): Viết và duy trì mã chương trình theo hướng dẫn, thông số kỹ thuật đạt tiêu chuẩn chất lượng được công nhận

Bước 6 / 6

Kiểm thử

Một lập trình viên khác vừa viết lại hàm tính điểm học kỳ. Cô Lan dạy môn có 3 điểm thường xuyên, đã thử vài bảng điểm và thấy đúng hết. Nhưng code vẫn có lỗi.

Việc của người kiểm thử: nghĩ ra một bảng điểm làm lỗi lộ ra. Nhập bảng điểm rồi bấm "Chạy": máy chạy cả bản đúng lẫn bản có lỗi, nếu hai bản ra khác nhau là bạn đã bắt được lỗi.

Xem đáp án và giải thích

Một bảng điểm làm lộ lỗi: 2 điểm thường xuyên 8, 9; giữa kỳ 7; cuối kỳ 8. Bản đúng ra 7,9, bản có lỗi ra 6,9.

Bắt được lỗi. Bản code viết cứng so_diem = 8, tức là luôn coi như có 3 điểm thường xuyên, nên môn có 2 hoặc 4 điểm bị tính sai. Người kiểm thử giỏi nghĩ tới những trường hợp người viết code không nghĩ tới.

def diem_hoc_ky(thuong_xuyen, giua_ky, cuoi_ky):
    tong = sum(thuong_xuyen) + 2 * giua_ky + 3 * cuoi_ky
    so_diem = 8
    return int(tong / so_diem * 10 + 0.5) / 10

Trong mô tả nghề (QĐ 34/2020): Xây dựng và chỉ đạo các quy trình kiểm tra và xác nhận phần mềm

Kết thúc

Việc bạn vừa thử, trong mô tả của nghề

Phần lớn các bước bạn vừa làm là việc có trong mô tả công việc của nhóm nghề phát triển phần mềm (Danh mục nghề nghiệp Việt Nam, QĐ 34/2020). Một ngày làm việc thật còn có họp nhóm, đọc tài liệu, trao đổi với khách hàng; bài này chỉ cho bạn thử phần việc với code, đối chiếu với các nhiệm vụ trong bảng dưới.

Nhiệm vụ (nguyên văn QĐ 34/2020)Trong bài
Nghiên cứu, phân tích và đánh giá các yêu cầu đối với ứng dụng phần mềm và hệ điều hànhBước 1: Đọc yêu cầu
Tiến hành chạy thử các chương trình và ứng dụng phần mềm để xác nhận tạo ra thông tin mong muốnBước 2: Đọc code
Sửa phần mềm lỗi, thích ứng với phần cứng mới hoặc nâng cấp giao diện và cải thiện hiệu suấtBước 4: Sửa lỗi
Viết và duy trì mã chương trình theo hướng dẫn, thông số kỹ thuật đạt tiêu chuẩn chất lượng được công nhậnBước 5: Viết code
Xây dựng và chỉ đạo các quy trình kiểm tra và xác nhận phần mềmBước 6: Kiểm thử

Các nghề có công việc này

NghềLương thángNguồn
Kỹ sư Backend 9 - 68 tr ITviec · 2025 · Khá tin được · khảo sát người đi làm
Kỹ sư Fullstack 15 - 47,5 tr ITviec · 2025 · Khá tin được · khảo sát người đi làm
Lập trình viên Mobile 11,5 - 54,4 tr ITviec · 2025 · Khá tin được · khảo sát người đi làm

Mỗi nghề một mốc lương tiêu biểu. Các mốc khác và cách đo của từng nguồn xem ở trang nghề.

Đi tiếp từ đây