![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.2ベストアンサー
- 回答日時:
> プログラミング的に、Androidのバグを取り切るのはそんなに難しいんでしょうか?
Androidかどうか、ってのは関係なく、言っちゃえば、全てのプログラミングではバグを取り切るのは「難しい」のです。
ゲームかどうか、ドラクエだからなのか、スクエニだからなのか、と言うのは全く関係ないですね。
まあ、恐らく、プログラム自体も「凄くデカい」のがまた問題だったんでしょうが。
以下、余談だと思ってくれて良いです。
プログラム初心者に教えるネタで良くあるのは「数学的な課題」なんですけど。
これ、誤解してる人が多いんですが、「プログラミングは数学に密接に関係がある」「プログラミングは理系の範疇」だからじゃありません。
もちろん、プログラミング言語が発展してきた最初は科学技術計算での要請、ってのがあったんですが、今は全く関係ないです。
じゃあ、何で「数学的な課題を扱うのか?」と言うのは、理由が「それがトピックとして一番簡単だから」なんですよ。
言い換えると、「証明済みだから」って事だからです。数学的に証明済みな以上、「それは確実に動く(計算結果が出る)」事が分かっている。そして「証明済みのモノが動かない限り」プログラミングを貴方(プログラミング初心者)がどっか間違えたんだろ、って言えるわけです。
ところが現実的な物事をプログラムするとなると、相手は「数学的に証明されたようなブツ」じゃないので、「上手く動くかどうか」ってのが実は保証されないんです。
これが実は至極厄介なのです。そもそも数学的に証明されていないモノがプログラミングの対象だとすると、じゃあ何をもって「バグ」とするのか?
通常、簡単に「バグ」と言いますが、大きく言うと、パターン的に次のような事があり得ます。
1. プログラマが使用してるプログラミング言語で構文上のミスを犯した。
2. 設計したデータが間違っていた。
3. ユーザーからの入力が想定外だった。
4. ユーザーへの出力が想定外だった。
まぁ、プロのプログラマである以上、1. はまずあり得ないんですが。ただ、これも良くある。人間は「間違える」んで。
問題は構文は正しいのにプログラムが上手く動かないケース。2と3と4はここに含まれる。
この解決策としては、まず一つは数学的に「バグが無い」プログラムを作る事は本当に出来るのか、と理論的に研究する事が挙げられます。
これは大学なんかでの研究対象なんで、興味があるなら大学に進学したあと、学んで下さい。
もう一方は実用的な方面からでのアプローチです。
プログラマは通常、
「こうデータ設計しておいて、入力が来たらこうデータを書き換えて、そのデータの特性に従って、こう処理を振り分けて、それでこう出力して、完成!」
ってやってくんですが、問題はその「ユーザーからの入力」がまずはとんでもなかった場合、です。
例えば入力は整数だ、って想定してたのにアルファベットが入力されてきた、とか。色々そういう「ちょっと待てよ」ってケースが起こりうるのです。
んで、昔はそういう「異常な入力」に対して想定しておき、条件分岐でおかしな入力が来た場合、処理をやり直せ、とか書いてたんですよね。
ところがそれじゃあ大変な事になってきた。
「入力がこれの場合はこうして、入力がそれの場合は、えっと、どこに戻ればイイ?ちと待てよ、入力がアレの場合は・・・・ガーッ!!!!」
条件分岐ってのがメチャクチャ肥大化するような状態になってきたんですよ。
つまりね、
「ユーザーはプログラマが想定出来る範囲の"異常入力"の想定外でかつ斜め上の事を絶対やる」
わけです(笑)。こりゃいくらなんでもダメだろ、と。そして「想定外」が起きる以上、必ずプログラムは異常終了する、と。そうじゃなくって、どんなエラーが起きても、それが起きる前に「巻き戻して」もう一回エラーが起きる前の状態に出来ないか、と考える人が出てきたんです。
んで、まぁこれが最初じゃあないんですが、1996年に発表されたJavaで有名になった機能がある。いわゆる「例外処理」ですね。これでエラーが起きた場合の「取り敢えず暫定的な」対処が可能になった。
ただし、「例外処理」があっても、プログラマの人為的なミスによる「計算の間違い」ってのは起こり得るわけですよ。これは防ぎようがない。
そこで2000年代中盤から「ユニットテスト」とか「テスト駆動開発」って言われる「ソフトの作り方」が推奨されるようになってきた。まず今作ってる部分の「正しく動くんなら結果はこうなる」ってのを列挙します。思いつく限り、ね。
それからその部分のプログラムを書き始める。そのプログラムのテストをする。エラーが起きる。書き直す。テストする。またエラーが起きる。そのバグを潰す・・・ってやってったら「バグがないプログラム」が出来る筈だ、と。まぁ、確かに実用的にはそうだろな、って話です。
でも、良く考えてみると、「全ての"正しい"関係を列挙出来るのか」って問題があるんですよ。それが出来るならそもそも「条件節を書くしか出来ない時代」で列挙出来てた筈なんです。そして一体いくつ「正しい関係」があるのか?
つまり、この方法でも「ある程度の正しさ」は保証出来るんだけど、もし「ある特定の正しさ」が(思いつかなかったり忘れてたりで)漏れていたとしたら、それに対する検証はあり得ません。従って、そこはテスト出来ないので、潜在的にはやはり「バグが残る」のです。
大体、プログラムでさえ書き間違えるのに、テストを書き間違えない、とかあるいは「全部テストを思いつく」って保証があるのか、と。確かに問題は「減ってる」けど「無くなった」ワケでもないんですよね。構造的に。
というわけで、意外とバグって何なのか、とか「バグが無いプログラムって作れるのか?」とか考え出すとこれがなかなか難しいんですよ。
んで、現実的な問題で言うと「どんなプログラムだろうとバグがある」と言われています。「あるんだけど見えないだけだ」と。
つまり、実行させてみてクリティカルになるバグってのは即座修正される可能性はあるんだけど、そうじゃないバグに関しては「潜んでるだけだ」と。だからそもそもそれが「なかなか表面化しない」。
まぁね。ユーザーの立場から言うと、
「バグ起きたプログラムってサイテー」
とか言いたいのは事実なんですけどね(笑)。プログラム組む側から言うとそこまで実は問題は単純じゃない、です。
特にね〜。ゲームはマジで大変ですよ。「やれる事が多くなる」ゲームになればなるほど、指数関数的に潜在するだろうバグは増えていく。
いや、マジでシャレにならん商売だと思いますよ。
No.1
- 回答日時:
どんなバグかにもよりますが、Androidだから難しいという考え方はあまりしません。
(もちろんAndroid固有の難しさもありますが)
しばらくバグフィックス出来なかったのは、人気タイトルは常に開発が進んでいることもあり、
スケジュールに組み込みづらかったりしたからでしょう。
もちろん緊急性の高いバグ(お金に関わるとか)であれば他の作業を中止してでも改修しますが、
そうでなければ、次回のリリース時にまとめて修正という形を取るのが普通です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- iPhone(アイフォーン) 位置情報アプリの友どこについてなんですが、昨日まで全く使えていたのに、今日いきなりバグって使えなくな 1 2023/07/22 16:04
- Instagram Instagramでバグが起きました。Androidです。 画像は左がストーリーにあげた後です。右が 1 2022/08/18 11:55
- 教えて!goo せっかく回答いただいたのに見れないバグありますよね? またせっかく回答したのに消えるバグありますよね 7 2022/09/07 20:18
- X(旧Twitter) Twitterのアプリでアカウントを作ろうとして、メアドや名前を入れたあと、ロボットかどうか調べる操 1 2023/02/03 15:58
- 子育て 小学生の子どもの言葉遣いについて 8 2023/07/01 07:31
- LINE LINEの退会について 3 2022/06/20 23:06
- タブレット ipadとその他のタブレット(android)だと、どちらのほうが使いやすいですか? 4 2023/06/24 07:55
- 楽天市場 huaweiのタブレット注文取消しにされた。 1 2022/09/22 10:01
- その他(ゲーム) ドラクエ4や5や6の、ハッサンミレーユが結婚してその子孫が4のミネア・マーニャとかの、ある説について 1 2023/05/10 13:30
- 浮気・不倫(恋愛相談) 彼氏がカカオトーク入れてました。 理由を聞いたらDiscordがバグったから入れた、と言ってました。 2 2022/07/02 15:19
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SNMPトラップ情報をC#.netで作...
-
個人で使用する株の自動売買ソ...
-
Sleep命令で指定した待機時間が...
-
変数の大きさを超える代入
-
Unityがすごく遅いです。ノート...
-
Webプログラムを外注した場合の...
-
3ウェイハンドシェイクの流れ...
-
VBプログラムをEXCEL VBAに移植...
-
プログラミングのスキル
-
プログラミング 求められる力
-
VBS:コンピュータ名を取得し、...
-
Java言語を使ったP2Pのチャット...
-
プログラム初心者でござる。PHP...
-
大学でプログラムを作っている...
-
私は23歳です 新たにプログラ...
-
WEB系の知識を学ぶなら、手始め...
-
.Net とは何ですか?
-
LInuxとWindowsでのPerlの動作...
-
SEってなに?
-
独学でカードゲームを勉強する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
VBプログラムをEXCEL VBAに移植...
-
SNMPトラップ情報をC#.netで作...
-
このプログラミング誰か教えて...
-
OSとCPUの関係について
-
コンソールアプリでファイル選...
-
UNIX環境でのCプログラム上でC...
-
Ryzen 3700(無印)はWin11に対応...
-
DLLってなに?
-
C言語のHP-UXからLinuxへのポ...
-
VB.net エラーメッセージを英文...
-
VBS:コンピュータ名を取得し、...
-
Sleep命令で指定した待機時間が...
-
Perl5とActivePerl
-
大至急!!! ピクトグラミング...
-
printf系の書式「w」ってなに?
-
サイクロイドの軌跡
-
初心者にEXCELのVBAを教えると...
-
三目並べ
-
小中学校でプログラミングなん...
おすすめ情報