SIGMA-SE Tech Blog

SIGMA-SE Tech Blog

応用情報技術 - 基礎覚書き:ソフトウェア(その他アプリケーション)

目的

この記事では、応用情報技術者試験の出題分野であるソフトウェア(その他アプリケーション)に関する覚書きを列挙する。

※ ソフトウェアは、OSミドルウェアその他アプリケーションに大別される。
(OS, ミドルウェアについては、前の記事で記載)

ファイルシステム

ファイルシステムとは、記憶装置に保存されたデータをファイルとしてディレクトリ管理する仕組みのこと。

最上位ディレクトリをルートディレクトリ、ルートディレクトリからファイルまでのフルパスを絶対パス、任意のディレクトリからファイルまでを相対的に表すパスを相対パスという。

プログラミングツール

開発ツールと呼ばれるものに工程の一部を自動化(E-R図からDBを作成するなど)するCASE(Computer Aided Software Engineering)ツールや、開発作業全体的に支援するIDE(Integrated Development Environment:統合開発環境)がある。

  • IDEの代表例
    Eclipse、Visual Studio、Visual Studio Code、Xcodeなど。

以下、IDEが搭載するプログラミングツールの代表的な機能。

  • トレーサ
    プログラムの実行経路(実行履歴)を出力する機能。

  • インスペクタ
    プログラム実行時、変数やオブジェクトなどが持つデータ内容を表示する機能。

  • エディタ
    効率的にコーディングできるようプログラムコードを見やすく、編集しやすくしたエディタ機能。

  • リポジトリ
    開発の成果物を一元管理するデータベース。バージョン管理により、差分の確認や最新状態の戻しなど容易に操作できる。
    リポジトリの代表例:Git、SVN(Subversion)、VSS(Visual SourceSafe)など。

  • アサーションチェッカー
    プログラム処理の途中にアサーション(想定通り実行されれば、論理的に成立する条件)を登録して、期待通りであるかチェックする機能。

  • エミュレータ
    プログラム搭載されるコンピュータやハードウェアの動作を再現する機能。

  • シミュレータ
    仮想的な状況を模擬的に再現し、シミュレーションできる機能。

  • スナップショット
    任意のストレージ状態をそのまま記録する機能で復元も可能。

  • プロファイラ
    プログラム性能の改善を目的とした監視項目(モジュール単位の実行回数や実行時間など)を計測および解析する機能。

言語処理ツール

言語処理ツールとは、プログラム言語を実行する際に必要となる機能を指し、次の種類がある。

  • コンパイラ
    プログラム言語に応じたソースコードを実行可能な機械語に変換する機能。

  • インタプリタ
    ソースコードを命令単位の実行順に解析し、実行可能な状態に変換しながら命令単位でプログラムを実行する機能。

  • クロスコンパイラ
    開発環境とは別の環境に向けて実行ファイルを作成する機能。
    ※ 組込み型システムでは、実機環境へ向けてコンパイルし、実行ファイルを組込むことが多い。

  • アセンブラ
    アセンブリ言語を機械語による表現へ変換する機能。

  • ジェネレータ
    指定した条件に基づいてデータやソースコードを自動的生成する機能。

コンパイラ最適化

コンパイル時に実行時間、メモリ使用量、消費電力等を最小化し、効率化した実行ファイルを作成する機能。

次の最適化技法がある。

  • ループ最適化
    ループ処理で条件が変化しないなどのループ不変式をループの前に移動するなど、ループ内の処理量を減らす最適化のこと。

  • 局所最適化
    局所参照性(メモリ内の偏った参照)を増大させ、アドレスへのアクセスを効率化する最適化のこと。

  • プロシージャ間最適化
    プログラム全体を対象とし、プロシージャの境界やファイルの境界を越えた最適化のこと。 代表的な最適化として、関数の呼出し元に関数内の処理を展開し、関数への制御転送を無くすインライン展開がある。

オープンソースソフトウェア(OSS)

オープンソースソフトウェア(Open Source Software)とは、作成者がソースコードを無償で公開し、利用や改変、再配布が自由に許可されているソフトウェアのことで、次の定義となっている。

  • OSSの定義(オープンソース推進団体OSIのオープンソースライセンス条件)
    1. 自由に再配布できること。
    2. ソースコードを公開すること。
    3. 派生物の作成と同じライセンスで頒布許可すること。
    4. 基本ソースとパッチ(差分情報)という形で頒布することを義務づけても良い。
    5. 個人やグループに対する差別をしないこと。
    6. 利用する分野に対する差別をしないこと。
    7. ライセンス分配に追加ライセンスを必要としないこと。
    8. 特定製品でのみ有効なライセンスにしないこと。
    9. 他のソフトウェアを制限するライセンスにしないこと。
    10. ライセンスは、技術的な中立を保つこと。
      ※ 詳細:https://opensource.org/osd

以下、代表的なOSS。

  • Webサーバー構築
    Nginx、Apache HTTP Server、H2O、LiteSpeed Web Server など。

  • APサーバー構築
    Apache Tomcat、GlassFish、Payara、Jetty など。

  • ログ管理構築
    Apache Log4j、Fluentd など。

  • メールサーバー構築
    Postfix、QMail、SendMail など。

  • DNSサーバー構築
    BIND、PowerDNS、Unbound など。

  • DBサーバー構築
    PostgreSQL、MySQL、MariaDB、MongoDB など。

  • ORマッピング構築
    MyBatis、Hibernate など。

  • OS構築
    CentOS、Ubuntu、Fedora、FreeBSD など。

  • プログラム言語
    Java、PHP、Ruby、Perl、Go、Jackson など。

  • クラウド構築
    OpenStack、OpenShift、Docker、runC など。

  • ディープラーニングライブラリ
    TensorFlow、scikit-learn、PyTorch、Keras、PyCaret など。

OSSの信頼性

OSSを利用する場合に重要となる信頼性について、次の項目で評価する。

  • ソフトウェア自体の信頼性
  • メンテナンスの容易さ
  • 法的問題の有無
  • 開発コミュニケーションのサポート体制

※ IPA(独立行政法人情報処理推進機構)は、信頼性評価ツールを公開し、OSSの評価基準を提供している。

OSSのライセンス

OSSのライセンス形態は、次の種類があり、原作者が決めることができる。
※ 解説は概要レベルに留めているので注意。

  • コピーレフト
    著作権を保持したまま、著作物の利用・改変・再配布を認め、派生(拡張)した著作物についても一切の制限をかけてはいけないというライセンス形
    ※ コピーレフト性が強いものとして WordPress がある。

  • デュアルライセンス
    2種類以上のライセンス形態で配布する形式で利用者の条件に応じて適切なライセンスを選択することができる。
    ※ 商用ライセンスとオープンソースライセンスの組合わせなど。

  • GPL(General Public Licence)
    コピーレフトのライセンス形態に加え、他のソフトウェアライセンスを組込み、派生(拡張)した著作物についても利用・改変・再配布を認め、一切の制限をかけてはいけないというライセンス形態。
    ※ OSSだけでなくフリーソフトウェアなどでも多く採用されている。

  • BSD(Berkeley Software Distribution)
    無保証の明記と著作権と許諾の表示をする以外は、自由に利用・改変・再配布・販売を行っても良いというライセンス形態。

参考文献

  • 瀬戸 美月 (\(2020\)) 『徹底攻略 応用情報技術者教科書』株式会社インプレス


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp