Hello Kawan!

Januari 7, 2009
Selamat datang,
Generasi Penerusku

Generasi Penerusku

Perkenalkan nama saya Muhammad Setiawan Ahmad, nama panggilan Memed, saat ini saya masih meneruskan kuliah di STTI BI Eresha untuk mengambil S2.

Salah satu tujuan pembuatan Blog ini, adalah untuk memenuhi tugas praktek membuat blogging dan sarana belajar writing sesuai anjuran Bpk Romi SW sebagai dosen kami, yang begitu hebat dalam mendorong semua mahasiswanya, untuk memperbaiki mental dan spiritual belajar yang benar. Blog ini sebagai sarana belajar menulis, dimulai dari yang sederhana, sebelum membuat yang lebih serius dan lebih bagus baik isi maupun tampilannya.

Silahkan beri comment atau inputan dari performance blog ini, agar saya bisa menyusun lebih baik dalam penyajian selanjutnya.

Terima kasih atas kunjungan anda.

Salam,

Memed


Roger S. Pressman

Oktober 22, 2009

Software Engineering
A  P R A C T I T I O N E R ’ S  A P P R O A C H  
FIFTH EDITION

Roger S. Pressman, Ph.D.

CHAPTER 1: Produk

Software atau perangkat lunak komputer sudah menjadi sebuah alat penggerak, dan sudah merupakan mesin yang mengendalikan pembuat keputusan bisnis, selain sebagai dasar invetigasi bagi pengetahuan modern dan pemecah masalah engineering. Software merupakan kunci yng membedakan produk dan layanan modern, yang telah menyatu dalam sistem dari hampir semua bidang seperti: transportasi, kesehatan, telekomunikasi, militer, proses industri, hiburan, produk perkantoran, dan masih banyak daftar lainnya yang hampir tak berujung. Penggunaan software tidak bisa dihindari lagi didunia modern seperti saat ini. Masuk abad dua puluh satu, software akan menjadi pengendali untuk kemajuan-kemajuan baru dalam segala hal, mulai dari pendidikan dasar sampai rekayasa genetika/keturunan (genetic engineering).

Tinjauan singkat.
Software adalah produk yang dirancang dan dibangun oleh software engineer, meliputi program  yang dijalankan dalam komputer dengan berbagai ukuran dan arsitektur, dokumen hasil cetakan dan formulir yang bersifat maya, data yang terdiri dari kombinasi angka dan huruf,  termasuk informasi yang disajikan melalui gambar, gambar hidup dan suara. Pemahaman terhadap software itu penting, karena software telah memberikan imbas ke hampir seluruh aspek kehidupan kita, dan telah menembus kedalam perdagangan, kebudayaan, dan aktivitas keseharian kita. Untuk membangun software komputer sama seperti membangun sebuah produk jadi lainnya, dengan melalui suatu proses dan dengan pendekatan rekayasa software (software engineering) agar supaya produk yang dihasilkan berkwalitas tinggi dan bisa memenuhi kebutuhan orang yang ingin menggunakan produk tersebut. Dari sudut pandang software engineer, produk yang merupakan hasil kerja adalah berupa software komputer, sebuah program, dokumen, dan data. Tapi dari sudut pandang pemakai, hasil produk adalah keluarannya yang berupa informasi, yang dengan itu membuat pemakai mendapatkan kemudahan dan membuat keadaan menjadi lebih nyaman.

Dalam kurun waktu lima tahun sejak edisi ke empat dari buku ini diterbitkan, peran software sebagai tenaga penggerak ekonomi telah menjadi semakin nyata. Industri baru yang dipicu oleh software telah bangkit dan perusahaan lama yang tidak bisa menyesuaikan terancam kepunahan. Pemerintahan US menuntut pada perusahaan industri software yang terbesar, untuk mencoba  menghentikan praktek monopoli, sama  seperti yang terjadi pada industri minyak dan baja sebelumnya.

Dampak software pada masyarakat dan budaya kita terus berlangsung semakin dalam, tapi komunitas software terus-menerus berusaha untuk membangun teknologi yang akan membuatnya lebih mudah, lebih cepat, dan lebih murah dalam pembuatan program-program komputer yang berkwalitaas tinggi. Beberapa teknologi ini ada yang ditujukan untuk aplikasi bidang khusus (seperti, rancangan dan implementasi Web); beberapa lagi fokus dibidang teknologi (misalnya, sistem object-oriented); dan masih ada yang lainnya yang berbasis lebih luas (misalnya, sistem opersi seperti Linux). Meskipun demikian, masih belum ada yang mengembangkan sebuah teknologi software yang dapat melakukan semuanya, dan kemungkinan ini sangatlah kecil dimasa mendatang. 

Buku ini memberikan sebuah kerangka  kerja yang dapat dipergunakan oleh mereka yang ingin membangun software komputer, melalui cara-cara yang benar dan dengan menggunakan teknologi yang meliputi suatu proses, metode-metode, dan sejumlah alat bantu lainnya yang kemudian kita sebut dengan Software Engineering.

Perkembangan Peran Software
Software saat ini memegang dua peran. Software sebagai sebuah produk dan, dalam waktu yang bersamaan, juga sebagai sarana untuk menghasilkan sebuah produk. Sebagai sebuah produk, software memberikan suatu kemampuan menghitung yang disatukan kedalam hardware komputer, atau yang lebih luas lagi, pada jaringan komputer yang bisa diakses oleh hardware lokal. Software bisa berada melekat didalam sebuah telepone selular atau beroperasi didalam sebuah komputer mainframe, yang bekerja untuk merobah data menjadi informasi, memproduksi, mengatur, mendapatkan, mengubah, mempertunjukan, atau mengirimkan informasi yang sederhana, seperti sebuah bit tunggal atau, barangkali sekompleks pertunjukan dengan multimedia. Sebagai sarana yang digunakan untuk menghasilkan suatu produk, software bertindak sebagai basis untuk mengontrol komputer (sistem operasi), komunikasi informasi (jaringan), dan pembuat serta pengontrol dari program yang lainnya (software sebagai alat bantu (tools) dan lingkungan ( environments)).

Software menghantar informasi, produk paling penting yang dihasilkan untuk kita, mengubah data pribadi (seperti misalnya transaksi keuangan pribadi) sehingga data itu bisa lebih berarti dalam konteks lokal; software juga mengelola informasi bisnis menjadikannya lebih bisa bersaing; juga menjadi penyedia pintu masuk ke jaringan informasi dunia( misal internet) dan yang bisa memenuhi permintaan informasi dalam berbagai bentuk.

