トップページ⇒tech
129コメント59KB

バグなしのプログラムって本当に作れるの?

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
結構大きめなプログラムでバグなしのプログラムはできるのでしょうか?
スペルミス、異常処理、タイミングなどを考えると全てのチェックはできないと思う。
何かいい方法でもある?
0079学者(うそ)NGNG
フォーマルメソッドマンセー
0080ahoNGNG
>79
FormalMethod?
nandesuka koreha?
0081ahoNGNG
>79 ここのリンクで勉強できますか?
http://dir.yahoo.com/Science/Computer_Science/Formal_Methods/
0082ahoNGNG
間違えた、こっちの方がいい。
http://www.afm.sbu.ac.uk/
0083デフォルトの名無しさんNGNG
>>75
コンパイル通らねぇよ、ヴァカ。
0084デフォルトの名無しさんNGNG
>>83
それは俺とお前のコンパイラとその他の環境が違うからだ。
俺のはMSvisualC++のコンソールアプリケーション追加無しで通る。
0085デフォルトの名無しさんNGNG
>>84
ハァ?
0086デフォルトの名無しさんNGNG
めんどくさいけど、試してやったよ。

------
vaka.c
C:\Program Files\DevStudio\MyProjects\vaka\vaka.c(3) : error C2065: 'EXIT_SUCCESS' : 定義されていない識別子です。
cl.exe の実行エラー

vaka.obj - エラー 1、警告 0
------
0087デフォルトの名無しさんNGNG
つーか、そんな低レヴェルの話してて面白いんか?
0088デフォルトの名無しさんNGNG
>>85
ハァ ハァハァハァ ハァハァ
ハァハァ ハァハァハァ ハァハァ ハァハァハァハァ!

<同時通訳>
お前なあ そういう態度がいかん
社会に通用しないよ 出直して来い!
0089デフォルトの名無しさんNGNG
あ、こっちの方だったか。めんどくせー。
--
vaka2.c
C:\Program Files\DevStudio\MyProjects\vaka\vaka2.c(3) : error C2090: 関数は配列を返せません。
C:\Program Files\DevStudio\MyProjects\vaka\vaka2.c(4) : fatal error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー

vaka2.obj - エラー 2、警告 0
--

