Untuk kegunaan lain, lihat Pengembangan perangkat lunak (disambiguasi).
**Pengembangan perangkat lunak** (juga disebut **pengembangan aplikasi**, **desain perangkat lunak**, **merancang perangkat lunak**, **pengembangan aplikasi perangkat lunak**, **pengembangan aplikasi perusahaan**, atau **pengembangan platform**) adalah pengembangan suatu produk perangkat lunak. Istilah "pengembangan perangkat lunak" bisa dipakai untuk menyebut aktivitas pemrograman komputer, yaitu proses menulis dan mengelola kode sumber, namun dalam artian luas istilah ini mencakup semua hal yang terlibat antara penciptaan perangkat lunak yang diinginkan melalui pewujudan akhir perangkat lunak, idealnya dalam proses yang terencana dan terstruktur. Karena itu, pengembangan perangkat lunak bisa mencakup penelitian, pengembangan baru, purwarupa, modifikasi, pemakaian kembali, rekayasa ulang, pengelolaan, atau aktivitas lain yang menghasilkan produk perangkat lunak.

Perangkat lunak bisa dikembangkan untuk berbagai tujuan, tiga tujuan paling umum adalah memenuhi kebutuhan klien/bisnis tertentu (perangkat lunak kustom), memenuhi persepsi kebutuhan sejumlah pengguna potensial (perangkat lunak komersial dan terbuka), atau memenuhi kebutuhan pribadi (misalnya seorang ilmuwan menulis perangkat lunak untuk mengotomasikan sebuah tugas yang rumit). **Pengembangan perangkat lunak tertanam** adalah pengembangan perangkat lunak tertanam seperti yang dipakai untuk mengontrol produk konsumen, membutuhkan proses pengembangan yang terintegrasikan dengan pengembangan produk fisik yang dikontrol.

Perlunya pengawasan kualitas yang lebih baik pada proses pengembangan perangkat lunak menciptakan disiplin teknik perangkat lunak, yang bertujuan menerapkan pendekatan sistematis yang tercantum dalam paradigma teknik hingga proses pengembangan perangkat lunak.

Proses bisnis dan pemodelan data
--------------------------------

Representasi grafik dari keadaan informasi saat ini memberikan sarana yang sangat efektif untuk menyajikan informasi kepada pengguna dan pengembang sistem.

Contoh interaksi antara proses bisnis dan model data.
* Sebuah model bisnis mengilustrasikan fungsi yang saling berkaitan dengan dengan proses bisnis yang sedang dimodelkan pengorganisasian yang melaksanakan fungsi-fungsi ini. Dengan menggambarkan aktivitas dan arus informasi, sebuah fondasi dibuat untuk memvisualisasikan, menentukan, memahami, dan memvalidasi sifat suatu proses.
* Sebuah model data menyediakan detail dari informasi yang ingin disimpan dan penggunaan utama ketika produk akhir adalah pembuatan kode perangkat lunak komputer untuk aplikasi atau persiapan spesifikasi fungsional untuk membantu keputusan membuat atau membeli perangkat lunak komputer. Lihat gambar di sebelah kanan untuk contoh interaksi antara proses bisnis dan model data.

Biasanya, sebuah model dibuat setelah melakukan sebuah wawancara, disebut sebagai analisis bisnis. Wawancara terdiri dari fasilitator yang mengajukan serangkaian pertanyaan yang dirancang untuk mengekstraksi informasi yang diperlukan yang menggambarkan suatu proses. Pewawancara disebut sebagai fasilitator untuk menekankan bahwa partisipan yang memberikan informasi. Fasilitator harus memiliki pengetahuan tentang proses yang diinginkan, tetapi hal ini tidak sepenting memiliki metodologi terstruktur yang digunakan untuk mengajukan pertanyaan kepada pakar proses. Metodologinya sangat penting karena biasanya sebuah tim dari fasilitator sedang mengumpulkan informasi di sepanjang bangunan dan hasil dari informasi dari semua pewawancara harus cocok dengan satu sama lain setelah selesai.

