何某日和

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

第2回 中間発表 [2012.08.22]

目次

  1. はじめに
  2. ここまでの経緯
  3. 「スパゲッティ」と「スパゲッティプログラム」
  4. 達成に必要な事項と今後の見通し
  5. さいごに
  6. 発表後のご意見・ご感想など
  7. 添付資料

はじめに

表紙・表題の提示

行事名コンピュータ理工学特別研究 第2回 中間発表
発表場所京都産業大学 第2実験室棟 65実験室 青木研究室
発表日時2012年08月22日(水) 13時00分-15時00分
題名「ソースコードは食べられる ── スパゲッティを題材としたソフトウェアプログラム可食化[1]に関する研究」中間発表(2)
発表者コンピュータ理工学部 ネットワークメディア学科 4年 宮崎 雅文

目次

※既に上の項目で記載したため省略。

スパゲッティを脱す?プログラムは進まず...


[1] 中間発表(1)では「ソフトウェアプログラム可視化」と表現していましたが、「ソフトウェアプログラム可食化」に変更しました。

ここまでの経緯

研究テーマ右往左往

 前回にも述べたことですが、本研究のテーマに思い至った所以を軽くご紹介します。 大学3年の秋、研究室に配属された当初は研究テーマなど特に何も決めず考えずで、目先の専門科目のことで手一杯だったのですが、 就職活動のエントリーシートや面接を通して研究テーマに関する質問を受けるようになってから、真剣に考えるようになったのでした。 そして、予てから気になっていたソフトウェアメトリクスに関する研究をしてみたいと思い、いろいろとその具体的な案を出してみようとするも、 何かしっくりこないものばかり。そうして、しばらく考えあぐねていたのでした。

 ところが、師にご紹介いただいた先行研究(ソフトウェアの可視化に関する研究)に端を発し、 突如として「スパゲッティを題材としたソフトウェアプログラム可視化に関する研究」というテーマに至ったのです。少しぶっ飛んでいますよね...。 (その経緯の詳細も前回少しだけ紹介しました。)

 前回の発表が終わった後、スパゲッティの調査に乗り出しましたが、そのスパゲッティの世界があまりに広大で茫然自失。 当初は「可視化・可触化・可食化」を計画していましたが、それを縮小して「可視化・可食化」、さらに現段階では「可食化」に絞らざるを得なくなってしまいました。 それゆえに今回の発表に際して、研究題目を変更することになったのです。

研究の概要と目標

 本研究は、抽象的でわかりづらい存在「ソフトウェアプログラム」を、より具体的で実在感溢れる「スパゲッティ」として表現する事で、 間接的(比喩表現的)にソフトウェアプログラムの実在感を高めようとするものです。

ソースコードを実行可能プログラムにする様子

 通常のソフトウェアプログラム(ソースコード)は、コンパイラによる「コンパイル」という処理で実行可能プログラム(機械語)に変換されます[2]。 (上図の「?」がコンパイラに相当します。) コンパイルとは、字句解析・構文解析・意味解析・コード生成及び最適化によって構成される処理ですが、前方の3つについて軽くまとめてみました。

  • 字句解析:書かれている文字の列が、どういった字句(文字列)を表しているのかを解析するもの
  • 構文解析:書かれている字句の列が、どういった構文(字句列)を表しているのかを解析するもの
  • 意味解析:書かれている構文の列が、どういった意味(構文列)を表しているのかを解析するもの

 ここで注目するのは「意味解析」です。構文の列を見て「意味」を見出す(付与する)役割がありますが、これはつまりソースコードと機械語を結びつける役割と言い換えることもできます。 コンパイラはソースコードを「機械語」に変換するものであり、ここで述べた「意味解析」で良いのですが、今回私が研究しているものには別の「意味解析」を用意しなければなりません。 入力されたプログラムがどのような機械語に対応付けられるのかではなく、どのような品質・性質を持っているのかを解析する「意味解析」を拵えなければならないのです。 俗にいう「ソフトウェアメトリクス」のツールを開発することに相当します。

