Jira là Turing-Complete: Chứng minh khả năng tính toán của công cụ quản lý dự án
Bài viết này chứng minh rằng Jira, công cụ quản lý dự án phổ biến của Atlassian, là Turing-Complete thông qua việc xây dựng một Máy Minsky sử dụng tính năng Automation. Bằng cách sử dụng các vấn đề (issues) làm bộ đếm và trạng thái workflow làm lệnh, Jira có thể thực hiện các phép tính phức tạp tương tự như một ngôn ngữ lập trình thực thụ.

Trong giới kỹ thuật phần mềm, luôn tồn tại một câu chuyện dân gian cho rằng Jira — công cụ theo dõi dự án nổi tiếng của Atlassian — là Turing-Complete. Điều này có nghĩa là, về mặt lý thuyết, Jira có khả năng thực hiện bất kỳ tính toán nào mà một máy tính hiện đại có thể làm được. Tuy nhiên, các tuyên bố trước đây thường chỉ ra một cách mơ hồ về các tính năng tự động hóa mà không đưa ra một bằng chứng cụ thể. Gần đây, một bài viết kỹ thuật đã cung cấp lời giải đáp đầy đủ, bao gồm cả hướng dẫn thiết lập và dấu vết thực thi.
Quy tắc Automation trong Jira
Máy Minsky và sự ánh xạ trong Jira
Để chứng minh tính Turing-Complete, tác giả đã xây dựng một Máy Minsky (Minsky Machine) bên trong Atlassian Automation. Máy Minsky là một mô hình tính toán chỉ cần hai bộ đếm không giới hạn và một tập hợp hữu hạn các lệnh có nhãn. Minsky đã chứng minh mô hình này là Turing-Complete vào năm 1967. Do đó, việc thể hiện mô hình này trong ngôn ngữ tự động hóa của Jira sẽ thiết lập được sự tương đương về mặt tính toán.
Cách thức ánh xạ mô hình này vào Jira rất thú vị:
- Trạng thái của Epic mã hóa lệnh hiện tại.
- Các quy tắc Automation kiểm tra số lượng các vấn đề liên kết (linked-issue counts) để quyết định trạng thái tiếp theo.
- Các thao tác tăng (INC) và giảm (DEC) được triển khai dưới dạng tạo và xóa vấn đề trên loại liên kết phù hợp.
- Phân nhánh có điều kiện được thực hiện thông qua các quy tắc điều kiện bằng ngôn ngữ truy vấn Jira (JQL).
Thực thi phép cộng và dãy Fibonacci
Một ví dụ tối thiểu về việc triển khai này là sử dụng một Epic, năm vấn đề liên kết và một quy tắc Automation cho mỗi trạng thái lệnh. Bằng cách tạo một Jira Workflow với các trạng thái BACKLOG, TODO, DEV và PROD, và cho phép các quy tắc kích hoạt lẫn nhau, hệ thống có thể thực hiện phép cộng.
Cụ thể, liên kết 2 Bugs (A=2) và 3 Tasks (B=3) vào Epic. Khi chuyển Epic sang trạng thái TODO, quy trình tự động bắt đầu. Sau năm lần chuyển trạng thái, Epic kết thúc ở trạng thái PROD với 0 Bugs và 5 Tasks liên kết. Chúng ta vừa thực hiện phép tính 2 + 3 = 5 hoàn toàn bằng cơ chế của Jira.
Minh họa luồng hoạt động
Thậm chí, ngôn ngữ Automation của Jira còn có thể đơn giản hóa các thao tác Minsky thông qua tính năng "Convert Issue Type" (thay đổi loại vấn đề ngay lập tức từ Bug sang Story, v.v.). Điều này giúp rút gọn bảng điều khiển (dispatch table) và thực hiện các chương trình phức tạp hơn như dãy số Fibonacci.
Trong ví dụ về dãy Fibonacci, máy sử dụng ba thanh ghi (A=Bug, B=Task, C=Story) và ba trạng thái lệnh. Với trạng thái ban đầu A=1, B=1, C=0, chuỗi số 1, 1, 2, 3, 5, 8, 13... sẽ xuất hiện trong số lượng Task (B). Máy sẽ chạy liên tục cho đến khi đạt giới hạn chiều sâu chuỗi (chain-depth cap) của Jira Cloud, lúc này người dùng cần kích hoạt lại Epic để tiếp tục.
Kết luận
Việc giảm thiểu (reduction) trên là đủ để chứng minh Jira là Turing-Complete. Mặc dù mọi máy tính vật lý đều hữu hạn và Jira Cloud có các hạn ngạch (quota) giới hạn, nhưng theo quy ước chuẩn của khoa học máy tính, điều này không phủ nhận cấu trúc tính toán của công cụ.
Vì vậy, nếu bạn từng cảm thấy các quy trình Automation phức tạp trong Jira trông giống như những chương trình phần mềm thực thụ, thì đó là vì chúng thực sự là như vậy. Jira không chỉ là công cụ quản lý tác vụ, mà còn là một môi trường tính toán đầy đủ sức mạnh.


