Sabtu, 15 Oktober 2016

Software Problem

Nama : Muhammad Irfan Faisal
Npm   : 43A87007150396
Kelas  : S1/SI 3B Pagi

Ringkasan Materi Dari Software Problem

- Masalah utama dari Software Engineering adalah pengembangan perangkat lunak. Software Engineering juga mempunyai metode untuk mengembangkan perangkat lunak, dan mencapai kualitas dan produktifitas yang tinggi. 

- Dalam Software output dianggap sebagai baris kode (LOC), sumber daya input adalah usaha – bulan, orang. Biaya overhead dimodelkan dalam tingkat orang selama sebulan. Meskipun tidak sempurna, namun mengukur produktivitas sangatlah diperlukan.


- Mengurangi biaya dan waktu untuk perangkat lunak pengembangan adalah tujuan utama dari rekayasa perangkat lunak. Produktivitas dalam hal output (KLOC) per orang dalam sebulan memadai dapat menangkap biaya dan kekhawatiran jadwal.


- Sistem Industri Perangkat Lunak Kekuatan dibangun untuk memecahkan beberapa masalah klien dan digunakan oleh organisasi klien untuk operasi beberapa bagian dari bisnis, dan kerusakan sistem tersebut dapat memiliki dampak besar dalam hal keuangan atau kerugian bisnis, ketidak nyamanan pada pengguna, atau kerugian harta benda dan kehidupan. Akibatnya, sistem perangkat lunak harus berkualitas tinggi sehubungan dengan sifat seperti keandalan, kegunaan, portabilitas, dll 

- Masalah domain untuk rekayasa perangkat lunak adalah perangkat lunak kekuatan industri. Perangkat lunak ini dimaksudkan untuk memecahkan beberapa masalah beberapa set pengguna, dan diharapkan menjadi berkualitas tinggi.


- Dalam domain masalah ini, biaya, jadwal, dan kualitas kekuatan pendorong dasar. Oleh karena itu, metode dan alat-alat yang akan digunakan untuk memecahkan masalah dalam domain ini harus memastikan produktivitas yang tinggi dan kualitas tinggi.


- Produktivitas diukur sebagai jumlah output per unit dari sumber daya input. Dalam perangkat lunak, output dapat diukur dalam hal baris kode disampaikan, dan waktu kita adalah sumber daya utama, input dapat diukur dari perorangan dalam satu bulan. Produktivitas sehingga dapat diukur sebagai baris kode disampaikan per orang dalam satu bulan.


-  Kualitas Software memiliki banyak atribut yang meliputi fungsi, keandalan, kegunaan efisiensi kemampuan untuk mempertahankan, dan portabilitas. Keandalan sering dianggap sebagai atribut kualitas utama, dan seperti tidak dapat diandalkan dalam perangkat lunak adalah disebabkan oleh cacat pada perangkat lunak, kualitas dapat ditandai dengan jumlah cacat per seribu baris kode.


- Masalah dalam domain ini sering cenderung sangat besar dan di mana kebutuhan pelanggan berubah cepat. Oleh karena itu teknik yang digunakan untuk mengembangkan industri perangkat lunak kekuatan harus sedemikian rupa sehingga mereka mampu membangun sistem perangkat lunak besar, dan memiliki kemampuan untuk menangani perubahan.

- Masalah dalam pengembangan skala kecil dan skala besar bisa dilakukan secara informal, tetapi untuk  pengembangan skala besar sebaiknya harus secara formal.




Kamis, 13 Oktober 2016

Model Sistem Pengembangan Software

Muhammad Irfan Faisal
43A87007150396
S1/SI/3B PAGI


WATERFALL MODEL

