IV-1
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.
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.
3GP Pesan Kunci Video Video 3GP Pencarian letak data Pengacakan pesan Penyimpanan pesan
Proses penyisipan pesan
Proses ekstraksi pesan
Pesan Video Kunci 3GP Pembacaan pesan Pengurutan pesan
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 INTRA-DC 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.
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 Menyisipkan Pesan Mengekstraksi Pesan Membaca Video Mengacak Pesan Membaca Pesan Menyimpan Pesan Mengambil Pesan Pengirim Penerima <<extend>> <<extend>> <<include>> <<include>> <<include>> <<include>> <<extend>>
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.
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. Elemen Use Case Keterangan
1 Nama Menyisipkan Pesan
Deskripsi Melakukan penyisipan pesan pada video
Prekondisi Sistem menampilkan menu utama
Proses Pengirim memilih menu penyisipan pesan
Kondisi akhir Sistem masuk ke dalam menu penyisipan pesan
2 Nama Membaca Video
Deskripsi Melakukan pembacaan dan parsing video Prekondisi Use case Menyisipkan Pesan sudah dilakukan
Proses Pengguna memasukkan video 3GP
Sistem melakukan validasi format video Sistem mem-parsing video
Sistem mencatat semua letak data yang mungkin sebagai pesan Kondisi akhir Alamat video tersimpan dan sudah tervalidasi
3 Nama Membaca Pesan
Deskripsi Melakukan pembacaan pesan, baik berupa file atau teks Prekondisi Use case Menyisipkan Pesan sudah dilakukan
Proses 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 Kondisi akhir Pesan sudah tersimpan
4 Nama Mengacak Pesan
Deskripsi Melakukan pengacakan pesan dengan kunci
Prekondisi Use case Membaca Pesan atau Mengambil Pesan sudah dilakukan
Proses Pengguna memasukkan kunci
Sistem melakukan pengacakan atau pengurutan pesan, sesuai dengan kunci
Sistem menyimpan pesan hasil pengacakan atau pengurutan tersebut
Kondisi akhir Pesan hasil pengacakan atau pengurutan sudah tersimpan
5 Nama Menyimpan Pesan
Deskripsi Melakukan penyimpanan pesan ke dalam video Prekondisi Use case Mengacak Pesan sudah dilakukan
Proses Pengirim menekan tombol „Proses‟
No. Elemen Use Case Keterangan
sesuai dengan letak yang telah diurutkan Kondisi akhir Video sudah memiliki pesan
6 Nama Mengekstraksi Pesan
Deskripsi Melakukan ekstraksi pesan pada video
Prekondisi Sistem menampilkan menu utama
Proses Pengirim memilih menu ekstraksi pesan
Kondisi akhir Sistem masuk ke dalam menu ekstraksi pesan
7 Nama Mengambil Pesan
Deskripsi Mengambil kembali pesan yang tersembunyi pada video Prekondisi Use case Membaca Video sudah dilakukan
Proses Penerima menekan tombol „Proses‟
Sistem melakukan pembacaan data video
Sistem mengolah data tersebut untuk digabungkan menjadi pesan
Kondisi akhir Pesan dihasilkan oleh sistem
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.
Message -fileAddress -textContent -size +reader() +writer() +countSize() Key -password +generate() Embed -video -message -key +writeMessage() Video -address +readData() +writeData()
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.
Key -password +generate() Extract -video -message -key +readMessage() Video -address +readData() +writeData() Message -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.
Message -fileAddress -textContent -size +reader() +writer() +countSize() Key -password +generate() Embed -video -message -key +writeMessage() Extract -video -message -key +readMessage() Video -address +readData() +writeData() XGPMidlet -embed -extract
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
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 - Key Key: Back Proceed 1234 Embed - Confirmation Back Proceed Video: “video.3gp” Message: “file.txt” Key: *** Show key Embed - Done Result: Embed process done successfully. Menu Embed - Video Back Select ../ Music/ Picture/ Video/ Document/ video.3gp Embed - Message File Text Back Select
Embed - Message Text
Text:
Back Proceed
abcd
Embed - Message File
Back Select ../ Other/ file.txt Back Proceed Embed - Input Video: “video.3gp” Video output: “res.3gp”
Output Message Message: “file.txt” Video Embed - Output New File Overwrite Back Select
Embed - File Output
File name:
Back Proceed
res.3gp
Video output: “res.3gp”
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 - Key Key: 1234 Back Proceed Extract - Confirmation Video: “video.3gp” Key: *** Back Proceed Show key Extract - Done
Result: Extract process done successfully. “file.txt” is created in “file:/root/” Menu Extract - Input Video: “video.3gp” Video Back Proceed Extract - Video Back Select ../ Music/ Picture/ Video/ Document/ video.3gp
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.
Tabel IV-2 Daftar kelas perancangan
Nama Kelas Keterangan
XGPMIDlet Kelas yang mengatur tampilan perangkat lunak
Embed Kelas yang mengatur proses penyisipan pesan, validasi ukuran,
serta menyimpan objek masukan
Extract Kelas yang mengatur proses ekstraksi pesan, serta menyimpan objek masukan
Video Kelas yang melakukan segala proses terhadap video, seperti
validasi format, serta perubahan dan pembacaan data video
Message Kelas yang mengatur pembacaan pesan, dan pembangkitan
header pesan, yang digunakan pada proses penyisipan pesan, serta penulisan pesan pada proses ekstraksi
Key Kelas yang membangkitkan deretan bilangan acak, untuk
mengacak atau mengatur bit-bit pesan
Lib Kelas yang menyimpan semua konstanta dan operasi yang
dibutuhkan oleh kelas lainnya
XGPMIDlet -embed: Embed -extract: Extract -form: Form -fileBrowser: FileBrowser -textField: TextField -textBox: TextBox -list: List -alert: Alert -waitScreen: WaitScreen -command: Command -task: SimpleCancellableTask <<create>>+XGPMIDlet() -initialize()
+switchDisplayable(alert: Alert, nextDisplayable: Displayable) +commandAction(command: Command, displayable: Displayable) +startApp() +pauseApp() +destroyApp(unconditional: boolean) +clearData() 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 <<create>>+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 Embed -messageReady: boolean -videoReady: boolean -video: Video -message: Message -key: Key -statusOutput: String <<create>>+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 Extract -video: Video -message: Message -key: Key -videoReady: boolean <<create>>+Extract() +setVideoFileName(address: String) +getVideoFileName(): String +getVideoMsgError(): Vector +getMessageText(): String +getPassword(): String +setPassword(nPassword: String) +clear() +allReady(): boolean +videoExtract(): String +videoAnalyze(): boolean Message -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[*] <<create>>+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) Key -password: String -md5: MD5 -rand: Random -theKey: int[*] -boolKey: boolean[*] <<create>>+Key() +startUp() +generateTheKey(sizeKey: int) -generateSeedMD5() +getNextInt(): int +setPassword(nPassword: String) +getPassword(): String 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