Tuesday, October 29, 2024

Memahami Kebutuhan PL

 


Requirement atau kebutuhan perangkat lunak adalah daftar layanan/ fitur kemampuan perangkat lunak yang harus disediakan oleh aplikasi.

Ada beberapa macam requirement (kebutuhan) menurut Sommerville yaitu:
  1. Kebutuhan pengguna (user requirement). Pernyataan tentang layanan yang disediakan sistem dan tentang batasan-batasan operasionalnya. Pernyataan ini dapat dilengkapi dengan gambar/diagram yang dapat dimengerti dengan mudah.
  2. Kebutuhan sistem (system requirement). Sekumpulan layanan/kemampuan sistem dan batasan-batasannya yang ditulis secara detail. System requirement document (dokumen kebutuhan sistem) sering disebut functional specification (spesifikasi fungsional), harus menjelaskan dengan tepat dan detail. Ini bisa berlaku sebagai kontrak antara klien/pemesan sistem dan pembangun perangkat lunak (software).
  3. Spesifikasi rancangan perangkat lunak (software design specification). Gambaran abstrak dari rancangan perangkat lunak yang menjadi dasar bagi perancangan dan implementasi yang lebih detail. 
Tipe-tipe Requirement
  • Functional Requirements: Fitur dan layanan yang harus disediakan sistem untuk memenuhi tujuan.
  • Non-Functional Requirements: Aturan atau batasan yang mempengaruhi bagaimana sistem harus beroperasi, termasuk keandalan, keamanan, kinerja, dan lain-lain.
  • Domain Requirements: Spesifikasi kebutuhan khusus yang berasal dari domain sistem.

Proses Requirement Engineering
  • Requirement Elicitation: Proses pengumpulan informasi dari berbagai pemangku kepentingan.
  • Requirement Analysis: Menganalisis data yang dikumpulkan untuk menemukan ketidakjelasan atau konflik dalam kebutuhan.
  • Requirement Specification: Mendokumentasikan requirement secara formal agar mudah dimengerti oleh semua pemangku kepentingan.
  • Requirement Validation: Verifikasi bahwa requirement yang telah didokumentasikan sesuai dengan kebutuhan pengguna.

Teknik Elicitation Requirement
  • Wawancara: Berbagai jenis wawancara untuk mendalami kebutuhan pengguna.
  • Observasi: Pengamatan langsung terhadap cara kerja atau interaksi pengguna.
  • Workshops dan Focus Groups: Diskusi intensif bersama pengguna dan pemangku kepentingan.
  • Survei dan Kuesioner: Teknik untuk menjangkau pengguna dalam skala yang lebih luas.

Tools dan Metode dalam Requirement Engineering
  • Penggunaan tools seperti Use Case Diagrams, User Stories, dan Context Diagrams.
  • Pengenalan metode seperti QFD (Quality Function Deployment) dan Persona Development untuk mendalami user needs.

Referensi


Pressman, Roger.S. "Software Engineering : A Practioner's Approach." 


Latihan


Deskripsi Kasus

PT. Travelo adalah perusahaan yang bergerak di bidang perjalanan dan pariwisata. Untuk meningkatkan pelayanannya, perusahaan ini ingin mengembangkan sistem pemesanan tiket secara online, yang mencakup pemesanan tiket pesawat, kereta api, dan hotel. Mereka ingin sistem ini mudah digunakan, aman, dan dapat diakses di perangkat mobile. Sebagai seorang analis sistem, Anda bertanggung jawab dalam tahap requirement untuk mengidentifikasi kebutuhan dari sistem ini.

Permintaan dan Ekspektasi dari Pemangku Kepentingan:
  1. Pengguna (Traveler) menginginkan antarmuka yang mudah digunakan, dapat mencari tiket dengan berbagai filter, dan melakukan pembayaran dengan aman.
  2. Administrator Sistem membutuhkan akses untuk mengelola data penerbangan, perjalanan kereta, dan hotel serta memantau transaksi.
  3. Tim Manajemen ingin laporan penjualan secara real-time dan data statistik untuk keperluan pengambilan keputusan.
  4. Departemen Keamanan IT menginginkan fitur keamanan tambahan, termasuk enkripsi data dan otentikasi ganda untuk pembayaran.