Pengertian Waterfall
Waterfall Model  adalah model yang dikembangkan untuk pengembangan perangkat lunak, membuat perangkat lunak. model berkembang secara sistematis dari satu tahap ke tahap lain dalam mode seperti air terjun.
Model ini mengusulkan sebuah pendekatan kepada pengembangan software yang sistematik dan sekuensial yang mulai dari tingkat kemajuan sistem pada seluruh analisis, desain, kode, pengujian dan pemeliharaan. Model ini melingkupi aktivitas-aktivitas sebagai berikut : rekayasa dan pemodelan sistem informasi, analisis kebutuhan, desain, koding, mengujian dan pemeliharaan.
Model pengembangan ini bersifat linear dari tahap awal pengembangan system yaitu tahap perencanaan sampai tahap akhir pengembangan system yaitu tahap pemeliharaan. Tahapan berikutnya tidak akan dilaksanakan sebelum tahapan sebelumnya selesai dilaksanakan dan tidak bisa kembali atau mengulang ke tahap sebelumnya.





Proses proses :
· System / Information Engineering and Modeling. Permodelan ini diawali dengan mencari kebutuhan dari keseluruhan sistem yang akan diaplikasikan ke dalam bentuk software. Hal ini sangat penting, mengingat software harus dapat berinteraksi dengan elemen-elemen yang lain seperti hardware, database, dsb. Tahap ini sering disebut dengan Project Definition.
· Software Requirements Analysis. Proses pencarian kebutuhan diintensifkan dan difokuskan pada software. Untuk mengetahui sifat dari program yang akan dibuat, maka para software engineer harus mengerti tentang domain informasi dari software, misalnya fungsi yang dibutuhkan, user interface, dsb. Dari 2 aktivitas tersebut (pencarian kebutuhan sistem dan software) harus didokumentasikan dan ditunjukkan kepada pelanggan.
· Design. Proses ini digunakan untuk mengubah kebutuhan-kebutuhan diatas menjadi representasi ke dalam bentuk “blueprint” software sebelum coding dimulai. Desain harus dapat mengimplementasikan kebutuhan yang telah disebutkan pada tahap sebelumnya. Seperti 2 aktivitas sebelumnya, maka proses ini juga harus didokumentasikan sebagai konfigurasi dari software.
· Coding. Untuk dapat dimengerti oleh mesin, dalam hal ini adalah komputer, maka desain tadi harus diubah bentuknya menjadi bentuk yang dapat dimengerti oleh mesin, yaitu ke dalam bahasa pemrograman melalui proses coding. Tahap ini merupakan implementasi dari tahap design yang secara teknis nantinya dikerjakan oleh programmer.
· Testing / Verification. Sesuatu yang dibuat haruslah diujicobakan. Demikian juga dengan software. Semua fungsi-fungsi software harus diujicobakan, agar software bebas dari error, dan hasilnya harus benar-benar sesuai dengan kebutuhan yang sudah didefinisikan sebelumnya.
· Maintenance. Pemeliharaan suatu software diperlukan, termasuk di dalamnya adalah pengembangan, karena software yang dibuat tidak selamanya hanya seperti itu. Ketika dijalankan mungkin saja masih ada eror kecil yang tidak ditemukan sebelumnya, atau ada penambahan fitur-fitur yang belum ada pada software tersebut. Pengembangan diperlukan ketika adanya perubahan dari eksternal perusahaan seperti ketika ada pergantian sistem operasi, atau perangkat lainnya.

Keuntungan dari Model Waterfall
1)      Merupakan model pengembangan paling handal dan paling lama digunakan.
2)      Cocok untuk system software berskala besar.
3)       Cocok untuk system software yang bersifat generic / umum.
4)       Pengerjaan project system akan terjadwal dengan baik dan mudah dikontrol

Kerugian Waterfall
1)   Waktu pengembangan lama. hal ini dikarenakan input tahap berikutnya adalah output dari tahap sebelumnya. Jika satu tahap waktunya molor, maka waktu keseluruhan pengembangan juga ikut molor.
2)   Biaya juga mahal, hal ini juga dikarenakan waktu pengembangan yang lama
3)   Terkadang perangkat lunak yang dihasilkan tidak akan digunakan karena sudah tidak sesuai dengan requirement bisnis customer. hal ini juga dikarenakan waktu pengembangan yang lama. selain itu dikarenakan waterfall merupakan aliran yang linear, sehingga jika requirement berubah proses tidak dapat diulang lagi.
4)   Karena tahap-tahapan pada waterfall tidak dapat berulang, maka model ini tidak cocok untuk pemodelan pengembangan sebuah proyek yang memiliki kompleksitas tinggi.
5)    Meskipun waterfall memiliki banyak kelemahan yang dinilai cukup fatal, namun model ini merupakan dasar bagi model-model lain yang dikembangkan setelahnya.



PROTOTYPING

Pengertian Prototyping

Menurut Raymond McLeod, prototype didefinisikan sebagai alat yang memberikan ide bagi pembuat maupun pemakai potensial tentang cara system berfungsi dalam bentuk lengkapnya, dan proses untuk menghasilkan sebuah prototype disebut prototyping.
Prototyping adalah proses pembuatan model sederhana software yang mengijinkan pengguna memiliki gambaran dasar tentang program serta melakukan pengujian awal. Prototyping memberikan fasilitas bagi pengembang dan pemakai untuk saling berinteraksi selama proses pembuatan, sehingga pengembang dapat dengan mudah memodelkan perangkat lunak yang akan dibuat. Prototyping merupakan salah satu metode pengembangan perangat lunak yang banyak digunakan.





Proses-proses :
1. Pengumpulan kebutuhan
Developer dan klien akan bertemu terlebih dahulu dan kemudian menentukan tujuan umum, kebutuhan yang diketahui dan gambaran bagian-bagian yang akan dibutuhkan berikutnya
2. Perancangan
Perancangan dilakukan dengan cepat dan rancangan tersebut mewakili semua aspek software yang diketahui, dan rancangan ini menjadi dasar pembuatan prototype
3. Membangun Prototype
Membangun prototyping dengan membuat perancangan sementara yang berfokus pada penyajian kepada klien.
4. Evaluasi Prototype
Klien akan mengevaluasi prototype yang dibuat dan digunakan untuk memperjelas kebutuhan software. Jika sudah sesuai, maka langkah selanjutnya akan diambil. Namun jika tidak, prototyping direvisi dengan mengulang langkah – langkah  yang sebelumnya.
5. Mengkodekan Sistem
Dalam tahap ini prototyping yang telah disetujui oleh klien lalu diterjemahkan ke dalam bahasa pemrograman yang sesuai.
6. Menguji Sistem
Setelah sitem sudah menjadi suatu perangkat lunak yang siap pakai, maka akan dilakukan proses pengujian.
7. Evaluasi Sistem
Pelanggan mengevaluasi apakah perangkat lunak yang telah jadi sudah sesuai yang diharapkan atau belum. Jika sudah sesuai maka proses selanjutnya akan dilakukan, jika belum maka tahapan yang sebelumnya akan diulang.
8. Menggunakkan Sistem
Perangkat lunak yang telah diuji dan diterima pelanggan siap digunakan.



Keunggulan prototyping :
  • Komunikasi akan terjalin baik antara pengembang dan pelanggan.
  • Pengembang dapat bekerja lebih baik dalam menentukan kebutuhan setiap pelanggannya.
  • Pelanggan berperan aktif dalam proses pengembangan sistem.
  • Lebih menghemat waktu dalam pengembangan sistem.
  • Penerapan menjadi lebih mudah karena pemakai mengetahui apa yang diharapkannya




Kelemahan prototyping :
  • Pelanggan kadang tidak melihat atau menyadari bahwa perangkat lunak yang ada belum mencantumkan kualitas perangkat lunak secara keseluruhan dan juga belum memikirkan kemampuan pemeliharaan untuk jangka waktu lama.
  • Pengembang biasanya ingin cepat menyelesaikan proyek sehingga menggunakan algoritma dan bahasa pemrograman yang sederhana untuk membuat prototyping lebih cepat selesai tanpa memikirkan lebih lanjut bahwa program tersebut hanya merupakan sebuah kerangka kerja(blueprint) dari sistem .
  • Hubungan pelanggan dengan komputer yang disediakan mungkin tidak mencerminkan teknik perancangan yang baik dan benar.