Peran software komputer cukup banyak mengalami perubahan sepanjang kurun waktu tidak kurang dari 50 tahun. Dengan peningkatan kemampuan hardware yang dramatis, perubahan yang terjadi lebih dalam lagi dari segi arsitektur komputer, kecepatan,  peningkatan kapasitas memori dan penyimpanan, dan dengan beragamnya variasi pilihan input dan output menjadikan sistem berbasis komputer semakin lengkap dan kompleks. Kehandalan dan kompleksitas bisa menimbulkan kekaguman ketika suatu sistem yang berjalan dengan baik dan sukses, tetapi dia juga bisa menimbulkan masalah yang besar manakala mereka harus membangun sebuah sistem yang rumit.

Buku terkenal yang dicetak sepanjang tahun 1970 and 1980 memberikan sejarah yang berguna untuk melihat kedalam perubahan persepsi tentang komputer dan software dan dampaknya terhadap budaya kita. Osborne [OSB79] menengarai dengan sebuah “revolusi industri baru” Toffler [TOF80] menamakan dengan kemajuan dari microelektronik bagian dari “perobahan gelombang ketiga”  dalam sejarah manusia, dan Naisbitt [NAI82] memperkirakan sebuah perubahan dari sebuah masyarakat industri ke sebuah “masyarakat informasi”. Feigenbaum dan McCorduck [FEI83] memperkirakan bahwa informasi dan pengetahuan (yang dikendalikan komputer) akan menjadi tonggak kekuatan diabad dua satu, dan Stoll [STO89] berargumentasi bahwa melalui “komunitas elektronik” yang terbentuk oleh jaringan dan software adalah kunci pertukaran pengetahuan dunia.

Mulai 1990, Toffler [TOF90] menerangkan  “pergantian kekuatan” dimana struktur kekuatan lama (pemerintahan, dunia pendidikan, industri, ekonomi, dan militer) dipisahkan, oleh karena komputer dan software mengarahkan kepada ” demokratisasi pengetahuan”. Yourdan [YOU92] khawatir bahwa perusahaan US mungkin akan kehilangan daya saingnya dalam bisnis yang berkaitan dengan software dan memperkirakan “penurunan dan kejatuhan dari programer Amerika”. Hammer dan Champy [HAM93] berargumantasi bahwa teknologi informasi telah memainkan peran pemutar balikan dalam “perekayasaan kembali korporasi (reengineering of the corporation)”. Sepanjang pertengahan tahun 1990-an, pemakaian komputer dan software telah melahirkan sejumlah buku oleh “neo-Luddites” (seperti Resisting the Virtual Life, yang diedit oleh James Brook dan Iain Boal dan The Future Does Not Compute oleh Stephen Talbot). Penulis-penulis ini telah dihantui oleh komputer, mereka menegaskan keprihatinannya yang masuk akal,  dan menghiraukan suatu keuntungan-keuntungan yang amat besar dan yang telah terbukti nyata.  