Tugas: Identifikasi Requirement
  1. Identifikasi Functional Requirements (Fungsional)
  2. Identifikasi Non-Functional Requirements (Non-Fungsional)
  3. Dokumentasikan requirement tersebut

Absensi





Tuesday, October 15, 2024

Aspek manusia dalam Software Engineering

 

Peran Manusia

Dalam rekayasa perangkat lunak, ada berbagai profesi atau peran yang terlibat di sepanjang siklus pengembangan perangkat lunak. Setiap peran memiliki tugas dan tanggung jawab spesifik untuk memastikan bahwa perangkat lunak dikembangkan secara efektif dan sesuai dengan kebutuhan pengguna. Berikut adalah beberapa peran utama dalam software engineering beserta tugas dan tanggung jawabnya:

1. Software Engineer / Software Developer

Tugas dan Tanggung Jawab:

  • Merancang, mengembangkan, menguji, dan memelihara perangkat lunak.
  • Menerjemahkan kebutuhan pengguna atau klien menjadi solusi teknis.
  • Menulis kode dan mendokumentasikan pengembangan perangkat lunak.
  • Bekerja sama dengan tim untuk memperbaiki bug dan mengoptimalkan perangkat lunak.

2. Project Manager

Tugas dan Tanggung Jawab:

  • Memimpin dan mengelola proyek pengembangan perangkat lunak dari awal hingga akhir.
  • Menyusun rencana proyek, menetapkan jadwal, dan mengelola sumber daya.
  • Berkomunikasi dengan pemangku kepentingan, tim, dan klien untuk memastikan bahwa proyek berjalan sesuai jadwal dan anggaran.
  • Menyelesaikan masalah dan kendala proyek serta memastikan kualitas akhir perangkat lunak.

3. Business Analyst

Tugas dan Tanggung Jawab:

  • Mengidentifikasi dan menganalisis kebutuhan bisnis serta mentranslasikan kebutuhan ini ke dalam spesifikasi teknis yang akan digunakan oleh tim pengembang.
  • Berperan sebagai penghubung antara pemangku kepentingan bisnis dan tim teknis.
  • Memastikan solusi perangkat lunak memenuhi kebutuhan bisnis dan memberikan nilai tambah.

4. Quality Assurance (QA) Engineer

Tugas dan Tanggung Jawab:

  • Merancang dan menjalankan pengujian perangkat lunak untuk memastikan kualitas dan keandalannya.
  • Menemukan, mendokumentasikan, dan melaporkan bug atau masalah dalam perangkat lunak.
  • Bekerja sama dengan pengembang untuk memastikan masalah yang ditemukan dapat diperbaiki sebelum produk diluncurkan.
  • Membuat dan menjaga dokumentasi pengujian.

5. UI/UX Designer

Tugas dan Tanggung Jawab:

  • Merancang antarmuka pengguna (User Interface, UI) yang mudah digunakan dan menarik secara visual.
  • Memastikan bahwa pengalaman pengguna (User Experience, UX) optimal, dengan mempertimbangkan kebutuhan dan perilaku pengguna.
  • Membuat prototipe dan wireframe untuk menunjukkan bagaimana perangkat lunak akan terlihat dan berfungsi.
  • Bekerja sama dengan pengembang untuk mengimplementasikan desain secara teknis.

6. System Architect

Tugas dan Tanggung Jawab:

  • Merancang arsitektur perangkat lunak, yaitu struktur teknis keseluruhan dari sistem.
  • Membuat keputusan teknis kritis, seperti memilih teknologi, alat, dan framework yang tepat untuk proyek.
  • Menjaga agar perangkat lunak yang dikembangkan bersifat scalable, maintainable, dan sesuai dengan standar.
  • Mengelola komunikasi antara berbagai komponen sistem.

7. DevOps Engineer

Tugas dan Tanggung Jawab:

  • Mengelola integrasi dan pengiriman perangkat lunak secara berkelanjutan (Continuous Integration and Continuous Delivery, CI/CD).
  • Mengotomatisasi proses pengembangan, pengujian, dan deployment perangkat lunak.
  • Memantau kinerja infrastruktur dan memastikan perangkat lunak berfungsi dengan baik di lingkungan produksi.
  • Mengelola keamanan, skalabilitas, dan reliabilitas sistem.

8. Database Administrator (DBA)

