Panduan Lengkap: Pemodelan Sistem Kontrol Panggilan Telepon Menggunakan Mesin State UML

šŸŽÆ Ikhtisar

Panduan ini membimbing Anda melalui desain dan pemodelan dariĀ Sistem Kontrol Panggilan TeleponĀ menggunakanĀ Diagram Mesin State UML. Ini berfokus padaĀ siklus hidup panggilan keluar, yang menggambarkan bagaimana saluran telepon berpindah antar status sebagai respons terhadap tindakan pengguna dan peristiwa jaringan.

Diagram ini menangkap keduaĀ jalur bahagiaĀ (pengaturan panggilan berhasil) danĀ jalur tidak bahagiaĀ (kesalahan, waktu habis, saluran sibuk), menekankan ketahanan, penanganan pengecualian, dan transisi status yang jelas—prinsip-prinsip utama dalam sistem komunikasi real-time.


🧩 Konsep Inti dalam Mesin State UML

Sebelum mempelajari diagram ini, pahami konsep UML dasar berikut:

Konsep Deskripsi
Status Kondisi di mana suatu objek memenuhi kondisi tertentu atau melakukan tindakan.
Transisi Perubahan dari satu status ke status lainnya, yang dipicu oleh suatu peristiwa.
Peristiwa Suatu kejadian yang menyebabkan transisi (misalnyaĀ onHook,Ā validNumber).
Transisi Diri Suatu transisi yang dimulai dan berakhir pada status yang sama (misalnyaĀ digit(n)Ā saat dalamĀ Pemilihan).
Status Palsu Titik kontrol khusus sepertiĀ AwalĀ atauĀ AkhirĀ yang bukan merupakan status sebenarnya.
Status Komposit Status yang berisi substatus (misalnyaĀ KesalahanĀ status denganĀ BusyTone,Ā FastBusyTone,Ā PesanRekaman).
Kondisi Pengawas Ekspresi Boolean yang harus benar agar transisi dapat terjadi.

āœ…Ā Kiat Pro:Ā GunakanĀ event [pengawas] / aksiĀ sintaks dalam UML untuk mendokumentasikan pemicu, kondisi, dan efek samping.


šŸ”„ Siklus Hidup Panggilan Keluar: Penjelasan Langkah demi Langkah

1.Ā Fase Inisiasi & Pemilihan

šŸ”¹ Keadaan Pseudo Awal → Idle

  • Sistem dimulai dalam keadaanĀ Keadaan Pseudo Awal.

  • Belum ada aktivitas; telepon berada dalam posisi tergantung.

šŸ”¹ Idle → DialTone (onHook)

  • Kejadian:Ā onHookĀ (pengguna mengangkat handset)

  • Transisi:Ā onHook → DialTone

  • Aksi:Ā Hasilkan nada penelepon; siapkan untuk input digit.

šŸ“ŒĀ Ini adalah perubahan keadaan pertama yang terlihat dalam siklus panggilan.

šŸ”¹ DialTone → Dialing (digit(n))

  • Kejadian:Ā digit(n)Ā (pengguna memasukkan satu digit)

  • Transisi:Ā digit(n) → Dialing

  • Keadaan:Ā Masuk keĀ DialingĀ mode.

šŸ”¹ Transisi Diri: Dialing → Dialing (digit(n))

  • Kejadian:Ā digit(n)Ā (banyak digit dimasukkan)

  • Pengecekan:Ā Tidak ada (selalu diizinkan)

  • Aksi:Ā Tambahkan digit ke nomor yang sedang dihubungi.

  • Tujuan:Ā Izinkan entri digit terus-menerus tanpa meninggalkanĀ PemanggilanĀ keadaan.

šŸ’”Ā Transisi diri sangat penting untuk menangani urutan input seperti nomor telepon.


2.Ā Logika Koneksi & Penanganan Pengecualian

šŸ”¹ Pemanggilan → Menghubungkan (nomorValid)

  • Kejadian:Ā nomorValidĀ (nomor lengkap divalidasi)

  • Transisi:Ā nomorValid → Menghubungkan

  • Aksi:Ā Mulai proses pengaturan panggilan dengan jaringan.