Sepanjang akhir 1990-an, Yourdan {YOU96] mengevaluasi kembali kemungkinan-kemungkinan yang diharapkan untuk profesional software dan menyarankan “kenaikan dan kebangkitan” dari Programer Amerika. Sejalan dengan pentingya pertumbuhan internet, perubahan peminatan menunjukan kebenaran. Begitu abad dua puluh tutup, fokus berobah sekali lagi, kali ini kedampak  Y2K “bom wktu” (misal, [YOU98b], [DEJ98], [KAR99]. Meskipun prediksi tentang Y2K dari orang-orang yang mengatakan akan kiyamat tidak benar, tulisan-tulisan terkenal mereka menggiring peninjauan kembali sejauh mana pemakaian software dalam kehidupan kita. Dengan “menjamurnya komputer” [NOR98] melahirkan suatu generasi peralatan-peralatan informasi yang nyediakan koneksi menggunakan saluran pita lebar (broadband) ke Web,  “koneksi yang tak terlihat mata kerumah kita, kantor dan dalam perjalanan.” [LEV99]. Peranan software masih akan terus berkembang.

Seorang programer dari era terdahulu telah diganti oleh sebuah tim dari spesialis software, masing-masing fokus pada satu bagian dari teknologi yang diperlukan untuk menghasilkan sebuah aplikasi yang kompleks. Namun demikian masih tetap saja timbul pertanyaan yang sama tetang kenapa dalam penyelesaian masih memerlukan waktu yang lama dengan biaya yang tinggi, dan mengapa masih saja ada kesalahan dalam software setelah pengiriman serta mengapa sulit untuk mengukur kemajuan dalam membangun suatu software.

Pertanyaan-pertanyaan diatas, dan masih banyak pertanyaan lainnya, adalah perwujudan dari keprihatinan kita terhadap software dan cara bagaimana software itu dibangun, sebuah keprihatianan yang menghantarkan kita kedalam paraktek pemakaian software engineering.

Software
Ditahun 1970, masyarakat yang bisa menerangkan apa yang disebut dengan “software komputer” kurang dari 1 %.  Sekarang, banyak profesional dan anggota masyarakat umum sebagian besar  telah   mengetahui apa yang dinamakan software. Apakah benar demikian?
Dalam buku teks, penjelasan mengenai software dapat diterangkan sebagai berikut: Software adalah perintah-perintah (program komputer) yang  ketika dijalankan memberikan suatu fungsi dan  hasil yang diinginkan, data yang tersusun memungkinkan program mengolahnya menjadi suatu informasi, dan dokumen yang menerangkan  bagaimana cara mengoperasikan dan menggunakan program.

Karakteristik Software
Untuk  menambah pemahaman mengenai software (dan mengerti sepenuhnya Software Engineering), sangatlah penting untuk memeriksa ciri-ciri software yang membuat beda dengan barang-barang yang dibuat orang lainnya. Sewaktu software dibangun, proses kreasi manusia ( analisa, perancangan, pembangunan, percobaan/tes) pada akhirnya diwujudkan kedalam bentuk fisik. Jika kita bangun sebuah komputer yang baru, mula-mula kita buat sketsa, gambar rancangan formal, dan dari bentuk dasar rancangan fisik tersebut, kemudian berkembang menjadi bentuk produk secara fisik (chips, circuit board, power supply, dll).
Software adalah suatu kerangka berpikir atau logika bukan seperti elemen yang dapat dilihat secara fisik. Oleh karena itu software mempunyai ciri-ciri yang berbeda dibanding dengan perangkat keras (hardware):

1. Software itu dibangun atau direkayasa (engineered), bukan diproduksi seperti pada pengertian  klasik.

Meskipun ada persamaan diantara pembangunan software dan produksi hardware, kedua aktivitas tersebut secara fondamental berbeda. Pada dua kegiatan itu kwalitas yang tinggi sama-sama bisa dicapai dengan perancangan yang bagus, namun ditahap perakitan, pada hardware kemungkinan bisa timbul didalam hal kwalitas, yang dalam software masalah tersebut tidak ada ( atau kalaupun ada, perbaikannya dalam software lebih mudah).
Kedua aktivitas diatas tergantung sepenuhnya pada manusia, tetapi dalam hubungan antara pengguna dan usaha yang dilakukan sangatlah berbeda, dua-duanya sama membangunan suatu produk, tapi pendekatannya berlainan. Biaya software terpusat pada perekayasaan, artinya software tidak bisa dikelola seperti halnya pada sebuah proyek pabrikan.

Kerusakan yang sering terjadi pada hardware, seiring dengan berjalannya waktu. Secara umum kerusakan hardware yang tinggi terjadi pada awal pemakaiannya (kerusakan ini seringkali dialamatkan pada perancangan atau perakitan yang jelek), kerusakan/cacat dikoreksi, yang selanjutnya kegagalan-kegagalan menjadi berkurang, menuju kearah kondisi yang stabil (idealnya, cukup rendah) untuk beberapa periode waktu. Seiring berlalunya waktu, suatu saat kerusakan hardware akan meningkat lagi, karena bagaimanapun juga komponen perangkat keras, tidak bisa lepas dari gangguan yang diakibatkan oleh debu, getaran, pemakaian secara kasar, suhu yang tinggi, dan berbagai kondisi lingkungan lainnya yang bisa menyebabkan kerusakan. Secara sederhana bisa dikatakan, perangkat keras atau hardware mulai usang.

Sedangkan sofware tidak rentan terhadap lingkungan yang bisa menyebabkan  kerusakan seperti halnya hardware yang menjadi usang. Secara teori, bisa dikatakan kurva kerusakan  untuk software mengambil bentuk kurva yang ideal, diperlihatkan di Gambar 1. Cacat yang tidak terlihat akan menyebabkan rata-rata kegagalan terjadi diawal pemakai program. Meskipun demikian, hal ini bisa dikoreksi (idealnya, tanpa menimbulkan kesalahan yang lain lagi) dan kurva akan kembali mendatar. Kurva ideal adalah penyederhanaan secara menyeluruh dari model kerusakan yang sebenarnya pada software. Meskipun begitu, kesimpulannya jelas , bahwa software tidak mengenal usang/aus, yang mungkin adalah sudah kurang begitu sesuai lagi.

 Failure rate

Gambar 1.

Selama masa pemakaian, software akan mengalami perubahan (perawatan). Sewaktu perubahan dilakukan, kemungkinan akan bisa timbul kerusakan, menyebabkan lonjakan kurva kegagalan seperti Gambar 1. Sebelum kurva kembali ke-kondisi semula yang stabil, perubahan yang lain juga diperlukan, menyebabkan kurva melonjak kembali. Perlahan-lahan, level kegagalan minimal mulai naik, software menjadi buruk dikarenakan oleh adanya perubahan.

Aspek yang lain perbedaan antara hardware dan sofware adalah ketika sebuah komponen hardware usang, hal ini bisa diganti dengan suku cadang baru, yang didalam software tidak ada yang namanya suku cadang. Setiap kegagalan dalam suatu software itu mengindikasikan adanya kesalahan dalam perancangan atau dalam proses penerjemahan rancangan kekode/pengkodean yang bisa dijalankan oleh mesin.  Oleh karena itu dalam pemeliharaan suatu software terdapat pertimbangan yang lebih kompleks dari pada pemeliharaan hardware.

3. Meskipun industri bergerak kearah perakitan berbasis komponen, kebanyakan software masih terus dibangun berdasarkan permintaan.

Kita bayangkan bagaimana cara mengontrol hardware dimana produk yang berbasis komputer dirancang dan dibangun, mulai dari engineer merancang gambar skhema rangkaian elektronik digital sederhana, kemudian melakukan beberapa analisa dasar untuk meyakinkan bahwa fungsi yang sempurna telah dicapai, selanjutnya kebagian lain untuk menentukan komponen elektronik, dengan pilihan sesuai nomor IC, fungsi, dan keterangan interface dengan jelas, barulah kemudian diintegrasikan berdasarkan petunjuk standard.

Sejalan dengan perkembangan disiplin engineering, koleksi standard rancangan komponen diciptakan, ribuan komponen standard digunakan oleh engineer mekanik dan elektronik, dalam rancangan sistem mereka yang baru. Penggunaan ulang komponen diciptakan, engineer berkonsentrasi pada  sebuah rancangan komponen yang benar-benar inovatif dan mewakili sesuatu yang baru. Penggunaan kembali komponen  didunia hardware adalah satu hal yang wajar dalam suatu proses rekayasa (engineering). Dalam dunia software, ini adalah sesuatu yang baru saja dimulai yang harus dicapai dalam skala yang lebih luas. 

Suatu komponen software harus dirancang dan diimplementasikan sehingga ini bisa dipergunakan lagi dibeberapa program yang lain. Tahun 1960-an, telah dibangun kumpulan subroutine yang bisa dipergunakan lagi dengan algorithma yang telah didefinisikan dengan baik dan dalam suatu cara yang efektif, tapi hanya untuk bidang aplikasi yang terbatas. Sekarang penggunaan ulang diperluas, tidak hanya algorithmanya saja tapi meliputi juga struktur datanya. Penggunaan ulang komponen secara modern membungkus bersama, data dan proses dalam data itu sendiri, sehingga membebaskan engineer software untuk menciptakan aplikasi baru dengan menggunakan bagian yang bisa dipakai ulang. Misalnya, saat ini interface grafik menggunakan komponen yang bisa dipergunakan ulang, yang memungkinkan membuat kreasi jendela grafis, menu pull-down, dan variasi yang luas untuk mekanisme interaksi. Struktur data dan rincian proses yang diperlukan untuk membangun suatu interface berisikan suatu kumpulan dari komponen-komponen pemakaian ulang untuk bangunan interface. 

Aplikasi Software.
Software mungkin dipergunakan dalam suatu situasi dimana suatu program menerima data yang sudah didefinisikan urutannya, melaksanakan analisa algorithma tanpa penundaan, dan memberikan hasil data dalam format laporan atau grafik. Aplikasi macam ini disebut ketergantungan (determinate).  System operasi multiuser, disisi lain, menerima masukan yang mempunyai isi bervariasi dan waktu yang tidak menentu, menjalankan algorithma yang bisa diinterupsi oleh kondisi luar, dan memberikan keluaran yang bervariasi sesuai lingkungan fungsi dan waktunya. Aplikasi dengan krakteristik semacam ini disebut tidak tergantung (indeterminate).

Cukup sulit untuk membangun aplikasi software dengan kategori umum yang mengandung banyak keperluan. Sejalan dengn pertumbuhan software yang kompleks, penggolongan dengan tegas menjadi hilang. Software berikut mengindikasikan kecendrungn aplikasi yang mengandung cakupan luas:

System Software.
System software dalah suatu kumpulan program yang ditulis untuk melayani program lain. Beberapa system software (misal, compiler, editor, dan utility File Management) prosesnya sangat kompleks, struktur informasinya tergantung (determinate). System aplikasi yang lain ( misal, komponen system operasi, driver, prosesor telekomunikasi) sebagian besar proses datanya tidak tergantung (indeterminate).  Dalam kasus yang lain, area system software bercirikan interaksi dengan hardware komputer yang tinggi, banyak digunakan untuk multiuser, operasi bersamaan yang memerlukan antrian, pemakaian bersama sumber daya, dan proses manajemen yang rumit; struktur data yang kompleks, dan mempunyai multiple interface external.

Software dengan waktu seketika (real time).
Software yang memonitor/analisa/kontrol peristiwa sesuai dengan waktu kejadian nyata disebut dengan waktu seketika (real-time). Elemen software real-time termasuk diantaranya komponen data bersangkutan yang mengumpulkan dan memformat informasi dari lingkungan luar, komponen analisa yang merobah informasi sesuai yang diperlukan oleh aplikasi, komponen pengontrol keluaran yang menjawab lingkungan luar, dan komponen monitor yang mengkoordinasikan semua komponen lainnya, sehingga jawaban seketika (umumnya antara 1-60 millidetik) dapat terjaga.

Software Bisnis.
Proses informasi bisnis merupakan area aplikasi software tunggal yang paling besar. Payroll, account receivable/payable, inventory adalah  software manajemen sistem informasi bisnis, aplikasi diarea ini merestruktur data yang ada dalam database, dengan suatu cara, guna memberi fasilitas operasi bisnis atau membuat keputusan manajemen, aplikasi software bisnis juga meliputi perhitungan dengan cara yang interaktif (misal, proses transaksi PoS).

Engineering dan Software ilmiah.
Engineering dan software untuk keperluan ilmiah telah digolongkan dalam algorithma dengan “angka rumit”. Jajaran aplikasi ini mulai dari astronomi sampai vulcanology, dari analisa otomotive yang ketat sampai pesawat ulang- alik dengan orbit yang dimanis, dan dari molekul biology  sampai perakitan otomatis. Aplikasi modern dalam area engineering dan ilmiah bergerak menjauh dari algorithma angka konvensional seperti misalnya Computer-Aided Design, sistem simulasi, dan aplikasi interaktif lainnya dengan mengambil waktu seketika (real time).

Software melekat.
Produk cerdas telah menjadi sesuatu hal yang biasa dalam hampir setiap barang industri yang dipasarkan, menggunakan embedded software atau software melekat yang ditanam dalam read-only memory (ROM) dan dipergunakan untuk mengontrol produk dan sistem untuk pasar umum maupun industri. Software melekat dapat melakukan fungsi yang sangat terbatas dan tertentu saja. (misal, keypad pengotrol untuk oven microwave) atau menyediakan fungsi dan kemampuan kontrol yang cukup (misal, digital yang berfungsi dalam mobil seperti pengontrol bensin, peraga dashboard, dan sistem pengereman).
  
Software komputer pribadi.
Pasar Software komputer pribadi telah berkembang dalam dua dekade terakhir ini. Word Processing, spreadsheet, komputer grafik, multimedia, hiburan, manjemen database, aplikasi keuangan perorangan dan bisnis, jaringan external, dan akses database hanyalah beberapa dari ratusan aplikasi komputer yang lain.
Software berbasis Web.
Halaman Web yang diakses dengan menggunakan browser adalah sebuah software yang memadukan pelaksanaan perintah-perintah (misal, CGI, HTML, Perl, atau Java), dan data (misal, hypertext dan berbagai macam format visual dan audio). Pada intinya, penggunaan jaringan, telah membuat komputer menjadi sangat besar, yang menyediakan sumber software yang hampir tak terbatas dan bisa di akses oleh semua orang melalui modem.
 
Software artificial intelligence.
Software Artificial Intelligent (AI), menghasilkan kecerdasan buatan dengan mempergunakan algorithma nonnumerik untuk memecahkan problem kompleks yang tidak bisa dilakukan melalui perhitungan biasa atau analisa langsung. Sistem pakar, yang juga dikenal dengan istilah sistem berbasis pengetahuan dan pengalaman (knowledge), pengenalan pola (gambar dan suara), jaringan syaraf buatan, pembuktian dalil, dan permainan game adalah katagori yang mewakili aplikasi ini.
Software: Sebuah krisis dimasa datang?
Beberapa pengamat industri (termasuk pengarang buku ini) telah mengolongkan masalah-masalah yang berkaitan dengan pembangunan software sebagai sebuah “krisis”. Beberapa buku (misal, [GLA97], [YOU98a]) sudah menghitung kembali dampak dari beberapa kegagalan software yang agak menonjol, yang terjadi pada dekade lalu. Dengan adanya sukses besar yang dicapai oleh industri software, melahirkan beberapa pertanyaan, apakah istilah krisis software masih pantas. Robert Glass, pengarang beberapa buku tentang kegagalan software, mewakili mereka yang telah merobah pendiriannya. Dia menyatakan [GLA98]:” Menengok cerita saya mengenai kegagalan dan membaca laporan khusus, kegagalan yang luar biasa ditengah beberapa keberhasilan, ibarat sebuah gelas kosong, sekarang sudah penuh terisi”.

Orang-orang software yang berhasil lebih sering dari pada mereka yang gagal, dan krisis software yang diperkirakan tiga puluh tahun yang lalu kelihatannya tidak pernah terwujud. Makna krisis diantara adalah “titik balik dalam rangkaian suatu penyakit, ketika hal itu menjadi jelas apakah pasien akan hidup atau mati” dan kaitannya dengan software definisi ini barangkali memberikan kita sebuah kata kunci tentang kenyataan dari masalah yang telah mewabah pada pengembangan software.

Apa yang sebenarnya kita hadapi  mungkin lebih baik digolongkan sebagai chronic affliction (suatu terminologi yang disarankan oleh Prof Daniel Tiechrow dari Universitas Michigan dalm pembicraannya yang dikemukakan di Geneva, Switzerland, April 1989) . Kata affliction didefinisikan sebagai “segala sesuatu yang menyebabkan sakit atau  menyusahkan.” Tetapi definisi dari kata sifat chronic adalah kunci dari argumentasinya: “berlangsung dalam waktu lama atau sering terjadi, terus menerus tidak berkesudahan.” Ini jauh lebih akurat untuk menerangkan masalah yang telah lama dialami dalam bisnis software sebagai kesulitan yang berlangsung lama dari pada krisis.

Terlepas dari mau sebut dengan istilah apa, sejumlah masalah yang terjadi dalam pengembangan software komputer, tidak terbatas pada software yang tidak berfungsi dengan sempurna. Justru, kesulitan yang menyelimuti seluruh masalah adalah berkaitan dengan bagaimana kita mengembangkan software, bagaimana kita mendukung pengembangan volume dari software yang ada, dan bagaimana kita dapat mengharapkan untuk menjaga langkah dengan permintaan pengembangan software lebih banyak. Kesulitan yang demikian masih berlangsung sampai sekarang, namun faktanya industri masih berjalan baik.

Mitos software.
Beberapa penyebab kesulitan software bisa dilacak dari dongeng yang berkembang sepanjang awal sejarah pengembangan software. Tidak seperti mitos kuno yang sering memberi pelajaran pada manusia dengan petuahnya yang berharga, mitos pada software menyebarkan kesalahan informasi dan kebingungan. Mitos software mempunyai beberapa perlengkapan-perlengkapan yang membuatnya tersembunyi dan membahayakan; misalnya, mereka kelihatannya  seperti pernyataan yang masuk akal dari suatu fakta (terkadang berisi elemen yang benar), mereka mempunyai perasaan yang berdasarkan intuisi, dan mereka seringkali diumumkan secara resmi oleh parktisi berpenglaman yang “tahu nilai.”

Saat ini, para profesional yang mempunyai banyak pengetahuan dan pengalaman mengenal mitos, jadi untuk apa mereka bersikap yang menyesatkan, yang menyebabkan masalah serius yang sama pada para manager and orang-orang teknik. Sikap dan kebiasaan lama sulit untuk dirobah, dan sisa-sisa mitos software masih dipercaya.

Mitos Manjemen.
Manajer dengan tanggung jawab terhadap software, seperti manajer dikebanyakan disiplin lainnya, seringkali dibawah tekanan untuk menjaga budget, menjaga rencana kerja supaya tidak meleset, dan meningkatkan kwalitas. Seperti seorang tenggelam yang menggapai jerami, manager software seringkali memegang kepercayaan pada mitos software, bahwa kepercayaan itu mengurangi tekanan (meskipun sementara).

Mitos: Ada buku yang penuh dengan standard dan prosedur untuk membangun software, bukankah itu cukup menyediakan pada orang-orang  segala sesuatunya yang ingin mereka ketahui?
Kenyataannya: Buku standard mungkin ada dan cukup bagus, tapi apakah itu dipakai? Apakah praktisi software memperhatikan keberadaannya? Apakah itu merefleksikan praktek engineer software modern? Apakah itu komplit? Apakah itu sejalan dengan  peningkatan waktu penyelesaian sambil tetap fokus pada kwalitas? Dalam beberapa kasus, jawaban untuk semua pertanyaan diatas adalah  “tidak”

Mitos: Orang-orang mempunyai software yang bagus untuk alat bantu pengembangan, setelah itu, kita belikan mereka komputer yang paling baru.
Kenyataannya: memerlukan lebih banyak mainframe model terbaru, workstation, atau PC untuk mengerjakan pengembangan software dengan kwalitas yang tinggi. Alat bantu Computer-aided software engineering (CASE) sebenarnya lebih penting dari pada hardware untuk menghasilkan kwalitas yang bagus dan produktif, namun demikian kebanyakan pengembang software masih tidak menggunakan nya secara efektif.

Mitos: Jika ada keterlambatan, kita dapat menambah lebih banyak programmer dan terkejar (kadangkala disebut Mongolin horde concept)
Kenyataannya: Pengembangan software bukan suatu proses mekanik seperti perakitan. Dalam perkataan Brooks [BRO75]: “menambah orang pada keterlambatan proyek software membuatnya lebih terlambat.” Ketika orang baru ditambahkan, orang yang tadinya sedang bekerja harus meluangkan waktu mengajari pendatang baru, dengan demikian mengurangi sejumlah waktu dan terbuang tenaga pengembang yang produktif.  Orang bisa ditambahkan tapi hanya dengan cara perencanaan dan koordinasi yang baik.

Mitos: Jika saya memutuskan untuk outsource proyek software pada pihak ketiga, saya bisa santai dan membiarkan perusahaan itu membangunnya.
Kenyataannya: Jika sebuh organisasi tidak tahu bagaimana mengatur dan mengontrol internal proyek, akibatnya akan bermasalah ketika proyek software dikerjakan pihak luar.

Mitos Customer:
Customer yang menginginkan software komputer mungkin orang dari meja sebelah, grup teknik lantai bawah, departemen pemasaran /penjualan, atau perusahaan dari luar dengan memakai kontrak. Bebarapa kasus, customer percaya pada mitos tentang software, karena manager software dan praktisi sedikit sekali melakukan hal-hal untuk memperbaiki kesalah pahaman, akhirnya   harapan customer tidak tercapai, akibatnya ketidak puasan pada pengembang.

Mitos: Penjelasan umum mengenai objektifnya sudah cukup untuk mulai menulis program, untuk detilnya bisa mengisinya kemudian.
Kenyataanya: Awal definisi yang jelek adalah penyebab utama dari kegagalan usaha software. Suatu formalitas dan penjelasan rinci dari mengenai informasi, fungsi, perlakuan, tampilan, interface, pembatasan rancangan, dan validasi kretaria adalah sangat penting. Karakteristik ini dapat ditentukan hanya setelah komunikasi secara menyeluruh antara customer dan pengembang dilakukan.

Mitos: Permintaan proyek terus menerus berubah, tapi perubahan bisa dengan mudah diakomodasikan karena software fleksibel.
Kenyataanya: Permintaan software memang berubah, tapi dampak dari perubahan bervariasi terkait dengan waktu pengutaraan. Apabila perhatian yang serius diberikan diawal pendefinisian, permintaan awal perubahan dapat dengan mudah ditampung. Customer dapat meninjau kembali permintaan dan merekomendasi perubahan dengan dampak yang relatif kecil dalam pembiayaan. Ketika perubahan diminta dalam waktu perancangan software, dampak pembiayaan membesar dengan cepat, karena sumber daya telah disepakati dan kerangka rancangan telah ditetapkan. Perubahan dalam fungsi, tampilan, interface, atau karakteristik pada waktu implementasi (pengkodean dan pengetesan) mempunyai dampak pembiayaan yang lebih besar lagi. Ketika perubahan diminta setelah software dalam produksi, bisa-bisa melebihi sebuah permintaan yang terbesar, lebih mahal dari perobahan sama yang ada diawal.  

Mitos dari praktisi:
Mitos yang masih dipercaya oleh para praktisi software, telah didukung oleh budaya programming selama 50 tahun. Diawal mulanya software, programming dilihat sebagai bentuk dari seni. Cara lama dan sikap yang sulit untuk dihilangkan.

Mitos: Sekali kita menulis program dan hasilnya bekerja dengan baik, pekerjaan kita selesai.
Kenyataannya: Seseorang suatu kali berkata bahwa “semakin cepat anda memulai ‘menulis kode’, semakin lama hal ini akan anda selesaikan.” Data industri ([LIE80], [JON91]. PUT97]) menunjukan bahwa antara 60 – 80 % dari seluruh tenaga yang dipergunakan dalam software akan dipergunakan setelah hari pertama diserahkan pada customer.