Tugas dan Tanggung Jawab:

  • Mendesain, mengelola, dan memelihara basis data yang digunakan oleh perangkat lunak.
  • Memastikan data disimpan dengan aman dan dapat diakses dengan cepat dan efisien.
  • Melakukan backup dan recovery data untuk mencegah kehilangan data.
  • Mengoptimalkan performa basis data dan mengatasi masalah terkait.

9. Security Engineer

Tugas dan Tanggung Jawab:

  • Memastikan bahwa perangkat lunak aman dari ancaman dan kerentanan keamanan.
  • Melakukan audit keamanan, mengidentifikasi risiko, dan merancang mekanisme untuk melindungi perangkat lunak dan data.
  • Mengimplementasikan enkripsi, autentikasi, dan kontrol akses untuk melindungi informasi sensitif.
  • Berkolaborasi dengan tim pengembangan untuk mengatasi masalah keamanan yang ditemukan.

10. Scrum Master / Agile Coach

Tugas dan Tanggung Jawab:

  • Memfasilitasi tim pengembang dalam metodologi Agile, seperti Scrum.
  • Mengadakan pertemuan harian (daily stand-up) dan memastikan bahwa tim tetap fokus pada tujuan sprint.
  • Membantu menghilangkan hambatan yang dihadapi tim dalam pengembangan.
  • Menjaga alur kerja Agile dan mendorong perbaikan terus-menerus.

11. Product Manager

Tugas dan Tanggung Jawab:

  • Mengembangkan visi dan strategi produk berdasarkan kebutuhan pasar dan pengguna.
  • Mengelola roadmap produk, merencanakan fitur, dan prioritas pengembangan.
  • Berkomunikasi dengan klien dan tim pengembang untuk memastikan produk sesuai dengan harapan.
  • Mengumpulkan umpan balik dari pengguna dan pemangku kepentingan untuk peningkatan produk di masa depan.

12. Technical Writer

Tugas dan Tanggung Jawab:

  • Menulis dokumentasi teknis yang mudah dipahami untuk pengguna dan pengembang, seperti manual penggunaan, panduan instalasi, dan API documentation.
  • Berkolaborasi dengan tim pengembangan untuk memastikan dokumentasi yang dibuat akurat dan up-to-date.
  • Mengkomunikasikan informasi teknis dengan cara yang jelas kepada audiens non-teknis.


Aspek Manusia

Aspek manusia dalam rekayasa perangkat lunak (Human Aspects of Software Engineering) berfokus pada bagaimana faktor manusia mempengaruhi pengembangan perangkat lunak, termasuk bagaimana tim berinteraksi, pengambilan keputusan, produktivitas, dan kepuasan pengguna akhir.

Berikut adalah beberapa elemen penting dari aspek manusia dalam rekayasa perangkat lunak:

1. Komunikasi dalam Tim

Tim pengembang perangkat lunak terdiri dari orang-orang dengan latar belakang yang berbeda, sehingga komunikasi yang baik sangat penting. Misalnya, antara pengembang, manajer proyek, dan pemangku kepentingan bisnis. Kesalahpahaman atau kurangnya komunikasi dapat mengarah pada kegagalan proyek.

Contoh: Jika seorang pengembang salah mengerti kebutuhan pengguna yang disampaikan oleh manajer proyek, produk akhir mungkin tidak memenuhi harapan.

2. Kolaborasi dan Dinamika Tim

Pengembangan perangkat lunak biasanya dilakukan oleh tim. Maka, penting untuk memahami bagaimana orang bekerja sama, menangani konflik, serta membangun kepercayaan dan saling menghargai dalam tim.

Contoh: Agile dan Scrum adalah metodologi yang mendorong kolaborasi melalui pertemuan harian, feedback rutin, dan iterasi.

3. Motivasi dan Produktivitas

Motivasi anggota tim sangat mempengaruhi kualitas dan produktivitas mereka. Memahami faktor-faktor yang memotivasi pengembang, seperti lingkungan kerja yang mendukung, kompensasi, atau peluang pengembangan diri, dapat meningkatkan hasil proyek.

Contoh: Pengembang yang bekerja di lingkungan kerja yang fleksibel dengan tujuan yang jelas akan lebih termotivasi untuk menyelesaikan proyek tepat waktu.

4. Pengambilan Keputusan