ITERATIVE DEVELOPMENT

Pengertian Iterative Development
Metode yang merupakan pengembangan dari prototyping model dan digunakan ketika requirement dari software akan terus berkembang dalam tahapan-tahapan pengembangan aplikasi tersebut. Sedikit pengertian tentang requirement software dari developer yang diterapkan pada tahap pertama iterasi, akan mendapatkan tanggapan dari user. Ketika requirement menjadi jelas, tahapan iterasi selanjutnya akan dilaksanakan.


 









Proses proses :

1.      Mendefinisikan tujuan dan kebutuhan bisnis, mengembangkan desain konseptual, rancangan konsep, rencana pengujian, dan analis terhadap resiko dengan melibatkan pemakai.
2.      Mendefinisikan kebutuhan sistem, mengembangkan desail logikal, mengkompilasi (software-build) rancangan awal, mengevaluasi hasil dengan melibatkan pemakai.
3.      Mendefinisikan kebutuhan subsistem, menghasilkan desain fisikal, mengkompilasi rancangan berikutnya, mengevaluasi hasil dengan melibatkan pemakai.
4.      Mendefinisikan kebutuhan setiap unit, menghasilkan desain akhir, mengkompilasi rancangan akhir.



Keuntungan Iterative model :
·         User dapat mencoba sistem yg sudah dikembangkan dan kemudian dapat memberikan masukkan > keterlibatan user semakin intens dampak positif dalam pengembangan
·         Prototype relatif lebih mudah dibangun dan tidak memerlukan waktu yang lama
·         Dengan prototype, kesalahan & kelalaian dalam pengembangan dapat segera diketahui


Kelemahan dari Iterative model :
·         Setiap iterasi bergantung prototype sebelumnya solusi final umumnya terjadi apabila ada perbedaan yg nyata pada prototype sebelumnya
·         Dokumentasi seringkali tdk lengkap > fokus pada pembuatan prototype
·         Isu2 mengenai system backup & recovery, system performance dan system security, kurang/tidak diperhatikan dan sering terlupakan





RATIONAL UNIFIED PROCESS

Pengertian RUP

Rational Unified Process (RUP) adalah salah satu proses yang ada di Software Enginering atau Rekayasa Perangkat Lunak, yang didalamnya terdapat sebuah proses dimana Software itu dibuat dengan mengunakan metode atau cara yang terstruktur didalam sebuah tim atau organisasi, dengan tujuan menghasilkan produk software yang bermutu tinggi, tentunya dalam schedule dan budget yang telah disepakati.






Proses proses :
Ada dua jenis aliran kerja (workflow) pada RUP, yaitu aliran kerja utama dan aliran kerja pendukung.

Aliran Kerja Utama

1. Pemodelan bisnis (business modeling)
    Mendeskripsikan struktur dan proses-proses bisnis organisasi.
2. Kebutuhan (requirements)
    Mendefinisikan kebutuhan perangkat lunak dengan menggunakan metode use case.
3. Analisis dan perancangan (analysis and design)
    Mendeskripsikan berbagai arsitektur perangkat lunak dari berbagai sudut pandang.
4. Implementasi (implementation)
    Menulis kode-kode program, menguji, dan mengintegrasikan unit-unit programnya.
5. Pengujian (testing)
    Mendeskripsikan kasus uji, prosedur, dan alat ukur pengujian.
6. Deployment
    Menangani konfigurasi sistem yang akan diserahkan.


Aliran Kerja Pendukung

1. Manajemen konfigurasi dan perubahan (configuration and change management)
    Mengendalikan perubahan dan memelihara artifak-artifak proyek.
2. Manajemen proyek (project management)
    Mendeskripsikan berbagai strategi pekerjaan dengan proses yang berulang.
3. Lingkungan (environment)
    Menangani infrastruktur yang dibutuhkan untuk mengembangkan sistem.