手間取らせやがって。
0090デフォルトの名無しさんNGNG
:69,89:d
0091デフォルトの名無しさんNGNG
俺は本気出せばちょっとしたゲームぐらい作れるさ。もちろん画像やらその他は、
既存のものを用意させてもらうが・・・
俺の環境はちと特殊だからね。
0092デフォルトの名無しさんNGNG
>>91
そもそも脳みそが特殊と思われ。
0093>91NGNG
特殊さん、いらしゃーい
0094デフォルトの名無しさんNGNG
10000時間デバッグすればなんとかなるだろ(w
0095デフォルトの名無しさんNGNG
main
{
}
この程度のプログラムがかけるからバグは問題ないという認識があるのだとしたら
なかなか素敵な御仁だと思います。ぜひ2ちゃんねるで活躍しつづけてください。

バグで地獄見れば、バグを減らすようになると思うんだけど、減らさないとダメだ
と気がついても、従来と同じ手法に頼るような勉強が出来ないダメプログラマーも
存在します。適性の有無が問われるのは、しょうがないと思ったよ。
0096デフォルトの名無しさんNGNG
逆に,バグだらけなプログラムを書くには
どうすればいいか考えてみるとよいかも。
009756NGNG
>>63
>やっぱり経験と資質(職人的技術)に頼らないといけないのでしょうか?

というか、基本が出来てない人が多いんですよね。
別に「ソフトウェアテスト技法」なんて本を読む必要はありません。
「ライティングソリッドコード」くらいは読んでて欲しいけど。

信頼度成長曲線や限界値分析はおろか、ホワイトボックステストや、
ブラックボックステストすら知らない人がいるんですよ。実際に。

>私が今まで出たバグの原因は、
>1.スペルミスによるバグ

strcmp()等で比較対照に文字列リテラルを使ってて、それを間違えた
とかですか?
これは、カバレッジテストで見つけることが出来ると思うんですが。

>2.想定外のデータ処理が間違っていたバグ

これは、二つに分けて考えないといけませんね。
「想定外のデータの場合の実装をしていなかった」
「実装はしていたが、その実装に誤りがあった」

前者は、限界値分析で、後者はカバレッジテストで発見できると思います。

# 念の為言っておくと、限界値分析とは、取り得る定義域の
# 境界値付近を詳しくテストすることです。
# 例えば、0 〜 100の値を取る場合は、-1,0,1,99,100,101を調べる。

>3.想定しないタイミングが発生し、バグとなった

これは、単体テスト、UnitTestではなかなか発見できませんね。
これを事前にテストできるかどうか(いつも出来るとは限りませんけど)が
経験なんでしょう、きっと。

>4.仕様の取り違え

これは、ブラックボックステストで検出。
当然、テストケースは、プログラマが書いちゃいけません。

>5.潜在的にバグがあり、テスト時は問題なかったが、別のところを修正したら
>そのバグが出てきた

これは、テストスィートを用意して、いつでもリグレッションテストを行える
環境を作っておけば発見できますね。

>6.関係の無い関数がデータを破壊していた

私はPurifyを使ってます。UnitTestのテストスィートと、ブラックボックステストの
テストスィートを流して、エラーがないかどうかチェックしてます。

うーん、なんかご期待に添える内容じゃなかったかな?
009856NGNG
最近思うのは、XPのUnitTestはかなり有効だな、ということ。

「これを修正して、他がおかしくならないかな?」という不安が
100%ではないにせよ、かなり軽減されるのが、大きなメリット
です。
また、某コピペじゃありませんが、
「よっしゃー、100テスト、200テストクリア」とか
「300assert OK, 400 assert OK」とか、正しく動く塊が増えていく
のも実感できますし。

xUnitを使ったテスト自動化をやったことが無い人は、部分的
にでも、後付けでも良いですから、やってみることをお勧めします。

んじゃ、寝る。
0099謎NGNG
>>97
SDMの授業みたいだ。
0100デフォルトの名無しさんNGNG
SDMってなんですか?
いろいろと検索したけど、オブジェクトモデルとか情報モデルとかしか
引っかかりませんでした。
0101デフォルトの名無しさんNGNG
あげ
01021NGNG
>>97
色々とありがとうございます。
参考になりました。

私ごとではありますが、組み込み系のソフトを扱っていますので、
なかなかデバッグが進みません。^^;
誰かこの辺についていい方法知ってませんか?
0103デフォルトの名無しさんNGNG
あのぉ・・・。
バグをバグだと思わないってのはどうです?
そういうものなんだというのが前提で・・・。
0104デフォルトの名無しさんNGNG
>>103
ドラゴンボールのスカウターみたいに?
あれ、ほとんどの人は欠陥品だと思ってないんだよね。
オーバーフローごときで爆発しちゃうような代物なのに。
01051NGNG
>>103
何度もそう思ったことある。
「これは仕様って言うことで・・・」
「うっ、これは目の錯覚に違いない・・・」(テスト中に)
0106デフォルトの名無しさんNGNG
>>105
うん、そうだね・・・。
君の発言にはちょっと笑ってしまったが。
バグ(不具合)を、そういうものだと思ってしまえば、
バグじゃないんだけどね・・・。
自分の思い通りには絶対にならないのなら、
やはりそれはそういうものだという、そういう仕様だという
ことで諦めるしか・・・。
そしてそれがバグ無しのプログラム(笑)
0107デフォルトの名無しさんNGNG
個人的な意見で批判も多いだろうけど
俺は「バグは0にできます」というプログラマは信用しない
そいつがどんな能書きたれてもだ

ところで
>>75
のやつは括弧が "[" と "]" なんだけど…

0108デフォルトの名無しさんNGNG
>>104
あれって機械に組み込まれたプログラムがだめだと言うよりも、
あの機械が持つ最大の能力を超えた使い方がされたから、
壊れたというべきでは?
0109デフォルトの名無しさんNGNG
>>108
ハード的な問題なら、ヒューズみたいなリミッターをかませばいいんじゃないのか?
ソフト的な問題ならバグだね。
どちらにしても欠陥商品ということで。
0110デフォルトの名無しさんNGNG
>>俺は「バグは0にできます」というプログラマは信用しない
おれもそう思うけど
納品のときは、バグはありませんと言わないとまずい
わかってくれーー
0111デフォルトの名無しさんNGNG
>>110
「今はバグ件数0です」
と言う
0112デフォルトの名無しさんNGNG
以前の関わった仕事では、バグの日ごとの件数をグラフにして、「バグ曲線」
と呼んでいたが、件数を操作したことも多々あったような気がする。
(今日のバグを明日に持ち越す)
バグ曲線が急角度になると、客先の印象が悪いからだって。
0113デフォルトの名無しさんNGNG
Adobeいわく

すべてのエンジニアはバグを常時25以下にしておかなければならなず、
テストは継続的に行っていく。バグが25を超えた場合は、その解決を
開発における最優先課題とする。

・・・

それぞれの機能を完成させてから次に移ること。品質検査はプロダクトの
ライフサイクルの間いつでもやっている。開発担当の技術者よりも品質検査
の技術者の方が数が多い。このような開発方法によって、リリースする価値
がある機能を実装できたら開発を取り止め、シュリンクして出荷する。

だってさ
0114デフォルトの名無しさんNGNG
>>94
それよか10000人に1時間デバッグさせるほうがずっと良さそう。
バザールモデルまんせー

>>112
印象が介在しているようじゃ、完璧に敗北してるね、その曲線って。
0115デフォルトの名無しさんNGNG
>>111
「発覚していないバグはバグではない。」
0116デフォルトの名無しさんNGNG
>>115
変な理屈。
ああ神様、こういう人がY2K問題を作ったのですね。
教えてくれてありがとう。
0117デフォルトの名無しさんNGNG
開発に関わった人間は新製品に決して飛びつかないという。
なぜか?(藁
0118デフォルトの名無しさんNGNG
>>117
ボウヤじゃないからさ
01191NGNG
>>117
第2ロットまで待て!
0120デフォルトの名無しさんNGNG
age
0121デフォルトの名無しさんNGNG
>>113
一見まともに見えるけど、ここまでいうなら、
「仕様の」バグをどう撲滅しているのか?も
組み合わせて知りたいものだ、と思ったです。

モトネタどこで見れますですか?
0122デフォルトの名無しさんNGNG
水虫の薬買ってつかったんだけど
薬にかぶれてめちゃくちゃ痒いの
これは薬のバグか
0123デフォルトの名無しさんNGNG
>>122
相性問題です。
足をアップデートしてください。
0124デフォルトの名無しさんNGNG
プログラミング言語で足の水虫を撃つには…
0125ふざけて言ってるわけではないがNGNG
バグって何?マジで概念を知りたい。
0126デフォルトの名無しさんNGNG
>>125
ゴルゴ13にその辺の分かりやすい解説が載ってたな・・・
マジレスね。
0127ふざけて言ってるわけではないがNGNG
え 何巻? ゴルゴ最高 俺の後ろにカキコするな 
0128中途半端くんNGNG
ちょっと調べてみた。
多分この話だと思う。立ち読みして調べてね。違ったらごめんね。

63巻(ロックフォードの野望) 206話 「デバッグ」
ttp://www4.plala.or.jp/saito_world/Research/Golgo13/061-090/golgo13_063.htm#63-2
0129すまんNGNG
76と77に死ぬほど笑ったのでage
■ このスレッドは過去ログ倉庫に格納されています