Saya memelihara basis kode lama yang ditulis dengan python. Khususnya ada potongan kode kompleks yang dari modul memanggil fungsi lain dari modul lain yang memanggil fungsi lain dan seterusnya. Ini bukan OOP, hanya fungsi dan modul.
Saya sudah mencoba untuk melacak di mana aliran dimulai dan berakhir kapan saja saya memanggil fungsi utama tetapi saya merasa saya harus menggambar ini karena saya tersesat di sub-panggilan.
Yang menjadi perhatian saya adalah bahwa setiap fungsi memanggil beberapa fungsi eksternal di dalam tubuh mereka untuk menyelesaikan tugas mereka dan mengembalikan nilai ke pemanggil.
Bagaimana saya bisa menggambar ini? Berarti bagan / grafik seperti apa yang sesuai untuk mendokumentasikan perilaku / kode semacam ini?
Jadi, saya pikir tidak akan berguna untuk menggambar diagram UML, tidak juga diagram alur. Grafik panggilan, mungkin?
Jawaban:
Saya pikir apa yang Anda cari di sini adalah Diagram Urutan . Ini memungkinkan Anda untuk memvisualisasikan urutan berbagai modul memanggil satu sama lain melalui penggunaan panah.
Membangunnya sederhana:
Contoh
Mari kita asumsikan kita memiliki kode berikut yang ingin kita buat diagram urutan:
Hal pertama yang akan kita gambar adalah titik masuk (
main
) yang terhubung ke metodelong_division
. Perhatikan bahwa ini membuat kotak di long_division, menandakan ruang lingkup metode panggilan. Untuk contoh sederhana ini, kotak akan menjadi seluruh ketinggian diagram urutan kami karena fakta bahwa ini adalah satu-satunya yang berjalan.Sekarang kami menelepon
find_largest_fit
untuk menemukan kelipatan terbesar yang sesuai dengan nomor kerja kami, dan mengembalikannya kepada kami. Kami menarik garis darilong_division
kefind_largest_fit
dengan kotak lain untuk menandakan ruang lingkup untuk panggilan fungsi. Perhatikan bagaimana kotak berakhir ketika pengganda dikembalikan; ini adalah akhir dari lingkup fungsi!Ulangi beberapa kali untuk jumlah yang lebih besar dan bagan Anda akan terlihat seperti ini:
Catatan
Anda dapat memilih apakah Anda ingin memberi label panggilan dengan nama variabel yang disahkan, atau nilainya jika Anda hanya ingin mendokumentasikan satu kasus tertentu. Anda juga dapat menampilkan rekursi dengan fungsi yang memanggil dirinya sendiri.
Selain itu, Anda dapat menampilkan pengguna di sini dan meminta mereka dan menunjukkan input mereka ke dalam sistem dengan cukup mudah. Ini adalah sistem yang cukup fleksibel yang saya pikir Anda akan menemukan sedikit berguna!
sumber
Saya pikir grafik panggilan akan menjadi visualisasi yang paling tepat. Jika Anda memutuskan untuk tidak melakukannya dengan tangan, ada alat kecil yang bagus
pyan
yang melakukan analisis statis pada file python dan dapat menghasilkan grafik panggilan yang divisualisasikan melalui file graphviz dot (yang dapat dirender menjadi gambar). Ada beberapa garpu, tetapi yang berfitur lengkap tampaknya https://github.com/davidfraser/pyan .Anda hanya perlu menentukan semua file yang ingin Anda proses ketika Anda menjalankan perintah:
python ~/bin/pyan.py --dot a.py b.py c.py -n > pyan.dot; dot -Tpng -opyan.png pyan.dot
atau
python ~/bin/pyan.py --dot $(find . -name '*.py') -n > pyan.dot; dot -Tpng -opyan.png pyan.dot
Anda dapat membuat grafik lebih bersih dengan '-n' yang menghilangkan garis yang menunjukkan di mana fungsi didefinisikan.
sumber