キタミ式基本IT技術者④
システム開発から後処理まで。
〈システム開発〉
システム開発の流れは企画→ →要件定義→右開発→右運用→右補修と言う5段階のプロセスでシステムの一生は表される。
まず最近のプログラムの情報をシステム開発者に提供してもらう。次に提案依頼書を作成しシステムの内容や予算等の諸々の条件を提案依頼書を作って提出する。システム開発者は提案書を書きクライアント側が支払う費用や見積書をまとめて発注者に渡しそこで提案内容や見積もり内容を確認して発注するシステムが決まれば契約を行う。
システム開発手法はいくつかある。要件定義からシステム設計プログラミングテストと各工程を順番に進めていく①ウォーターフォールモデル。
開発初期の段階でプロトタイプを作りそれを利用者に確認してもらうことで、開発者側との認識のズレを防ぐ手法②プロトタイピングモデル。
システムを複数のサブシステムに分割してそれぞれのサブシステムごとに開発を進めていく手法③スパイラルモデル
開発作業の各家庭で行う振り返り作業のことをレビューと言う。レビューには種類がある。
①デザインレビュー②コードレビューである。
レビュー実施する手法にもいくつか種類がある。
開発者もしくは作成者が主体となって複数の関係者とプログラムや設計書のレビューを行う①ウォークスルー。
あらかじめ参加者の役割を決め、進行役として第三者であるモデレーターがレビュー責任者を務めてレビューを実施する手法である②インスペクション。
参加者全員が持ち回りでレビュー責任者を務めながらレビューを行う手法③ラウンドロビン。ラウンドロビンは開発者全体の参画意欲を高める効果がある。
コンピューター支援ソフトウェア工学であるCASEツールというものがある。
上流工程として基本計画から外部設計そして内部設計に至る。その後下流工程としてプログラム設計からプログラミング→テストと言う流れ。そして最後に運用保守。ちなみに開発に関する情報はリポジトリと呼ばれるデータベースで一元管理する
とにかく迅速なアプリケーション開発を行う手法がRAD。プロトタイプを作ってそれを評価するサイクルを繰り返すことで完成度を高めフェイズが無制限に繰り返されないように開発の期間を設けている。この開発の起源のことをTimeボックスと言う。
週単位で迅速に開発を行う手法の総称がアジャイル。1つの反復で1つの機能を開発し、反復終えた時点で機能追加されたソフトウェアをリリースしていく。
・XP
5つの価値と19の実践が定義されている。このうち開発のプラクティスとして定められているものが次の6つ。
→実装の前にテストを定めそのテストをパスするように実装を行う。テストは自動テストであることが望ましい。これをテスト駆動開発と言う。
→2人1組でプログラミングを行い、1人がコードを書き、もう1人がその人の検証役となり、随時違いの役割は縁ながら作業進めるペアプログラミング。
→完成したプログラムでも、ナイトコードを随時改善する。冗長の構造を改めるに止め、外部から見た動作は変更しない。これをリファクタリングと言う。
→改行コードの作成者に断りなく、チーム内の誰もが修正を行うことができる。その代わりにチーム全員がすべての行為先に渡しておくことをソースコードの共同所有と言う。
→単体テストを終えたプログラムはすぐに結合した結合テストを行うことを継続的インテグレーションと言う。
→今必要とされる昨日だけのシンプルな実装に届けることをYAGNI(You Aern't Going to Need it.)という。
--
既存ソフトウェアの動作を解析することで、プログラムの塩谷ソースコードを導き出すことをリバースエンジニアリングと言う。
これによって得られた仕様をもとに新しいソフトウェアを開発する手法をフォワードエンジニアリングと言う。
フォワードエンジニアリングによって元となるソフトウェア権利者の許可無くこれを行い新規ソフトウェアを開発販売すると知的財産権の侵害に当たる可能性があるため注意が必要。
公開されている複数のサービスを組み合わせることで新しいサービスを作り出す手法をマッシュアップと言う。ウェブサービス構築のためよく利用されている。
・E-R図
--
文字を打ち込むことで命令を伝えて処理をさせていることをキャラクターユーザインターフェース(CUI)。
マウスなどのポインティングデバイスを操作して命令を伝えるといったグラフィカルな操作方法をグラフィカルユーザインターフェース(GUI)という。
コード設計の注意点として社員が増えたり売り上げが増えたりした時のことを考えないと、その度に新しいコードを実装しなければいけなくなってしまったりする。最初から長いコードを使うと利便性が悪いこともある。
プログラムはモジュールに分けると分担作業ができたり、再利用が容易であったり修正が1 部で済むが、プログラム保守が難しくなることもあるので注意が必要。モジュール内でほかのモジュールに依存していたりすると、ほかのモジュールの書き換えが行われた時にほかのプログラムに異常が出てしまったりする。いろんな機能がぶら下がっていてわかりづらかったりなども。
プログラムを入力処理と変換処理と出力処理と言う3つのモジュールに分けて分割する方法をSTS分割方法という。
プログラムを処理単位で分割する方法をトランザクション分割法と言う。例えば給料を基本給の更新と手当の更新と控除の更新で、モジュールを3つ作るなど。
プログラム中の共通機能をモジュールとして分割する方法。共通モジュールを切り出すことで類似機能を重複して作る必要がなくなる。これを共通機能分割法と言う。
モジュールは独立性が高いほど強度が高く結合度がさがる。独立性が高いモジュールほと好ましいとされる。ただ欠乏度が高いプログラミングほど容易に制作できる。
各モジュールのテストは基本的に単体テスト→結合テスト→システムテストの順で行う。
モジュールの内部構造は意識せず入力に対して適切な出力が使用通りに得られるかを検証することをブラックボックステストという。
逆に内部酵素が正しく作られているかを検証して行うテストをホワイトボックステストという。
ブラックボックステストではデータ範囲を種類ごとのグループに分けそれぞれから代表的な体を抜き出してテストデータを用いる①同値分割と、グループの境目部分を重点的にチェックする②限界値分析を基準としてテストデータを作成する。
ホワイトボックステストではどこまでのテストパターンを網羅するかを定めた上で4種類のテストケースを選択する。
すべての命令を最低1階は通すようにする①命令網羅。
すべての分岐を最低1階は通すようにする②判定条件網羅。
ここの条件が寝ときの値を最低1階は満たすようにする③条件網羅
すべての組み合わせを網羅する④複数条件網羅
結合テストでモジュール間のインターフェースを確認する方法にはトップダウンテストとボトムアップテスト、2つを使ったテスト、全てのモジュールを一気につなげて行うビックバンテストがある。
プログラムを修正したときに、その修正内容がこれまで正常に動作していた範囲に悪影響与えていないかを確認するためのテストをリグレッションテストと言う。リグレッションテストではバグ管理図と呼ばれる曲線になるまで修正を行う手法が一般的。大体最初にバグが見つかりその後爆発的にバグが見つかる、そこから緩やかにバグが減っていき、ほとんどバグが見つからなくなると言う曲線の事。
〈システム周りの各種マネジメント〉
どのようなシステムをいつまでにどれぐらいの予算で作るのか進歩状況は大丈夫か、品質は大丈夫か?といった管理を行う。仕事や作業を分解して、体系化することがまず初めに必要。有名なものにPMBOKがある。
開発コストの見積りについては、ソースコードの行数により開発コストを算出する①プログラムステップ法と、表示画面や印刷する帳票、出力ファイルなど、利用者から見た機能に着目して、その個数や難易度から開発コストを算出する手法②ファンクションポイント法がある。ファンクションポイント法では利用者にとって見える部分が費用化されるため、理解しやすいという特徴がある。
ガントチャートスケジュール管理。
アローダイヤグラム

何にどれぐらい時間がかかってどんな工程が必要でどんな関係性を持っているのか1発でわかる。
--
資源を追加投入したコストの増大を最小限に抑えながらスケジュールの所要時間を短縮する技法としてクラッシングがある。
通常は順番に実施されるアクティビティーやフェーズを並行して遂行するスケジュール短縮技法であるファストトラッキングがある。例えば設計工程があるとしたら設計工程を3分割し③の設計を行っている間に製造を始めてしまうなどだ。
クライアントとはどのような内容のサービスを、どういった品質で提供するかを事前に取り決めておくかが重要。
トラブルが起きた場合には〇〇時間以内に返答するであったり、問い合わせに対する回答待ち時間や障害発生時の復旧時間、システムの稼働率、システムの応答時間等だ。
ITサービスデスクの管理として、ユーザの拠点内、もしくは物理的に近い場所に設けられたサービスデスクを①ローカルサービスデスク。1カ所に窓口を集約させたサービスデスクのことを②中央サービスデスク。インターネットなどの通信技術を利用して実際は各地に分散しているスタッフを擬似的に1カ所の巨人で対応してるように見せるサービスデスクを③バーチャルサービスデスクという。
長期的な視点でITサービスの計画と改善をはからなければ成長に応じて新しくプログラムを作ったり初期に作ったプログラムの使い勝手が悪すぎたりすることが多いので注意が必要。
無停電電源装置(UPS)は早智乃国有するバッテリに蓄電しておいて停電等で電力が飛ばされた場合に接続機器に対して一定時間電力を供給し作業内容を保存してシャットダウンさせる時間を稼ぐことができる。
システム監査と言う職業がありITサービスにおいて不正を行っていないか、職業倫理と誠実さに基づいているか、適切な教育と実務経験を通じて専門職としての知識及び技能を保持しているかなどを検査する機関がある。システム監査はログの追跡なども行う。その後保障意見と助言意見の2種類を行い、今後のシステム設計に役立つアドバイスをもらえる。
〈プログラムの作り方〉
・C言語は、OSやアプリケーションなど広範囲で用いられている言語。もともとUnixとOSの移植性を高める目的で作られた言語なので、かなりハードウェアに近いレベルの記述まで出きてしまう何でもありの柔軟性を持っている。
・ベーシックは初心者向けとして古くから使われている言語。書いたその場ですぐ実行して確かめることができる。
・Cobolは事務処理用に古くから使われていた言語。現在ではほぼこの言語を使う事はなくなったが、大型汎用コンピューターで古くから使われているシステムは過去に作ったCobolのシステムが今でも多く稼働しているためシステムの改修等ではまだまだ出番が多い言語。
・Javaはインターネットのウェブサイトや、ネットワークを利用した大規模システムなので使われることが多い言語。特定趣味依存しないことを目標とした言語でもあるため、Java仮想マシンと言う実行環境を用いることで、OSやコンピューターの種類といった環境に依存することなく、作成したプログラムを動かせる。
--
プログラミング言語による読み込み方法はインタプリタ方式とコンパイラ方式がある。インタプリタ方式は動作を確認しながら作っていくことが簡単にできるが、コンパイラ方式ではソースコードの内容を最初に全て翻訳して機械後のプログラムを作成するため、効率の良い翻訳結果を得ることができるが、作成途中で確認のために動かしてみるといった手法は使えない。
自前のモジュール群とあらかじめ用意されている関数や共通モジュールを全てくっつけることをリンクと言う。このリンクを行う連携編集プログラムのことをリンカと呼ぶ。あらかじめリンクしておく手法を静的リンキングと呼び、プログラム実行時に共有ライブラリやシステムライブラリをロードしてリンクする手法を動的リンキングという。
ロードモジュールを主記憶装置に読み込ませる作業をロードと呼ぶ。これを担当するプログラムをローダと呼ぶ。
・構造化プログラミング
情報分岐などによって複雑化したプログラミング構造を簡潔にわかりやすく設計するために生まれた手法が構造化プログラミング。これらは3種類ある。
上から順に処理を実行する①順次構造
何らかの条件によって分泌させいずれかの処理を実行する②選択構造。
ある条件が満たされるまで一定の処理を繰り返し③繰り返し構想がある。
--
プログラミングでよく出てくる変数は、数字を入れ物として使う箱だと思うと良い。
--
データとデータをつなぐときに次のデータへの番号を右側に振ったデータのことを単方向リスト。
次のデータの番号と前のデータの番号を左右に持つリストのことを双方向リスト。
次のデータへの番号を持つリストを基準とするが、最後尾データだけは先頭データの番号も記述してある循環リストがある。
入ってきたデータを取り出すときに最初に入った番号から取り出せる方式のことをキューと呼ぶ。
スタックはキューの逆で、最後に格納したデータから順に処理を行う。

--
・線形探索法
・2分探索法
・ハッシュ法
・バブルソート
・選択ソート
・挿入ソート
・シェルソート
・クイックソート
・ヒープソート
・O記法(Order記法)
・オブジェクトとはデータとそれに対するメソッド(手続き)を1つにまとめた概念のことを指す。
・カプセル化とは、オブジェクトにおいてそれぞれのモジュールのコードを見えないようにしてデータとメソッド(手続き)をひとまとめにすること。オブジェクトとはカプセルの集合でできている。カプセル化しているとオブジェクトの実装方法に修正を加えてもその影響を最小限にとどめることができる。
・汎用特化クラス(クラス)
特化したものが下位クラスに来る。クルマの下に乗用車クラスやバスクラスなどがくる。
・集約分解クラス
分解したものが下位クラスに来る。クルマの下にタイヤやハンドルなどがくる。
・多様性(ポリモーフィズム)
同じメッセージを複数のオブジェクトに送ると、それぞれが独立した固有の処理を行うこと。
・UMLダイアグラム
(Unified Modeling Languageの略称)
コミュニケーションを円滑にするために用いる図。構造図と振る舞い図に分かれる。
統一モデリング言語と呼ばれ、ソフトウェア工学で用いられる、汎用的かつ開発方面に特化させたモデリング言語である。
システム設計を視覚的に図式化しての標準化されたモデリング手法の提供を目的にしている。
オブジェクト指向分野でよく用いられている。
数が多すぎるので必要になった時に調べればよし。
〈システム構成と故障対策〉
クライアントサーバシステムの中で特にサーバー側への依存度を高くしたのがシンクライアント。クライアントにはHDDすら積んでいない。
逆に完全な分散処理型システムとしてはピアツーピアがある。これは一元的に管理するサーバーが存在しない。
①ユーザインターフェース部分と②業務を実現するための処理と③データ管理機能の役割の3つを果たすクライアントサーバシステムのことを3層クライアントサーバシステムと呼ぶ。
通常のクライアントサーバシステムのことを2層クライアントサーバシステムと呼ぶが、ビジネスロジックに変更があるとすべてのクライアントに修正が必要となったり、書類に必要なデータがいちいちネットワーク上を流れて帯域を圧迫するといったデメリットがある。3層クライアントサーバシステムはそのデメリットが解消されている。ネットショッピングなどウェブを用いるシステムと親和性が高く、その構築に多く用いられる構成。
システムの要求に対して、即座に処理を行い結果が反映されるものをオンライントランザクション処理といい、一定期間ごとに処理をまとめて実行することをバッチ処理と言う。
・スループット
単位時間あたりに処理できる仕事量を表す。1秒あたりに何件のデータが処理できますよみたいな。
・レスポンスタイム
コンピュータに処理を依頼し終えてから実際に何か応答が返ってくるまでの時間を指す。
・ターンアラウンドタイム
実際に依頼を開始してから応答が終了するまでの時間を指す。

--
二組のシステムが同じ処理を行いながら処理結果をお互いに突き合わせて誤作動してないか監視するシステムをデュアルシステムと言う。これはかなり費用がかかる。
二組のシステムを用意し、片方は普通に稼働させ、もう片方は待機状態に据えてバッチ処理を行わせる。このシステムをデュプレックスシステムと言う。
デュプレックスシステムにはホットスタンバイとコールドスタンバイがある。ホットスタンバイはいざと言う時瞬時に切り替えられる待機状況。コールドスタンバイは切り替えに時間がかかるがコストを減らせる。
システムの信頼性を測る指標として平均故障間隔と平均修理時間、システム稼働率、セキュリティー、保全性がある。保全性は誤作動がなく、データの完全性が保たれていることを指しデータが破壊されたりすると保全性が下がったということになる。
故障しても耐えると言う考え方で、故障が発生した場合には安全性を確保する方向で壊れるよう仕向けておく①フェールセーフ、故障が発生した場合にシステムの一部機能を切り離すなどして動作の接続を図る方法②フェールソフト、意図しない使い方をしても故障しないようにする③フールプルーフがある
フールプルーフの例としては、電子レンジはどうしないと加熱できないとか、±の向きが合っていないと入らない電池ボックスなどを指す。
故障そのものの発生を防ぐと言う考え方にはフォールトアボイダンスがある。
・バスタブ曲線
故障率曲線のこと。
バックアップについての注意点として①定期的にバックアップを行うこと②バックアップする媒体を分けること③業務処理中にバックアップしない事が挙げられる。
バックアップには種類があり、一度にすべてのバックアップを取る①フルバックアップ、前回のフルバックアップ以降に作成変更されたファイルだけをバックアップする②差分バックアップファイル、バックアップの種類に関係なく、前回のバックアップ以降に作成変更されたファイルだけをバックアップする③増分バックアップがある。増分バックアップは障害発生時には元の状態に復元するために直近となるフルバックアップ以降の増分バックアップ全てを使わなければいけない。差分バックアップの場合はフルバックアップと差分バックアップの2つを使えばバックアップが完了する。