Perangkat lunak

Perangkat lunak (SW) terdiri atas program komputer yang menginstruksikan eksekusi sebuah komputer.[1] Perangkat lunak juga mencakup dokumen desain dan spesifikasi.
Sejarah perangkat lunak berkaitan erat dengan perkembangan komputer digital pada pertengahan abad ke-20. Program-program awal ditulis dalam bahasa mesin yang spesifik terhadap perangkat keras. Pengenalan bahasa pemrograman tingkat tinggi pada tahun 1958 memungkinkan penggunaan instruksi yang lebih mudah dibaca manusia, sehingga pengembangan perangkat lunak menjadi lebih mudah dan lebih portabel di berbagai arsitektur komputer. Perangkat lunak dalam suatu bahasa pemrograman dijalankan melalui kompilator atau interpreter untuk melakukan eksekusi pada perangkat keras arsitektur tersebut. Seiring waktu, perangkat lunak menjadi semakin kompleks akibat perkembangan jaringan, sistem operasi, dan basis data.
Perangkat lunak secara umum dapat dikategorikan menjadi dua jenis utama:
- sistem operasi, yang mengelola sumber daya perangkat keras dan menyediakan layanan untuk aplikasi
- perangkat lunak aplikasi, yang melakukan tugas-tugas tertentu bagi pengguna
Munculnya komputasi awan memperkenalkan model penyampaian perangkat lunak baru, yaitu perangkat lunak sebagai layanan (SaaS). Dalam SaaS, aplikasi dihosting oleh penyedia dan diakses melalui Internet.
Proses pengembangan perangkat lunak melibatkan beberapa tahap. Tahapan tersebut meliputi desain perangkat lunak, pemrograman, pengujian, rilis, dan pemeliharaan. Jaminan kualitas perangkat lunak dan keamanan merupakan aspek penting dalam pengembangan perangkat lunak, karena bug dan kerentanan keamanan dapat menyebabkan kegagalan sistem dan pelanggaran keamanan. Selain itu, persoalan hukum seperti lisensi perangkat lunak dan hak kekayaan intelektual memainkan peran penting dalam distribusi produk perangkat lunak.
Sejarah
[sunting | sunting sumber]Penggunaan pertama kata software untuk menggambarkan program komputer dikaitkan dengan matematikawan John Wilder Tukey pada tahun 1958.[2][3][4] Komputer pertama yang dapat diprogram, yang muncul pada akhir dekade 1940-an,[5] diprogram dalam bahasa mesin. Bahasa mesin sulit untuk di-debug dan tidak portabel di berbagai komputer.[6] Pada awalnya, sumber daya perangkat keras lebih mahal daripada sumber daya manusia.[7] Ketika program menjadi semakin kompleks, produktivitas pemrogram menjadi hambatan. Pengenalan bahasa pemrograman tingkat tinggi pada tahun 1958 menyembunyikan detail perangkat keras dan mengekspresikan algoritme yang mendasarinya ke dalam kode.[8][9] Bahasa-bahasa awal mencakup Fortran, Lisp, dan COBOL.[9]
Jenis
[sunting | sunting sumber]
Ada dua jenis utama perangkat lunak:
- Sistem operasi adalah "lapisan perangkat lunak yang mengelola sumber daya komputer bagi pengguna dan aplikasi mereka".[10] Ada tiga tujuan utama yang dipenuhi sistem operasi:[11]
- Mengalokasikan sumber daya di antara berbagai aplikasi, dengan menentukan kapan aplikasi tersebut akan menerima waktu central processing unit (CPU) atau ruang dalam memori.[11]
- Menyediakan antarmuka yang mengabstraksikan detail akses terhadap perangkat keras (seperti memori fisik) untuk mempermudah pekerjaan pemrogram.[11][12]
- Menawarkan layanan umum, seperti antarmuka untuk mengakses perangkat jaringan dan cakram. Hal ini memungkinkan sebuah aplikasi dijalankan pada perangkat keras yang berbeda tanpa perlu ditulis ulang.[13]
- Perangkat lunak aplikasi berjalan di atas sistem operasi dan menggunakan sumber daya komputer untuk melakukan suatu tugas.[14] Terdapat banyak jenis perangkat lunak aplikasi karena cakupan tugas yang dapat dilakukan dengan komputer modern sangat luas.[15] Aplikasi mencakup sebagian besar perangkat lunak[16] dan memerlukan lingkungan yang disediakan oleh sistem operasi, serta sering kali aplikasi lainnya, agar dapat berfungsi.[17]

