Software Development Life Cycle

Software Development Life Cycle

 

SDLC (Software Development Life Cycle) adalah terminologi yang tidak asing terdengar di lingkungan pengembangan software. Dengan pengembangan ini pula, banyak perusahaan mengembangkan software sebagai produk (Software-as-a-service) untuk dipasarkan kepada masyarakat. Umumnya, dalam pengembangan software ini membutuhkan tahapan yang runut. Pada artikel kali ini, kita akan coba untuk membahas hal yang perlu kamu ketahui dalam pengembangan software.

 

  • Apa itu SDLC?

 

SDLC adalah kependekan dari Software Development Life Cycle atau dalam bahasa Indonesia bisa disebut dengan siklus hidup pengembangan software. SDLC dapat didefinisikan sebagai sekumpulan aktivitas yang diperlukan untuk membangun, melakukan eksekusi hingga pemeliharaan informasi dalam suatu sistem. Dalam pengertian lain, SDLC adalah tahapan kerja yang bertujuan untuk menghasilkan sistem software berkualitas tinggi yang sesuai dengan keinginan pelanggan atau tujuan dibuatnya software tersebut. 

Secara umum, SDLC memiliki cara kerja dengan mengurangi biaya pengembangan perangkat lunak sekaligus meningkatkan kualitas dan mengurangi waktu produksi. SDLC dapat membantu tim mencapai tujuan mereka dengan menilai kekurangan sistem. SDLC juga menentukan persyaratan sistem baru selama pengembangan perangkat lunak. Selain itu, SDLC akan mendukung pengembangan perangkat lunak mulai dari tahap analisis, perencanaan, desain, pengembangan, pengujian hingga penerapan.

Cara kerja utama SDLC adalah menghilangkan pengerjaan ulang yang berlebihan dan perbaikan selanjutnya. Ini bisa dalam bentuk ekspektasi yang salah, yang bisa merugikan, seperti gagal mendapatkan umpan balik dari pengguna akhir atau pelanggan. Secara umum, SDLC merupakan pendekatan iteratif yang harus dipastikan melalui kualitas kode di setiap siklus. Dengan SDLC ini, perusahaan akan fokus pada pengujian untuk menghemat uang saat pengerjaan ulang terjadi.

 

  • Kenapa SDLC itu penting?

 

Setelah membaca definisi, dapat disimpulkan bahwa SDLC memiliki sebuah fungsi dan manfaat penting yaitu untuk menyediakan alat bantu bagi project manager IT dalam memastikan keberhasilan implementasi software yang memenuhi tujuan strategis dan bisnis. Para pengembang perangkat lunak akan lebih mudah memahami apa yang harus mereka bangun dan mengapa. Semua pihak dalam sebuah tim juga memiliki potensi untuk memahami besaran biaya dan sumber daya yang dibutuhkan dalam suatu proyek pengembangan melalui SDLC. Apabila dapat dijabarkan, maka kurang lebih penjelasan detail sebagai berikut:

  1. Memetakan perencanaan, penjadwalan, dan estimasi proyek secara rinci
  2. Menyediakan framework untuk serangkaian aktivitas dan deliverables
  3. Dapat digunakan sebagai mekanisme untuk men-tracking dan mengontrol proyek
  4. Meningkatkan visibilitas perencanaan proyek kepada semua stakeholders yang terlibat dalam proses developing
  5. Meningkatkan kecepatan proses developing
  6. Membantu untuk mengurangi risiko proyek dan overhead rencana manajemen proyek

Jadi, dapat diartikan dari poin di atas adalah SDLC berfungsi untuk memberikan gambaran baik masukan maupun luaran bagi tim pengembang untuk menjalankan proses pengembangan dari satu tahap ke tahap lainnya tanpa risiko pengulangan. 

 

 

  • Tahapan atau Fase dalam SDLC

 

Seperti yang sudah diilustrasikan di gambar pada pembukaan artikel ini, SDLC memiliki 6 tahapan atau fase sebagai berikut:

1. Perencanaan dan Analisis Kebutuhan (Planning and Requirement)

Pada tahap pertama ini, project manager akan melakukan beberapa evaluasi persyaratan yang dibutuhkan dalam sebuah project. Penting untuk diingat agar fase perencanaan harus dapat menjelaskan ruang lingkup dan tujuan pembuatan aplikasi software tersebut. Hal ini bertujuan supaya tim dapat menghasilkan software secara efektif tanpa bergeser dari tujuan awal. 

Pada tahap ini, dilakukan juga aktivitas pengumpulan dan analisis kebutuhan user yang dilakukan oleh tim developer. Requirement yang telah dibuat akan disusun dalam dokumentasi SRS (Software Requirement Specification) atau BRD (Business Requirement Document).

 