ソースコードをスパゲッティにする様子

一般的なソフトウェアメトリクスツールでは、ソースコードの品質の計測結果を数値で表します。しかし、単に数値だけを見せらてても、あまり実感が湧かないというもの。 それをより具体的な実在感溢れる方法で提示するために、スパゲッティを用いて表現しようと思い至りました。 良いプログラムは良いスパゲッティに、悪いプログラムは悪いスパゲッティに写像されるようにして、ソースコードをスパゲッティとして表現しようという試み。 つまり「ソースコードの可食化」がここに実現されるのです。

 しかし、一つ残念なことがあります。ソースコードを入力したとしてからと言って、簡単にスパゲッティを再現することは難しいものです。 (「解析」ボタンを押せば「スパゲッティ」が出来上がる...など、夢の様な話。) 調理器具をアクチュエータで操作すれば、スパゲッティの自動調理も夢ではありませんが、あまり現実的な話ではありません。 その代わりとして考えているのが、スパゲッティのレシピを出力するというものです。

ソースコードをレシピにする様子

 ソースコードを解析システムに入力すると、スパゲッティのレシピが得られて、そのレシピ通りに調理すると、入力したプログラムを写像したスパゲッティが完成します。 できあがったスパゲッティを食べて「あぁ、このプログラムはマズイな...」「すごくうまくできたプログラムだ!」などと感じることができれば、 人間の感覚に直接訴える新しい情報提示手法が実現したということになります。

 ソフトウェアプログラム(ソースコード)の品質低下は、その存在が抽象的であること(実在感の無さ)に原因があると考えます[3]。 もしその実在感が向上すれば、品質への意識を向上させること、つまり高品質なソフトウェアの開発に繋げることができると考えているのです。 本研究は「可食化」というアプローチを通して、上に述べるような実在感をソフトウェアに付与しようとするものであり、 それと同時に他分野における「可食化」アプローチの可能性をも示唆するものです。 多くの方に生かしていただけるような研究成果が得られるよう、日々努めてゆくつもりです。

「中間発表(2)」の理想と現実

 中間発表(1)の「今後の取り組み」では、次のように述べていました。

中間発表(2) : 先行研究・スパゲッティの性質・プログラムの性質の調査を終え、また指標の検討や、解析部の実例作成を終えていること。

 しかし、現段階で実現できたのは「スパゲッティの性質の調査」のみ。先行研究の調査はまだ不足気味で、プログラムの性質調査・指標検討・解析部作成には触れもせず。 全体の進捗状況は非常に悪いと言わざるを得ません。その原因はスパゲッティ・パスタの世界に没入したためだと思われます。 発表の前々日にようやくスパゲッティ・パスタに関する調査が終わったため、これからはプログラムを中心に研究を進めることになります。

 結局、この中間発表(2)では、2ヶ月間に渡り調査してきた「スパゲッティ及びパスタのこと」についてのみ言及します。。。

【補足】中間発表(1)からの変更点

 ここでは、中間発表(1)からの変更事項について、その内容を記載します。

  • 研究テーマの「ソフトウェアプログラム可視化」を「ソフトウェアプログラム可食化」に変更

[2] 変換しないものもあります。

[3] 根拠に乏しいため、さらに熟考のこと。

「スパゲッティ」と「スパゲッティプログラム」

スパゲッティ ─ ピンからキリまで