Mitos: Sampai saya mendapatkan program “berjalan” saya tidak punya cara untuk mengukur kwalitasnya.
Kenyataannya: Salah satu mekanisme untuk meyakinkan kwalitas software yang efektif dapat dipergunakan dari permulaan proyek, adalah “filter kwalitas” yang telah terbukti lebih efektif dari pada testing untuk mencari klass tertentu dari kerusakan software.

Mitos: Penyerahan produk software jalan untuk sebuah proyek yang dianggap berhasil adalah pogram yang bisa dijalankan
Kenyataannya: Program yang bisa jalan hanyalah salah satu bagian dari sebuah konfigurasi software yang termasuk didalamnya beberapa elemen. Dokumentasi memberikan dasar untuk engineering yang berhasil dan, lebih penting lagi, menjadikannya sebagai petunjuk untuk pendukung/support software.

Banyak profesional software mengerti pemikiran yang keliru dari mitos yang baru saja diutarakan. Sangat disayangkan, sikap kebiasaan dan cara-cara mendorong manjemen dan praktek-praktek teknik menjadi jelek, meski kenyataannya mencatat pendekatan yang lebih baik.  Mengenali kenyataan-kenyataan software adalah langkah awal terhadap perumusan dari praktek pemecahan masalah untuk software engineering.

