Berikut ini adalah beberapa definisi resmi dari Rekayasa Perangkat Lunak atau software engineering yang diambil dari beberapa sumber, yaitu :
Menurut IEEE, Software engineering is defined as the application of systematic, disciplined, quantifiable, approach to development, operation and maintenance software .
Rekayasa perangkat Lunak merupakan proses pengembangan, pengoperasian dan perawatan perangkat lunak yang sistematik dan dapat dikuantifikasikan alias diukur keberadaannya dengan angka-angka atau ukuran tertentu.
Menurut Conger, Software engineering is the systematic development, operation, maintenance; and retirement of software.
Rekayasa perangkat Lunak adalah sebuah proses yang sistematik, mulai dari proses pengembangan, pengoperasian, perawatan hingg perangkat lunak tersebut tidak lagi digunakan.
Menurut Gezli et al, Software engineering is the field of computer science that deals with the building of software system that are so large or so complex that they are built by a team or teams of engineers.
Dari definisi diatas terlihat bahwa penekanan dari Rekayasa perangkat Lunak hanya terjadi jika sebuah perangkat lunak dianggap telah memiliki skala besar dan dianggap kompleks sehingga membutuhkan sebuah tim untuk mengerjakannya. Definisi ini sedikit bertentangan dengan definisi-definisi sebelumnya, karena di definisi sebelumnya telah disebutkan bahwa Rekayasa perangkat Lunak tidak memiliki hubungan dengan asas skalabilitas (besar kecilnya sebuah perangkat lunak), tetapi lebih ke arah sebuah siklus hidup dari mulai perancangan hingga pemeliharaan.
Menurut Bjorner, Software engineering is the establishment and use of sound methods for the efficient construction of efficient, correct, timely and pleasing software that solves the problems such as users identify them.
Dari definisi diatas disebutkan bahwa Rekayasa perangkat Lunak lebih bertujuan ke arah sebuah efisiensi pengerjaan perangkat lunak dan mampu memuaskan pengguna dengan asumsi telah mampu memecahkan masalah yang dihadapi oleh pengguna.
Menurut Laplante, Software engineering is systematic approach to the analysis, design, assessment, implementation, test, maintenance and reengineering of software, that is, the application of engineering to software. In the software engineering approach, several models for the software life cycle are defined, and many methodologies for the definition and assessment of the different phases of a life-cycle model.
Perbedaan yang signifikan dalam definisi ini yaitu diikutsertakannya siklus hidup sebagai sebuah komponen penting dalam Rekayasa perangkat Lunak . Hal ini disebabkan bahwa sebuah perangkat lunak mungkin saja bersifat obsolete atau ketinggalan jaman, tetapi di perjalanan waktu perangkat lunak tersebut dapat direvisi dan juga dikembangkan lagi menjadi sebuah perangkat lunak yang baru dan lebih baik.
Menurut Deek et al, Software engineering is a cognitive reaction to the complexity of software development. It reflects the inevitable need for analysis and planning; reliability and control of risk; and scheduling and coordination when embarking on any complex human endeavor.
Definisi diatas mengikutsertakan unsur resiko dalam sebuah Rekayasa perangkat Lunak dan juga perilaku dari manusia (baik pengembang maupun dari pengguna) sehingga di dalam proses pengembangan perangkat lunak sesungguhnya juga terdapat unsur ilmu manajemen yang masuk didalamnya.
Rekayasa perangkat Lunak meliputi beberapa pokok bahasan penting antara lain :
-
Domain Engineering
Mampu memahami permasalahan yang muncul dan akan dijadikan sebagai proyek perangkat lunak.
-
Requirement Engineering
Mampu memahami kebutuhan pengguna sekaligus melakukan pemecahan masalah
-
Software Design
Mampu memahami serta mengimplementasikan perancangan perangkat lunak termasuk didalamnya aspek HCI (Human Computer Interaction).
-
Development
Proses pengembangan sebuah perangkat lunak yang nantinya akan melibatkan mengenai algoritma, bahasa pemrograman yang digunakan serta teknik yang berkaitan didalamnya seperti basis data dan sistem informasi.
-
Operations
Operasional perangkat lunak dapat dipisahkan menjadi dua bagian penting yakni pada saat proses testing yang seharusnya dilakukan bersama-sama antara pengembang dan pengguna perangkat lunak, dan proses implementasi yang didalamnya bisa terdapat langkah- langkah awal seperti pelatihan dan perbaikan pasca produksi.
-
Maintenance
Maintenance adalah proses pemeliharaan terhadap aspek perangkat lunak seperti basis data, instalasi, dimana didalamnya juga terdapat proses dokumentasi dari pengembang perangkat lunak. Proses dokumentasi nantinya tidak hanya ditujukan untuk pengguna, tetapi juga untuk pengembang perangkat lunak itu sendiri jika nantinya terjadi proses revisi atau penggantian lebih lanjut
Jika dilihat dari proses pengembangan perangkat lunak, akan melibatkan beberapa unsur antara lain :
-
Software Engineers atau pengembang perangkat lunak
-
Software atau perangkat lunak
-
User atau pengguna