専門学校100日目/10月24日(木)

1時限~3時限
Linux実習 新しいLinuxの教科書 第2版

今日はVirtual Boxをインストールします。

インストールするだけなら簡単なので、どういったものかの解説をしていきます。インストール中に問題があれば疑問点として挙げてください。
解説は以下のサイトを参考にしました。
https://qiita.com/miyagaw61/items/b44a89eb636d16de010c
https://qiita.com/wisatakendal/items/1dd7fa769437511ab4c5


LinuxはUNIXを参考にして作られたもの。仮想マシンはコンピュータの中に別なコンピュータを擬似的に再現したもの。授業ではWindows11の中にLinuxという環境を構築していくという流れになります。1台のコンピュータの中に他のコンピュータもあれば、いろんな環境に対応できて、その環境が必要なソフトウェアなどを動かすことができる。しかし、使えるメモリやCPUは1台分なために性能面が低くなってしまう。すでに動いているPCの中に仮想マシンを作るホストOS型と、空のHDDの中に仮想マシンを作るハイパーバイザ型がある。授業ではホストOS型を採用します。

https://qiita.com/yamasakk/items/31a4be0f42c8eada038a
に書いてある手順通りにしました。
Microsoft Visual C++ 2015-2022 Redistributable (x64)がインストールされていること必要ですが、実習用PCには最初からインストールされていました。
次にpython3のインストールをしました。一斉にダウンロードして負荷がかからⅡようにインストーラは先生が共有フォルダに用意したものをコピーしてインストールをしました。

インストール時にpythonのことで問題があり、インストールはいったん中止し、以下のサイトでの手順を実行しました。
https://auroralights.jp/entry/2024/05/25/223000
手順にあるようにpywin32をコマンドプロンプト上でインストールしました。
その後再びインストールするとpythonのことで聞かれたウィンドウは表示されずインストールがうまくいきました。

以下のサイトでVirtual Boxについて学びました。
https://qiita.com/wisatakendal/items/1dd7fa769437511ab4c5

仮想化することでwindows11の上にwindows11を構築することができる。仮想環境のファイルを他者に渡すことで、簡単に復元することができるといった利便性がある。Virtual Boxの開発元をオラクルが買収して開発とサポートを引き継いだ。オラクルはデータベースなどで有名な企業です。
簡単に環境を移行でき、仮想化のゲストOSのイメージを受け渡すことで再現でき開発現場ではいろんな場面でVirtual Boxを使われる。スナップショット機能という仮想マシンの状態を複数保存し、任意の時点の状態に戻すことができる。などがqiitaの記事に書かれていました。詳しくは記事のページを参照してください。

来週はVirtualBoxマネージャから仮想マシンのファイルを配布して、仮想環境を構築していきます。

本日の内容は以上です。いつもの振り返りレポートは、インストールの手順などが主なので参照URLの記事から読むことができるのでレポートは省略します。


4時限~6時限
国家試験対策 マネジメントと情報化

■第5節ソフトウェア設計
①プログラム設計
・プログラムとモジュール
プログラムを作成する際には、モジュールを階層的に組み合わせる。
上位のモジュールから設計するトップダウン設計と下位のモジュールから設計するボトムアップ設計がある。

・モジュール間インターフェース
モジュール間でやり取りするデータのことを指す。上位モジュールから受け取るデータを入力データ、上位モジュールへ送り返すデータを出力データという。

・モジュールの内部表現
各モジュールの処理のアルゴリズム面をフローチャートで表現する。

②モジュール分割
分割の方法はプロセス中心設計とデータ中心設計の2つに分けられる。

・STS分割
これは入力データを処理する部分(源泉)、入力データを出力データに変換する部分(変換)、出力データを処理する部分(吸収)の3つのモジュールに分割する方法。3つの部分を上位モジュールとしてインターフェースを明確にして分割する。

・トランザクション分割(TR分割)
オンライントランザクション処理に適した分割技法。入金処理や出金処理で発生するデータごとに処理内容が異なり、内容によって分割して処理する。

・共通機能分割
機能分割をし、同じ絹雄が出てきた場合に、それらを整理して共通の1つのモジュールにする。プログラミングで何度も出てくる処理をメソッドや関数にしておくようなイメージ。

