BAB IV ANALISIS DAN PERANCANGAN PERANGKAT LUNAK Pada bab ini, akan diuraikan mengenai analisis pada kebutuhan perangkat lunak, analisis kelas, serta perancangan antarmuka dan kelas dari perangkat lunak tersebut.
4.1 Analisis Perangkat Lunak Perangkat lunak yang dibuat dalam Tugas Akhir akan dinamakan dengan XGP, dan dibangun pada perangkat mobile phone. Berikut ini akan dijelaskan tentang deskripsi umum sistem, arsitektur dan kebutuhan perangkat lunak, serta analisis kelas. 4.1.1 Deskripsi Umum Sistem Fungsi utama dari XGP adalah dapat menyisipkan pesan ke dalam video, serta dapat mengekstraksi kembali pesan tersebut. Pada saat menjalankan fungsi penyisipan pesan, XGP menerima masukan yaitu video 3GP, pesan rahasia berupa file atau tulisan yang diketik secara manual, dan kunci berupa sandi lewat. Keluarannya adalah video 3GP yang sudah memiliki pesan di dalamnya. Sedangkan pada fungsi ekstraksi pesan, XGP menerima masukan yaitu video 3GP dengan sandi lewat sebagai kunci. Keluaran yang dihasilkan adalah pesan yang sebelumnya tersembunyi pada video. Gambar dari sistem dapat dilihat pada Gambar IV–1. Video yang mengandung pesan dapat diekstraksi kembali pada mobile phone yang sama, atau mobile phone yang lain, dengan menggunakan perangkat lunak XGP. Pengiriman video tidak dicakup oleh sistem, melainkan dapat melalui MMS, bluetooth, atau cara lainnya. Sistem ini juga tidak mencakup pengukuran kualitas video hasil penyisipan, namun dengan menggunakan perangkat lunak yang khusus menangani fungsi tersebut.
Gambar IV–1 Deskripsi umum sistem
IV-1
IV-2 4.1.2 Arsitektur Perangkat Lunak Arsitektur dari XGP ditunjukkan pada Gambar IV–2. Terlihat bahwa XGP memiliki dua buah modul utama, yaitu modul penyisipan pesan, dan modul ekstraksi pesan.
Proses penyisipan pesan 3GP
Video
Pencarian letak data Penyimpanan pesan
Kunci
3GP
Video
Pengacakan pesan
Pesan
Proses ekstraksi pesan 3GP
Video
Pembacaan pesan Pengurutan pesan
Pesan Kunci
Gambar IV–2 Arsitektur XGP
Masukan untuk modul penyisipan pesan adalah video 3GP, kunci, dan pesan rahasia. Video ini akan dicari letak data yang dapat disisipkan pesan, yaitu koefisien INTRADC pada masing-masing I-frame. Koefisien ini nantinya akan menjadi tempat penyisipan pesan, yang sudah melalui proses pengacakan dengan kunci. Keluaran yang dihasilkan adalah video 3GP yang telah disisipi pesan tersebut. Sedangkan pada modul ekstraksi pesan, objek masukan berupa video 3GP yang memiliki pesan, dan kunci. Pesan yang dibaca dari video masih dalam bentuk acak, sehingga harus diurutkan terlebih dahulu. Dengan kunci masukan, urutan data dapat ditentukan sehingga pesan akan terbaca dengan benar, yang sekaligus menjadi keluaran dari modul ini.
IV-3 4.1.3 Kebutuhan Perangkat Lunak Perangkat lunak XGP yang akan dibangun dalam Tugas Akhir ini diharapkan dapat melakukan hal-hal berikut: 1. Membaca dan melakukan parsing terhadap video 3GP dan video codec H.263. 2. Melakukan pengacakan pada pesan sesuai dengan kunci yang dimasukkan, dimana hasil pengacakan ini haruslah sama untuk setiap kunci yang sama. 3. Menyisipkan pesan ke dalam video, baik berupa tulisan maupun file. 4. Mengekstraksi pesan yang disimpan dari video. 4.1.4 Diagram Use Case Untuk menggambarkan kebutuhan perangkat lunak secara visual, maka digunakan diagram use case, seperti pada Gambar IV–3.
System Menyimpan Pesan <<extend>> <<extend>>
Menyisipkan Pesan
Membaca Pesan
Pengirim
<
>
<>
Membaca Video
<> Mengacak Pesan Mengekstraksi Pesan Penerima
<> <<extend>>
Mengambil Pesan
Gambar IV–3 Diagram use case
Perangkat lunak XGP memiliki 7 buah use case, dan 2 buah aktor. Pengirim merupakan pengguna yang melakukan penyisipan pesan ke dalam video, sedangkan penerima adalah pengguna yang melakukan ekstraksi pesan. Use case Membaca Pesan digunakan untuk melakukan pembacaan data pesan dan validasi ukuran pesan terhadap video, sedangkan use case Menyimpan Pesan memasukkan data pesan ke dalam video. Maka kedua use case ini hanya digunakan pada saat penyisipan pesan.
IV-4 Sedangkan use case Mengambil Pesan digunakan untuk mengambil kembali pesan dari video, maka use case ini hanya digunakan pada proses ekstraksi pesan. Use case Membaca Video dan Mengacak Pesan digunakan pada proses penyisipan sekaligus ekstraksi, sehingga kedua use case ini terdapat pada kedua proses. Penjelasan tiap use case dari diagram Gambar IV–3 dijelaskan pada Tabel IV-1. Tabel IV-1 Narasi use case
No. 1
2
3
4
Elemen Use Case Nama Deskripsi Prekondisi Proses Kondisi akhir Nama Deskripsi Prekondisi Proses
Kondisi akhir Nama Deskripsi Prekondisi Proses
Kondisi akhir Nama Deskripsi Prekondisi Proses
5
Kondisi akhir Nama Deskripsi Prekondisi Proses
Keterangan Menyisipkan Pesan Melakukan penyisipan pesan pada video Sistem menampilkan menu utama Pengirim memilih menu penyisipan pesan Sistem masuk ke dalam menu penyisipan pesan Membaca Video Melakukan pembacaan dan parsing video Use case Menyisipkan Pesan sudah dilakukan Pengguna memasukkan video 3GP Sistem melakukan validasi format video Sistem mem-parsing video Sistem mencatat semua letak data yang mungkin sebagai pesan Alamat video tersimpan dan sudah tervalidasi Membaca Pesan Melakukan pembacaan pesan, baik berupa file atau teks Use case Menyisipkan Pesan sudah dilakukan Pengirim memilih jenis pesan, yaitu file atau teks Sistem menampilkan layar browser pesan untuk jenis pesan file, dan textbox pesan untuk jenis pesan teks Pengirim memasukkan pesan Sistem menyimpan pesan yang dimasukkan Pesan sudah tersimpan Mengacak Pesan Melakukan pengacakan pesan dengan kunci Use case Membaca Pesan atau Mengambil Pesan sudah dilakukan Pengguna memasukkan kunci Sistem melakukan pengacakan atau pengurutan pesan, sesuai dengan kunci Sistem menyimpan pesan hasil pengacakan atau pengurutan tersebut Pesan hasil pengacakan atau pengurutan sudah tersimpan Menyimpan Pesan Melakukan penyimpanan pesan ke dalam video Use case Mengacak Pesan sudah dilakukan Pengirim menekan tombol „Proses‟ Sistem melakukan perubahan data video dengan data pesan,
IV-5 No.
6
7
Elemen Use Case
Keterangan sesuai dengan letak yang telah diurutkan Video sudah memiliki pesan Mengekstraksi Pesan Melakukan ekstraksi pesan pada video Sistem menampilkan menu utama Pengirim memilih menu ekstraksi pesan Sistem masuk ke dalam menu ekstraksi pesan Mengambil Pesan Mengambil kembali pesan yang tersembunyi pada video Use case Membaca Video sudah dilakukan Penerima menekan tombol „Proses‟ Sistem melakukan pembacaan data video Sistem mengolah data tersebut untuk digabungkan menjadi pesan Pesan dihasilkan oleh sistem
Kondisi akhir Nama Deskripsi Prekondisi Proses Kondisi akhir Nama Deskripsi Prekondisi Proses
Kondisi akhir
4.1.5 Analisis Kelas XGP memiliki dua buah modul, yaitu modul penyisipan pesan, dan modul ekstraksi pesan. Untuk lebih memudahkan, maka analisis akan dilakukan terhadap kedua modul ini secara terpisah. 1. Proses penyisipan pesan Proses untuk penyisipan pesan membutuhkan tiga buah masukan, yaitu video, pesan rahasia, dan kunci. Ketiga masukan ini dapat menjadi kelas yang berbeda, seperti tampak pada Gambar IV–4.
Embed -video -message -key
Key -password +generate()
+writeMessage()
Video -address +readData() +writeData()
Message -fileAddress -textContent -size +reader() +writer() +countSize()
Gambar IV–4 Kelas analisis pada penyisipan pesan
IV-6 Kelas „Video‟ menangani segala proses terhadap video seperti validasi format video yang dimasukkan, mencari data video yang dapat menjadi tempat penyisipan, dan melakukan perubahan atau pengambilan data pada video. Kelas „Message‟ mengatur pembacaan pesan, baik berupa file maupun teks. Apabila jenis file yang dimasukkan, maka hanya alamat file tersebut yang disimpan. Sedangkan apabila jenis teks, seluruh isi dari teks tersebut akan disimpan. Pembacaan ukuran pesan pada saat penyisipan juga dilakukan oleh kelas ini. Kelas „Key‟ menyimpan kunci masukan, serta melakukan pembangkitan bilangan acak berdasarkan kunci tersebut. Deretan bilangan acak ini tidak boleh mengandung bilangan yang sama lebih dari sekali, untuk menghindari pengambilan data pada bit yang sama. Kelas „Embed‟ merupakan kelas yang mengatur proses menyisipkan pesan, dan penyimpanan semua informasi masukan dari pengguna. Jenis keluaran yang dilakukan, apakah menjadi file video yang baru atau menimpa video yang lama, juga diatur oleh kelas ini. 2. Ekstraksi pesan Pada ekstraksi pesan, kelas analisis ditunjukkan pada Gambar IV–5. Pada proses ini, hanya dibutuhkan dua buah masukan, yaitu video dan kunci, yang masing-masing menjadi kelas „Video‟ dan „Key‟. Kelas „Video‟ tidak melakukan adanya penulisan atau pengubahan data pada video, tetapi hanya dipakai untuk membaca data dari video. Sedangkan kelas „Message‟ digunakan untuk menyimpan pesan hasil ekstraksi, dan akan diurutkan melalui bilangan acak pada kelas „Key‟. Kelas „Extract‟ menyimpan kedua objek masukan dan objek hasil, serta mengatur proses pembacaan data tersebut.
IV-7
Extract -video -message -key
Key -password +generate()
+readMessage()
Message Video -address +readData() +writeData()
-fileAddress -textContent -size +reader() +writer() +countSize()
Gambar IV–5 Kelas analisis pada ekstraksi pesan
Diagram kelas analisis untuk seluruh modul dapat dilihat pada Gambar IV–6. Jumlah kelas pada diagram ini berjumlah 6 kelas. Kelas „Embed‟ digunakan pada proses penyisipan, yang menyimpan tiga kelas sebagai objek masukan, yaitu kelas „Video‟, „Message‟, dan „Key‟. Sedangkan kelas „Extract‟ digunakan pada proses ekstraksi, yang menyimpan kelas „Video‟ dan „Key‟ sebagai masukan, dan kelas „Message‟ sebagai keluaran. Kelas „XGPMidlet‟ digunakan untuk mengatur tampilan aplikasi pada layar mobile phone.
Embed -video -message -key
Extract XGPMidlet -embed -extract
+writeMessage()
Video -address +readData() +writeData()
-video -message -key +readMessage()
Message -fileAddress -textContent -size +reader() +writer() +countSize()
Gambar IV–6 Kelas analisis keseluruhan
Key -password +generate()
IV-8
4.2 Perancangan Perangkat Lunak Berikut akan dijelaskan mengenai perancangan antarmuka dari XGP, serta diagram kelas perancangan, yaitu kelas yang sudah memiliki atribut dan operasi secara lengkap. 4.2.1 Perancangan Antarmuka Perangkat lunak XGP dirancang seperti aplikasi wizard, baik pada menu penyisipan atau ekstraksi. Pada saat XGP pertama kali dijalankan, layar akan menampilkan menu utama, seperti pada Gambar IV–7. Disini dapat dipilih kedua modul perangkat lunak, yaitu „Embed‟ untuk penyisipan, dan „Extract‟ untuk ekstraksi pesan. XGP Embed Extract
Exit
Gambar IV–7 Antarmuka menu utama
Antarmuka utama pada menu „Embed‟ ditunjukkan pada Gambar IV–8. Layar „Embed – Input‟ adalah tampilan saat meminta masukan untuk proses penyisipan, yaitu video dan pesan. Dengan menekan tombol „Video‟, layar „Embed – Video‟ akan muncul sebagai file browser untuk masukan video. Tombol „Video Output‟ ditekan untuk memilih bagaimana video keluaran akan dihasilkan, apakah pada file baru atau menimpa video yang lama. Pemilihan ini ditunjukkan pada layar „Embed – Output‟, dan pemilihan nama file video baru ditunjukkan pada layar „Embed – File Output‟ Untuk memasukkan pesan, jenis pesan dipilih terlebih dahulu, yaitu pada layar „Embed – Message‟. Untuk jenis file, maka file browser „Embed – Message File‟ untuk pesan akan muncul. Sedangkan apabila jenis teks, maka akan muncul textbox seperti pada layar „Embed – Message Text‟. Apabila kedua masukan ini sudah dimasukkan, pengguna dapat melanjutkan proses penyisipan untuk memasukkan kunci. Layar „Embed – Key‟ akan tampak untuk meminta kunci masukan. Kemudian layar „Embed – Confirmation‟ akan memperlihatkan semua masukan, untuk
IV-9 mengkonfirmasi pengguna terhadap masukan. Tombol „Show key‟ dapat dipilih untuk menampilkan isi kunci yang sebenarnya. Apabila setuju, pengguna dapat menekan tombol „Proceed‟ untuk melakukan proses penyisipan. Layar „Embed – Done‟ akan memberikan status hasil penyisipan, dan pengguna dapat kembali ke menu utama. Embed - Input Video: “video.3gp” Video output: “res.3gp” Message: “file.txt” Video Output
Embed - Video
Embed - Output
../ Music/ Picture/ Video/ Document/ video.3gp
New File Overwrite
Message Back
Proceed
Embed - File Output
Select
Back
Embed - Message
File name:
File
res.3gp
Text
Back
Proceed
Embed - Message Text Text: abcd
Select
Embed - Message File ../ Other/ file.txt
Select
Back
Back
Embed - Key
Back
Select
Embed - Confirmation
Key:
Video: “video.3gp”
1234
Message: “file.txt” Video output: “res.3gp” Key: ***
Show key Back
Proceed
Back
Proceed
Back
Embed - Done Result: Embed process done successfully.
Menu
Gambar IV–8 Antarmuka modul 'Embed'
Proceed
IV-10 Antarmuka utama pada menu „Extract‟ ditunjukkan pada Gambar IV–9. Layar untuk meminta masukan ditunjukkan pada layar „Extract – Input‟, dimana hanya dapat memasukkan video sebagai masukan, yaitu melalui file browser pada layar „Extract – Video‟. Apabila video sudah dimasukkan, maka pengguna dapat memasukkan kunci, yaitu pada „Extract – Key‟. Kemudian konfirmasi masukan akan ditunjukkan pada layar „Extract – Confirmation‟. Jika setuju, pengguna dapat menekan tombol „Proceed‟ untuk menjalankan proses ekstraksi pesan. Hasil proses akan diperlihatkan pada layar „Extract – Done‟. Extract - Input Video: “video.3gp”
Extract - Video
Extract - Key
../ Music/ Picture/ Video/ Document/ video.3gp
Key: 1234
Video Back
Proceed
Back
Extract - Confirmation Video: “video.3gp” Key: ***
Select
Back
Proceed
Extract - Done Result: Extract process done successfully. “file.txt” is created in “file:/root/”
Show key Back
Proceed
Menu
Gambar IV–9 Antarmuka modul 'Extract'
4.2.2 Perancangan Kelas Berdasarkan analisis kelas pada subbab sebelumnya, didapatkan daftar kelas perancangan seperti yang ditunjukkan pada Tabel IV-2. Terdapat sebuah kelas tambahan yaitu kelas „Lib‟, yang hanya berfungsi untuk menyimpan semua konstanta, tipe, dan operasi umum yang dipakai pada kelas lainnya, yaitu kelas „Message‟, „Key‟, dan „Video‟. Tidak ada fungsi khusus dalam kelas „Lib‟ ini. Detil dari atribut dan operasi dari masing-masing kelas dapat dilihat pada Lampiran C. Sedangkan diagram kelas perancangan, beserta hubungan antar kelas, terdapat pada Gambar IV–10.
IV-11 Tabel IV-2 Daftar kelas perancangan
Nama Kelas XGPMIDlet Embed Extract Video Message
Key Lib
Keterangan Kelas yang mengatur tampilan perangkat lunak Kelas yang mengatur proses penyisipan pesan, validasi ukuran, serta menyimpan objek masukan Kelas yang mengatur proses ekstraksi pesan, serta menyimpan objek masukan Kelas yang melakukan segala proses terhadap video, seperti validasi format, serta perubahan dan pembacaan data video Kelas yang mengatur pembacaan pesan, dan pembangkitan header pesan, yang digunakan pada proses penyisipan pesan, serta penulisan pesan pada proses ekstraksi Kelas yang membangkitkan deretan bilangan acak, untuk mengacak atau mengatur bit-bit pesan Kelas yang menyimpan semua konstanta dan operasi yang dibutuhkan oleh kelas lainnya
XGPMIDlet Video -bufferBit: StringBuffer -messageResult: StringBuffer -messageBit: StringBuffer -fileNameResult: String -nPict: int -bitLSB: int -totalMessageSize: int -pictOffset: int[*] -pictSize: int[*] -buffer: byte[*] -fileSize: long -stopEmbed: boolean -stopExtract: boolean +overwrite: boolean -fileName: String -fileNameOutput: String -fileConnectionInput: FileConnection -fileConnectionOutput: FileConnection -dataInputStream: DataInputStream -dataOutputStream: DataOutputStream -vMsgError: Vector <>+Video() -openReader() -closeReader() -openWriter() -closeWriter() -readInt(times: int): int -readBit(len: int): String -writeByte() -skipBit(len: int) -readNext(): int -readByte(len: int) -skipByte(len: int) -skipByteTo(pos: int) -startUpEmbed(message: Message, key: Key) +copyFile(): boolean +delete(fileName: String) +renameOutput(nFileName: String) +embed(message: Message, key: Key, write: boolean): String -finishEmbed(message: Message) -writeMessage(message: Message, key: Key) -startUpExtract(message: Message, key: Key) +extract(message: Message, key: Key): String -finishExtract(message: Message, key: Key) -makeFileName(stBit: String) -makeMessageSize(stBit: String) -startUpValidateFormat() +validateFormat() +setURL(nURL: String) +isOutputExist(nName: String): boolean +checkSize(nURL: String): boolean +setURLOutput(nURLOutput: String) +getURLOutput(): String +getFileName(): String +getFileNameOutput(): String +getMsgError(): Vector +isAnyError(): boolean
Message
-embed: Embed -extract: Extract -form: Form -fileBrowser: FileBrowser -textField: TextField -textBox: TextBox -list: List -alert: Alert -waitScreen: WaitScreen -command: Command -task: SimpleCancellableTask <>+XGPMIDlet() -initialize() +switchDisplayable(alert: Alert, nextDisplayable: Displayable) +commandAction(command: Command, displayable: Displayable) +startApp() +pauseApp() +destroyApp(unconditional: boolean) +clearData()
Key
Embed -messageReady: boolean -videoReady: boolean -video: Video -message: Message -key: Key -statusOutput: String <>+Embed() +setVideoFileName(nURL: String): boolean +getVideoFileName(): String +setVideoOutputFileName(name: String) +getVideoOutputFileName(): String +setVideoOverwrite(nOverwrite: boolean) +getVideoOverwrite(): boolean +getVideoMsgError(): Vector +getMessageFileName(): String +setMessageFileName(url: String) +setMessageText(text: String) +getMessageText(): String +isMessageFile(): boolean +setPassword(nPassword: String) +getPassword(): String +clear() +allReady(): boolean +videoAnalyze(): boolean +videoEmbedCancel() +videoEmbedFinish() +videoEmbed(): String
-password: String -md5: MD5 -rand: Random -theKey: int[*] -boolKey: boolean[*] <>+Key() +startUp() +generateTheKey(sizeKey: int) -generateSeedMD5() +getNextInt(): int +setPassword(nPassword: String) +getPassword(): String
Extract -video: Video -message: Message -key: Key -videoReady: boolean <>+Extract() +setVideoFileName(address: String) +getVideoFileName(): String +getVideoMsgError(): Vector +getMessageText(): String +getPassword(): String +setPassword(nPassword: String) +clear() +allReady(): boolean +videoExtract(): String +videoAnalyze(): boolean
-type: short -url: String -fileName: String -filePath: String -status: String -text: StringBuffer -messageBit: StringBuffer -headerBit: StringBuffer -fileConnection: FileConnection -dataInputStream: DataInputStream -dataOutputStream: DataOutputStream -headerWritten: boolean -sizeTotalMessage: int -byteWritten: int -counterMessageBit: int -counterHeaderBit: int -counterTotal: int -message: byte[*] -header: byte[*] <>+Message() -openFileRead() -closeFileRead() -openFileWrite(nPath: String, nName: String): boolean -closeFileWrite() +tryCreate(nPath: String, nName: String): boolean -writeText(x: char) -writeByte(x: int) +writeMessage(key: Key, ch: char) -readNext(): byte +startUpEmbed(key: Key) +finishEmbed() +startUpExtract(key: Key) -flushMessage(key: Key) +finishExtract(key: Key) -generateMessage(): int -generateMessageBit(key: Key) -generateHeaderBit() -generateStatus(statusType: short) +getNextBit(key: Key): char +getType(): short +setType(nType: short) +setSizeMessage(nSizeTotalMessage: int) +getSizeMessage(): int +getTotalSize(): int +setURL(nURL: String) +getFileName(): String +getByteWritten(): int +getStatus(): String +getText(): String +setText(nText: String)
Gambar IV–10 Diagram kelas perancangan
Lib +msgSize: int +vidSize: int +LSBSize: int +ftypSupported: String[*] +ftypUnSupported: String[*] +container: String[*] +PICT_TYPE_INTRA: int +PICT_TYPE_INTER: int +ERROR_UNCOMPATIBLE_TYPE: String +ERROR_UNKNOWN_TYPE: String +ERROR_H263_NOT_BASELINE: String +ERROR_MP4: String +OPEN_READ: int +OPEN_WRITE: int +OPEN_READ_WRITE: int +vlcMcbpcIPict: String[*] +vlcMcbpcIPictMbType: int[*] +vlcMcbpcIPictCbpc: String[*] +vlcMcbpcPPict: String[*] +vlcMcbpcPPictMbType: int[*] +vlcMcbpcPPictCbpc: String[*] +vlcCbpy: String[*] +vlcMvd: String[*] +vlcMvdVector: double[*] +vlcMvdDifference: double[*] +vlcTcoef: String[*] +vlcTcoefRun: int[*] +vlcTcoefLast: int[*] +vlcTcoefLevel: int[*] +maxBit: int +TYPE_FILE: short +TYPE_TEXT: short +STATUS_SUCCEED: short +STATUS_MEMORY_ERROR: short +bitToInt(bit: String): int +byteToBit(x: int): String +hexToInt(hex: String): int