(製造を含むスパゲッティの雑学に触れ、スパゲッティの広大な世界を垣間見てもらう → 「スパゲッティ」と「スパゲッティプログラム」#スパゲッティのピンからキリまで

スパゲッティプログラム ─ 発生と経緯と現在

(この言葉を知っていますか?とまず質問。それを踏まえて「スパゲッティプログラム」について述べてゆく。要調査。 そして、一概に悪い意味で使われている...ということをとりあえず知ってほしい → 「スパゲッティ」と「スパゲッティプログラム」#「スパゲッティプログラム」という言葉

研究への意志

(スパゲッティの世界を踏まえて、自分自身が訴えたいこと。「一言で済ませる」ものではないということ。幅広い世界を写像するためのものといっても過言ではないということ) (当該の研究に関する背景や動機をざっとおさらい。「スパゲッティプログラム」という言葉の使い方の是非について、また、広大なプログラムの世界を映し出す対象としてのスパゲッティの可能性について、追求してゆくということを述べる) (→ 「スパゲッティ」と「スパゲッティプログラム」#研究への意志

  • 従来のメトリクスツールが直感的でないということに言及し、その問題をカバーしたメトリクスツールを提供する。
  • 「スパゲッティプログラム」という言葉の使い方について、その是非を問い、新たな主張を提示する。
  • ソフトウェアプログラムに実在感を付与することで、品質に対する意識の向上を図り、正しいプログラムを生み出すように促す。
  • 「可食化」というアプローチの可能性を追求し、他分野における活用の可能性について示唆する。

達成に必要な事項と今後の見通し

必要事項

 中間発表(1)から引き継いだ「必要事項」です。

  • 【不足】先行研究に関する調査を行う。(「スパゲッティプログラム」「可食化」について)
  • 【達成】スパゲッティの性質を調査する。何が良いのか、何が悪いのかを知る。
  • プログラムの性質を調査する。特に初学者と玄人における差異を明らかにしたい。
  • 既存のソフトウェアメトリクスについて調査・検討し、新たな視点を探る。また解析プログラムの試作を行う。
  • 実験のための解析・計測システムを構築し、被験者に協力を仰いで実験を実施して検証する。

スパゲッティの調査は基本的に終えたのですが、先行研究の調査に甘さが見られるため、今後も継続して調査を行うものとします。

現在の取り組み

【従来の「スパゲッティプログラム」という言葉とその実態の調査】
 世間で使われている「スパゲッティプログラム」という言葉が、いったい何を表現しているものなのかを調べ、従来の「スパゲッティプログラム」について理解を深めます。 その上で、当該の研究で「スパゲッティプログラム」という言葉をどのように扱いたいか(つまり本研究における理想の「スパゲッティプログラム」)について言及します。

直近の取り組み

【プログラムの性質・特徴の分析調査】
 後の「調査協力のお願い(改)」で述べる通り、被験者から頂戴するプログラムや課題実験・アンケートにより、プログラムの性質・特徴を分析します。 ここで「被験者」とは、プログラミングの初心者から玄人まで様々な方を対象としているものです。 収集するサンプルが初心者から玄人まで分散していて、その性質の推移を追うことができるような状態が望ましいと考えます。

【スパゲッティへ写像する指標の検討と決定】
 また、今回調査したスパゲッティの知見を基に、スパゲッティに関する指標とプログラムに関する指標とを繋げ合わせる、つまり写像方法(メトリクス結果を提示する方法)について検討し、 実際に開発するツールで用いる指標を決定し、まとめます。

今後の取り組み

 残り2回の中間発表でどの程度の地点まで進んでいるべきかをここにマイルストーンとして定め、今後の活動の標石とします。

  • 中間発表(3) : 指標の決定とそのメトリクスツールの実装を終えていること。また、可食化(レシピ出力)完成の目処が立てられていること。
  • 中間発表(4) : 開発したメトリクスツールを用いた実験を行い、その実施結果をまとめ終えていること。

現在思いついていること

(現在思いついているアイデアについて列挙する)

  • 名称を指標に使う(やっぱり直感的じゃない「レシピ」という提示手法を、少しだけマシにするテクニック?)

さいごに

あとがき

(やっとプログラム系に取り組めるなぁという実感を徒然と。ようやく師をひっつかまえて(!?)プログラミングする時が来たか...とも。)

調査協力のお願い(改)

 前回の中間発表(1)でもお願いしました通り、1,2年次のプログラミング演習科目の課題提出物(プログラム)を研究題材としてご提供いただけないかと考えています。 研究がようやくプログラムに関する部分に入りましたので、近々改めてご協力をお願いするものと思います。どうぞ宜しくお願いします。

 また、さらにもうひとつ。「プログラム作成課題及びそれに伴うアンケート調査」というものを実施する予定でいます。 ある決まった題に沿ったプログラムを作成してご提出いただき、そのプログラム作成の前後にそれぞれアンケートを執り行うものです。 具体的な内容はまだ計画の段階ですが、これはWeb上で実施しようと考えています。(ちょうど大学で用いている「moodle」のようなもの。) その際もご協力を賜りますようお願い致します。

発表後のご意見・ご感想など

レシピには写真を添えるのが良いかと

 なるほど、言われてみると確かにその通りでした。レシピ本やレシピサイトでも、料理の写真を添えることが普通のようですね。 本日発表した例では文章のみのレシピになっていましたが、今後は写真のことも考慮してレシピ出力を検討しようと思います。
 ただ、メトリクス結果は入力するプログラムによって多様に変化するため、その出力として得られるスパゲッティのレシピも多様なものになるはずです。 写真の表現をあまり細かくすると、撮影しなければならないスパゲッティが膨大な種類に及ぶため、実際の出力レシピに用いる写真はかなり大雑把なものにしようと考えています。

お腹が空きました。食べさせてください。

 もちろん喜んで。一言申し付けていただければご用意いたします。実際に口にしてみなければ分からない「スパゲッティの違い」を是非味わってみてください。 (ソースの種類には限りがありますのでご了承ください。)

スパゲッティ(パスタ)の調査を広げ過ぎでは。それら多様な指標をプログラムに写像できるのか。

 仰るとおりです。私自身もまさか二ヶ月かけるとは思いませんでした。しかしながら、その世界のあまりの広大さに没入してしまいまして...。 ソフトウェアの具現化という意味における先行研究[4]においても、 実際に用いている指標はほんの数種類です。本研究でもこれに倣い、スパゲッティ及びプログラムそれぞれの指標を幾つかに限定して写像を行こなう予定です。 なお、その限定した結果については、次回の中間発表(3)にて言及する予定です。

プログラムをどのようにスパゲッティへ写像させるのかよくわからない

 具体的な写像方法はこれから検討してゆくつもりですが、 例えば、大域変数が随所で乱用されていたとすれば、その変数が他の部分プログラムと密接に関わる状態であるという意味合いから、 スパゲッティのもつれ具合を酷く(転じて、作り置き時間を長く)します。(その変数一つを取ってみても、繋がっているところが沢山あるというニュアンスで。) 他にも今日述べた「レシピの名称」や麺の太さなどが、プログラムに喩えた時にどのような性質を持つだろうかと想像し、写像方法を具体的にしてゆきます。 おそらく次回の発表時には、写像方法を決定しているものと思いますので、どうぞご期待ください!

スパゲッティを用いようと思い立った経緯や、可食化というアプローチに至った経緯の説明を加えると良い

 確かに、研究概要を述べる際にも説明がぶっ飛んでいたものと思います。 頂いたご意見の通り「数学的な証明」のように、思考遷移の順を追うような説明を付したいと思います。 (その説明はまだ用意できていませんが、用意でき次第、研究ログ 導入(概要・目的・対象・目標)に記載する予定でいます。)

ぶっ飛んでるね!いいよ、そういうの好き、どんどんやっちゃって!!

 前回に引き続き嬉しいご声援をありがとうございます(笑)
我ながら本当にぶっ飛んでいるとは思いますが、これをより科学的なぶっ飛び方に仕上げ、研究を進めてゆきたいと考えていますので、 また激励や助言などを以って温かく見守っていただければ幸いです。


[4] Software Systems as Cities : A Controlled Experiment

添付資料

発表に用いた資料類をご覧いただけます。