Metodologi
----------

Artikel utama: Proses pengembangan perangkat lunak
Satu proses pengembangan perangkat lunak tidak selalu cocok untuk digunakan untuk semua projek. Masing-masing metodologi yang tersedia paling cocok untuk jenis proyek tertentu, berdasarkan berbagai pertimbangan teknis, organisasi, proyek, dan tim.

Aktivitas
---------

### Proses perencanaan

Sebuah tugas penting dalam membuat perangkat lunak adalah menganalisis kebutuhan. Pelanggan pada umumnya mempunyai ide abstrak dari apa yang mereka inginkan tetapi mereka tidak tahu apa kegunaan perangkat lunaknya. Insinyur perangkat lunak yang terampil dan berpengalaman mengenali persyaratan yang tidak lengkap, ambigu, atau bahkan bertentangan pada saat ini. Sering mendemonstrasikan kode langsung dapat membantu mengurangi risiko kesalahan persyaratan.

"Walaupun banyak usaha yang diperlukan untuk memenuhi dalam fase persyaratan untuk memastikan bahwa persyaratan lengkap dan konsisten, jarang sekali hal ini terjadi; meninggalkan fase desain perangkat lunak sebagai fase yang paling berpengaruh dalam meminimalkan dampak persyaratan baru atau perubahan. Volatilitas persyaratan merupakan hal yang menantang karena berdampak pada upaya pembangunan di masa depan atau yang sudah berjalan."

CASE
----

Computer-aided software engineering (CASE) adalah aplikasi ilmiah dari sebuah seperangkat alat dan metode perangkat lunak untuk pengembangan perangkat lunak untuk membantu mencapai kualitas tinggi, produk perangkat lunak bebas cacat dan dapat dipelihara. Ini juga merujuk pada metode pengembangan dari sistem informasi bersama dengan alat otomatis yang dapat digunakan dalam proses pengembangan perangkat lunak. Istilah "computer-aided software engineering" (CASE) dapat merujuk pada perangkat lunak yang digunakan untuk pengembangan secara otomatis dari perangkat lunak sistem, yaitu, kode komputer. Fungsi CASE meliputi analisis, desain, dan pemrograman. Alat CASE mengotomatiskan metode untuk merancang, mendokumentasikan, dan membuat kode komputer terstruktur dalam bahasa pemrograman yang diinginkan.

Dua kunci ide dari Computer-aided Software System Engineering (CASE) adalah:

* Mendorong bantuan komputer dalam pengembangan perangkat lunak dan proses pemeliharaan perangkat lunak, dan
* Pendekatan rekayasa untuk pengembangan dan pemeliharaan perangkat lunak.

Alat CASE yang umum ada untuk manajemen konfigurasi, pemodelan data, transformasi model, pemfaktoran ulang, pembuatan kode sumber.

Anjuta, sebuah IDE C dan C++ untuk lingkungan GNOME.

Bahasa pemodelan
----------------

Sebuah bahasa pemodelan adalah bahasa artifisial yang dapat digunakan untuk mengekspresikan informasi atau pengetahuan atau sistem di dalam sebuah struktur yang ditentukan oleh seperangkat aturan yang konsisten. Aturan ini digunakan untuk interpretasi makna komponen-komponen dalam struktur. Bahasa pemodelan dapat berupa grafis atau tekstual.

Model Pandangan
---------------

Matriks Pandangan dan Perspektif TEAF.
Sebuah model pandangan adalah sebuah kerangka kerja yang menyediakan sudut pandang dalam sistem dan lingkungannya, untuk digunakan dalam proses pengembangan perangkat lunak. Ini adalah representasi grafis dari semantik yang mendasari suatu pandangan.