šŸ”¹ Pemanggilan → Pesan Terdokumentasi (nomorTidakValid)

  • Kejadian:Ā nomorTidakValidĀ (contoh: panjang salah, awalan tidak valid)

  • Transisi:Ā nomorTidakValid → Pesan Terdokumentasi

  • Aksi:Ā Putar pesan yang telah direkam:Ā ā€œNomor yang Anda hubungi tidak dalam layanan.ā€

šŸ”¹ Menghubungkan → Suara Sibuk (nomorSibuk)

  • Kejadian:Ā nomorSibuk

  • Transisi:Ā nomorSibuk → nadaSibuk

  • Aksi:Ā Putar nada sibuk; beri tahu pengguna bahwa saluran sedang digunakan.

šŸ”¹ Terhubung → nadaSibukCepat (trunkSibuk)

  • Kejadian:Ā trunkSibuk

  • Transisi:Ā trunkSibuk → nadaSibukCepat

  • Aksi:Ā Putar nada sibuk cepat; menunjukkan kemacetan jaringan.

āš ļøĀ Catatan:Ā Ini adalahĀ keadaan kesalahanĀ yang mengganggu alur normal. Harus ditangani secara baik.


3.Ā Mekanisme Waktu Habis & Peringatan

šŸ”¹ Menelpon → Peringatan (waktu habis)

  • Kejadian:Ā waktu habisĀ setelah 30 detik tidak aktif

  • Transisi:Ā waktu habis → Peringatan

  • Aksi:Ā Putar nada peringatan; beri tahu pengguna untuk melanjutkan atau gantung.

šŸ”¹ Peringatan → Waktu Habis (waktu habis)

  • Kejadian:Ā waktu habislagi setelah 10 detik

  • Transisi:Ā waktu habis → Waktu habis

  • Aksi:Batalkan percobaan panggilan; kembali keIdle.

ā±ļøĀ Logika waktu habis mencegah menunggu tanpa batas dan meningkatkan pengalaman pengguna.


4.Ā Panggilan Aktif & Putus

šŸ”¹ Terhubung → Berdering (dilalui)

  • Kejadian:Ā dilaluiĀ (jaringan berhasil melalui panggilan)

  • Transisi:Ā dilalui → Berdering

  • Aksi:Ā Kirim sinyal berdering ke pihak yang dihubungi.

šŸ”¹ Berdering → Terhubung (panggilan yang dihubungi dijawab)

  • Kejadian:Ā panggilan yang dihubungi dijawab

  • Transisi:Ā panggilan yang dihubungi dijawab → Terhubung

  • Aksi:Ā Bangun koneksi audio; mulai rekaman panggilan (jika diaktifkan).

šŸ”¹ Terhubung → Putus (onHook ATAU panggilan yang dihubungi terputus)

  • Dua Jalur untuk Putus:

    1. Pengguna menggantung:Ā onHook → Putus

    2. Pihak lain menggantung:Ā panggilanTeleponTerputus → Terputus

šŸ”„Ā Kedua transisi mengarah keĀ TerputusĀ sebelum mencapaiĀ Status Akhir.

šŸ”¹ Terputus → Status Akhir

  • Peristiwa:Ā Tidak ada (implisit atau melalui tindakan pembersihan)

  • Transisi:Ā Terputus → Akhir

  • Aksi:Ā Bersihkan sumber daya, catat durasi panggilan, perbarui statistik.

āœ…Ā Status Akhir menandakan akhir dari siklus hidup panggilan.


šŸŽØ Prinsip Desain Visual untuk Kejelasan

Untuk membuat mesin status yang kompleks mudah dibaca dan dipelihara:

Prinsip Implementasi
Jalur Utama yang Normal Jaga alur utama (Tunggu → nadaPanggilan → Mengetik → Menghubungkan → Berdering → Terhubung) sebagai garis vertikal atau horizontal yang bersih.
Cabangkan ke Luar untuk Penyimpangan Tempatkan status kesalahan (nadaSibuk, nadaSibukCepat, pesanTerrekam) sebagai cabang sampingan.
Kelompokkan Status yang Terkait GunakanĀ status kompositĀ untuk kondisi kesalahan (lihat di bawah).
Gunakan Status Palsu Secara Bijak AwalĀ danĀ AkhirĀ harus ditandai dengan jelas.
Hindari Transisi yang Berpotongan Jaga agar panah tidak tumpang tindih; gunakan daerah ortogonal jika diperlukan.