Ringkasan

Software telah menjadi elemen kunci dalam perobahan secara perlahan dari sistem dan produk berbasis komputer. Lebih dari 50 tahun yang lalu, software telah berubah secara perlahan dari sebuah pemecahan masalah khusus dan alat bantu analisa informasi, ke industri itu sendiri. Tetapi awalnya budaya dan riwayat “programming” telah menciptakan sejumlah masalah yang masih bertahan hingga sekarang. Software telah menjadi faktor pembatas dalam kelajutan perobahan dari sistem berbasis komputer. Software terdiri dari program, data, dan dokumen-dokumen. Tiap satuan ini terdiri dari sebuah konfigurasi yang dibuat sebagai satu bagian dari proses software engineering. Maksud dari software engineering adalah menyediakan suatu kerangka kerja untuk membangun software dengan kwalitas yang lebih tinggi

 
M. Setiawan Ahmad.
STTI BI Eresha.
Angkatan 33A
NPM: 331208620


Bush Farewell Dinner

Januari 20, 2009
Bush Farewell Dinner

Bush Farewell Dinner

Untuk mencegah terulangnya lagi peristiwa serupa yang memalukan di Iraq, maka seluruh tamu harus mengikuti protokoler yang baru


Barak Obama Fam

Januari 14, 2009

