何某日和

「カメラ」のち「ハンダゴテ」ところにより「プログラミング」 ── そんな私“かめきち”のウェブサイト

新しいメトリクスツール

目次

新しいツールのご紹介

(本研究で制作するメトリクスツールを紹介する。Smalltalk版のモックアップを使って説明することになる。その詳細は割愛し、概要のみに留める。) (単に線形(リニア)に写像するだけではなく、対数写像を用いれるようにする。(文献[1]より)

スパゲッティへの写像

 入力されたプログラムをスパゲッティ(のレシピ)に変換しますが、その指標値の写像に用いる指標群について検討し、ここにご紹介します。

#プログラムの指標値スパゲッティの指標値関係
1行数/関数・メソッドの宣言数作り置き時間正の相関
2変数・関数等の名称(長さ)スパゲッティ料理の名称(長さ)正の相関
3インデントやスペースのばらつきゆで時間のばらつき または 太さのばらつき正の相関
4コメントの記述量劣化しやすさ(乾燥しやすさ)負の相関
a凝集度作り置き時間負の相関

1. 行数/関数やメソッドの宣言数:作り置き時間

 関数やメソッドの宣言数が小さい場合、極端な例で言えばmain関数のみのプログラムのようなものですから、 構造化されずに局所集中的な(悪い)実装がなされていると捉え、作り置き時間を長く設定します。 すると、スパゲッティから水分が蒸発することで、非常に絡みやすくもつれやすく食べづらい(悪い)スパゲッティと化します。
 逆に、宣言数が大きい場合、つまり機能を細分化しているプログラムであれば、構造化がなされていて保守性の高い(良い)プログラムであると捉え、 作り置き時間を短く設定します。すると、もつれも少ない(良い)スパゲッティとして写像されるでしょう。

 ただし、非常に簡単なプログラムで、main関数のみで充分な場合もあるでしょうし、そのような条件で悪いスパゲッティを出すのは理不尽(不適格)でしょう。 そんな特殊な場合を除外するか、あるいは行数を勘案することで指標値を調整するなど、対策を取らねばなりません。

 作り置き時間に関する実験からもわかる通り、 ゆで上げから最初の10-15分はその変化が顕著ですが、それ以降はさほどの変化を感じづらくなります。 そのため、線形写像ではなく指数関数を用いた写像を行うつもりです。

2. 変数・関数等の名称:スパゲッティ料理の名称

 短い変数名「x」や「i」では、一体何に使われている変数なのかを把握することができません。そのプログラムを書き下ろした当の本人でさえ、数日経てばその変数の意味を忘れるものです。 それを写像すれば、ちょうど「スパゲッティA」だの「パスタB」だの、どんなスパゲッティ料理なのか推測のつかない名前になりましょう。
 では、逆に適切を超えて冗長な名称にした場合はどうでしょう。極端ですが「getStringOfRelativePathFromCurrentDirectoryToHomeDirectory()」など。 高級なレストランのメニューで目にしそうな「賀茂茄子と香草のスパゲティ 京都北山風 サルサ・ディ・ポモドーロを添えて」(※適当な名前です)...という具合の名称に相当するのではないかと考えたのです。 ニュアンスを前に押し出そうと冗長な表現を用いるあまり、人に伝えづらい名称になっているではありませんか。 その高級感にも意味はあるかもしれませんが、少なくとも初学者のプログラムには必要ないはずです。。。
 上記の通り、プログラムにおける名称とスパゲッティ料理における名称とでは、写像関係があるようなのです。

 ただ、そもそもこの指標値(スパゲッティ料理の名称)は、直接的に食感へ作用するわけではありませんので、厳密に言えばこれは「可食化」に該当しないと思われるかもしれません。 しかし、これまで数々のスパゲッティを食してきて感じたのは、値段や名称が醸し出す「スパゲッティの高級感」が食感に対してある程度の影響を与え得るものであるということです。 これだけ高いのだから、きっとこれは美味しいスパゲッティなのだ...というバイアスが掛かることも、間接的ですが食感に影響を与えるのです。 そのため、今回の可食化アプローチの一指標として用いてみました。

3. インデントやスペースのばらつき:ゆで時間のばらつき または 太さのばらつき

 学生への指導業務にあたる際、一番目につくのが「酷いインデンテーション」です。何としても、このインデントのばらつきを抑え、統一感のある書き方を実践してもらわねばなりません。(読みづらくて仕方がありません。)

 スパゲッティ料理において、やはり「アル・デンテ」は重要なポイントになりましょう。 それがもし、スパゲッティ1本ごとにゆで具合が異なっていて、芯が残りすぎていたり、逆にゆで過ぎてコシがなくなってしまったり、それらが混在してしまえばなおさら「悪いスパゲッティ」と言わざるを得ないはずです。 ならば、「悪いプログラム」(インデントの酷いプログラム)を「悪いスパゲッティ」に写像すればよいと考え、この写像方法に至りました。 インデントのばらつきがあるなら、ゆで時間のばらつきを生じさせて、スパゲッティ一皿の中に例えば6分ゆでの麺と8分ゆでの麺と10分ゆでの麺を混在させるのです。 あるいは太さをばらつかせて、0.9mmと1.4mmと1.8mmのスパゲッティを混在させるのです。 複数のゆで具合を同時に口にするその食感は、(「あらゆるスパゲッティを全てゆでて食べてみた実験」より)きっと不快に感じるはず。是非、インデントの不揃いにも不快感を覚えて欲しいものです。

4. コメントの記述量:劣化しやすさ(乾燥しやすさ)

 1.の指標における計測結果が悪かった場合、スパゲッティはパサパサになってしまいますが、実際のゆで上げスパゲッティにはバターやオリーブオイルを絡め、水分の蒸発を抑えることがあります。 プログラム中のコメントが、そのコードの意味を逃がさない(忘れない)ための備忘録であると考えると、コメントはちょうどこのスパゲッティ表面の油量に相当するのではないかと考えたのです。

 ちなみに、可読性の高いプログラムには、そもそもコメントなど必要ないという話もありますが、あくまで初学者のプログラムを対象にしているため、ここではコメントの記述を推奨することにします。 また、この指標による食感への影響が大きいと、1.の「作り置き時間」による食感の変化と干渉してしまうため、補助的な指標であるという位置付けで利用する予定です。

a. 凝集度:作り置き時間

 1.の「関数・メソッドの宣言数」の代替案として「凝集度」を提案しておきます。 凝集度の低い(周囲との結合度の強い)プログラムは、スパゲッティで言えば「もつれるスパゲッティ」であり、作り置き時間を長く設定すれば得ることができるでしょう。 凝集度が高ければ、もつれにくく食べやすいプログラムとなりましょう。もし、全く無関係な機能が集合して凝集度が高いのだとすれば、全く絡まない、スパゲッティらしくないスパゲッティになりましょう。 アンケート結果によれば、スパゲッティにはある程度の絡みが必要とされるため、凝集度の傾向とちょうど一致しているようです。

スパゲッティのレシピ

(入力されたプログラムに対して出力するレシピ。そのレシピの仕様について言及する。)

試作プログラム(プロトタイプ)

(新ツールの試作プログラムの紹介)

Webアプリケーション

(新ツールのウェブ版アプリケーションの紹介)

デスクトップアプリケーション

(新ツールのデスクトップ版アプリケーションの紹介)

将来的目標

(現段階では実現できなくとも今後期待されるような研究活動について言及する。)