2. Perancangan Sistem (Design and Prototyping)

Pada tahap ini, designer akan mempersiapkan sejumlah dokumen desain sistem dan software sesuai dengan dokumen spesifikasi kebutuhan di tahap sebelumnya. Tahapan ini akan menghasilkan prototype dan beberapa output lain meliputi dokumen berisi desain, pola, dan komponen yang diperlukan untuk mewujudkan proyek tersebut sehingga dapat membantu untuk menentukan arsitektur sistem secara keseluruhan. Adapun desain yang dibuat oleh tim UI/UX Designer adalah sebagai berikut:

  1. Membuat architecture design.
  2. Membuat user interface.
  3. Mendesain alur data (Diagram Alur Data).
  4. Membuat diagram proses.
  5. Melakukan usability testing.

Tidak hanya bagi designer, tahap ini juga digunakan oleh tim Produk untuk:

  1. Menentukan prioritas kerja.
  2. Menyusun product roadmap.
  3. Meminta persetujuan dari stakeholder.

Namun, terdapat juga beberapa aspek lain yang perlu diperhatikan dalam tahap ini, antara lain:

  1. Communication, menentukan cara sebuah aplikasi akan berkomunikasi dan saling terintegrasi dengan aset lainnya, contohnya server pusat atau aplikasi lainnya.
  2. Programming, menentukan kerangka kerja atau framework dalam pemecahan masalah yang berkemungkinan akan terjadi saat proses implementasi software.
  3. Architecture, menentukan bahasa pemrograman yang akan dipakai.
  4. User Interface, mendefinisikan bagaimana cara pengguna berinteraksi dengan software dan bagaimana respon software tersebut dapat menerima input yang ada.
  5. Platforms, mendefinisikan operasi sistem yang akan digunakan e.g. Android, iOS, Windows, macOs, etc.
  6. Security, mendefinisikan langkah-langkah untuk keamanan software. Misalnya, perlindungan kata sandi, enkripsi SSL traffic atau membuat penyimpanan kredensial pengguna yang aman.

 

3. Pengembangan perangkat lunak (Software Development)

Tahap ini merupakan tahap penulisan program. Biasanya, jika proyeknya kecil, program dapat ditulis oleh satu developer. Namun, jika proyek besar dapat dipecah dan diselesaikan oleh banyak tim. Pada tahap ini, Access Control atau Source Code Management juga dapat digunakan untuk membantu developer melacak perubahan kode dan memastikan kompatibilitas antara proyek tim yang berbeda untuk mencapai tujuan mereka.

Proses pengkodean tidak terbatas pada kompilasi kode agar aplikasi dapat berjalan, tetapi juga mencakup banyak tugas lainnya, seperti menemukan dan memperbaiki error atau glitches yang ditemukan, dan menulis dokumentasi, seperti panduan pengguna atau bantuan FAQ untuk pertanyaan seputar teknis. Fase ini merupakan salah satu fase dalam siklus hidup pengembangan perangkat lunak yang membutuhkan waktu lebih lama.

 

4. Pengujian (Testing)

Ketika pengembangan perangkat lunak selesai, tim tester harus menguji apakah produk berfungsi dengan optimal. Tahap pengujian software adalah untuk menilai apakah produk yang dikembangkan bekerja dengan baik sesuai dengan kebutuhan pengguna. Pengujian ini terutama melibatkan Quality Assurance (QA), tim developer, dan bisa juga melibatkan pengguna yang akan menggunakan produk tersebut.

QA harus memastikan bahwa perangkat lunak yang dikembangkan memenuhi persyaratan. Selama fase ini, QA mungkin menemukan beberapa bug/defects, error, freeze dan kemudian mereka berkomunikasi dengan tim developer. Tim pengembangan kemudian memperbaiki bug dan mengirimkannya kembali ke QA untuk diuji ulang. Proses ini berlanjut hingga perangkat lunak benar-benar bebas bug, stabil, dan berfungsi sesuai kebutuhan.

Tahapan pengujian ini sangat penting sebelum aplikasi software digunakan pengguna. Beberapa pengujian yang biasanya dilakukan seperti security testing yang diotomatiskan, atau pengujian untuk penerapan yang kompleks. Pengujian harus memastikan setiap fungsi dapat bekerja dengan benar dan lancar sehingga dapat mengurangi kemungkinan adanya keterlambatan dalam pemrosesan, bug dan gangguan yang ditemui pengguna.

