わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

プログラム読解の方法

昨日の授業の前に,プログラム読解の方法をあれこれ考え,取りまとめてみました.一人ブレストというやつです.
まず,大きく2つに分けることができそうです.「内容」を理解することと,「挙動」を理解することです.授業中には,それぞれ「静的分析」と「動的分析」と表現しましたが,これらを追求するとまた奥が深いので,とりあえずキーワードの紹介にとどめました.
内容の理解というのは,プログラムを,計算機上もしくは脳内で実行することなく,定義/宣言/参照しているヘッダファイル・型・変数・関数の意味や関連付けを理解していくことです.
関連付けを促すための問題意識を挙げてみますと:

  • ライブラリ関数を使う際に,どんなヘッダファイルをインクルードすべき(している)か?
  • 関数プロトタイプがあるとき,その実体はどこで定義されているか?
  • 変数は,どこで宣言されているか? 有効範囲はどこからどこまでか? どこで初期化*1されているか?
  • 代入文*2の左辺と右辺の型は何か? 型が適合しているか? 暗黙の型変換が起こるか?

挙動の理解というのは,メモリの動きが手に取るように分かるのが理想ですが,これもまた高望みですから,まずは,あるブロックで使用している変数*3に着目して,代入などによってその中身がどう変わるかが,紙上もしくは脳内で図にできるところまで,学生の能力や態度を引き上げたいものです.

*1:宣言時かもしれませんし,そうでないかもしれません.「&変数名」を引数に与えて関数を呼び出し,その中で代入されるかもしれません.

*2:実引数と仮引数の受け渡しにも,代入が行われます.

*3:とりわけ配列変数.文字列処理には欠かせません.