Ma spaghetti (Spaghetti code) la mot cum tu mang tinh khinh miet cho ma nguon co tinh phi cau truc va kho bao tri. Ma spaghetti co the đuoc gay ra boi vai yeu to, chang han nhu do ban yeu cau du an co tinh khong on đinh, thieu quy tac phong cach lap trinh, va do nguoi viet khong đu nang luc hoac kinh nghiem.


Y nghia Ma ma dung qua muc cac cau lenh GOTO hon la cac cau tao lap trinh co cau truc – ket qua sinh ra la cac chuong trinh lon xon va khong the bao tri đuoc – thi hay đuoc goi la ma spaghetti. Ma nhu vay co cau truc đieu khien phuc tap va roi ram, ket qua sinh ra la mot luong chuong trinh ma ve mat khai niem thi giong nhu mot bat mi spaghetti – xoan va roi. Trong mot xuat ban nam 1980 cua Cuc Tieu chuan Quoc gia Hoa Ky, cum tu chuong trinh spaghetti đuoc su dung đe mo ta cac chuong trinh truoc đay co "cac tep bi phan manh va rai rac". Ma Spaghetti cung co the đuoc dung đe mo ta mot phan mo thuc trong đo ma huong đoi tuong đuoc viet theo phong cach thu tuc, chang han nhu bang cach tao cac lop co cac phuong thuc qua dai va bua bai, hoac vut bo đi cac khai niem huong đoi tuong nhu đa hinh. Su hien dien cua hinh thuc ma spaghetti nay co the lam giam đang ke tinh de linh hoi cua mot he thong.


Lich su Nguoi ta khong ro rang tu khi nao ma cum tu ma spaghetti đuoc su dung pho bien; tuy nhien, mot so tai lieu tham khao xuat hien vao nam 1977 bao gom Macaroni is Better Than Spaghetti boi Steele đuoc xuat ban trong 'Bien ban luu' cua hoi nghi chuyen đe nam 1977 ve tri nang nhan tao va ngon ngu lap trinh. Trong cuon sach nam 1978 A primer on disciplined programming using PL/I, PL/CS, and PL/CT, Richard Conway đa su dung thuat ngu nay đe mo ta cac kieu chuong trinh rang "co cung cau truc sach co tinh logic giong nhu mot đia mi spaghetti", mot cum tu đuoc lap đi lap lai trong cuon sach nam 1979 An Introduction to Programming ma ong la đong tac gia voi David Gries. Trong bai bao khoa hoc nam 1988 A spiral model of software development and enhancement, thuat ngu nay đuoc su dung đe mo ta su thuc hanh truoc đay cua mo hinh ma va sua loi (code and fix model) – noi ve su thieu viec ke hoach cua no, va cuoi cung đa dan đen su phat trien cua mo hinh thac nuoc. Trong cuon sach nam 1979 Structured programming for the COBOL programmer, tac gia Paul Noll su dung cac cum tu ma spaghetti va to cua chuot lam cac tu đong nghia đe mo ta ma nguon co cau truc kem.
Trong hoi nghi Ada – Europe '93, ngon ngu Ada đa đuoc mo ta la no ep lap trinh vien phai "tao ra ma code de hieu, thay vi ma spaghetti", vi co che lan truyen ngoai le (exception) mang tinh han che cua no.
Vao nam 1981 trong mot bai viet biem nhai cac ngon ngu may tinh trong sach The Technic Michigan co tieu đe "BASICally speaking...FORTRAN bytes!!", tac gia đa mo ta FORTRAN la "bang chung ranh ranh rang cac nha đong sang lap cua IBM la nguoi Y, vi no toan la tu ma spaghetti ma ra ca".


Cum tu co lien quan = Ma Ravioli (Ravioli code) =
Ma Ravioli la mot thuat ngu rieng cho lap trinh huong đoi tuong. No mo ta ma bao gom cac lop co cau truc tot, ve mat co lap thi de hieu, nhung ve mat tong the thi lai kho hieu.


= Ma Lasagna (Lasagna code) =
Ma Lasagna dung đe chi ma co cac tang lop rat phuc tap va đan xen voi nhau, đen noi viec tao ra mot thay đoi trong mot tang lop se đoi hoi phai thay đoi trong tat ca cac tang lop khac.


Vi du Đoan ma duoi đay đuoc coi la mot vi du thong thuong cua ma spaghetti trong ngon ngu BASIC. Chuong trinh in tung so tu 1 đen 100 len man hinh cung voi binh phuong cua no. O đay viec thut đau dong khong he đuoc su dung đe lam ro su khac nhau giua nhieu hanh đong khac nhau do ma lenh thuc hien, va cac cau lenh GOTO cua chuong trinh tao ra mot su le thuoc chat che vao so dong. Luong thuc thi tu mien nay sang mien khac kho du đoan hon. Su xuat hien cua ma spaghetti trong the gioi thuc thi phuc tap hon va co the them rat nhieu vao chi phi bao tri cho chuong trinh.  Đay cung la ma tren nhung đuoc viet lai theo kieu lap trinh co cau truc:  Chuong trinh tren đay cung nhay tu mien nay sang mien khac, nhung buoc nhay đay thi mang tinh hinh thuc va de du đoan hon, boi vi vong lap for va ham đeu cung cap su đieu khien luong co kiem soat con cau lenh goto lai khuyen khich đieu khien luong tuy y.
Mac du vi du tren nay thi nho, cac chuong trinh trong the gioi thuc thi đuoc cau thanh tu nhieu dong ma va neu đuoc viet theo kieu cach ma spaghetti thi se kho bao tri.

Đay la mot vi du khac ve ma Spaghetti trong đo cau lenh GOTO bi lam dung (an sau vao logic cua chuong trinh) va đuoc dung voi cac nhan (label) co ten khong ro rang. 


Xem them Bong bun lon, mot phan mem khong co kien truc de nhan biet
Cuoc so tai Viet ma C Kho đoc Quoc te, mot cuoc thi đau đe tao ra ma C kho hieu cho niem vui thich
Ngon ngu chi đe viet, mot ngon ngu co cu phap ky quai đen noi ma ket qua sinh ra mang tinh khong the linh hoi đuoc
No ky thuat


Tham khao Lien ket ngoai Go To Statement Considered Harmful. The classic repudiation of spaghetti code by Edsger Dijkstra
We don't know where to GOTO if we don't know where we've COME FROM by R. Lawrence Clark from DATAMATION, December, 1973 Luu tru ngay 16 thang 7 nam 2018 tai Wayback Machine
Refactoring Java spaghetti code into Java bento code separating out a bowl full of code from one class into seven classes
Objects and Frameworks – Taking a Step Back by Brian Rinaldi
Programming Pasta - Spaghetti, Lasagna, Ravioli and Macaroni Code
Pasta Theory of Programming Luu tru ngay 12 thang 6 nam 2018 tai Wayback Machine
Spaghetti Code: Detangling Life and Work with Programmer Wisdom (English Edition)