Barak Obama Fam

Barak Obama Fam

Barak Obama Fam

Saudara-saudara keluarga besar “Barak Obama” dari Kenya dan Indonesia yang berbodong-bondong ingin menghadiri pelantikannya sebagai President pertama Amrik yang berasal dari turunan kulit berwarna.


Konsep OOP

Januari 14, 2009

Konsep Pemrograman Berorientasi Objek
(Object Oriented Programming/OOP)

Sebelum membahas bagaimana kosep OOP, pertama-tama mari kita tinjau terlebih dahulu awal dari rekayasa pemrograman yang paling dasar, yang masih dalam kategori primitif, suatu bahasa pemrograman tingkat rendah. Komputer seperti yang sudah kita ketahui, adalah suatu perangkat keras yang dalam bekerjanya hanya mengenal ada tegangan atau tidak adanya tegangan listrik dalam rangkaian elektroniknya, yang dipasok dari catu daya baik dari bateray maupun dari adaptor. Ada dan tidak adanya tegangan listrik ini kemudian dijadikan sebagai kode dengan dua status yaitu 1 (untuk kondisi ada tegangan/high) dan 0 (tidak ada tegangan/low). Dari dua kondisi pengkodean ini yang kemudian kita kenal dengan nama kode binary 0 dan 1.