Melakukan aktivitas seperti penetration testing perlu dilakukan juga, sebagai salah satu cara bagi tim project untuk mengevaluasi kelemahan-kelemahan terhadap sistem yang telah mereka buat sehingga meminimalisir terjadinya hal-hal yang tidak diinginkan, salah satunya adalah hacking. Red team akan melakukan beberapa tahapan aktivitas penetration testing yang dapat diurutkan sebagai berikut:

  1. Planning. Tahapan pertama yang dilakukan adalah perencanaan. Planning yang dimaksud adalah mendefinisikan ruang lingkup (scope) dan tujuan pengujian, termasuk sistem yang akan ditangani dan menentukan metode yang akan digunakan.   
  2. Scanning. Usai melakukan tahap perencanaan, pentester akan melakukan pemindaian. Scanning dilakukan untuk memahami bagaimana software yang ditargetkan bereaksi apabila terdeteksi upaya penyusupan. Ketika scanning ini, pentester akan melakukan dua cara yaitu analisis statis dan analis dinamis. Analisis statis adalah pengecekan kode aplikasi untuk memperkirakan perilaku saat suatu sistem jaringan berjalan, tools ini dapat memindai seluruh code dalam sekali jalan saja, sedangkan analisis dinamis adalah pengecekan code aplikasi yang sedang berjalan, pemindaian dengan metode ini dipercaya lebih praktis karena memberikan tampilan waktu nyata dari kinerja suatu software.
  3. Gaining access. Ketika sudah mendapatkan akses, pentester mulai menggunakan cross-site scripting, SQL injection, backdoor, dan serangan lainnya untuk mengungkap kerentanan software. Tidak hanya itu, pentester akan mencoba untuk melakukan eksploitasi kerentanan dengan berbagai cara seperti pencurian data, privilege escalation, dan lain sebagainya. Tujuan dari tahap ini adalah memahami kerusakan yang ditimbulkan dari sejumlah aktivitas eksploitasi sebelumnya.
  4. Maintaining access. Pada tahap ini, pentester menggunakan kerentanan yang ada untuk melihat apakah kerentanan yang ditimbulkan bersifat permanen dalam sistem yang sebelumnya sudah dieksploitasi.
  5. Analysis. Tahap terakhir dari penetration testing adalah membuat dokumentasi tentang kerentanan suatu sistem yang telah ditemukan dalam software yang sedang dikembangkan. Tidak hanya itu, pentester juga akan melakukan analisa sekaligus melaporkan risiko yang ditimbulkan dari kerentanan software dan saran untuk meningkatkan keamanan.

 

 

5. Deployment

 

Setelah menyelesaikan issues seperti bug dan defects sebelumnya, maka software sudah siap untuk dirilis ke pasar untuk digunakan oleh pengguna. Tahapan ini bisa menjadi sulit dan kompleks, contohnya saja beberapa perusahaan diharuskan untuk memperbarui database ke aplikasi yang baru dikembangkan sehingga memakan waktu dan tenaga lebih banyak. 

 

6. Pemeliharaan (Maintenance)

Setelah deployment selesai, dan para pengguna sudah mulai menggunakan produk yang telah dibuat. Tim project jelas tidak boleh lepas tangan begitu saja, ada beberapa aktivitas yang setidaknya harus dilakukan sebagai berikut:

  1. Melakukan upgrade berkala ke versi software yang terbaru.
  2. Menambah beberapa fitur ke dalam perangkat lunak.
  3. Memperbaiki bug jika ada.
  4. Membatasi akses dan menyaring permintaan data customer jika dirasa terdapat suspicious activity.
  5. Mencari celah keamanan pada sistem yang sudah dibuat.

 

 

  • Pendekatan atau Metode Pengembangan SDLC

 