Pengambilan keputusan dalam tim pengembang harus mempertimbangkan berbagai perspektif, termasuk teknis, bisnis, dan pengguna akhir. Pengembang juga perlu memahami batasan teknologi dan preferensi pengguna untuk membuat keputusan yang tepat.

Contoh: Memilih bahasa pemrograman yang tepat berdasarkan kemampuan tim dan kebutuhan proyek merupakan keputusan kritis dalam pengembangan perangkat lunak.

5. Ergonomi dan Kesehatan Pengembang

Pengembangan perangkat lunak adalah aktivitas yang intensif secara mental dan fisik. Faktor seperti postur tubuh saat bekerja, durasi waktu duduk di depan komputer, dan pengelolaan stres perlu diperhatikan untuk menjaga kesehatan pengembang.

6. Pengalaman Pengguna (User Experience)

Salah satu faktor terpenting dalam rekayasa perangkat lunak adalah kepuasan pengguna akhir. Pengembang perlu memahami cara pengguna berinteraksi dengan perangkat lunak, kebiasaan mereka, dan apa yang mereka inginkan dari sebuah aplikasi.

Contoh: Aplikasi yang user-friendly, dengan navigasi yang intuitif dan performa yang baik, meningkatkan kepuasan pengguna.

7. Manajemen Konflik

Ketika bekerja dalam tim yang beragam, konflik tidak dapat dihindari. Oleh karena itu, penting untuk memiliki keterampilan manajemen konflik untuk mengatasi perbedaan pendapat dengan cara yang produktif.

8. Pelatihan dan Pengembangan

Dunia teknologi selalu berkembang, sehingga pelatihan dan pengembangan anggota tim pengembang perangkat lunak perlu diperhatikan agar mereka dapat terus beradaptasi dengan teknologi baru.


Template yang Digunakan Project Manager

a. Project Charter

  • Fungsi: Dokumen awal yang menjelaskan tujuan proyek, pemangku kepentingan, ruang lingkup, anggaran, dan jadwal. Template ini memberikan panduan jelas tentang apa yang akan dicapai dalam proyek.
  • Kandungan Utama:
    • Tujuan proyek.
    • Ruang lingkup proyek.
    • Pemangku kepentingan.
    • Sumber daya yang dibutuhkan.
    • Risiko awal dan rencana mitigasi.
    • Anggaran dan jadwal tinggi.

b. Work Breakdown Structure (WBS)

  • Fungsi: WBS membagi pekerjaan proyek menjadi tugas-tugas yang lebih kecil dan lebih mudah dikelola. Ini membantu project manager untuk mengidentifikasi semua aktivitas yang diperlukan untuk menyelesaikan proyek.
  • Kandungan Utama:
    • Struktur tugas secara hierarki.
    • Identifikasi tugas, sub-tugas, dan durasi.
    • Alokasi sumber daya.

c. Gantt Chart

  • Fungsi: Gantt Chart adalah template visual yang digunakan untuk menjadwalkan tugas proyek dan menunjukkan hubungan antara tugas serta batas waktu.
  • Kandungan Utama:
    • Waktu mulai dan berakhir setiap tugas.
    • Tugas yang saling bergantung.
    • Jalur kritis proyek (critical path).

d. Risk Management Plan

  • Fungsi: Rencana ini digunakan untuk mengidentifikasi risiko potensial dalam proyek, menilai dampaknya, dan merencanakan respons untuk mengurangi risiko tersebut.
  • Kandungan Utama:
    • Identifikasi risiko.
    • Analisis dampak risiko.
    • Rencana mitigasi.
    • Pemantauan dan pelaporan risiko.

e. Status Report Template

  • Fungsi: Template ini digunakan untuk melaporkan status proyek secara berkala kepada pemangku kepentingan. Memberikan gambaran umum tentang kemajuan, masalah, dan risiko yang sedang dihadapi.
  • Kandungan Utama:
    • Pencapaian minggu ini.
    • Tugas yang tertunda.
    • Masalah yang muncul dan resolusi.
    • Risiko yang muncul.
    • Tindakan yang akan dilakukan minggu depan.

f. Budget Tracking Template

  • Fungsi: Template ini digunakan untuk melacak pengeluaran proyek terhadap anggaran yang direncanakan. Memastikan bahwa proyek tetap dalam batas biaya yang telah disetujui.
  • Kandungan Utama:
    • Anggaran yang dialokasikan.
    • Pengeluaran aktual.
    • Perbandingan anggaran dan pengeluaran.