Pada tingkat yang paling dasar, satu perintah atau instruksi pada komputer adalah sederetan 0 dan 1 yang merupakan urutan fisik, yang harus dijalankan oleh sebuah prosesor, dalam menjalankan suatu operasi tertentu, misalnya “Tambah” , “Hapus” atau instruksi lainnya, tergantung dari tipe instruksinya, bisa berupa data tertentu yang berisi perintah dalam register yang harus dijalankan atau sebuah petunjuk alamat data yang berada dalam memori komputer.

Untuk menyusun sederetan 0 dan 1 menjadi sesuatu yang bermakna perintah tertentu pada prosesor, tentunya sangatlah rumit dan tidak gampang untuk  mengerjakannya, dan untuk tiap tipe dan merk prosesor akan berbeda susunan 0 dan 1 nya, sekalipun menghasilkan fungsi akhir yang sama. Fungsi satu set perintah ini kemudian diberi nama sesuai dengan fungsinya, add, subtract dll.

Guna mempermudah dalam menyusun perintah agar menghasilkan suatu fungsi tertentu, dibuatlah suatu bahasa pemrograman (Assembler) yang terdiri dari kode-kode singkatan (mneomonic) dalam bahasa (Inggris) yang lebih mudah dimengerti oleh manusia, ketimbang sederetan 0 dan 1 yang dimengerti oleh mesin. Mneomonic tersebut didefinisikan oleh pabrikan prosesor sesuai arsitekturnya. Susunan perintah yang dibuat oleh programer dengan bahasa Asembler ini, selanjutnya dikonversi menjadi sederatan 0 dan 1 dengan menggunakan kompiler, yang hasilnya berupa suatu program operasional dan bisa langsung dimengerti dan dijalankan oleh prosesor komputer.
Sebagai contoh misalnya perintah dalam susunan binary dengan menggunakan prosesor x86/IA-32 sbb:

•    Binary : 10110000 01100001 (Hex: B0 61).

Perintah tersebut dalam bahasa Assembler adalah:
•    Assembler :MOV AL, 61h.

Perintah diatas artinya sbb:
•    Pindahkan (move) nilai 61 hexadecimal atau = 97 decimal ke register prosesor yang bernama AL. Dalam bahasa Assembler MOV (1011) disebut opcode

Komputer juga tidak mengerti data yang berupa angka dan huruf yang kita kenal, oleh karena itu agar komputer bisa mengetahui maksudnya, angka dan huruf tersebut harus dirobah terlebih dahulu menjadi data yang berupa 1 dan 0 sesuai tabel ANSI, ASCII atau tabel data yang  lainnya melalui interpreter, sehingga bisa diproses untuk  menghasilkan output yang diinginkan. Pada awal-awal ditemukannya, program aplikasi komputer masih dalam tingkat program dengan logika yang masih sederhana, sesuai kemajuan saat itu, berbeda dengan saat ini yang rumit dan sangat kompleks. Program yang disusun dalam aplikasi ini, pada umumnya belum terlalu kompleks, dan sebagai contoh misalnya seperti untuk mengontrol peralatan rumah tangga, proses industri (PLC), pembukuan dan proses aplikasi lainnya.

Dalam bahasa Assembler, seorang programer harus menghafal arti dari mneomonic dan opcode, mengingat alamat memori, yang dalam prakteknya  tidak mudah untuk menyusunnya menjadi satu aplikasi. Dalam perkembangan bahasa program selanjutnya, diciptakan lagi suatu bahasa program yang dalam perintah-perintahnya itu disusun dengan menggunakan bahasa Inggris, yang bisa digunakan dan dimengerti oleh manusia, namun kata-kata yang dipakai sebagai perintah untuk menjalankan komputer ini, terbatas hanya kata-kata tertentu saja, misalnya read, write, delete, close, open dsb. Dengan menggunakan perintah yang dimengerti manusia ini, pembuatan program yang sesuai dengan kebutuhan aplikasi menjadi lebih mudah. Program  yang telah disusun sesuai aturan yang ditentukan itu, kemudian dirubah menjadi bahasa mesin dengan menggunakan interpreter atau kompiler, agar bisa dijalankan
oleh komputer. Adapun konsep pemrograman yang berisi susunan alur perintah atau subroutine itu, adalah merupakan suatu prosedur perintah pada komputer  bagaimana suatu aplikasi dijalankan. Konsep ini dikenal dengan istilah Bahasa Program Prosedural, dan bahasa ini tergolong dalam bahasa tingkat tinggi, misal bahasa BASIC, Cobol dsb.

Bahasa Prosedural adalah suatu bahasa yang merupakan cerminan dari bagaimana cara sebuah komputer menjalankan sederetan perintah, oleh karena itu program yang kita buat, sama halnya dengan mengatur bagaimana cara kerja komputer dalam menjalankan perintah yang sesuai dengan yang kita inginkan. Dengan menggunakan teknik ini, pertama-tama yang harus dipelajari oleh seorang programmer adalah, bagaimana memecahkan masalah yang besar ke dalam sederetan langkah-langkah kecil yang sederhana, yang disebut subroutine.

Untuk membuat sebuah konsep pemrograman komputer, para ahli menggunakan berbagai macam cara yang berbeda, dan dalam perkembangan bahasa pemrograman selanjutnya, kebanyak cenderung mengambil suatu konsep pada pemrograman yang berorientasi pada objek (Object Oriented Programming/OOP). Bahasa pemrograman yang berorientasi objek  ini, mengambil sudut pandang yang berbeda dibanding bahasa pemrograman prosedural, dimana OOP lebih terfokus pada bagaimana menyelesaikan suatu masalah pekerjaan dengan  menggunakan komputer, sedang dalam pemrograman prosedural  lebih melihat bagaimana cara kerja komputer dalam menangani suatu satuan tugas.

OOP adalah salah satu bentuk pendekatan dalam membangun program komputer dengan meniru bagaimana cara membuat suatu objek seperti yang terjadi dalam dunia nyata, suatu methodologi pengembangan software dimana program secara konsep dipandang sebagai satu kelompok atau sebuah grup, yang terdiri dari kumpulan objek yang saling berinteraksi.  Untuk membuat suatu Objek, OOP menggunakan kerangka abstrak yang disebut dengan Kelas, yang berisi data dan pernyataan-pernyataan yang diperlukan untuk mempergunakan data tersebut. Dengan mempergunakan cara pendekatan seperti ini, kita dapat membuat program yang bisa dipakai kembali (reuseable), lebih handal (reliable) dan mudah dipahami (understandable).

