パスワードを忘れた? アカウント作成
11015767 story
ソフトウェア

表計算ソフトはコードレビューがしにくいため重要な仕事には向いていないという説 95

ストーリー by hylom
適切なテストツールがあれば良いのでは 部門より
danceman 曰く、

計算機科学の専門家であるDaniel Lemireという人物が、経済書「Capital in the Twenty-First Century」を例に、なぜ大切な仕事には表計算ソフトを使用するべきでないのかを説明している(Slashdot)。

Piketty氏は著書の中で、「賃金が増加することより資本の配当のほうがより大きな利益をもたらすため、少数のエリート層が全ての富を手に入れることになる」という説を展開している。Piketty氏はデータ分析を行ってこの説を正当化しているのだが、そこで使われている表計算ソフト内の記述に間違いが含まれていたという。

Lemire氏によると、表計算ソフトはコードレビューを困難にするという。何十もある小さなセルにコードが隠れているため、もし慎重にコードを査読しなかった場合、また他の人がレビューしづらい状態になっていた場合、信頼できるコードになるはずもないとのこと。つまり表計算ソフトは重要でない仕事を急いで片付けるときには向いているが、重要な仕事を確実に完成させるようには設計されていないという。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 全く同意 (スコア:4, 興味深い)

    by Technobose (6861) on 2014年05月30日 18時48分 (#2612032) 日記

    >何十もある小さなセルにコードが隠れているため、もし慎重にコードを査読

     単純な計算だけなら追うのも楽なんだけど、一つのセルの中にif()関数を入れ子にして、さらに別のシートを表引きしたりするものになると、見るのもイヤになる。
     単純な計算ならシートの機能だけで作ればいいけど、複雑な条件判断が絡んでくるならマクロを使うべきだし、表引きだとかが絡んでくるならデータベースで作った方が構造がスッキリしてわかりやすくなるんだけど。
     で、そういうのを作ってる人に言わせると、Excelなら誰でもいじれてメンテナンスできるとのこと。
     私は絶対手をつけないな。というより怖くてできない。
     
     あと、表計算ソフトって、セルの保護機能が弱いから、うっかりデータを書き換えても気がつかないのが怖い。
     よく、表計算ソフトを使って集計しているのに、電卓で検算していると揶揄されているけど、表計算ソフトの融通無碍な操作性が、データの完全性に不安感を引き起こしているのが原因だと思う。
     私の場合、表計算ソフトを使うのは、単純な表か、データ処理の最終段階で見栄えを整えるくらいにしている。データ処理自体は、ここ十年ほどはAccessで行ってる。リアルタイムで計算結果を表示するような使い方で無いなら、データベースのほうが業務には使いやすいと思うな。

     普通の事務員こそ、データベースの使い方を覚えるべきだよ。

    • Re:全く同意 (スコア:4, 参考になる)

      by taka2 (14791) on 2014年05月30日 21時45分 (#2612176) ホームページ 日記

      えっと、私自身は今はExcelのワークシート関数積極的利用派です。

      マクロウィルスが流行ったせいで、今時のExcelはマクロを自動実行させない設定なのが普通でしょう。「このファイルはマクロを動かしても大丈夫かどうか」を一体どうやって確認するのか、そういう点で、私は「ワークシート関数で実現出来る処理には、マクロは使うべきではない」と思ってます。今はもう、積極的にできるだけマクロは使わないようにしています。

      > 表計算ソフトって、セルの保護機能が弱いから、うっかりデータを書き換えても気がつかないのが怖い。

      それは制作者がちゃんと保護設定してないだけ。Excelにはそれなりな保護機能があります。必要最小限の「手入力するセル」だけ変更可能にして、残りのセルは全て変更不可にすれば、「うっかりデータを書き換え」るなんてことはありません。

      Excelの保護設定での最大の問題は、保護されていないセルに対して、「カットアンドペースト」すると、そのセルに対する参照まで移動してしまうこと。
      (例えば、保護されていないセルA1とB1があった場合、A1もB1も書き換え可能なので、A1をカットしてB1にペーストなんてこともできます。ですが、それをやっちゃうと、別のセルがA1を参照していた場合、たとえ保護していたセルであっても、カットアンドペーストに追従してB1への参照に書き換わってしまうし、B1への参照があったとしたら、参照先が消失したので#REFになっちゃう)
      これについては、ちょっと泥臭いですが、INDIRECT とか OFFSET とかを使って解消可能です。

      まあ、そうやって安全なシートを作ってると、どんどんコードとしての可読性は悪くなっていきますし、コードの一覧表示が出来ないから保守性が悪いという点についてはもう確かにその通りなのですが、
      とりあえず、セル内のコード記述レベルでは、改行を多用しインデントすることで、できるだけ可読性を高めるようにしています。例えば

      =IF(
          LEFT(
              OFFSET($H2, 0, -3),
              LEN(N$1 & "→")
          ) =     N$1 & "→",
          -OFFSET($H2, 0, -2),
          0
        )
      +IF(
          RIGHT(
              OFFSET($H2, 0, -3),
              LEN("→" & N$1)
          ) =     "→" & N$1,
          OFFSET($H2, 0, -2),
          0
        )

      って感じ。
      これを全部一行にまとめて

      =IF(LEFT(OFFSET($H2,0,-3),LEN(N$1&"→"))=N$1&"→",OFFSET($H2,0,-2),0)+IF(RIGHT(OFFSET($H2,0,-3),LEN("→"&N$1))="→"&N$1,-OFFSET($H2,0,-2),0)

      って書くより格段に読みやすいと思います。
      #これは、「A→B 100」って入力があったら、Aを-100、Bを+100するための処理の一部。
      #OFFSET($H2,0,-3)・OFFSET($H2,0,-2)は、E2・F2への参照です。E2・F2は保護されていないセルなので、上述のカットアンドペースト問題から守るため、「H2の3つ左」「H2の2つ左」という指定にしてます。

      親コメント
    • 確かに,データベースでロジックは済ませといた方が楽ですね。

      FileMakerなら,Excel並みの手軽さだと思う(Accessほどの自由度はないが)ので,
      もう少しその手の分野にも使われてよいと思うのだが,Excel代わりに使うには高いんだよなあ。

      親コメント
    • by Anonymous Coward on 2014年05月30日 20時48分 (#2612130)

      if()関数の長大な入れ子を一つ作れば、あとのセルにコピペで済ませられるのが表計算ソフトの良いところ。
      ただ、そのコピペが何かの拍子に間違っていることがあるんだよな。
      Errorが表示されてれば発覚しやすいけど、たまたま計算できてもっともらしい数値を表示してると気付かない。

      Accessは個人的には好きだけど、引き継ぎが大変なのであまり使えません。
      Excelバリバリ使う人でも一歩引いてる感じ。
      Excelをそれなりに使えている人は尻込みして仕事を引き継いでくれません。
      Accessで作った簡単な表を引き継いでもらって、何年かして戻ってみたらExcelのフィルター機能使いまくった凄いものに改造されてた。。。

      親コメント
      • by shinshimashima (9763) on 2014年05月31日 16時43分 (#2612587) 日記

        関数ダイアログを使えば計算経過を確認できるんで、Debugによく使うんだけど、
        関数をネストすると関数ダイアログは途端に使いにくくなるんだよなぁ。

        親コメント
      •  Excelの場合、手元にある手書きの表かなんかにあわせて見た目を作ってから、プログラム的な動作を作り込むことが比較的容易なので、初心者も手軽に気軽に使える。
         一方、Accessの場合、最初に対象業務で必要なデータ項目を考えて、データ構造を設計しないと、実用的に使えないあたりが敷居の高さにつながってる気がしますね。
         けど、対象業務を適切に分析してデータ構造を設計すれば、データ再利用もしやすいし、変更もしやすくなるんだけどね。
         このプロセスを必要以上に難しく考えてしまってるんだよな。
         その業務で必要なデータが何かと、データ同士がどのように関連しているか、を理解できて、 データベース設計の基本を理解すれば、それほど難しくは無いんだけど。

         引き継ぎが難しいのは同意です。
         まずAccessを使おうという人自体が少ないので。
         データ共有の手段として、AccessやSQL Server(のようなRDBサーバー)を活用できれば、かなり業務効率が上がる組織も多いはずです。

        親コメント
      • by firewheel (31280) on 2014年05月31日 0時30分 (#2612287)

        「メンテナンス性がおちるから、コードをコピペするなとあれほどw」

        というのが、スプレッドシートでコードを書く時の問題の一つだと思う。

        親コメント
  • まあ,あっちは見た目がどうか,なわけで致命的ではないけど。
    コードレビューのしにくさは同等かそれ以上。プリコンポーズされてた日にはもう…

  • by deleted user (13014) on 2014年05月31日 13時04分 (#2612474)

    そうだそうだ。データ分析をするなら、何かデータだけが格納されたシンプルな形式のファイル(CSV形式、Json 形式、なんでもいい)と、何かオープンな実行環境(R言語、Python、Haskell) こちらのほうがずっと書きやすい。コードを構造化しやすくて、人間にとって読みやすい。

  • >スプレッドシートを使ってしまったために、せっかく公開したコードに誤りが含まれている

    評価式はセルをクリックしないとわからないとかで、表示されてる数値を見るだけだとチェックしにくいってことなのかな。
    他の手段で数値を求めて結果を表にしたりしても結局は一緒の様な気がするけどそうでもない?

    ソースと計算過程をレポートに添付すればいいんでしょうけど。
    もしくは研究ノート。

    • セルにロジックを組まれると一覧性が悪いってことでしょうね。

      flashですら,AS4.0からステージにしかロジックが組めなくなってるわけで,
      表計算ソフトというのは,時代遅れなのかもしれませんね。

      とはいえ,表計算ソフトって,電卓みたいに手軽なものだから,
      セルにロジックを組ませない,というのはそれはそれで元々の用途から外れている気もする。

      親コメント
    • かなり昔からある機能だけど、今の Excel だと「数式」リボンの「ワークシート分析」のグループにある「数式の表示」ってON/OFFボタンで計算結果じゃなくて数式が一覧できるよね?
      セル番地だと読み難いのは、相対参照は仕方ないとしても、絶対参照は「名前の定義」で適切に名前付ければ防げる問題だし、その程度の機能では対処出来ないクラスの余程複雑な数式を詰め込んでる人が多いのか、単に使い方を知らない人が多いのか。
      結局可読性の悪いコードしか書けない人が問題であって、この際 Excel かどうかは関係ない気がするなぁ。

      --
      uxi
      親コメント
  • by Sukoya (33993) on 2014年05月28日 14時34分 (#2610070) 日記

    スプレッドシートの使い方を理解してもらえなかった……

    今更、それ、ガッチガチにVBAだのマクロだので作り込まなくても、
    スプレッドシートだけで簡単に実現出来るんですよとはいい出せない雰囲気だぞ……

    • by Anonymous Coward

      保守しながら使い続ける用途の場合、最初からロジックは VBAで組んだほうがメンテしやすいとか?
      VBAとワークシートとでロジック・プレゼンテーションの分離ができたるする?

      • by HomuraAkemi (46038) on 2014年05月30日 17時50分 (#2611972) 日記

        VBAは無理。読めない。わけわからん。
        できればC#か、マクロ用にカスタマイズした廉価版C#を搭載して欲しいな。
        精一杯妥協したとしても、JavaScriptが限界。
        VB系は可読性が悪すぎる。

        親コメント
        • by Anonymous Coward on 2014年05月30日 18時16分 (#2611996)

          ヘタレが書いたらどんな言語でも同じ。
          ぐちゃぐちゃなJavaScriptのコードはthisに何が入ってるか全くわからん。
          とても読めたもんじゃない。

          親コメント
        • by Anonymous Coward on 2014年05月30日 18時38分 (#2612016)

          > VBAは無理。読めない。わけわからん。
          PowerShell [blogspot.jp]にしなよ。
          .Net Frameworkのオブジェクトなら触れるし、対話的作業もできるし

          > できればC#か、マクロ用にカスタマイズした廉価版C#を搭載して欲しいな。
          君の手元のPCがWindowsなら、C#は標準搭載だよ。
          Csc.exeでコンパイル可能 [blogspot.jp]。

          > 精一杯妥協したとしても、JavaScriptが限界。
          JavaScriptで我慢できるなら、JScript [wikipedia.org]って手もあるぞ。

          不満ばかり言う前に、少しは自分で調べてみなよ。
          よくやってる方だと思うよ、マイクロソフトは。

          親コメント
        • by Anonymous Coward
          そういう話はよく聞くんだけど誰も再設計しないよね
          LibraOffice みたいなのから派生したりしないのかしら
          • by Anonymous Coward

            過去の資源が動かなくなるほうがコスト的に問題では無いでしょうか?

        • by Anonymous Coward

          csc+オートメーションで行けんじゃね?

        • by Anonymous Coward

          VBA自体は読みやすいですけどね。Excel組み込みオブジェクトが結構読みづらいですが。
          Findとか(遅いんで自分で連想配列とかバイナリサーチとかしたほうが早いです)。

        • by Anonymous Coward

          他の人も書いてるけど
          VBAはアプリのOLEオートメーションを呼び出してるだけなのでC#からも呼べるよ。
          (MS版の)JavaScriptからも呼べる。

          VBAはエディタが標準でついてるだけの話だろう。

    • by Anonymous Coward

      スプレッドシートは文字の位置が揃った文書を作るためのソフトです。
      記入する数値は電卓で計算して全角で入力するのです。

  • by camelus (41736) on 2014年05月30日 18時42分 (#2612020) 日記

    「重要な仕事には簡易言語は向いていない」
    と言えば何となく…通じないものか…

  • by onikuya (17148) on 2014年05月30日 19時45分 (#2612083) 日記

    列ごとじゃなくて?

  • by Anonymous Coward on 2014年05月30日 19時48分 (#2612086)

    ExcelとIDEの中間くらいの位置付けで、もっと気軽な数字やデータいじりに便利なソフトが出てきてほしい。
    単に出てくるだけじゃ駄目で、Excel並にデファクトスタンダードになっていてほしい。
    事務員にExcelは使わせたくないが、だからってIDEやテキストエディタでコード書かせる訳にもいかないし。

  • 普通、コードレビューってコンパイルに通すファイルをエディタで直接参照して行うものでないの?

    それとも何か、普段からソースコードの編集するに表計算ソフトを使ってるのか?
    エクセルのマクロですらエディタは別ソフトだぞ……。

    --
    しもべは投稿を求める →スッポン放送局がくいつく →バンブラの新作が発売される
  • まあ、これを読んでみろ.
    http://markethack.net/archives/51871682.html [markethack.net]

    シャレなんねーぞ.これのせいで首くくった人も居るんじゃねーのか、というレベル.

  • を思い出した。

    例えば「何十もある小さなセルにコードが隠れている」と仰る方には↓が役立つかもしれない。
    ・条件付き書式機能(数式が入ってるセルを強調表示できる)
    ・ジャンプ機能(数式が入ってるセルだけをまとめて選択状態できる)
    ・周囲のセルと異なるセルを目立たせる機能(名前忘れました)
    ・セル間の依存関係を表示機能(文字通りシート内にセル間の依存関係を示す矢印が表示されます)
    ・INDIRECT/EVALUATEによる文字列の評価 (別のセルに文字列として書いた数式を評価させられます)
    ・任意のセル範囲、定数、数式に名前を付ける機能
    ・VBAによるワークシート関数自作
    ・プラグインによるワークシート関数自作
    ・COM/OLE/DDEによる外部アプリケーションやスクリプトからの操作
    などなど。

  • by Anonymous Coward on 2014年05月30日 18時45分 (#2612023)

    基本、機械可読の形でしかコードが保存できないから。
    なにしろ、そのまま(再現性のある形で)印刷できない。
    (画面ハードコピーじゃないよ)
    所詮、処理系言語のRADツールでしかない。

    いや、入り組んだxmlとかで出されても困るけどさぁ

  • by Anonymous Coward on 2014年05月30日 18時47分 (#2612027)

    Computer ScienceのProfessorだそうだが、赤を入れたくなる言葉遣いだといわざるを得ない。
    「重要な仕事に使うな」ではなくて、「第三者によるコードレビューを必要とするような仕事に使うな」でしょ。
    実際、重要だけど表計算ソフトが十分役割を果たせる仕事なんていくらでも思いつく。

  • by Anonymous Coward on 2014年05月30日 18時49分 (#2612034)
    表計算ソフトという土俵(GUI主体で難しいことは考えず簡単に使いたい人のためのツール)の上でやる限りしょうがない。
    もっとコーダー向けの表計算ソフトができるといいのかもね。各セルごとのコードが一覧されるような。
  • by Anonymous Coward on 2014年05月30日 18時50分 (#2612036)

    コールシーケンスとかExcelで書いて送りつけてくる日本のお客さんの話じゃなかったのか…。

    # 本社(US)に送るために英訳するんだけど文字が入力されてるセルを特定するのに一苦労

    • by Anonymous Coward

      方眼紙にしてるだけでもアレなのに、それぞれのセルでインデント使ってたり、
      そのインデントが機能だったり半角スペースだったり全角スペースだったりその混雑だったり。
      隣のセルの文字で途中から隠れてるのでも分かりづらいのに、
      インデントで全部見えなくなってたり。

      あ、そういう話ではないのね。

  • by Anonymous Coward on 2014年05月30日 18時50分 (#2612037)

    Excelの場合は単に、もう一回Excelファイルを作って(可能なら別の人に入力してもらって)ダブルチェックするだけで十分なことが多い

  • OLEで簡単にアクセスできるのに、なぜセルの関数を一覧化するプログラム/スクリプトを書かない?

typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...