Keuntungan :
• Menyediakan akses yang mudah terhadap pengetahuan dasar bagi anggota tim.
• Menyediakan petunjuk bagaimana menggunakan uml secara efektif.
• Mendukung proses pengulangan dalam pengembangan software.
• Memungkinkan adanya penambahan-penambahan pada proses.
• Memungkinkan untuk secara sistematis mengontrol perubahan- perubahan yang terjadi pada software selama proses pengembangannya.
• Memungkinkan untuk menjalankan test case dengan menggunakan rational test manager tool


Kekurangan :
• Metodologi ini hanya dapat digunakan pada pengembangan perangkat lunak yang berorientasi objek dengan berfokus pada uml (unified modeling language). UML adalah bahasa spesifikasi standar untuk mendokumentasikan, menspesifikasikan dan membangun system perangkat lunak.
• Membutuhkan waktu yang cukup lama dibandingkan xp dan scrum


   
Timeboxing Model
Pengertian Timeboxing Model
Dalam model timeboxing, unit dasar dari pembangunan adalah kotak waktu, yang adalah jangka waktu yang tetap. Karena durasi adalah tetap, faktor kunci dalam memilih persyaratan atau fitur yang akan dibangun di kotak waktu yang bisa masuk ke dalam waktu box. Hal ini berbeda dengan pendekatan berulang biasa di mana fungsi dipilih dan kemudian waktu untuk memberikan ditentukan. Perubahan timeboxing perspektif pembangunan dan membuat jadwal non dinegosiasikan dan Komitmen prioritas tinggi.




Proses proses :
Timeboxing model menentukan jangka waktu tertentu yang dialokasikan untuk menyelesaikan berbagai macam tugas. Apabila waktu yang ditentukan tersebut selesai, maka pembangunan sistem akan pindah ke tugas berikutnya, dengan harapan bahwa sebagian besar dari critical work telah berhasil diselesaikan sebelum waktu keseluruhan berakhir.




Keuntungan :
1.      Mempercepat proses pembangunan dan memperpendek waktu pengiriman
2.      Timeboxing juga cocok untuk mengembangkan proyek – proyek dengan banyak fitur dalam periode yang singkat.
Kerugian :
1.      Manajemen proyek menjadi lebih kompleks.

2.      Tidak cocok untuk proyek-proyek di mana seluruh pekerjaan pembangunan tidak dapat dibagi menjadi beberapa iterasi hampir, durasi yang sama.




Extreme Programming (XP) Model
Pengertian Extreme Programming
Extreme Programming (XP) adalah metode pengembangan perangkat lunak yang ringan dan termasuk salah satu agile methods yang dipelopori oleh Kent Beck, Ron Jeffries, dan Ward Cunningham. XP merupakan agile methods yang paling banyak digunakan dan menjadi sebuah pendekatan yang sangat terkenal. Sasaran XP adalah tim yang dibentuk berukuran antara kecil sampai medium saja, tidak perlu menggunakan sebuah tim yang besar. Hal ini dimaksudkan untuk menghadapi requirements yang tidak jelas.



Proses proses :
·         Perencanaan XP: pengumpulan user stories dari klien yang klien tetapkan prioritasnya. Setiap story ditetapkan harga dan lama pembangunan, jika terlalu besar, story dapat dipecah menjadi beberapa story yang lebih kecil. Periksa dan pertimbangkan resiko
·         Desain XP berprinsip: sederhana memanfaatkan kartu CRC (Class-Responsibility-Collaborator) untuk identifikasi dan mengatur class-class di konsep OO. Jika temui kesulitan, prototype dibangun (ini namanya spike solution). Lakukan refactoring, yaitu mengembangkan desain dari program setelah ditulis.
·         Pengkodean XP: siapkan unit test sebelum pengkodean dipakai sebagai fokus pemrogram untuk membuat program. Pair programming dilakukan untuk real time program solving dan real time quality assurance
·         Pengujian XP: menggunakan unit test yang dipersiapkan sebelum pengkodean.