Apabila kita mencari referensi tentang pengembangan SDLC, terdapat banyak sekali metode yang tertulis dalam pengembangan SDLC, namun hanya terdapat dua metode yang terkenal dan sering digunakan, contohnya metode pengembangan tradisional Waterfall dan metode Agile. Alasan kenapa terjadi demikian adalah banyak metode yang bisa dibilang terbaik dalam bidangnya namun belum tentu hal tersebut berlaku di project lain. Lalu, bagaimana cara kita untuk mengetahui metode yang tepat? Terdapat beberapa aspek penting yang perlu dipertimbangkan agar pengembangan software cocok dengan metode yang dipakai, yaitu:

  1. Cost and Budget. Pada poin pertama ini, kita perlu membuat perencanaan yang strategis terhadap anggaran yang akan dikeluarkan. Kita juga perlu melakukan prediksi apakah saat implementasi nanti akan terdapat perubahan rencana terhadap anggaran atau tidak ada perubahan sama sekali dan masih menggunakan rencana yang sudah dibuat sebelumnya.
  2. Team size. Banyaknya anggota tim yang terlibat dalam proses pengembangan dapat menentukan pemilihan metode SDLC. Kita perlu memperkirakan jumlah anggota dari masing-masing divisi, apakah kedepannya nanti anggota tim project tersebut akan bertambah seiring berjalannya project atau tidak ada penambahan anggota sama sekali.  
  3. Ability to take risks. Kemampuan sebuah tim dalam menghadapi dan memprediksi (forecast) sebuah risiko sangat diperhitungkan. Tim project diharuskan untuk mengetahui kira-kira seberapa besar dampak apabila kesalahan sudah terjadi dan tim diharapkan sudah mempunyai solusi untuk itu.
  4. Flexibility. Kita perlu mempertimbangkan dan menentukan scope (cakupan) dari sebuah project di awal perencanaan. Apakah project yang akan dikerjakan mengalami banyak perubahan sehingga membuat project tersebut berada di luar scope atau mungkin tidak di luar scope sama sekali. 
  5. Client or Stakeholder collaboration. Tim project harus sudah bisa menentukan apakah client atau stakeholder dilibatkan dalam proses pengerjaan. Tim project juga harus bisa menilai seberapa terlibat mereka di dalam proses pengembangan software, apakah mereka akan terlibat secara aktif atau pasif.  
  6. Timeline. Tim project dapat memperkirakan berapa waktu yang dibutuhkan dalam pengembangan software. Apakah dibutuhkan secepat mungkin atau tidak masalah cepat atau lambat, karena yang terpenting adalah hasil yang software yang memuaskan.

Seperti yang sudah dijelaskan di awal, terdapat banyak metode project management dan masing-masing diantaranya memiliki kelebihan dan kekurangan. Kita mungkin sudah mengenali dua metode pengembangan perangkat lunak yang terkenal, tentunya dari metode tersebut dapat bekerja sangat baik di beberapa industri dan projects. Di bawah ini terdapat informasi beserta penjelasan mengenai metode SDLC: 

  1. Metode Waterfall (Traditional Project Management)

   

Pendekatan ini dilakukan secara linear-sekuensial atau berjalan lurus seperti air terjun yang jatuh lurus, mulai dari awal sampai akhir. Dalam metode SDLC waterfall, hasil dari satu fase menjadi input untuk fase berikutnya. Metode waterfall juga bersifat documentation-intensive, karena pada fase awal kita banyak mendokumentasikan apa saja yang perlu dilakukan pada fase berikutnya.

Berdasarkan gambar Waterfall di atas, kita dapat lihat bahwa setiap fasenya sangat bergantung dari dokumentasi fase sebelumnya yang berarti bisa dapat memicu kegagalan. Terdapat banyak sekali kesalahan jika tidak berjalan sesuai dengan rencana awal dan juga tidak bisa mengulang kembali pekerjaan yang pada dasarnya sudah diselesaikan sebelumnya. Namun, tim project dapat menggunakan metode ini dengan beberapa kondisi sebagai berikut:

  1. Akhir dari sebuah project atau outcome telah dideklarasikan dan didefinisikan dengan jelas di awal dan tim pengembang tidak memiliki rencana untuk melakukan perubahan terhadap rencana yang sudah dibuat sebelumnya meskipun itu dibutuhkan.
  2. Para pemangku kepentingan tahu jelas apa yang mereka inginkan dari software yang akan dibuat dan mereka juga tidak memiliki rencana untuk merubah perencanaan yang sudah dibuat sebelumnya.
  3. Project yang akan dikerjakan berjalan dengan konsisten dan dapat diprediksi hasilnya. 
  4. Project yang akan dikerjakan berkemungkinan membutuhkan banyak calon anggota selama pengerjaan.
  5. Project yang akan dikerjakan membutuhkan banyak dokumentasi sebagai alat untuk tracking yang bersifat ekstensif.  

Metode ini tidak cocok jika project yang dijalankan:

  1. Project yang akan dikerjakan memiliki peluang besar untuk berubah atau tidak sesuai pada rencana awal.
  2. Project yang membutuhkan pengujian yang konstan dan dapat beradaptasi dengan baik terhadap umpan balik (feedback) yang diberikan selama proses pengerjaan project berlangsung. 
  3. Project yang akan dikerjakan belum memiliki gambaran atau outcomes yang jelas sejak awal dan requirement yang dibutuhkan masih belum jelas juga.

 

Setelah membaca semua informasi mengenai Waterfall di atas kita dapat simpulkan bahwa traditional project management Waterfall memiliki kelebihan dan kekurangan sebagai berikut:

 