Perangkat lunak juga dapat dikategorikan berdasarkan cara perangkat lunak tersebut digelar. Aplikasi tradisional dibeli dengan lisensi permanen untuk versi perangkat lunak tertentu, diunduh, dan dijalankan pada perangkat keras milik pembeli.[18] Munculnya Internet dan komputasi awan memungkinkan model baru, yaitu perangkat lunak sebagai layanan (SaaS),[19] yang penyedianya menghosting perangkat lunak (biasanya dibangun di atas infrastruktur atau platform yang disewa)[20] dan menyediakan penggunaan perangkat lunak kepada pelanggan, sering kali dengan imbalan biaya langganan.[18] Pada tahun 2023, produk SaaS—yang biasanya disediakan melalui aplikasi web—telah menjadi metode utama bagi perusahaan dalam menyediakan aplikasi.[21]
Pengembangan dan pemeliharaan
[sunting | sunting sumber]
Perusahaan perangkat lunak bertujuan menghasilkan produk berkualitas tinggi tepat waktu dan sesuai anggaran. Salah satu tantangannya adalah estimasi upaya pengembangan perangkat lunak sering kali tidak akurat.[22] Pengembangan perangkat lunak dimulai dengan menggagas proyek, mengevaluasi kelayakannya, menganalisis persyaratan bisnis, dan membuat desain perangkat lunak.[23][24] Sebagian besar proyek perangkat lunak mempercepat pengembangannya dengan menggunakan kembali atau mengintegrasikan perangkat lunak yang sudah ada, baik dalam bentuk commercial off-the-shelf (COTS) maupun perangkat lunak sumber terbuka.[25][26] Jaminan kualitas perangkat lunak biasanya merupakan kombinasi dari tinjauan kode secara manual oleh insinyur lain[27] dan pengujian perangkat lunak otomatis. Karena keterbatasan waktu, pengujian tidak dapat mencakup seluruh aspek fungsionalitas yang dimaksudkan dari perangkat lunak, sehingga pengembang sering berfokus pada fungsionalitas yang paling kritis.[28] Metode formal digunakan pada beberapa sistem yang kritis terhadap keselamatan untuk membuktikan kebenaran kode,[29] sedangkan pengujian penerimaan pengguna membantu memastikan bahwa produk memenuhi harapan pelanggan.[30] Terdapat berbagai metodologi pengembangan perangkat lunak, yang berbeda-beda mulai dari menyelesaikan semua langkah secara berurutan hingga model konkuren dan iteratif.[31] Pengembangan perangkat lunak didorong oleh persyaratan yang diperoleh dari calon pengguna, berbeda dengan pemeliharaan yang didorong oleh peristiwa seperti permintaan perubahan.[32]
Perangkat lunak sering kali dirilis dalam keadaan belum lengkap ketika tim pengembangan kehabisan waktu atau pendanaan.[33] Meskipun telah dilakukan pengujian dan jaminan kualitas, hampir semua perangkat lunak mengandung bug yang menyebabkan sistem tidak bekerja sebagaimana mestinya. Pemeliharaan perangkat lunak setelah rilis diperlukan untuk memperbaiki bug ketika ditemukan dan menjaga agar perangkat lunak tetap berfungsi ketika lingkungannya berubah seiring waktu.[34] Fitur-fitur baru sering ditambahkan setelah rilis. Seiring waktu, tingkat pemeliharaan semakin dibatasi sebelum akhirnya dihentikan sepenuhnya ketika produk ditarik dari pasar.[35] Ketika perangkat lunak menua, perangkat lunak tersebut dikenal sebagai perangkat lunak warisan dan dapat tetap digunakan selama beberapa dekade, bahkan jika tidak ada lagi orang yang mengetahui cara memperbaikinya.[36] Sepanjang masa pakai produk, pemeliharaan perangkat lunak diperkirakan mencakup 75 persen atau lebih dari total biaya pengembangan.[37][38]
Penyelesaian proyek perangkat lunak melibatkan berbagai bentuk keahlian, tidak hanya pemrogram perangkat lunak, tetapi juga pengujian, penulisan dokumentasi, manajemen proyek, desain grafis, pengalaman pengguna, dukungan pengguna, pemasaran, dan penggalangan dana.[39][40][24]
Kualitas dan keamanan
[sunting | sunting sumber]Kualitas perangkat lunak didefinisikan sebagai pemenuhan persyaratan yang dinyatakan serta harapan pelanggan.[41] Kualitas merupakan istilah umum yang dapat merujuk pada perilaku kode yang benar dan efisien, kemampuan penggunaan kembali dan portabilitasnya, atau kemudahan modifikasinya.[42] Biasanya lebih hemat biaya untuk membangun kualitas ke dalam produk sejak awal daripada mencoba menambahkannya kemudian dalam proses pengembangan.[43] Kode yang berkualitas lebih tinggi akan mengurangi biaya sepanjang masa pakai bagi pemasok maupun pelanggan karena lebih andal dan lebih mudah dipelihara.[44][45] Kegagalan perangkat lunak dalam sistem kritis keselamatan dapat mengakibatkan kerugian serius, termasuk cedera atau kematian.[44] Menurut beberapa perkiraan, biaya perangkat lunak berkualitas buruk dapat mencapai 20 hingga 40 persen dari penjualan.[46] Meskipun pengembang bertujuan menghasilkan produk yang sepenuhnya bekerja sesuai dengan yang dimaksudkan, hampir semua perangkat lunak mengandung bug.[47]
Munculnya Internet juga sangat meningkatkan kebutuhan akan keamanan komputer karena memungkinkan pelaku berbahaya melakukan serangan siber dari jarak jauh.[48][49] Jika sebuah bug menciptakan risiko keamanan, bug tersebut disebut sebagai kerentanan.[50][51] Tambalan perangkat lunak sering dirilis untuk memperbaiki kerentanan yang telah diidentifikasi, tetapi kerentanan yang masih belum diketahui (zero-day) serta kerentanan yang belum ditambal masih dapat dieksploitasi.[52] Kerentanan berbeda-beda dalam hal kemampuannya untuk dieksploitasi oleh pelaku berbahaya,[50] dan risiko aktual bergantung pada sifat kerentanan serta nilai sistem di sekitarnya.[53] Meskipun beberapa kerentanan hanya dapat digunakan untuk serangan penolakan layanan yang mengganggu ketersediaan sistem, kerentanan lainnya memungkinkan penyerang melakukan injeksi dan menjalankan kode mereka sendiri (disebut malware), tanpa sepengetahuan pengguna.[50] Untuk menangkal serangan siber, semua perangkat lunak dalam sistem harus dirancang agar mampu menahan dan pulih dari serangan eksternal.[49] Meskipun berbagai upaya telah dilakukan untuk memastikan keamanan, sebagian besar komputer tetap terinfeksi malware.[54]
Pengodean dan eksekusi
[sunting | sunting sumber]Bahasa pemrograman
[sunting | sunting sumber]
Bahasa pemrograman merupakan format yang digunakan untuk menulis perangkat lunak. Sejak dekade 1950-an, ribuan bahasa pemrograman berbeda telah diciptakan; beberapa telah digunakan selama beberapa dekade, sementara yang lainnya tidak lagi digunakan.[55] Beberapa definisi menggolongkan kode mesin—instruksi tepat yang diimplementasikan secara langsung oleh perangkat keras—dan bahasa rakitan—alternatif kode mesin yang lebih mudah dibaca manusia, yang pernyataannya dapat diterjemahkan satu-ke-satu menjadi kode mesin—sebagai bahasa pemrograman.[56] Program yang ditulis dalam bahasa pemrograman tingkat tinggi yang digunakan untuk membuat perangkat lunak memiliki beberapa karakteristik utama: pengetahuan mengenai kode mesin tidak diperlukan untuk menulisnya, program tersebut dapat dipindahkan ke sistem komputer lain, dan lebih ringkas serta lebih mudah dibaca manusia daripada kode mesin.[57] Program tersebut harus dapat dibaca manusia sekaligus dapat diterjemahkan menjadi instruksi yang tidak ambigu bagi perangkat keras komputer.[58]
Kompilasi, interpretasi, dan eksekusi
[sunting | sunting sumber]Penemuan bahasa pemrograman tingkat tinggi berlangsung bersamaan dengan kompilator yang diperlukan untuk menerjemahkannya secara otomatis menjadi kode mesin.[59] Sebagian besar program tidak memuat semua sumber daya yang diperlukan untuk menjalankannya dan bergantung pada pustaka eksternal. Salah satu fungsi kompilator adalah menghubungkan berkas-berkas tersebut sedemikian rupa sehingga program dapat dieksekusi oleh perangkat keras. Setelah dikompilasi, program dapat disimpan sebagai berkas objek dan pemuat (bagian dari sistem operasi) dapat mengambil berkas tersimpan tersebut dan melakukan eksekusi sebagai sebuah proses pada perangkat keras komputer.[60] Beberapa bahasa pemrograman menggunakan interpreter alih-alih kompilator. Interpreter mengubah program menjadi kode mesin pada saat runtime, yang membuatnya 10 hingga 100 kali lebih lambat daripada bahasa pemrograman yang dikompilasi.[61][62]
Persoalan hukum
[sunting | sunting sumber]Tanggung jawab
[sunting | sunting sumber]Perangkat lunak sering dirilis dengan pengetahuan bahwa perangkat lunak tersebut belum lengkap atau mengandung bug.[63] Pembeli dengan sadar membelinya dalam keadaan tersebut,[butuh rujukan] yang telah menghasilkan rezim hukum di mana tanggung jawab terhadap produk perangkat lunak jauh lebih terbatas dibandingkan dengan produk lainnya.[64]
Lisensi
[sunting | sunting sumber]
Sejak pertengahan dekade 1970-an, perangkat lunak dan kode sumbernya dilindungi oleh hukum hak cipta yang memberikan pemilik hak eksklusif untuk menyalin kode tersebut. Gagasan atau algoritme yang mendasarinya tidak dilindungi oleh hukum hak cipta, tetapi terkadang diperlakukan sebagai rahasia dagang dan disembunyikan melalui metode seperti perjanjian kerahasiaan.[65] Hak cipta perangkat lunak sering kali dimiliki oleh orang atau perusahaan yang mendanai atau membuat perangkat lunak tersebut (bergantung pada kontrak dengan karyawan atau kontraktor yang membantu menulisnya).[66] Beberapa perangkat lunak berada dalam domain publik dan tidak memiliki batasan mengenai siapa yang dapat menggunakannya, menyalin atau membagikannya, atau memodifikasinya; contoh penting adalah perangkat lunak yang ditulis oleh Pemerintah Amerika Serikat.[butuh rujukan] Perangkat lunak bebas dan sumber terbuka juga memungkinkan penggunaan, pembagian, dan modifikasi secara bebas, mungkin dengan beberapa persyaratan tertentu.[66] Penggunaan beberapa perangkat lunak diatur oleh suatu perjanjian (lisensi perangkat lunak) yang ditulis oleh pemegang hak cipta dan diberlakukan kepada pengguna. Perangkat lunak proprieter biasanya dijual berdasarkan lisensi yang membatasi penggunaannya dan pembagiannya.[67] Beberapa lisensi perangkat lunak bebas mensyaratkan bahwa versi yang dimodifikasi harus dirilis berdasarkan lisensi yang sama, sehingga perangkat lunak tersebut tidak dapat dijual atau didistribusikan dengan pembatasan proprieter.[68]
Paten
[sunting | sunting sumber]Paten memberikan kepada penemu lisensi eksklusif dengan jangka waktu terbatas atas produk atau proses baru.[69] Gagasan mengenai apa yang dapat dilakukan perangkat lunak tidak dilindungi oleh hukum dan implementasi konkretnya justru dicakup oleh hukum hak cipta. Di beberapa negara, persyaratan bahwa invensi yang diklaim harus memiliki dampak terhadap dunia fisik juga dapat menjadi bagian dari persyaratan agar suatu paten perangkat lunak dianggap sah.[70] Paten perangkat lunak secara historis kontroversial. Sebelum perkara tahun 1998 State Street Bank & Trust Co. v. Signature Financial Group, Inc., paten perangkat lunak pada umumnya tidak diakui di Amerika Serikat. Dalam perkara tersebut, Mahkamah Agung memutuskan bahwa proses bisnis dapat dipatenkan.[71] Permohonan paten bersifat kompleks dan mahal, dan tuntutan hukum yang melibatkan paten dapat meningkatkan biaya produk.[72] Berbeda dengan hak cipta, paten pada umumnya hanya berlaku di yurisdiksi tempat paten tersebut diterbitkan.[73]
Dampak
[sunting | sunting sumber]
Insinyur Capers Jones menulis bahwa "komputer dan perangkat lunak membawa perubahan besar pada setiap aspek kehidupan manusia: pendidikan, pekerjaan, peperangan, hiburan, kedokteran, hukum, dan segala hal lainnya".[75] Perangkat lunak telah menjadi sesuatu yang ada di mana-mana dalam kehidupan sehari-hari di negara maju.[76] Dalam banyak kasus, perangkat lunak meningkatkan fungsionalitas teknologi yang sudah ada seperti peralatan rumah tangga dan elevator.[77] Perangkat lunak juga melahirkan teknologi yang sepenuhnya baru seperti Internet, permainan video, telepon seluler, dan GPS.[77][78] Metode komunikasi baru, termasuk surel, forum, blog, mikroblog, wiki, dan media sosial, dimungkinkan oleh Internet.[79] Sejumlah besar pengetahuan yang melampaui perpustakaan berbasis kertas mana pun kini tersedia melalui pencarian web dengan cepat.[78] Sebagian besar profesional kreatif telah beralih ke perangkat berbasis perangkat lunak seperti desain berbantuan komputer, pemodelan 3D, penyuntingan gambar digital, dan animasi komputer.[74] Hampir setiap perangkat kompleks dikendalikan oleh perangkat lunak.[78]
Lihat pula
[sunting | sunting sumber]Referensi
[sunting | sunting sumber]- ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. hlm. 16. ISBN 0-619-06489-7.
Software consists of computer programs that govern the operation of the computer.
- ↑ Jones 2014, hlm. 19, 22.
- ↑ Tracy 2021, hlm. 2.
- ↑ "software (n.), sense 2.a". Oxford English dictionary. Oxford University Press. 2024. doi:10.1093/OED/3803978366. Diakses tanggal 15 Juli 2025.
- ↑ Gabbrielli & Martini 2023, hlm. 519.
- ↑ Gabbrielli & Martini 2023, hlm. 520–521.
- ↑ Gabbrielli & Martini 2023, hlm. 522.
- ↑ Gabbrielli & Martini 2023, hlm. 521.
- 1 2 Tracy 2021, hlm. 1.
- ↑ Anderson & Dahlin 2014, hlm. 6.
- 1 2 3 Anderson & Dahlin 2014, hlm. 7.
- ↑ Tanenbaum & Bos 2023, hlm. 5.
- ↑ Anderson & Dahlin 2014, hlm. 7, 9, 13.
- ↑ Anderson & Dahlin 2014, hlm. 6–7.
- ↑ Jones 2014, hlm. 121.
- ↑ Tracy 2021, hlm. 66.
- ↑ Tracy 2021, hlm. 72.
- 1 2 O'Regan 2022, hlm. 386.
- ↑ Campbell-Kelly & Garcia-Swartz 2015, hlm. 156–157.
- ↑ Rosati & Lynn 2020, hlm. 23.
- ↑ Watt 2023, hlm. 4.
- ↑ O'Regan 2022, hlm. 7.
- ↑ O'Regan 2022, hlm. 5.
- 1 2 Dooley 2017, hlm. 1.
- ↑ O'Regan 2022, hlm. 18, 110–111.
- ↑ Tracy 2021, hlm. 43, 76.
- ↑ O'Regan 2022, hlm. 117–118.
- ↑ O'Regan 2022, hlm. 54.
- ↑ O'Regan 2022, hlm. 267.
- ↑ O'Regan 2022, hlm. 20.
- ↑ O'Regan 2022, hlm. 9.
- ↑ Tripathy & Naik 2014, hlm. 26.
- ↑ Reifer 2012, hlm. 22.
- ↑ Tripathy & Naik 2014, hlm. 4, 27.
- ↑ Tripathy & Naik 2014, hlm. 89.
- ↑ Tracy 2021, hlm. 3.
- ↑ Varga 2018, hlm. 6.
- ↑ Ulziit et al. 2015, hlm. 764.
- ↑ Tucker, Morelli & de Silva 2011, hlm. 7.
- ↑ Stull 2018, hlm. 24–25.
- ↑ Galin 2018, hlm. 3.
- ↑ Galin 2018, hlm. 26.
- ↑ O'Regan 2022, hlm. 68, 117.
- 1 2 O'Regan 2022, hlm. 3, 268.
- ↑ Varga 2018, hlm. 12.
- ↑ O'Regan 2022, hlm. 119.
- ↑ Ablon & Bogart 2017, hlm. 1.
- ↑ Campbell-Kelly & Garcia-Swartz 2015, hlm. 164.
- 1 2 O'Regan 2022, hlm. 266.
- 1 2 3 Ablon & Bogart 2017, hlm. 2.
- ↑ Daswani & Elbayadi 2021, hlm. 25.
- ↑ Daswani & Elbayadi 2021, hlm. 26–27.
- ↑ Haber & Hibbert 2018, hlm. 5–6.
- ↑ Kitchin & Dodge 2011, hlm. 37.
- ↑ Tracy 2021, hlm. 117.
- ↑ Tracy 2021, hlm. 118–120.
- ↑ Tracy 2021, hlm. 118–119.
- ↑ Kitchin & Dodge 2011, hlm. 26.
- ↑ Tracy 2021, hlm. 121.
- ↑ Tracy 2021, hlm. 122–123.
- ↑ O'Regan 2022, hlm. 375.
- ↑ Sebesta 2012, hlm. 28.
- ↑ "Producing Trustworthy Hardware Using Untrusted Components, Personnel and Resources" (PDF). Columbia University. Diakses tanggal 29 September 2026.
{{cite web}}: Pemeliharaan CS1: Tanggal diterjemahkan otomatis (link) - ↑ Kitchin & Dodge 2011, hlm. 36–37.
- ↑ O'Regan 2022, hlm. 394–396.
- 1 2 O'Regan 2022, hlm. 403.
- ↑ O'Regan 2022, hlm. 394, 404.
- ↑ Langer 2016, hlm. 44–45.
- ↑ O'Regan 2022, hlm. 395.
- ↑ Gerardo Con Díaz, "The Text in the Machine: American Copyright Law and the Many Natures of Software, 1974–1978", Technology and Culture 57 (October 2016), 753–79.
- ↑ Jones 2014, hlm. 19.
- ↑ O'Regan 2022, hlm. 398.
- ↑ O'Regan 2022, hlm. 399.
- 1 2 Manovich 2013, hlm. 333.
- ↑ Jones 2014, hlm. 32.
- ↑ Kitchin & Dodge 2011, hlm. iv.
- 1 2 Kitchin & Dodge 2011, hlm. 5.
- 1 2 3 Jones 2014, hlm. xxviii.
- ↑ Manovich 2013, hlm. 329.
Sumber
[sunting | sunting sumber]- Ablon, Lillian; Bogart, Andy (2017). Zero Days, Thousands of Nights: The Life and Times of Zero-Day Vulnerabilities and Their Exploits (PDF) (dalam bahasa Inggris). Rand Corporation. ISBN 978-0-8330-9761-3.
- Anderson, Thomas; Dahlin, Michael (2014). Operating Systems: Principles and Practice (dalam bahasa Inggris) (Edisi 2). Recursive Books. ISBN 978-0-9856735-2-9.
- Campbell-Kelly, Martin; Garcia-Swartz, Daniel D. (2015). From Mainframes to Smartphones: A History of the International Computer Industry (dalam bahasa Inggris). Harvard University Press. ISBN 978-0-674-28655-9.
- Daswani, Neil; Elbayadi, Moudy (2021). Big Breaches: Cybersecurity Lessons for Everyone. Apress. ISBN 978-1-4842-6654-0.
- Dooley, John F. (2017). Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring (dalam bahasa Inggris). Apress. ISBN 978-1-4842-3153-1.
- Gabbrielli, Maurizio; Martini, Simone (2023). Programming Languages: Principles and Paradigms (dalam bahasa Inggris) (Edisi 2nd). Springer. ISBN 978-3-031-34144-1.
- Galin, Daniel (2018). Software Quality: Concepts and Practice (dalam bahasa Inggris). John Wiley & Sons. ISBN 978-1-119-13449-7.
- Haber, Morey J.; Hibbert, Brad (2018). Asset Attack Vectors: Building Effective Vulnerability Management Strategies to Protect Organizations (dalam bahasa Inggris). Apress. ISBN 978-1-4842-3627-7.
- Jones, Capers (2014). The Technical and Social History of Software Engineering (dalam bahasa Inggris). Pearson Education. ISBN 978-0-321-90342-6.
- Kitchin, Rob; Dodge, Martin (2011). Code/space: Software and Everyday Life (dalam bahasa Inggris). MIT Press. ISBN 978-0-262-04248-2.
- Langer, Arthur M. (2016). Guide to Software Development: Designing and Managing the Life Cycle (dalam bahasa Inggris). Springer. ISBN 978-1-4471-6799-0.
- Manovich, Lev (2013). Software Takes Command (dalam bahasa Inggris). Bloomsbury Academic. ISBN 978-1-62356-745-3.
- O'Regan, Gerard (2022). Concise Guide to Software Engineering: From Fundamentals to Application Methods (dalam bahasa Inggris). Springer Nature. ISBN 978-3-031-07816-3.
- Osterweil, Leon J. (2013). "What Is Software? The Role of Empirical Methods in Answering the Question". Perspectives on the Future of Software Engineering: Essays in Honor of Dieter Rombach (dalam bahasa Inggris). Springer. hlm. 237–254. ISBN 978-3-642-37395-4.
- Rahman, Hanif Ur; da Silva, Alberto Rodrigues; Alzayed, Asaad; Raza, Mushtaq (2024). "A Systematic Literature Review on Software Maintenance Offshoring Decisions". Information and Software Technology. 172 107475. doi:10.1016/j.infsof.2024.107475.
- Reifer, Donald J. (2012). Software Maintenance Success Recipes (dalam bahasa Inggris). CRC Press. ISBN 978-1-4398-5167-8.
- Rosati, Pierangelo; Lynn, Theo (2020). "Measuring the Business Value of Infrastructure Migration to the Cloud". Measuring the Business Value of Cloud Computing (dalam bahasa Inggris). Springer International Publishing. hlm. 19–37. ISBN 978-3-030-43198-3.
- Sebesta, Robert W. (2012). Concepts of Programming Languages (dalam bahasa Inggris) (Edisi 10). Addison-Wesley. ISBN 978-0-13-139531-2.
- Stull, Edward (2018). UX Fundamentals for Non-UX Professionals: User Experience Principles for Managers, Writers, Designers, and Developers (dalam bahasa Inggris). Apress. ISBN 978-1-4842-3811-0.
- Tanenbaum, Andrew S.; Bos, Herbert (2023). Modern Operating Systems, Global Edition (dalam bahasa Inggris). Pearson Higher Ed. ISBN 978-1-292-72789-9.
- Tracy, Kim W. (2021). Software: A Technical History (dalam bahasa Inggris). Morgan & Claypool Publishers. ISBN 978-1-4503-8724-8.
- Tripathy, Priyadarshi; Naik, Kshirasagar (2014). Software Evolution and Maintenance: A Practitioner's Approach (dalam bahasa Inggris). John Wiley & Sons. ISBN 978-0-470-60341-3.
- Tucker, Allen; Morelli, Ralph; de Silva, Chamindra (2011). Software Development: An Open Source Approach (dalam bahasa Inggris). CRC Press. ISBN 978-1-4398-8460-7.
- Ulziit, Bayarbuyan; Warraich, Zeeshan Akhtar; Gencel, Cigdem; Petersen, Kai (2015). "A conceptual framework of challenges and solutions for managing global software maintenance". Journal of Software: Evolution and Process. 27 (10): 763–792. doi:10.1002/smr.1720.
- Watt, Andy (2023). Building Modern SaaS Applications with C# And . NET: Build, Deploy, and Maintain Professional SaaS Applications (dalam bahasa Inggris). Packt. ISBN 978-1-80461-087-9.
- Varga, Ervin (2018). Unraveling Software Maintenance and Evolution: Thinking Outside the Box (dalam bahasa Inggris). Springer. ISBN 978-3-319-71303-8.