Kegunaan dari sudut pandang dan pandangan untuk memungkinkan insinyur manusia memahami sistem yang sangat kompleks dan mengorganisir elemen dari suatu permasalahan di sekitar lingkup pakar. Dalam rekayasa sistem intensif fisik, sudut pandang sering kali sesuai dengan kemampuan dan tanggung jawab dalam organisasi teknik.

Paradigma pemrograman
---------------------

Sebuah paradigma pemrograman adalah sebuah gaya dasar pemrograman komputer, yang umumnya tidak ditentukan oleh metodologi manajemen proyek (seperti waterfall atau agile). Paradigma berbeda dalam konsep dan abstraksi yang digunakan untuk mewakili elemen suatu program (seperti objek, fungsi, variabel, *constraint*) dan langkah-langkah yang meliputi sebuah komputasi (seperti penugasan, evaluasi, kelanjutan, aliran data). Terkadang konsep yang dinyatakan oleh paradigma digunakan secara kooperatif dalam desain arsitektur sistem tingkat tinggi; dalam kasus lainnya, ruang lingkup paradigma pemrograman terbatas pada struktur internal program atau modul tertentu. Contohnya: object-oriented design (OOD) Grady Booch, juga dikenal sebagai object-oriented analysis and design (OOAD). Model Booch model termasuk enam diagram: *class*, objek, transisi keadaan, interaksi, modul, dan proses.

Angkatan kerja
--------------

Pengembang perangkat lunak adalah orang atau perusahaan yang terlibat dalam proses pengembangan perangkat lunak, termasuk penelitian, desain, pemrograman, pengujian, dan aspek-aspek lain dalam menciptakan perangkat lunak. Gelar pekerjaan lain untuk orang yang memiliki arti yang sama termasuk pemrogram, analis perangkat lunak, atau insinyur perangkat lunak. Perusahaan yang berspesialisasi dalam perangkat lunak dapat disebut rumah perangkat lunak. Di perusahaan besar, mungkin ada karyawan yang tanggung jawabnya hanya terdiri dari salah satu disiplin ilmu. Dalam lingkungan pengembangan yang lebih kecil, beberapa orang atau satu orang mungkin menangani seluruh proses. Lingkungan kolaboratif, seperti perangkat lunak sumber terbuka, dapat menyatukan banyak pengembang.

Referensi
---------

1. ↑  "Application Development White Papers (Development of Software, Software Design, Designing Software, Software Engineering, Software Application Development, Enterprise Application Development, Platform Development, Software Development, Applications Development, Development) Software Downloads, Definition and Webcasts". Bitpipe. Diakses tanggal 2012-08-05.
2. ↑  "Application Development (AppDev) Defined and Explained". Bestpricecomputers.co.uk. 2007-08-13. Diakses tanggal 2012-08-05.
3. ↑  DRM Associates (2002). "New Product Development Glossary". Diakses tanggal 2006-10-29.
4. 1 2  Paul R. Smith & Richard Sarfaty (1993). Creating a strategic plan for configuration management using Computer Aided Software Engineering (CASE) tools. Paper For 1993 National DOE/Contractors and Facilities CAD/CAE User's Group.
5. ↑
6. ↑  System Development Methodologies for Web-Enabled E-Business: A Customization Framework Linda V. Knight (DePaul University, USA), Theresa A. Steinbach (DePaul University, USA) and Vince Kellen (Blue Wolf, USA)
7. ↑  Otero, Carlos. "Software Design Challenges". *IT Performance Improvement*. Taylor & Francis LLC. Diarsipkan dari versi asli tanggal 28 October 2017. Diakses tanggal 19 October 2017.  Parameter `|url-status=` yang tidak diketahui akan diabaikan (bantuan)
8. ↑  Kuhn, D.L (1989). "Selecting and effectively using a computer-aided software engineering tool". Annual Westinghouse computer symposium; 6–7 Nov 1989; Pittsburgh, PA (USA); DOE Project.
9. ↑  P. Loucopoulos and V. Karakostas (1995). *System Requirements Engineering*. McGraw-Hill.
10. ↑  CASE Diarsipkan 2012-02-18 di Wayback Machine. definition In: *Telecom Glossary 2000 Diarsipkan 2005-11-22 di Wayback Machine.. Retrieved 26 Oct 2008.*
11. ↑  K. Robinson (1992). *Putting the Software Engineering into CASE*. New York : John Wiley and Sons Inc.
12. ↑  Xiao He (2007). "A metamodel for the notation of graphical modeling languages". In: *Computer Software and Applications Conference, 2007. COMPSAC 2007 – Vol. 1. 31st Annual International*, Volume 1, Issue, 24–27 July 2007, pp 219–224.
13. ↑  Edward J. Barkmeyer ea (2003). *Concepts for Automating Systems Integration* Diarsipkan 25 January 2017 di Wayback Machine. NIST 2003.
14. ↑  Merx, Georges G.; Norman, Ronald J. (2006). *Unified Software Engineering with Java*. Prentice-Hall, Inc. hlm. 201. ISBN 0130473766.