・ワーニエ法
入力データの構造を分析し、プログラムの構造を決定する方式。集合論に基づきブレークダウンという展開をし詳細化する。プログラムの条件をもとにプログラムのブレークダウン図を作成する。データの構造に着目したやり方。

・ジャクソン法
入力データの構造を分析してプログラムの構造を決定する。入出力データ構造を図式化すれば、それから取るべきプログラム構造がわかるという設計思想。基本と連続、繰返し、選択の構造の組み合わせで表す。


③モジュールの独立性
モジュール分割はできるだけ1つのモジュールにおける機能を少なくし、他のモジュールとは関係ないように作るのがよいとされる。そのことを独立性といい、モジュール強度、モジュール結合度で表現する。

・モジュール強度
モジュールのもつ機能の独立性を表す指標。特定の機能だけを持つなら独立性が最も高いとされる。

・モジュール結合度
モジュール間の関係を表す指標。モジュール間でどのようなデータをやり取りするのか、どのように結合されるかを表す。引数のみを受け渡すデータ結合が、もっとも結合度が弱い。

④オブジェクト指向設計
オブジェクトはシステムにおいてデータの集まりを指す。
・クラス
オブジェクトの設計図でオブジェクトの持つ属性や処理を定義する。クラスの定義にはデータ(フィールド、属性)とメソッド(処理内容、手続)が必要になる。車クラスなら、車というクラスに車種、排気量、ナンバー、などのデータがあり、メソッドとしてエンジンをかける、アクセルを踏むなどの処理内容がある。

・インスタンス
クラスを実体化してメモリ上に配置したオブジェクトをインスタンスという。1つのクラスから複数のインスタンスを作れる。同じ型から作るが、色や形が違う車が出来上がるようなもの。

・カプセル化
データとメソッドをオブジェクトとして1つにまとめ、オブジェクトから内部の情報を隠し、メソッドのアクセスのみを公開する仕組み。オブジェクトの独立性が高くなり他のオブジェクトから受ける影響が少なくなる。また内部仕様を変更しても他のオブジェクトに与える影響が少なくなる。モジュール結合度が弱くなったようなもの。

・継承
既存のクラスをもとに新たなクラスを作成すること。継承元をスーパークラス、継承先の新しいクラスをサブクラスという。データとメソッドを継承し、サブクラス固有の機能のみを記述すればよくなる。その際のスーパクラスの機能との差を差分プログラミングという。

・ポリモフィズム(多態性・多様性)
同一のメソッドでも、オブジェクトによって振る舞いが変化することを指す。

・オーバーライド
スーパークラスで定義されたメソッドをサブクラスで書き換えることをいう。サブクラスのインスタンスは書き換えたほうのメソッドを実行する。

・オーバーロード
同じクラス内に引数や型が異なる同じ名前のメソッドを複数記述すること。引数の内容で呼び出すメソッドが変わる。

・委譲
オブジェクトの一部の動作を別のオブジェクトに代替させること。継承との違いは継承ではスーパークラスのすべてを引き継ぐが、委譲では委譲元の一部を引き継ぐ点にある。


■第6節ソフトウェアの構築
⑴プログラム設計
内部設計をもとにシステムを実装する段階のこと。
・構造化プログラミング
プログラムは順次、選択、繰返しの3つの組み合わせで作成できる。構造化プログラミングとはその3つだけで作成されたプログラムをいう。大きなプログラムでも小さい単位に分割し、3つの組み合わせにして表現する。

・手続型プログラミング
処理手順と機能に着目したプログラミング手法。コンピュータが処理する命令を順に記述する。

・オブジェクト指向プログラミング
データとその振る舞いに着目したオブジェクト指向の考え方を取り入れたもの。クラス単位で作成して部品化しやすいのでプログラムの再利用性が高い。

⑵プログラムとテスト
バグを見つける作業をテストといい、バグを修正する作業をデバッグという。これらを繰り返し、プログラムの品質を高めていく。1947年、ハーバード大学のマークⅡというコンピュータのリレーという部分に虫がはさまっていて動作しなくなったことから世界初のバグは本当の虫が原因だったという。