Kelebihan Kekurangan
Dapat diidentifikasikan bahwa metode Waterfall memiliki work flow atau alur kerja yang terukur dan jelas. Setiap proses dilakukan secara bertahap dan sistematis. Tahapan pengerjaan project yang terlalu sistematis juga tidak baik. Inilah yang membuat metode ini menjadi kelemahan dikarenakan kurang fleksibel terhadap perubahan yang mungkin saja diperlukan di tengah pengerjaan project.
Proses yang tidak membutuhkan banyak sumber daya sehingga lebih hemat biaya. Hal ini disebabkan pihak client tidak dapat turut serta dalam proses pengembangan software Dikarenakan proses yang dilakukan secara bertahap membuat metode Waterfall membutuhkan waktu lebih lama. Setiap proses pengerjaan dilakukan satu per satu sehingga tidak memungkinkan untuk melakukan aktivitas lain dalam satu waktu,
Memiliki prosedur dokumentasi yang baik, sistematis, dan bertahap sehingga setiap informasi akan tercatat dan terdistribusi ke seluruh anggota tim project dengan baik. Pada penerapan metode ini, orang lain di luar tim (Client) tidak dapat melihat keseluruhan konsep dan fungsi sebuah software yang dibuat. Mereka hanya bisa melihat setelah seluruh tahapan selesai dilakukan.

 

2. Metode Agile

Metode Agile adalah sebuah metodologi dalam pengembangan software yang didasarkan pada proses pengerjaan berulang yang terdiri dari aturan dan solusi yang sudah disepakati. Metode ini juga dilakukan dengan sistem kolaborasi antar tim secara terstruktur dan terorganisir. 

Metode Agile sangat cocok untuk proyek jangka pendek dikarenakan metode ini akan sangat mudah beradaptasi apabila terjadi perubahan dalam suatu proyek. Dalam Agile Development, nilai terpentingnya terdapat pada tim yang bisa memutuskan suatu hal dengan cepat dan tepat.

Agile software development sendiri memiliki empat nilai inti (Agile core value) sebagai berikut:

  1. Value responding to change over following a plan. Client akan terus meminta perubahan dan revisi sampai client merasa sesuai dengan produk yang dibuat. Maka dari itu, setiap tim project harus siap dengan perubahan yang terjadi.
  2. Value individuals and interactions over processes and tools. Nilai yang kedua ini menyatakan pengembangan perangkat lunak tidak akan sukses jika tidak ada kolaborasi antara tim project dan client. Selain itu, dibutuhkan juga komunikasi yang baik agar pengembangan berjalan dengan baik dan maksimal. 
  3. Value working software over comprehensive documentation. Dokumentasi pada Agile dapat berupa sebuah cerita dari user untuk tim project. Walaupun begitu, dokumentasi ini memang penting, namun pengembangan perangkat lunak yang berjalan sesuai dengan direncanakan jauh lebih penting.
  4. Value customer collaboration over contract negotiation. Kontrak memanglah penting, tapi mungkin produk yang dibuat oleh pengembang berbeda dan sedikit tidak sesuai dengan apa yang dituliskan dalam kontrak. Dengan adanya kolaborasi dengan client, tim project dapat menyesuaikan produk yang dikembangkan sesuai dengan yang tertulis dalam kontrak dan keinginan client.

Agile software development memiliki 7 tujuan sebagai berikut:

  1. High Value & Working App System. Tujuan yang pertama adalah high value and working app system. Artinya, untuk menghasilkan sebuah software yang punya nilai jual tinggi dengan menggunakan biaya pembuatan yang serendah mungkin. Namun, kualitas produk tetap menjadi prioritas utama dan tidak boleh disepelekan. 
  2. Iterative, Incremental, Evolutionary. Agile merupakan metode pengembangan software yang dijalankan secara iteratif, berulang, serta bisa diubah di tengah jalan bila perlu. Dengan istilah lain, metode ini fleksibel dan bisa dipakai dalam proyek IT jangka pendek.
  3. Cost Control & Value Driven Development. Proses software development bisa disesuaikan dengan kebutuhan user atau pengguna. Di samping itu, tim pengembang juga bisa mengontrol biaya serta waktu yang dibutuhkan untuk proses software development sesuai kebutuhan.
  4. High Quality Production. Meskipun menggunakan biaya seminimal mungkin, produk berupa software atau perangkat lunak akan tetap terjaga kualitasnya.
  5. Flexible & Risk Management. Tujuan fleksibel berkaitan dengan jadwal pertemuan dengan klien yang bisa diatur kapan saja. Dengan begitu, fungsi perangkat lunak yang sedang dikembangkan tetap terjaga. Cara ini juga dilakukan untuk mengurangi kesalahan program sebelum akhirnya dilakukan proses deploy aplikasi.
  6. Collaboration. Kolaborasi sangat penting dilakukan oleh tim developer untuk membahas feedback dari klien. Oleh karena itu diperlukan koordinasi serta komunikasi yang baik dengan seluruh anggota tim.
  7. Self Organizing, Self-Managing Teams. Tujuan akhir dari metode Agile yaitu developer diberi akses untuk mengatur sendiri urusan software development. Tugas seorang manajer yaitu menjadi penghubung antara developer dan client. Dengan begitu, kemungkinan miscommunication bisa dikurangi. 