Bacaan lanjutan
---------------

* Kit, Edward (1992). *Software Testing in The Real World*. Addison-Wesley Professional. ISBN 0201877562.
* McCarthy, Jim (1995). *Dynamics of Software Development*. Microsoft Press. ISBN 1556158238.
* Conde, Dan (2002). *Software Product Management: Managing Software Development from Idea to Product to Marketing to Sales*. Aspatore Books. ISBN 1587622025.
* Davis, A. M. (2005). *Just enough requirements management: Where software development meets marketing*. Dorset House Publishing Company, Incorporated. ISBN 0932633641.
* Hasted, Edward (2005). *Software That Sells: A Practical Guide to Developing and Marketing Your Software Project*. Wiley Publishing. ISBN 0764597833.
* Hohmann, Luke (2003). *Beyond Software Architecture: Creating and Sustaining Winning Solutions*. Addison-Wesley Professional. ISBN 0201775948.
* John W. Horch (2005). "Two Orientations On How To Work With Objects." In: *IEEE Software*. vol. 12, no. 2, pp. 117–118, Mar. 1995.
* Rittinghouse, John (2003). *Managing Software Deliverables: A Software Development Management Methodology*. Digital Press. ISBN 155558313X.
* Wiegers, Karl E. (2005). *More About Software Requirements: Thorny Issues and Practical Advice*. Microsoft Press. ISBN 0735622671.
* Wysocki, Robert K. (2006). *Effective Software Project Management*Perlu mendaftar (gratis). Wiley. ISBN 0764596365.

Pranala luar
------------

 Media terkait Software development di Wikimedia Commons

| * l
* b
* s
Bidang utama ilmu komputer |
| --- |
| Catatan: Templat ini secara kasar mengikuti Sistem Klasifikasi Komputasi ACM tahun 2012. |
| Perangkat keras | 
* Papan sirkuit cetak
* Periferal
* Sirkuit terpadu
* Integrasi skala sangat besar
* Sistem pada chip (SoCs)
* Konsumsi energi
* Otomasi desain elektronik
* Akselerasi perangkat keras

 |
| Organisasi  sistem komputer | 
* Arsitektur komputer
* Sistem benam
* Komputasi waktu nyata
* Keandalan

 |
| Jaringan | 
* Arsitektur jaringan
* Protokol jaringan
* Perangkat keras jaringan
* Penjadwal jaringan
* Evaluasi kinerja jaringan
* Layanan jaringan

 |
| Organisasi  perangkat lunak | 
* Penerjemah
* Peranti tengah
* Mesin virtual
* Sistem operasi
* Kualitas perangkat lunak

 |