Keuntungan Extreme Programming :
·         1. Menjalin komunikasi yang baik dengan klien. (Planning Phase)
·         2. Menurunkan biaya pengembangan (Implementation Phase)
·         3. Meningkatkan komunikasi dan sifat saling menghargai antar developer. (Implementation Phase)
·         4. XP merupkan metodologi yang semi formal. (Planning Phase)
·         5. Developer harus selalu siap dengan perubahan karena perubahan akan selalu diterima, atau dengan    kata lain fleksibel. (Maintenance Phase)

Kerugian Extreme Programming :
·         - Tidak bisa membuat kode yang detail di awal (prinsip simplicity dan juga anjuran untuk melakukan    apa yang diperlukan hari itu juga).XP juga memiliki keunggulan yang sekaligus menjadi            kelemahannya, yaitu XP tidak memiliki dokumentasi formal yang dibuat selama pengembangan.    Satu-satunya dokumentasi adalah dokumentasi awal yang dilakukan oleh user.



AGILE PROCESSES

Pengertian Agile Process
Agile Process merupakan sekelompok aktivitas pembangunan perangkat lunak secara iteratif yang menekankan pada aktivitas konstruksi (Desai & Koding). Agile Process mengeliminasi sebagian besar waktu untuk melakukan perencanaan sitem dan berusaha sebisa mungkin mematuhi jadwal deliver system yang telah dijanjikan. Requirements yang dibutuhkan secara langsung di – drive oleh pelanggan itu sendiri, dan apabila terjadi perubahan terhadap requirments tersebut, pengembang dituntut mampu beradaptasi dengan perubahan yang terjadi. Extreme Programming termasuk pendekatan Agile process. 



Proces process :
a.      Perencanaan
b.      Requierements Analysis: langkah ini merupakan analisa terhadap kebutuhan system. Pengumpulan data dalam tahap ini bisa melakukan sebuah penelitian, wawancara atau study literature. Seorang system analisis akan menggali informasi sebanyak-banyaknya dari user sehingga akan tercipta sebuah sistem komputer yang bisa melakukan tugas-tugas yang diinginkan oleh user tersebut. Tahapan ini akan menghasilkan dokumen user requierements atau bisa dikatakan sebagai data yang berhubungan dengan keinginan user dalam pembuatan system. Dokumen inilah yang akan menjadi acuan system analis untuk menerjemahkan ke dalam bahasa pemrograman.
c.       Desain: Proses desain akan menerjemahkan syarat kebutuhan ke sebuah perancangan perangkat lunak yang dapat diperkirakan sebelum dibuat koding. Proses ini berfokus pada: struktur data arsitektur perangkat lunak, representasi interface, dan detail (algoritma) procedural. Tahapan ini akan menghasilkan dokumen yang disebut software requirement. Dokumen inilah yang akan digunakan programmer untuk melakukan aktivitas pembuatan sistemnya.
d.      Coding: Coding merupakan penerjemahan design dalam bahasa yang bisa dikenali oleh computer. Dilakukan oleh programmer yang akan menterjemahkan transaksi yang diminta oleh user. Tahapan inilah yang merupakan tahapan secara nyata dalam mengerjakan suatu system. Dalam artian penggunaan computer akan dimaksimalkan dalam tahapan ini.
e.      Testing: testing adalah menemukan kesalahan-kesalahan terhadap sistem tersebut dan kemudian bisa diperbaiki.


Keuntungan :

1.      Meningkatkan kepuasan kepada klien.
2.      Klien dapat melakukan riview mengenai software yang dibuat lebih awal.
3.      Perancangan system dibuat lebih cepat.
4.    Meminimalisir resiko kegagalan implementasi software dari segi non-teknis.
5.       Jika pada saat pembangunan system terjadi kegagalan kerugian dari segi materi relatif kecil.

Kerugian:

1   Developer harus selalu siap dengan perubahan karena perubahan akan selalu diterima.
2.      Agile Process tidak akan berjalan dengan baik jika komitmen tim kurang.
3.      Tidak cocok dalam skala tim yang besar (>20 orang).
4.      Perkiraan waktu release dan harga perangkat lunak sulit ditentukan