Metode Agile sendiri masih terbagi lagi menjadi beberapa jenis bagian seperti Adaptive software development (ASD), Agile Modelling (AM), Crystal, Dynamic System Development Method (DSDM), Extreme Programming (XP), Feature Driven Development (FDD), Rational Unified Process, serta Scrum Methodology. Untuk jenis yang paling sering digunakan adalah Scrum Methodology.     

Scrum methodology adalah salah satu dari bagian Agile project management. Scrum berfokus pada pengembangan software yang kompleks. Pengerjaan software pada scrum dibagi menjadi beberapa proses kecil yang disebut dengan sprints. Dalam satu sprint, biasanya tim project akan berfokus menyelesaikan satu fitur tertentu. Terdapat tiga peran penting dalam Scrum team seperti berikut:

  1. Product Owner. Bertugas memaksimalkan nilai bisnis dari software yang dikembangkan dan memastikan list fitur dari produk software yang dibuat telah tersusun dengan baik.
  2. Development Team. Sekumpulan orang yang memiliki skill tertentu untuk menjalankan project e.g. programmer, designer, writer, etc.
  3. Scrum Master. Bertugas memfasilitasi daily scrum meeting dan memastikan bahwa tim sudah paham dengan proses Scrum. Selain itu, ia juga akan berkoordinasi dengan Product Owner agar bisa memaksimalkan hasil produk dan ROI (Return of Investment)

Scrum master yang akan bertugas untuk memfasilitasi daily sprint meeting dengan product owner dan development team, di mana masing-masing peran akan menjelaskan mengenai status dari tugas yang sedang dijalankan dan job desc apa yang akan mereka lakukan di hari selanjutnya. Aktivitas yang terdapat di dalam metode ini adalah sebagai berikut:

  1. First meeting. Sebelum dimulainya aktivitas yang lain, haruslah dimulai dari first meeting yang agendanya membuat to do list dalam Backlog lalu disortir berdasarkan skala prioritas oleh product owner.
  2. Sprint planning meeting. Melakukan perencanaan pada Sprint adalah sebuah keharusan, dimulai dari bagaimana Sprint akan dilakukan dan bagaimana caranya agar tim project mencapai outcomes yang diinginkan.
  3. Daily scrum meeting. Ketika Sprint sudah berjalan sesuai dengan Sprint planning meeting, maka tim development akan melakukan rapat harian singkat yang disebut daily scrum meeting yang fungsinya untuk melakukan laporan update pengerjaan hari sebelumnya. 
  4. Sprint review meeting. Pada akhir rangkaian kerja Sprint, setiap tim diharuskan telah membuat Sprint review untuk menilai performa yang selama ini sudah berjalan.

Tim project dapat mempertimbangkan untuk menggunakan metode ini dengan beberapa kondisi seperti:

  1. Project yang akan dikerjakan terbuka terhadap perbaikan yang terus menerus.
  2. Project yang akan dikerjakan memiliki peluang untuk berubah saat di tengah pengerjaan project.
  3. Para pemangku jabatan (Stakeholders) atau client ingin terlibat di setiap fase pengerjaan project.  

Setelah membaca informasi tentang Agile project management (Scrum), kita dapat menyimpulkan bahwa metode ini memiliki kelebihan dan kekurangannya sebagai berikut:

 

Kelebihan Kekurangan
Pengembangan perangkat lunak membutuhkan waktu yang relatif cepat dan tidak membutuhkan sumber daya yang terlalu besar Metode Agile ini tidak sesuai dengan tim yang memiliki komitmen untuk menyelesaikan project secara bersama
Dapat merespon perubahan dengan cepat dan sesuai dengan kebutuhan dari client Kurang sesuai dengan tim besar yang memiliki anggota lebih dari 20 orang
Client dapat ikut berpartisipasi dalam pengembangan perangkat lunak dengan cara memberikan feedback kepada tim pengembang selama proses pembuatan perangkat lunak Setiap anggota tim harus siap dengan perubahan yang dapat terjadi sewaktu-waktu.

 

Sebelum metode Agile project management (Scrum) muncul, sebelumnya terdapat metode waterfall yang sudah dijelaskan di atas yang lebih dulu digunakan sebagai metode pengembangan software. Lalu, apa saja perbedaan dari keduanya? 

 