| Notasi dan alat  perangkat lunak | 
* Paradigma pemrograman
* Bahasa pemrograman
* Kompilator
* Bahasa khusus domain
* Bahasa pemodelan
* Kerangka kerja perangkat lunak
* Lingkungan pengembangan terpadu
* Manajemen konfigurasi perangkat lunak
* Pustaka perangkat lunak
* Repositori perangkat lunak

 |
| Pengembangan perangkat lunak | 
* Variabel kontrol
* Proses pengembangan perangkat lunak
* Analisis kebutuhan
* Desain perangkat lunak
* Konstruksi perangkat lunak
* Penyebaran perangkat lunak
* Pemeliharaan perangkat lunak
* Tim pemrogram
* Model sumber terbuka

 |
| Teori komputasi | 
* Model komputasi
* Bahasa formal
* Teori otomata
* Teori komputabilitas
* Teori kompleksitas komputasional
* Logika
* Semantik

 |
| Algoritma | 
* Desain algoritma
* Analisis algoritma
* Efisiensi algoritma
* Algoritma acak
* Geometri komputasi

 |
| Komputasi  matematika | 
* Matematika diskrit
* Peluang
* Statistika
* Perangkat lunak matematis
* Teori informasi
* Analisis matematis
* Analisis numerik
* Ilmu komputer teoritis

 |
| Sistem informasi | 
* Pangkalan data
* Sistem penyimpanan informasi
* Sistem informasi perusahaan
* Sistem informasi sosial
* Sistem informasi geografis
* Sistem pendukung keputusan
* Sistem pengendalian proses
* Sistem informasi multimedia
* Penggalian data
* Perpustakaan digital
* Serambi
* Pemasaran digital
* World Wide Web
* Sistem temu balik informasi

 |
| Keamanan | 
* Kriptografi
* Metode formal
* Peretas
* Layanan keamanan
* Sistem deteksi intrusi
* Keamanan perangkat keras
* Keamanan jaringan
* Keamanan informasi
* Keamanan aplikasi

 |
| Interaksi manusia-komputer | 
* Desain interaksi
* Komputasi sosial
* Komputasi di mana-mana
* Visualisasi
* Aksesibilitas

 |
| Kongruensi | 
* Komputasi kongruensi
* Komputasi paralel
* Komputasi terdistribusi
* Multithreading
* Multipengolahan

 |
| Kecerdasan buatan | 
* Pemrosesan bahasa alami
* Representasi pengetahuan dan penalaran
* Visi komputer
* Perencanaan dan penjadwalan otomatis
* Metodologi pencarian
* Metode kontrol
* Filsafat kecerdasan buatan
* Kecerdasan buatan terdistribusi

 |
| Pembelajaran mesin | 
* Pemelajaran terarah
* Pemelajaran tak terarah
* Pemelajaran kukuh
* Pemelajaran multi-tugas
* Validasi silang

 |
| Grafika | 
* Animasi
* Rendering
* Manipulasi citra
* Unit pemroses grafis
* Realitas campuran
* Realitas virtual
* Pemampatan citra
* Solid modeling

 |
| Komputasi terapan | 
* Komputasi kuantum
* Perdagangan elektronik
* Perangkat lunak perusahaan
* Matematika komputasional
* Fisika komputasional
* Kimia komputasional
* Biologi komputasional
* Ilmu sosial komputasional
* Teknik komputasional
* Informatika kedokteran
* Seni digital
* Penerbitan elektronik
* Peperangan dunia maya
* Pemungutan suara elektronik
* Permainan video
* Pengolah kata
* Riset operasi
* Teknologi pendidikan
* Sistem manajemen dokumen

* '

 |

| Pengawasan otoritas Sunting ini di Wikidata |
| --- |
| Umum | 
* Integrated Authority File (Jerman)

 |
| Perpustakaan nasional | 
* Spanyol
* Amerika Serikat
* Jepang

 |
| Lain-lain | 
* Microsoft Academic

 |