Absen





Tuesday, October 1, 2024

Agile Development

 


Apa itu agile?

Agile software development adalah metode pengembangan perangkat lunak yang didasarkan pada pengerjaannya yang berulang, dimana aturan dan solusi yang sudah disepakati oleh setiap anggota tim dilakukan dengan kolaborasi secara terstruktur dan terorganisir.

Ia sendiri merupakan metode pengembangan perangkat lunak dengan jangka waktu yang pendek. Selain itu ia juga membutuhkan adaptasi yang cepat dari pengembang terhadap perubahan yang mungkin terjadi dalam bentuk apapun.

Agile core value

Agile software development sendiri memiliki empat nilai inti. Berikut ini adalah keempat nilainya:

  1. Interaksi antar individu lebih penting dibandingkan proses dan alat. Nilai yang pertama ini menyatakan pengembangan perangkat lunak tidak akan sukses jika tidak ada kolaborasi antara tim pengembang dan klien. Selain itu dibutuhkan juga komunikasi yang baik agar pengembangan berjalan dengan baik dan maksimal.
  2. Proses pengembangan software lebih penting dibandingkan dengan dokumentasi. Pada masa lalu, tim pengembang menghabiskan banyak waktu untuk melakukan dokumentasi secara rinci. Dokumentasi pada agile dapat berupa cerita dari user untuk tim pengembang dapat mengembangkan fitur. Selain itu, dokumentasi ini memang penting, akan tetapi perangkat lunak yang berjalan sesuai dengan yang direncanakan jauh lebih penting.
  3. Kolaborasi dengan klien lebih penting dibandingkan dengan kontrak. 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 klien, tim pengembang dapat menyesuaikan produk yang dikembangkan sesuai dengan yang tertulis dalam kontrak dan keinginan klien.
  4. Menanggapi perubahan lebih penting daripada mengikuti rencana. Klien akan terus meminta perubahan dan revisi sampai klien merasa sesuai dengan produk yang dibuat. Maka dari itu setiap tim pengembang harus siap dengan perubahan yang terjadi.

Prinsip-Prinsip Agile

Agile software development didasarkan pada 12 prinsip. Berikut adalah kedua belas prinsip tersebut:

  1. Lebih menekankan kepuasan pengguna dengan cara merilis produk secara cepat dan bertahap.
  2. Selalu terbuka menerima perubahan, meskipun berdampak pada keterlambatan dalam mengembangkan produk.
  3. Dapat menghasilkan perangkat lunak yang dapat bekerja dengan baik dalam jangka waktu yang relatif pendek.
  4. Dapat menjalin kerja sama yang baik antara pengembang produk dan klien.
  5. Membuat suasana yang berisi anggota dengan motivasi yang tinggi. Dengan adanya lingkungan yang mendukung, maka setiap anggotanya akan menyelesaikan pekerjaan dengan baik.
  6. Sebisa mungkin melakukan komunikasi secara langsung, karena metode tersebut dinilai lebih efektif untuk menyampaikan informasi.
  7. Kemajuan sebuah proyek IT dinilai dari perangkat lunak yang dapat bekerja dengan baik.
  8. Pengembangan perangkat lunak yang berkelanjutan dengan dukungan dari berbagai pihak, seperti pengguna, klien, dan developer.
  9. Memiliki keunggulan dari segi teknis adalah hal utama dalam pengembangan perangkat lunak menggunakan metode agile
  10. Kesederhanaan adalah poin utama dalam agile development untuk memaksimalkan sumber daya yang ada.
  11. Setiap anggota tim harus mampu untuk mengorganisir diri sendiri.
  12. Melakukan refleksi secara berkala mengenai cara bekerja yang lebih efektif dan menyesuaikannya.

Tujuan Agile Development

Agile 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 namun 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 klien. Dengan begitu, kemungkinan miss communication bisa dikurangi.

Product Backlog

Sebagai sebuah framework, Agile development menggunakan delapan metode yang berbeda, yaitu:

1. Scrum Methodology
2. Scaled Agile Framework (SAFe) 
3. Lean Software Development (LSD)
4. Kanban
5. Extreme Programming (XP)
6. Crystal Methodology
7. Dynamic Systems Development Method (DSDM) 
8. Feature Driven Development (FDD)