šŸ”§ Teknik Pemodelan Lanjutan

āœ… State Komposit: Pengelompokan ā€œErrorā€

Alih-alih mencantumkanĀ BusyTone,Ā FastBusyTone, danĀ RecordedMessageĀ sebagai state terpisah, kelompokkan di bawahĀ state kompositĀ yang disebutĀ Error:

[Error] 
ā”œā”€ā”€ BusyTone
ā”œā”€ā”€ FastBusyTone
└── RecordedMessage
  • Aksi Masuk:Ā Putar nada kesalahan atau pesan.

  • Aksi Keluar:Ā Kembali keĀ DialToneĀ atauĀ IdleĀ setelah respons pengguna.

āœ…Ā Manfaat:Mengurangi kekacauan visual dan meningkatkan skalabilitas.


āœ… Kondisi Penjaga (Peningkatan Opsional)

Tambahkan penjaga untuk menyempurnakan transisi:

digit(n) [number.length < 15] → Menelpon
validNumber [number.isInternational] → Terhubung

šŸ› ļø Penjaga mencegah transisi yang tidak valid dan mendukung logika bersyarat.


šŸ“Œ Poin-Poin Utama: Praktik Terbaik untuk Mesin State yang Kompleks

Latihan Mengapa Ini Penting
Model Jalur Tidak Bahagia Sistem nyata gagal. Merancang untukĀ nomorTidakValid,Ā waktuHabis,Ā saluranSibukĀ menjamin keandalan.
Gunakan Ekspresi Aksi SertakanĀ / logPercobaanPanggilan()Ā atauĀ / mainkanTone()Ā untuk menunjukkan efek samping.
Jaga agar Acara Jelas & Berfokus pada Aksi GunakanĀ onHook,Ā dilalui,Ā panggilanTeleponDijawabĀ sebagai ganti dariĀ e1,Ā e2.
Namai Status dengan Jelas HindariĀ State1,Ā State2. GunakanĀ Menelepon,Ā Berdering,Ā Terhubung.
Dokumentasikan Asumsi Misalnya, ā€œWaktu habis setelah 30 detik tidak aktifā€ harus dicatat dalam komentar.

šŸ’» Generasi Kode: PlantUML & Mermaid

Berikut adalahĀ blok kode siap pakaiĀ untuk menghasilkan diagram ini dalam format yang Anda sukai.


āœ… Kode PlantUML

@startuml

[*] –> Idle
Idle –> DialTone : onHook
DialTone –> Menelepon : digit(n)
Menelepon –> Menelepon : digit(n) ā€˜ Transisi diri
Menelepon –> Menyambungkan : nomorValid
Dialing –> RecordedMessage : nomorTidakValid
Dialing –> Peringatan : waktuHabis
Peringatan –> WaktuHabis : waktuHabis
Menghubungkan –> Berdering : dialihkan
Menghubungkan –> nadaSibuk : nomorSibuk
Menghubungkan –> nadaSibukCepat : saluranSibuk
Berdering –> Terhubung : teleponPanggilanDiangkat
Terhubung –> Terputus : terlepasDariPanggilan
Terhubung –> Terputus : teleponPanggilanTerputus
Terputus –> [*] : bersihkan

state ā€œKesalahanā€ sebagai ErrorState {
state ā€œNadaSibukā€ sebagai BusyTone
state ā€œNadaSibukCepatā€ sebagai FastBusyTone
state ā€œPesanTerrekamā€ sebagai RecordedMessage
}

ā€˜ Aksi Internal
Idle : entry / Tunggu lepas dari panggilan
NadaPanggilan : entry / Putar nada panggilan
Menghubungkan : entry / Kumpulkan digit
Menghubungkan : entry / Arahkan panggilan
Berdering : entry / Dering telepon jarak jauh
Terhubung : entry / Bangun sesi panggilan
Terputus : entry / Hentikan sesi

@enduml

šŸ“„Ā Cara Menggunakan:Ā Tempelkan ke dalamĀ PlantUML LiveĀ atau plugin IDE Anda.