・信頼度成長曲線(ゴンペルツ曲線)
テストの初期段階ではバグは大量に発見されやすく、テストが進むにつれてバグぬ検出数は収束していく。テスト項目の消化件数と累積バグ発見数をグラフで表したものがバグ管理図。グラフで表される曲線の理想的な形を信頼度成長曲線という。実際のテストとバグ発見数が信頼度成長曲線と似通っていれば、プログラムの品質が高まったといえる。

・バグ埋込法(エラー埋込法)
プリグラム全体のバグ数を推定する方法。テストの際にあらかじめバグを埋め込み、テストで埋め込まれたバグのうち検出された埋込バグの数の割合を求める。その割合がバグの検出率となる。埋め込んでいない本来のバグにも適用でき、検出された潜在バグ数から全体の潜在バグ数を推定できる。
埋込バグ総数をS、埋込バグを含まない全体の潜在バグ数をT、一時点で検出されたバグ数をm、mのうちの埋込バグ数をnとすると、
n/S = (m-n)/ T
の関係が成り立つ。
S=20、m=32、n=8とすると、8/20 = (32 - 8) / Tで T = 20*24 / 8 = 20*3 =60となる。

・テストの流れ
テストは要件定義に対しては運用テスト、システム要件定義に対してはシステム適格性テスト、システム方式設計に対してはシステム結合テスト、ソフトウェア要件定義に対してはソフトウェア適格性確認テスト、ソフトウェア葬式設計に対してはソフトウェア結合テスト、ソフトウェア詳細設計に対してはソフトウェアユニットテストというようにテストと設計に対応関係がある。後者の方から前者の方に向かってテストしていく。

・テストのドキュメント
各設計段階で、それに対応するテストのための計画書を作る。どのようにテストするかの方針が含まれる文書のこと。テストの合否の基準なども含まれる。テスト工程ではテスト仕様書を作る。仕様書にはテストケースが含まれる。テストケースはプログラムに渡す入力値やそれで得られる正しい結果を記述した文書。一般的にはチェックリスト形式で作られる。

⑶ソフトウェアユニットテスト
モジュール単位で行うテスト。ホワイトボックステストとブラックボックステストがある。
・ホワイトボックステスト
モジュールの内部構造が正しき実装されているかを検証する。テストの網羅性をどの程度までにするか決めてテストする。
すべての命令を一度は実行する命令網羅、
すべての分岐(if文やスイッチケースなど)に対して、真と偽の両方を少なくとも1回ずつ実行する判定条件網羅(分岐網羅)、
分岐の判定に用いるすべての条件式が真の場合と偽の場合をそれぞれ少なくとも1回実行する条件網羅、
判定条件網羅と条件網羅を組み合わせすべての判定条件における真偽と、その内部の各条件式の真偽をテストする判定条件/条件網羅、
すべての条件式において取りうる真偽値の組み合わせをすべてテストする複数条件網羅、
というように網羅度でいくつかにわかれる。

・ブラックボックステスト
外部仕様に基づいてモジュールの入力に対応する出力が正しいか検証する。
このテストでは入力値とするテストデータをどう作成するかが重要。作成方法には同値分割と境界値分析がある。正しいデータ範囲が1~10までの整数とする。このとき、0以下と11以上は無効同値クラス、1~10を有効同値クラスという。各同値クラスから代表的な値を選びテストデータとするのが同値分割。各同値クラスの境界値をテストデータとするのが境界値分析。

⑷デバッグ
プログラムが仕様書通りに動かない場合に修正すること。静的解析と動的解析がある。
・静的解析
プログラムを実行せずに、構文を確かめたり、コーディング規約に沿って作られているかを解析する。

・動的解析
プログラムを実行して仕様書通りにプログラムが処理されるかテストする。以下のようなデバッガというツールを用いる。
トレーサはプログラムを1行ずつ実行しながら正しく処理されるか確認するツール。
ダンプはプログラムを実行したときのメモリの状況を出力するツール。
アサーションは一定の条件の場合にのみ出力するコードを埋め込んで確認する。条件に合致したかを確認できる。


7時限
マルチメディア検定対策

過去問のプリントが配られ、それを解きました。トップレベルドメインや、FQDN、キャッシュ、アカウント、IPアドレスなどが問われる内容でした。

この記事が気に入ったらサポートをしてみませんか?