Agile PM (Scrum) Traditional PM (Waterfall) 
Dikembangkan secara incremental atau sedikit demi sedikit namun teratur Dikembangkan secara runtut dari rangkaian awal hingga akhir
Estimasi pengerjaan project kecil bisa sangat cepat, namun untuk project besar waktunya sulit diprediksi Setiap project sudah memiliki estimasi waktu yang jelas
Pengerjaan dibagi antar individu Tidak dilakukan secara individu
Testing dan development dilakukan secara bersamaan Testing dan development dilakukan secara terpisah
Client dapat memberikan feedback produk di tengah proses pengembangan Client hanya bisa melihat produk ketika project sudah selesai
Pengembangan software lebih diprioritaskan daripada dokumentasi Dokumentasi merupakan prioritas utama
Project dilakukan selama 2-4 minggu, perencanaan cukup kurang. Proses pengembangan dilakukan bertahap dan lebih besar dari iterasi. Di akhir fase, selalu terdapat penjelasan rinci untuk fase berikutnya.

 

 

  • Secure SDLC

 

                                  

SDLC atau dalam bahasa Indonesia siklus hidup pengembangan perangkat lunak adalah proses atau aktivitas yang di dalamnya mencakup perencanaan, implementasi, dan pemeliharaan software yang telah ada kurang lebih selama 60 tahun terakhir. Namun, selama proses pengembangannya, keamanan sering diabaikan dari SDLC. Di era sekarang, terdapat banyak sekali kasus pembobolan data vital (Data breaches), ransomware, dan ancaman siber lainnya. 

Para pemangku kepentingan (Stakeholder) menganggap keamanan akan menambah biaya yang berlebihan (Overhead cost) saat pengembangan software. Namun, kenyataannya adalah dampak dari kerusakan software itulah yang akan memakan biaya jauh lebih tinggi. Yang menjadi kendala dalam proses pengembangan biasanya adalah bagaimana tim project menambahkan aspek keamanan pada perangkat lunak yang rumit dan sudah dibangun sebelumnya. Ini membutuhkan strategi yang advance di mana tim project harus memikirkan kembali untuk memperkenalkan best practice ke dalam bagian dari proses pengembangan. Jika tim project ingin implementasikan keamanan di dalam pengerjaan software, maka hal yang perlu diperhatikan dalam memulainya ialah:

  1. Memberikan edukasi kepada tim development dalam mempraktikan coding dengan baik dan aman. Lalu, tidak lupa juga untuk menyediakan frameworks atau kerangka kerja untuk keamanan.
  2. Melakukan analisis risiko terhadap arsitektur yang akan dibuat.
  3. Mempertimbangkan keamanan ketika tim sedang merencanakan dan membangun uji kasus.
  4. Menggunakan scanning tools untuk static analysis, dynamic analysis, dan interactive application security testing.   

Setelah melakukan hal di atas, tim project perlu mengembangkan pendekatan strategis untuk dampak yang lebih signifikan. Apabila para pembuat keputusan (Decision-maker) tertarik dan setuju untuk melakukan implementasi secure SDLC secara masif dan komplit, maka hal yang perlu dilakukan selanjutnya adalah:

  1. Melakukan gap analysis untuk menentukan kegiatan dan kebijakan apa yang akan berlaku di proses pengembangan dan seberapa efektifnya.
  2. Membuat sebuah software security program (SSP) atau software security initiative (SSI) dengan tujuan yang realistis dan dapat dicapai dengan metrics yang ditentukan.
  3. Menjadikan aktivitas pengembangan keamanan menjadi sebuah proses yang formal di dalam SSI.
  4. Menggunakan tenaga dari luar seperti vendor.
  5. Melakukan investasi jangka panjang seperti mengadakan pelatihan coding dalam bentuk workshop untuk tim developer sebaik mungkin dan difasilitaskan dengan tools yang canggih.