āœ… Kode Mermaid

stateDiagram-v2
    [*] --> Idle
    Idle --> DialTone : onHook

    DialTone --> Dialing : digit(n)
    Dialing --> Dialing : digit(n)  ' Transisi diri
    Dialing --> Connecting : validNumber
    Dialing --> RecordedMessage : invalidNumber
    Dialing --> Warning : timeout

    Warning --> Timeout : timeout

    Connecting --> Ringing : routed
    Connecting --> BusyTone : numberBusy
    Connecting --> FastBusyTone : trunkBusy

    Ringing --> Connected : calledPhoneAnswers
    Connected --> Disconnected : onHook
    Connected --> Disconnected : calledPhoneHangsUp

    Disconnected --> [*] : cleanup

    state Error {
        BusyTone
        FastBusyTone
        RecordedMessage
    }

    Connecting --> BusyTone : numberBusy
    Connecting --> FastBusyTone : trunkBusy
    Dialing --> RecordedMessage : invalidNumber

    note right of BusyTone
        Putar nada sibuk standar
    end note

    note right of FastBusyTone
        Putar nada sibuk cepat (kepadatan jaringan)
    end note

    note right of RecordedMessage
        Putar pesan rekaman: "Nomor tidak dalam layanan."
    end note

    note right of Timeout
        Percobaan panggilan dibatalkan setelah 40 detik
    end note

šŸ“„Ā Cara Menggunakan:Ā Tempelkan ke dalamĀ Editor Langsung MermaidĀ atau alat Markdown yang didukung (VS Code, Obsidian, dll.).


šŸ“š Ringkasan & Kesimpulan Akhir

IniĀ Sistem Kontrol Panggilan TeleponĀ mesin status adalahĀ contoh dunia nyataĀ dari bagaimana UML dapat memodelkan sistem yang kompleks dan berbasis peristiwa dengan keandalan tinggi.

āœ… Apa yang Membuat Diagram Ini Efektif:

  • JelasĀ jalur utamaĀ dengan alur logis.

  • KomprehensifĀ penanganan kesalahan.

  • PenggunaanĀ transisi diri,Ā status komposit, danĀ penjaga.

  • Kesadaran visual melaluiĀ pengelompokanĀ danĀ anotasi.

šŸ› ļø Kapan Menggunakan Pola Ini:

  • Sistem telepon

  • Kontrol perangkat IoT

  • Manajemen sesi pengguna

  • Mesin kerja alir

  • Sistem tertanam dengan logika status terbatas


šŸ“ Ingin Memperluas Ini?

Pertimbangkan menambahkan:

  • Perekaman PanggilanĀ status (denganĀ mulaiRekam,Ā hentikanRekamĀ kejadian)

  • Pengalihan PanggilanĀ logika (pemrosesan kondisional)

  • Tunggu PanggilanĀ dukungan (status paralel)

  • Transfer PanggilanĀ sebagai substatus dariĀ Terhubung

  • Riwayat StatusĀ (riwayat dangkal/dalam) untuk masuk kembali setelah gangguan


šŸ“Œ Rekomendasi Akhir

Selalu model jalur sukses dan kegagalan.
Mesin status yang hanya menangani ‘jalur bahagia’ bersifat tidak lengkap dan rentan terhadap bug di produksi.

Gunakan panduan ini sebagaiĀ templatĀ untuk memodelkan sistem real-time apa pun di manaĀ transisi status,Ā kejadian, danĀ ketahanan terhadap kesalahanĀ penting.


āœ…Ā Siap untuk menghasilkan, memvisualisasikan, atau memperluas?
šŸ‘‰ SalinĀ PlantUMLĀ atauĀ MermaidĀ kode di atas dan integrasikan ke dalam dokumentasi, diagram arsitektur, atau dokumen desain sistem Anda.

Beritahu saya jika Anda inginĀ versi PDF,Ā diagram interaktif, atauĀ integrasi ke dalam model sistem yang lebih besar (misalnya, dengan komponen atau diagram urutan)!


šŸ“˜Ā ā€œSistem terbaik bukan hanya benar—mereka memprediksi kegagalan.ā€
— Merancang dengan Mesin Status UML