ビッグエンディアンとリトルエンディアンの違いとは
今回はビッグエンディアンとリトルエンディアンについて説明していきます。
エンディアンとは
ビッグエンディアンとリトルエンディアンの説明に入る前に、まずはエンディアンの説明からやりましょう。
そもそもエンディアンとは何でしょうか?
コンピュータはプログラムを動かすときに、データを1バイト(8ビット)単位で扱います。
この時に、1バイトを超えるデータを取り扱う場合に、どのようにしてメモリに配置していくか、という問題が発生しました。
そして生まれたのが、ビッグエンディアンとリトルエンディアンと呼ばれる2つの方式です。
ビッグエンディアンとリトルエンディアン
ビッグエンディアンとリトルエンディアンの違いは、バイトの順序(バイトオーダ)を最上位からにするのか、それとも最下位からにするのか、です。
ビッグエンディアン
ビッグエンディアンでは、バイトオーダの最上位からデータを取り扱います。
例えば、「1234」という16進数のデータがあったとしましょう。
この場合、最上位からデータを取り扱うので、メモリ上への配置は
「12」「34」
という風になります。
リトルエンディアン方式を採用している代表的なものにはIBM社のメインフレーム、JAVA仮想マシン、通信プロトコルではおなじみのTCP/IPがあります。
リトルエンディアン
リトルエンディアンではビッグエンディアンとは対照的に最下部のビットからデータを取り扱います。
先の例のように「1234」という16進数のデータで考えてみましょう。
この例の場合、メモリ上への配置は
「34」「12」
という順になります。
大学院生が情報処理安全確保支援士を受けてみた結果
私は今年の春に情報処理安全確保支援士の資格を受験しました。
結果は合格だったのですが、その時の勉強法などをまとめておこうと思います。
まずは私のプロフィールから紹介します。
過去に取得した資格は大学2年時に基本情報技術者、大学3年時に応用情報技術者の2つです。
学部の専攻は電子情報工学で情報系の分野は少しかじった程度でした。
また、プログラミングはC言語しか学部で学んでいませんでした。
基本情報技術者は教科書を一周して過去問を解いて約2週間ほど勉強したら合格しました。
応用情報の時の同様の勉強方法でした。
情報処理安全確保支援士の勉強は3月ごろから始めたと思います。3月の間は一日一問のペースで午後の問題を解いていました。
午前の問題は応用情報技術者と似たような内容だったので、あまり勉強していません。
webで過去問を6年分ほど解いて終了しました。
私が特に重点を置いたのは午後の問題です。
私の大学ではに関することは一切学べないので、完全に独学でした。
過去問を解いて、なぜこの答えになるのかを教科書やインターネットを利用し、自分なりに結論をつけるようにしていました。
4月に入ってからは、1日に1回分の過去問を解いていました。
一度解いた問題を解き、自分なりの結論を思い出しながらさらに理解を深めていくといった感じです。
もちろん研究もやらなければいけないので、1日にとれる勉強偉時間は多くても4時間ほどでした。
結果勉強時間は150時間ほどでしたが、見事に全分野で8割を超して合格をすることができました。
今年の秋はネットワークスペシャリストに挑戦する予定です。
情報処理技術者系の試験は色んな知識が得られるので勉強していて楽しいですね。
皆さんも挑戦してみてください。
基本情報技術者の勉強 プロトタイプモデルのメリットとデメリットについて
プロトタイプモデルについてもっと詳しく知りたい方のために、詳細について紹介していきます。
プロトタイプモデルとは
プロトタイプモデルでの開発では、初めにシステムの試作品を開発し、その試作品をユーザーに確かめてもらいながら開発を進めていく手法です。
この試作品のことをプロトタイプと言います。
ユーザーに試作品を使用してもらうことでシステムの評価と確認を行い、開発者との間で完成するシステムの概要を共有していきます。
プロトタイプモデルの開発で気を付けなければならないのは、試作品として開発するシステムの範囲です。
試作品の規模が大きければ、それだけでかなりのコストが生じてしまいます。
逆に試作品の規模が小さすぎれば、ユーザーがシステムを評価するための機能を十分に備えているとは言えないでしょう。
それではプロトタイプモデルを採用するメリットとデメリットについてお話ししていきましょう。
プロトタイプモデルのメリット
まずはプロトタイプモデルを採用する場合のメリットについてお話ししていきます。
プロトタイプモデルのメリットは大きく2つがあると言えます。
-
ユーザーと開発者間の認識のズレを最小限にできる
-
早い段階で問題点を洗い出せる
この2つについて詳しく見ていきましょう。
ユーザと開発者間の認識のズレを最小限にできる
プロトタイプモデルでは、要求事項を洗い出す初期の段階で試作品を作成してユーザーに評価、確認してもらいます。
実際に作成された試作品をもとにさらなる要件の定義を行いますので、ユーザーと開発者間での認識のズレがなくなります。
また、ユーザーは素人の場合もあるので、実際のシステムを作りながら要求事項を説明した方が意志の疎通は行いやすいです。
プロトタイプの作成と評価を繰り返しながら完成品へと近づけていくため、ユーザーの満足度も高いです。
有名なウォーターフォールモデルでは終盤でしかユーザーに確認してもらえないので、ここは大きなメリットと言えるでしょうね。
早い段階で問題点を洗い出せる
プロトタイプモデルでは実際に試作品を開発しながらプロジェクトを進めていくので、早い段階で問題点を洗いだせます。
システム開発のスケジュールを立てた時に、どの作業にどれくらいの日数を要するかはあらかじめ見積もることもできますが、実際に開発に取り組んでみて初めて明るみに出る問題もあります。
そうした問題に早い段階で気付き、対処をすることはコストの削減につながります。
プロトタイプモデルのデメリット
続いてプロトタイプモデルのデメリットについて紹介していきます。
デメリットは2つのことが言えるでしょう。
-
試作品を作成することにも時間がかかる
-
プロジェクトが肥大化する恐れがある
では、この2つについて順番に説明していきたいと思います。
試作品を作成することにも時間がかかる
プロトタイプモデルでは試作品の開発することを前提に進めていきますが、当然その試作品を開発するのにコストが発生してしまいます。
ユーザーに評価、確認してもらう試作品を作るにはそれなりの機能を実装しなくてはいけないのは当たり前で、
中にはほぼ完成品のものを試作品として提供しなくてはいけない場合もあるかもしれませんね。
もし、評価、確認してもらうための要件を満たしていない試作品を提供してしまうと、十分なフィードバックが得られないのでプロトタイプモデルを採用する目的を達成することができません。
プロジェクト全体の規模が大きくなれば、開発する試作品に対するコストも大きくなってしまうので、大規模なプロジェクトには向いていない開発手法です。
プロジェクトが肥大化する恐れがある
プロトタイプモデルでは、使用が完全に明らかになっていない場合でも、試作品を通じて徐々に明らかにしていくという特性を持ちます。
そのため、使用がどんどん明らかになるにつれて当初予定していた開発の規模よりもシステムの全体像が増大してしまい、
想定していたコストをコストを超えてしまったり、プロジェクト全体の期間が長引いてしまうといったケースに陥ります。
過去問
プロトタイプを1回作成するごとに未確定な仕様の50%が確定するとき,プロトタイプ開始時点で未確定だった仕様の90%以上を確定させるには,プロトタイプを何回作成する必要があるか。
1 2 3 4
基本情報技術者の過去問です。
一見複雑そうに見えるかもしれませんが、冷静に考えるとサービス問題です。
一回作成するごとに未確定の部分の 50 % が完成していくので、公比が 1/2 の等比数列ですね。
一回目の開発ではもちろん全体の 50 % が終了します。
二回目の開発では、残りの 50 % の 50 % なので 25 %。これで全体の 75 % が完成しました。
これを 90 % を超えるまで繰り返せばいいので、正解は 4 回です。
基本情報技術者の勉強 ウォーターフォールモデルのメリットとデメリットについて
ウォーターフォールモデルについてもっと詳しく知りたい方のために詳細を紹介していきます。
ウォーターフォールモデルとは
システムの開発プロセスは大きく分けて
- 要件定義
- 設計
- プログラミング
- テスト
となっています。
ウォーターフォールモデルではこの一連の開発プロセスを上流工程から順番に行なっていきます。
各工程が終了するまでは次の工程には進めず、作業が完了した段階で次の工程へと進んでいきます。
また、終了してしまった工程には後戻りができないという特徴も持っています。
絶対に後戻りをしてはならないというわけではありませんが、後戻りはしないという前提のもとになっています。もし後戻りが発生してしまうと、プロジェクト全体の進展に大きな悪影響を及ぼすでしょうね。
そのため各工程で成果物を作り、各工程で適切な評価を下していくことによって品質の管理をしていきます。
その様子が滝のようだったためウォーターフォールモデルという名前が付けられました。
ウォーターフォールモデルでは、上流工程の出力がそのまま下流工程の入力になります。
要件定義の結果をもとに設計を行なったり、設計の結果をもとにプログラミングを行なっていきます。
そのため、上流工程に不備があるとそのまま下流工程に引き継がれてしまいますし、さらにはその下流工程にまで影響が及んでしまいます。
それではウォーターフォールモデルのメリットデメリットについて見ていきましょう。
ウォーターフォールモデルのメリット
まずはウォーターフォールモデルのメリットについて紹介していきます。
ウォーターフォールモデルのメリットは大きく分けて4つあります。
-
プロジェクトの計画を立てやすい
-
プロジェクトの進展管理がしやすい
-
プロジェクトの人員確保がしやすい
-
各工程の成果物をベースにして開発を行える
これらの4つについて順番に紹介していきます。
プロジェクトの計画を立てやすい
ウォーターフォールモデルの一番の魅力は何と言ってもプロジェクト全体の計画を立てやすいということでしょう。
システムの要求定義を開発の一番初期に行うのはどの開発手法でも共通していますが、ウォーターフォールモデルの場合は、この段階で詳細に要求事項を決定します。
つまり、プロジェクトの一番初期の段階で最終的に作り上げる成果物を明確にしたうえで開発に取り組んでいきます。
最終的に作り上げる成果物が明確になっていれば、それを達成させるために必要な事項などもより正確に把握できます。
「この作業には何日かかり、この作業には何日かかる」と見積もりができたりなど、全体にかかる日数も把握しやすくなります。
基本的に後戻りをしないことを想定しているためこのようにできますね。
プロジェクトの進展管理がしやすい
先ほど同様に、プロジェクトの初期の段階で全体像を確認できるため、その後の進展の管理がしやすくなります。
この工程にはこれほど時間がかかるとか、また各工程の中でもどの部分にどれほどの時間がかかるのか、把握しやすくなります。
各工程は終わってから次の工程に進むため、現在が全体のどの程度の作業が終了しているのかもわかりやすいですね。
プロジェクトの人員を確保しやすい
実際にシステムを開発してみると、自社の社員だけでは間に合わないこともあるでしょう。
人員が足りずに納期に間に合いそうになければ、外部のエンジニアを雇う必要があります。
急に人員を確保しようとしても、そうそう都合よく確保できるわけではありません。
何度も言うように、ウォーターフォールモデルはプロジェクトの初期の段階で全体像を正確に把握しておきます。
そうすることでどの工程にどれほど人員が必要かあらかじめ見積もることができますし、早めのうちに外部のエンジニアさんたちに手配を出すこともできるため、人員の確保がしやすいです。
各工程の成果物をベースにして開発に取り組むことができる
ウォーターフォールモデルでは各工程での作業を完結させて次の工程に進んでいくため、各工程で明確な成果物が出来上がります。
ですので、それらの成果物を見れば引き継ぎ作業が速やかに行われスムーズに開発を行えます。
また、各工程の成果物を次の工程のベースとするため、プロジェクト全体を通して一貫性が保たれます。
ウォーターフォールモデルのデメリット
続いてウォーターフォールモデルのデメリットについてご紹介していきましょう。
ウォーターフォールモデルのデメリットは、大まかに言って次の3つが挙げられます。
-
上流工程でしか要件定義ができない
-
仕様変更、工程の手戻りの影響
-
ユーザーが実物に触れられるのは終盤だけ
これらをひとつづつ見ていきましょう
上流工程でしか要件定義ができない
まずは上流工程でしか要件定義ができない点です。
先ほどは、上流工程で要件を詳細にすることによるメリットを紹介しましたが、デメリットも合わせ持っています。
プロジェクトの初期の段階で要件定義を行いますが、それ以降は行いません。
ですので、実物がユーザーの元に届くのは、すでに過去のものになってしまいます。
完成形が出来上がるまでに長い時間がかかれば、その間にユーザーの欲しいものが変化してしまうかもしれません。
そうなってしまっても、プロジェクトの途中で要件を定義し直すことができないのが、ウォーターフォールモデルのデメリットでしょう。
仕様変更、工程の手戻りの影響
ウォーターフォールモデルでは、各工程での成果物を次の工程のベースとします。
そのため、各工程での成果物に不備があったり、設計ミスがあったりすると、その後の工程すべてに影響が及びますし、手直しのため前の工程に戻らなければなりません。
このように後からの仕様変更や設計のミスなどはプロジェクト全体の計画を狂わせ命取りとなってしまいます。
計画を立てやすいのはメリットですが、計画通りに行かなかった場合の影響がとても大きいです。
ユーザーが実物に触れられるのは終盤だけ
そしてユーザーが実物に触れられるのはプロジェクトの終盤だけということです。
いくら正確に要件定義を行い、詳細に設計を行なっても、開発を行うのはユーザーではなくエンジニアです。
また、ユーザーは素人である場合がほとんどなので、開発者との認識のズレも当然生じてしまうことになります。
そうすると、完成物をユーザーに試してもらって初めて思っていたものとは違うことに気づくのです。
こういった認識のズレをなくすためにも丁寧に要件定義を行う必要がありますね。
基本情報技術者の出題傾向が変わる COBOL が無くなり新しく Python が追加へ
おはようございます。
今年の四月にも基本情報技術者試験が開催されますね。
そのほかにも、情報セキュリティマネジメント、応用情報技術者試験、高度試験が開催されます。
すでに試験への申し込み期間は始まっています。
もう申し込みを済ませた方もいれば、まだ済んでいない方もいるでしょう。
インターネットでのお申し込み期限は2月21日の12時までとなっていますのでお忘れのないようにしてください。
せっかく勉強しても試験を受験でいなければ意味はありませんからね。
さて、その中でも基本情報技術者試験ですが、どうやら試験内容の見直しが行われるようです。
一番大きな変化は午後試験でしょう。
プログラミング言語問題の「COBOL」が廃止され、新しく「Python」が出題されます。
これは嬉しい変化ですね。
私は特に「Python」と「JavaScript」大好きな人間なので、私が受験するときに「Python」が出題されていればよかったのにと思います。
「COBOL」は最近のニュースで話題になっていましたよね。
勤労統計問題というよくわからない問題が発生したそうで、その原因となったのが「COBOL」だったようですが、
これはCOBOLで書かれた特殊なプログラムなので高齢者しか読めず、そのミスがチェックできないので、去年まで誰もが「逆数をかけているもの」と考えて処理していた。
この発言はSNS上で大きな反響を呼んでいましたね。
「COBOL」はもはや旧石器時代の遺物であると、そう言わんばかりの発言です。
まあ、私も「COBOL」は読めませんが。。。
しかし、今回のように未だ「COBOL」は採用している企業は少なくありません。
特に昔からある多くの企業では業務システムに「COBOL」を採用している倍もたくさんあると聞きます。
私の先輩は今年度の4月から院卒で就職しますが、その企業で「COBOL」を扱うことになると嘆いていました 笑
しかし、現在あるシステムを他の言語へ移行するのは大変な作業なので、「COBOL」を使える人材は貴重なものになっていくのではないでしょうか?
はい、「COBOL」のお話はここまでにして、基本情報技術者のお話に戻りましょう。
今回の変更で午後問題のプログラミング言語の出題内容は「C言語」「Java」「アセンブラ」「表計算」そして新たに追加された「Python」と、このようになっています。
次になくなるのは「アセンブラ」ですかね?
私は未だにアセンブラがそのような現場で活用されているのかわかりません 笑
アセンブラが「JavaScript」になると嬉しいですね〜。
はい、
「Python」が試験問題に採用されたのはやはり機械学習やディープラーニングが背景にあるようですね。
AI が日常生活のいたるところで見られるようになりはじめて、「Python」の注目度もどんどん上がってきましたからね〜。
小学校でもプログラミングの授業が始まるようですし、日本も本格的にIT教育に力を注ぎ始めたのでしょうか。
もう手遅れな気もしますけどね 笑
また試験の配点も変更されました。
今までの基本情報技術者の午後試験の問題の特徴として、アルゴリズムやプログラミング言語の問題がネックという人が多かったと思います。
配点も大きく、その2つだけで100点満点のうち40点も占めます。
今回の変更では、アルゴリズムやプログラミング言語が苦手な人は地獄を見るでしょう。
このようにプログラミングに関する問題がより重要視されるようになりました。
2つで50点もあります。
苦手な方は2019年中に受験することをお勧めします。
その他の変更点としては、線形代数や確率、統計などの問題が追加されるようです。
この変更は2020年の春の試験から適応されます。
2019年の試験を受験しようとされている方は気をつけてくださいね。
いくら「Python」の勉強をしても今年の試験では出題されません。
基本情報技術者の勉強 システムの開発手法
今回はシステムを開発する際に使われる手法として基本情報技術者試験によく出題されるものについて紹介していきたいと思います。
- システム開発とは
- ウォータフォールモデル
- プロトタイピングモデル
- スパイラルモデル
続きを読む
基本情報技術者の勉強 データの誤りチェック
今回はデータの誤りチェックについて紹介していきます。
コンピュータの中ではデータを 0 と 1 の集合で取り扱っています。
一つのコンピューター内のみで取り扱うのであればあまり問題はないように思うかもしれませんが、
別のコンピューターにデータを送信するにはどうしたらよいでしょうか?
例えば、ケーブルを用いてデータを送るとします。
ケーブルの中は 0 と 1 を表す電気信号が流れていますが、当然きれいな波形を描いているわけではありません。
また伝送する距離が長くなればなるほど、電気信号は弱まってしまい、元のデータを維持するのが難しくなってしまいます。
このようなデータの誤りを防ぐためにデータの誤り制御というものがあります。
続きを読む