Perlu diketahui bagi kita semua untuk mengerti semua aktivitas yang akan dilakukan dalam melakukan penerapan keamanan sistem. Terdapat beberapa praktik yang di dalamnya sebagai berikut:

  1. Static analysis. Sebuah proses pengolahan data yang meliputi pemeriksaan, pembersihan, transformasi, pemrosesan, dan pemodelan data. Pada umumnya, proses ini merupakan proses otomatis yang mengidentifikasikan pola code tidak aman (Insecure code) yang terdapat di dalam perangkat lunak seperti infrastructure as code (IaC) dan application code. Tujuan dari adanya aktivitas ini adalah memberikan kesempatan bagi tim developer untuk memperbaiki masalah jauh sebelum mereka melakukan deployment. 
  2. Security scanning. Mirip dengan aktivitas sebelumnya, proses pengujian yang dilakukan dengan cara memindai seluruh berkas atau file dalam aplikasi berbasis web, website, jaringan, dan sistem. Pengujian jenis ini bertujuan untuk menemukan kerentanan berupa manipulasi atau modifikasi file yang tidak sah. Selain itu, pemindaian bisa dilakukan secara otomatis atau manual tergantung alat dan metode yang diterapkan. Pemindaian menghasilkan insight mendalam tentang celah kerentanan serta menyediakan beberapa rekomendasi terbaik untuk mengatasi masalah yang ditemukan.
  3. Code reviews. Proses ini dapat didefinisikan sebagai sekumpulan aktivitas yang dilakukan untuk membaca kode, memberikan masukan, termasuk komentar mengenai perbaikan kode dari rekan satu tim. Atau menurut beberapa sumber lainnya Code Review bisa diartikan sebagai sebuah pertemuan biasanya terdiri dari seluruh anggota tim, untuk membaca secara detail kode baris demi baris dari tim itu sendiri.
  4. Penetration testing. Praktik ini bisa dibilang cukup intensif, pengujian ini melibatkan tenaga cyber security yang profesional untuk menguji keamanan infrastruktur software. Pentester akan melakukan beberapa rangkaian kerja seperti menganalisis kerentanan hingga eksekusi eksploitasi, dan dari proses tersebut menghasilkan sebuah laporan tentang berbagai masalah yang ditemukan.
  5. Bug bounties. Praktik ini mirip dengan sebelumnya, Bug bounty adalah sebuah program yang dibuat oleh para perusahaan atau developer untuk memberikan apresiasi berupa uang kepada para hacker. Apresiasi tersebut diberikan kepada para hacker yang berhasil menemukan dan melaporkan bug pada website atau aplikasi mereka
  6. Training. Pendidikan yang baik merupakan investasi bagi perusahaan kedepannya. Dunia keamanan siber terus berubah dengan cepat, ilmu yang didapat hari ini belum tentu masih berlaku 10 tahun kemudian. Pelatihan keamanan dapat sangat membantu dalam mengurangi kerentanan software yang disebabkan oleh human error.  

Setelah membaca informasi tentang secure SDLC, diharapkan kita tahu bahwa mengamankan SDLC adalah sebuah gerakan yang baik. Berikut adalah best practice yang dapat diikuti jika ingin menghasilkan outcomes yang baik dalam implementasi keamanan di SDLC:

  1. Culture. Biasakan untuk menciptakan budaya kerja SDLC di mana keamanan siber adalah yang terpenting. Memperhitungkan dan mengidentifikasikan masalah keamanan ke dalam project kick-off sebagai prioritas.  
  2. Standardization. Membuat roadmap pengembangan Secure SDLC yang konsisten, artinya adalah menjadikan keamanan siber sebagai standar yang baru apabila tim project mengerjakan pengembang software lainnya.
  3. Testing. Melakukan tes secara teratur menggunakan static analysis security testing (SAST).  
  4. Document and manage. Kerentanan keamanan yang teridentifikasi selama pengerjaan SDLC perlu didokumentasikan  agar tidak terjadi lagi kedepannya. Karena kerentanan bisa terjadi kapan saja, dengan melakukan pemantauan yang berkelanjutan diharapkan dapat mencegah peningkatan risiko dan biaya perbaikan.

 

 

  • Referensi 

 

https://www.geeksforgeeks.org/software-engineering-spiral-model/ 

https://accounting.binus.ac.id/2020/05/19/memahami-system-development-life-cycle/ 

https://www.binaracademy.com/blog/sdlc-6-tahapan-metode-software-development-life-cycle-populer 

https://www.ekrut.com/media/sdlc-adalah#2_cara_kerja_s_d_l_c 

https://www.guru99.com/software-development-life-cycle-tutorial.html 

https://www.productplan.com/learn/software-development-lifecycle/

https://www.roberthalf.com.au/blog/employers/6-basic-sdlc-methodologies-which-one-best

https://sis.binus.ac.id/2019/07/02/software-development-model-incremental-model/

https://www.lucidchart.com/blog/pros-and-cons-of-waterfall-methodology  

https://www.dicoding.com/blog/konsep-agile-pada-software-development/ 

https://www.dewaweb.com/blog/pengertian-penetration-testing/  

https://www.synopsys.com/blogs/software-security/secure-sdlc/ 

https://www.paloaltonetworks.com/cyberpedia/what-is-secure-software-development-lifecycle 

https://www.checkpoint.com/cyber-hub/cloud-security/what-is-secure-sdlc/#

https://owasp.org/www-pdf-archive/Jim_Manico_(Hamburg)_-_Securiing_the_SDLC.pdf 

https://snyk.io/learn/secure-sdlc/  

Daniel Eduardo Daud