Bahasa yang berorientasi pada objek salah satunya adalah Java, yang menerapkan konsep Virtual Machine sehingga program yang dibangun dengan Java, bisa berjalan dalam berbagai platform, bersifat netral, artinya program bisa dijalankan tanpa modifikasi yang tidak terikat pada lingkungan perangkat keras atau perangkat lunak yang dipergunakan.  Program Java sudah ditulis, kemudian dikompile kedalam format bytecode yang bisa dijalankan oleh Java

interpreter atau yang dinamakan juga dengan Java Virtual Machine (JVM), dimana implementasinya bisa berjalan dilingkungan system operasi Linux, Microsoft, Apple MAC maupun dan OS yang lainnya, dan dengan perangkat keras yang berbeda-beda. Dengan mempelajari Java, maka sekaligus juga mempelajari OOP, suatu bahasa pemrograman yang direkayasa lebih aman, mudah dipelajari dan lebih sulit untuk disalah gunakan bila dibanding dengan C maupun C++ , karena tidak menggunakan system pointer.

Bahasa pemrograman Java diatur dalam elemen-elemen yang disebut kelas, dimana kelas inilah yang kemudian dipergunakan untuk membentuk objek. Setiap objek dalam bahasa pemrograman Java adalah merupakan satu bagian program sendiri yang terpisah, dirancang secara spesifik untuk mejalankan suatu fitur, yang saling berinteraksi dengan bagian atau objek lain membentuk suatu sistem, dan dalam suatu pengontrolan yang ketat, bisa dipergunakan
untuk mengolah pekerjaan tertentu sesuai dengan yang diinginkan.

Struktur dari kelas mempunyai dua aspek yaitu bagaimana sifatnya dan apa atribut atau kelengkapannya. Misalnya objek kelas mobil mempunyai kelengkapan roda, mesin, setir, rem, gearbox dan lain sebagainya, sedang sifat, fungsi atau behavior nya  bisa maju, mundur, belok kiri, kanan dan sebagainya. Kelengkapan dan sifat  atau fungsi dalam bahasa program Java disebut atribut dan method. Objek  mobil ini bisa bermacam-macam, ada mobil sedan, mobil barang, truk, bus dan lain-lainya yang semuanya masuk dalam kelas Mobil. Dengan kata lain Kelas Mobil, bisa mejadi objek sedan, truk, bus dan lain-lain yang ciri-cirinya mempunyai atribut roda, stir, mesin, gearbox dan sebagainya dan mempunyai sifat maju, mundur , belok kiri, belok kanan.  Atribut roda dari kelas mobil bisa digunakan pada objek mobil apa saja dalam kelas mobil. Sifat atau Fungsi dari satu kelas bisa diturunkan ke subkelas, dan dari subkelas bisa diturunkan lagi ke subkelas berikutnya, demikian seterusnya. Dari kelas-kelas ini, kita bisa menggabungkannya melalui paket dan interface.

Atribut sebuah kelas dari objek  adalah data yang membedakan satu objek dengan objek lainnya. Tiap objek merupakan bagian program tersendiri, seperti halnya subroutin dalam system prosedural, yang saling berinteraksi dengan objek lain secara khusus, membentuk satu satuan system tugas kerja. Kebanyakan system dibangun dengan menggabungkan menjadi satu dari sekumpulan objek yang berlainan, yang umumnya disebut komponen, dan sebagi
contoh misalnya sound system yang terdiri dari beberapa komponen sbb:

- komponen speaker yang bisa bekerja pada frekwensi menengah dan  atas.
- subwoofer yang bekerja difrekwensi rendah atau bas.
- pemutar CD yang bisa membaca data audio dari CD.
- mikropon yang berfungsi sebagai pengubah getaran suara ke data audio.

Komponen-koomponen ini dirancang sebagai objek untuk berinteraksi satu sama lain dengan menggunakan standard koneksi untuk input dan output . Sekalipun komponen-komponen tadi kita beli secara terpisah, dan dengan merk yang berbeda-beda, asalkan mempunyai koneksi yang standard, maka sound system itu bisa kita gabungkan dan bisa bekerja sesuai dengan yang kita inginkan. Begitu juga dengan OOP, bekerja dengan prinsip yang sama.

Kita bisa membangun sebuah program dengan mengkombinasikan objek yang baru kita buat dengan objek lainnya yang sudah ada, asal menggunakan cara-cara perancangan yang standard. Tiap objek yang dibangun akan menjalankan fungsi spesific dalam keseluruhan program. Jadi setiap objek adalah merupakan elemen yang mempunyai isi tersendiri pada sebuah program komputer, yang berkaitan dengan fitur-fitur dari rekayasa program yang ditujukan untuk  menjalankan tugas-tugas dari fungsi spesifik tersebut.

Dibawah ini  adalah salah satu contoh dari OOP dengan menggunakan bahasa Java:

import java.io.*;

public class KeyIn{
public static String MasukkanData(){
int masukkan; String kata= ” ” ; boolean rampung=false;
while (!rampung){
try{
masukkan= System.in.read();
if (masukkan<0 ||(char) masukkan==’\n’) rampung=true;
else if ((char) masukkan !=’\r’) kata= kata+ (char) masukkan;
}catch(java.io.IOException e){
System.err.println(“Salah”);
rampung=true;
}
}
return kata;
}
}

public class HitungPondasi{
public static void main(String[] args){
String dataMasuk; double volume; int pembulatan;

System.out.print(“Masukkan panjang pondasi ) = “);
dataMasuk= KeyIn.MasukkanData();
Double panjang= Double.valueOf(dataMasuk).doubleValue();

System.out.print(“Masukkan tinggi pondasi = “);
dataMasuk= KeyIn.MasukkanData();
double tinggi= Double.valueOf(dataMasuk).doubleValue();

System.out.print(“Masukkan lebar pondasi = “);
dataMasuk= KeyIn.MasukkanData();
double lebar= Double.valueOf(dataMasuk).doubleValue();

volume=panjang*lebar*tinggi;
pembulatan= (int) volume;

System.out.println(“Volume Pondasi = ( “+ panjang+ ” x “+ tinggi+ ” x “+ lebar+ ” ) = “+ pembulatan+ ” meter kubik.”);
}
}

Semoga tulisan yang singkat ini bisa bermanfaat.

Ditulis oleh: Muhammad Setiawan Ahmad
STTI BI Eresha 331207620


Ikuti

Get every new post delivered to your Inbox.