思い立ったが吉日

なんとなく,突然の思いつきで,
風呂桶とイスを新しいモノに買い換えてみました!

風呂おけです

どこにでもある品ですが,なかなか快適です。

————— キリトリセン 8X —————

なんとか第 6 章を読み終え,章末問題にチャレンジ!

範囲が広いうえに,覚えることも多いので,
10 問中 3 問も間違えちゃいました…(涙)

以下,間違った問題たち。

[問題1]
ソフトウェアの要求分析に関する記述のうち,事象応答分析の説明として適切なものはどれか。

 (ア) 外界の事象に応じて,時間の流れとともにシステムが応答するという
    一連の動作を分析するための方法である
 (イ) システムの改善案を検討する場合などに,ある事象について思いつく
    様々な着想を視覚的なイメージ図にまとめ,参加者がこの図をもとに
    別の視点に立った新しい発想を生み出すことを支援するための方法である
 (ウ) システムの機能を入力データおよび出力データの両面から洗い出すための
    分析方法であり,4 つの要素(データ,情報,機能,条件)の相互関係を定義する
 (エ) システムの対象をモデル化する際に,実体と関連によって,その構造を
    分析するための方法である

[問題2]
データ中心アプローチを特徴づける言葉として,最も適切なものはどれか。

 (ア) カプセル化 (イ) シナリオ化 (ウ) 集約化 (エ) モジュール化

問題の解答は,以下のとおり。

[問題1] (ア)
事象応答分析とは,外部からの事象とその事象に対する応答の時間的な関係を
すべて抽出し,制御の流れを分析することです。
一般に,制御フロー図,ペトリネット図,状態遷移図が利用されます。
なお,(イ) は KJ 法,(ウ) は機能分析,(エ) はE – R ダイアグラム(E – R図)などによる
構造分析の説明です。

[問題2] (ア)
データとデータのライフサイクルを扱うプロセスは密接な関連を
もつものとして考え,データ構造を単に静的(固定的)なものとしてのみ
捉えるのではなく,プロセスをデータの固有の手続き(属性)として,
データ側に隠ぺいしようとするのがデータ中心アプローチです。これは,
オブジェクト指向におけるカプセル化と同じ概念です。

…章末問題で間違った問題の残り 1 つは,
計算問題なので,明日載せようと思います!

comments

サマーコース開講!

夏休み短期集中講座ということで,今日からいよいよ,
サマーコースの第 1 クール(23 日 ~ 29 日)がスタートしました!

今年は初の試みで,学生の皆さんからいただいたアンケートを参考に
開講科目を決定しているので,
昔はなかった科目なんかもあって,例年よりもおもしろそうです。

第 2 クール以降はまだ申し込みがいけるみたいなので,
良かったら今からでも申し込んでみてくださいね!
(ちなみに,学外の方向けのサマーコースもあります!)

そんな私も,第 2 クールに開講予定なので,
今日からまったり準備開始。

久しぶりの授業(前期以来)になるので,ちょっと緊張です(汗)

————— キリトリセン 8X —————

そんなこんなでなかなか進まない第 6 章。

焦らずマイペースをモットー(むしろ,自分にそう言い聞かせてます)に,
続・自分メモということで!

★ モジュール分割技法

 ・STS 分割
  → プログラムを入力処理機能(源泉:Source),変換処理機能(変換:Transform),
    出力処理機能(吸収:Sink)の 3 つのモジュールに分割します。
    また,「入力とはいえない点まで抽象化された地点」である最大抽象入力点と
    「はじめての出力データといえる形を表す点」である最大抽象出力点で
    分割を行います。

 ・TR 分割(トランザクション分割)
  → 入力トランザクションの種類により実行する処理が異なる場合に有効な分割技法です。
    トランザクションを入力するモジュール,トランザクションを属性ごとに
    各モジュールに振り分けるモジュール,トランザクションごとの処理モジュールの
    3 つに分割します。

 ・共通機能分割
  → STS 分割,TR 分割などで分割されたモジュールの中に,共通する機能をもった
    モジュールがある場合,それを共通モジュールとして独立させる方法です。

 ・ジャクソン法
  → 出力データ構造に基づいて分割を進める構造化設計技法です。
    データ構造は JSP 木を用い,「基本」,「連続」,「繰返し」,「選択」の
    4 つの要素を組み合わせた階層的木構造で表現します。

 ・ワーニエ法
  → 集合論に基づく構造化設計技法です。
    入力データ構造を元に「いつ,どこで,何回」という考え方でプログラム全体を
    ブレイクダウンし,展開していきます。
    なお,プログラムの基本論理構造は,「スタート部」,「処理部」,「エンド部」の
    部分集合から構成されます。

ちなみに,赤字がデータの流れに着目した分割技法で,
青字がデータの構造に着目した分割技法です!

うーん。

正直,覚えられない!(汗)

comments

HAPPY BIRTHDAY !

今日は,普段からとても仲良くしてもらっている,
ある先生のお誕生日ということで,学生さんと一緒にお祝いをしました!

誕生日ケーキです

久しぶりに見た,ろうそくの立っているホールケーキ(= バースディケーキ)に,
ちょっとテンション高めです!

…とにもかくにも,お誕生日おめでとう!!

————— キリトリセン 8X —————

さらにさらに,しつこいくらいに第 6 章の自分メモ!

★ ソフトウェア開発モデル

 ・ウォータフォールモデル
  → 要求分析,設計(外部設計・内部設計・プログラム設計),プログラミング,
    テスト,運用・保守という工程順に,ちょうど滝(ウォータフォール)が
    上流から下流へと向かって流れるように開発を進める手法です。
    比較的大規模なシステム開発に向いています。

 ・プロトタイプモデル
  → 開発工程の早い段階で試作品を作成して,それらをユーザに試用してもらい,
    ユーザの意見を反映させながら仕様を確定していく開発手法です。
    開発の早期段階で,要求仕様のあいまいさが取り除かれるという利点があります。

 ・スパイラルモデル
  → ウォータフォールモデルとプロトタイプモデルの長所を取り入れた
    成長型モデルです。独立性の高い部分(機能)ごとに,開発プロセスを
    渦巻き状態に繰り返しながら,開発範囲を徐々に拡大していき,
    システムの完成度を高めていきます。

 ・成長モデル
  → システムの「核」となる部分を早期に開発し,ユーザからの要求や変更が
    あるたびに開発を繰り返すという方法で,同じ工程をサイクリックに
    何度も繰り返しながら,完成へと近づけていきます。

 ・RAD(Rapid Application Development)
  → 短期間(通常 2,3 ヶ月)での開発を重視した手法です。
    ライフサイクルの無制限な繰返しを防ぐため,「タイムボックス」と呼ばれる
    一定の開発期間を設定し,これによって短時間での開発を実現します。

 ・ラウンドトリップ
  → オブジェクト指向開発において,分析と設計,プログラミングを
    何度か行き来しながら,トライアンドエラーでシステムを完成させていく
    開発手法です。

 ・クリーンルームモデル
  → ウォータフォールモデルを基本的な枠組みとして,形式的記述法を採用し,
    正当性の検証を重視することにより,エラーの混入を防止しようとする
    開発手法です。

今さらですが,よくごっちゃになっていたスパイラルモデルとラウンドトリップ。

オブジェクト指向開発のスパイラルモデル = ラウンドトリップ

って感じで,ベースとなる言語?(環境?)が違うだけで,
似たようなものだったんですねー!

comments

カフェで勉強してます

今日は気分を変えて,いつもとは違うカフェで勉強をしてみました。
(画像は,注文したアイスミルクティーと自家製フロマージュです)

アイスミルクティーとフロマージュです

ちなみに,フロマージュって何なんだろうと思って調べてみたら,
フランス語で「チーズ」のことらしいです。

————— キリトリセン 8X —————

さてさて。

テキストの第 6 章ということで,引き続き,自分メモです!

★ 静的解析ツール

 ・構文チェッカ
  → ソースプログラムが,言語で定めれらた構文に従って記述されているかを
    チェックします。

 ・コードオーディタ
  → ソフトウェア開発において独自に定めたプログラミング規約(コーディング規約)に
    対する違反を検出します。

 ・モジュールインタフェースチェックツール
  → モジュール間のインタフェース(例:実引数と仮引数の個数)の不一致など
    を検出します。

★ 動的解析ツール

 ・トレーサ(追跡プログラム)
  → 命令単位,あるいは,指定した範囲でプログラムを実行し,実行直後の
    レジスタの内容やメモリの内容など,必要な情報が逐次得られます。
    (プログラム中の誤り箇所を特定できないときに効果アリ)

 ・インスペクタ
  → 構造体のようなデータ構造の内容を容易に確認できるように,見やすい形で
    表示します。

 ・スナップショット(動的ダンプ)
  → プログラムの特定の命令文が実行されるごとに,指定されたメモリやレジスタの内容を
    出力します。なお,プログラムの異常終了時にメモリやレジスタの内容を出力するものを
    メモリダンプ(静的ダンプ)といいます。

 ・ガバレージモニタ
  → プログラム全体の経路のうち,テストでどの程度(%)カバーしたかという網羅率を
    測定します。

 ・アサーションチェッカ
  → プログラムの正当性を検証するために挿入されたアサーション(変数間の論理的に
    成立すべき条件)が実行時に成立しているかどうかを検査します。

★ テスト環境設定ツール

 ・テストベッドツール
  → スタブやドライバの生成など,プログラムテストの動作環境を整備します。

 ・テスト自動生成ツール
  → テストデータのデータ構造を与えることにより,自動的にテストデータを生成します。

comments

プロフィール(β版)始めました

書こう書こうと思って,ずっと放置していたプロフィールをようやく載っけました。
たいした内容ではありませんが,良かったら読んでやってください。
(左の「ひじきと□の馴れ初め」をクリックすると,続きが読めます)

さてさて,ソフトウェア開発技術者試験の進捗状況。

範囲の広い第 6 章,なかなか読みきれそうにないですが,
とりあえず,自分用のメモをアップしておきます。

 ・手続き型プログラム言語
  → 問題解決のための処理手順(アルゴリズム)を,1 文(命令)ずつ
    順を追って記述します。
    (例)C 言語,COBOL,Fortran,Pascal,PL/1 など

 ・関数型プログラム言語
  → 関数の定義とその呼び出しによってプログラムを記述します。
    再帰処理に向いていて,関数定義の中ですでに定義した関数や
    自分自身を使用した定義ができる,という特徴があります。
    (例)Lisp,APL など

 ・論理型プログラム言語
  → 述語論理を基礎とした論理式により記述されるプログラム言語です。
    「~であれば,…である」という推論のような記号処理を必要とする問題に
    適しています。
    (例)Prolog(人工知能の研究開発で使用されています) など

 ・オブジェクト指向型プログラム言語
  → データ(属性)とそのデータに対する手続き(メソッド)を 1 つにまとめた,
    「オブジェクト」と呼ばれるものが基本となるプログラム言語です。
    (例)C++,Java,Smalltalk など
   

手続き型プログラム言語とオブジェクト指向型言語には触れたことがあるのですが,
それ以外の言語はまったく知らないので,google で調べてみました。
(1 番下に,リンクが貼ってあります)

ついでに,Smalltalk の入門ページも載っけてみましたが,
この言語って,インタプリタ型(命令を 1 文ずつ解釈するタイプ)なんですねー!

うーん。

プログラミングって,ホント奥が深い!

————— キリトリセン 8X —————

★ Lisp 入門
http://wisdom.sakura.ne.jp/programming/lisp/index.html

★ Prolog 入門(注・PDF ファイルです)
http://bach.istc.kobe-u.ac.jp/lect/ps/prolog.pdf

★ Smalltalk 入門
http://www.oklab.org/program/gnu_smalltalk.html

comments

ご褒美

ここ数年の話なのですが,何かを成し遂げたり,何かの節目だったりすると,
頑張った自分に対して,何かしらのご褒美を用意するようにしています。

今回は,半年間授業を頑張った自分へのご褒美として,
こんなものを買っちゃいました!

ヘルスメーターです

ヘルスメーターです!

むちゃくちゃ安かった上に,本体は B5 サイズと,その小柄なボディに惚れて即購入!

体脂肪を測ったりとか,高度な機能はまったくありませんが,
場所は取らないし,一番知りたい体重は教えてくれるし,
個人的にはなかなか気に入ってます!

とりあえず,目指すは現状維持!!(欲を言えば,2 kg 減)

————— キリトリセン 8X —————

ご褒美に浮かれてばかりじゃいられない,ってことで,
第 2 章の範囲で苦手な確率の問題を紹介ー!

[問題]
キー値の分布が 1 ~ 1,000,000 の範囲で一様にランダムであるデータ 5 個を,大きさ 10 のハッシュ表に登録する場合,衝突の起こる確率はおよそいくらか。ここで,ハッシュ値はキー値をハッシュ表の大きさで割った余りを用いる。

 (ア) 0.2   (イ) 0.5   (ウ) 0.7   (エ) 0.9

この問題は,まず,衝突の起こらない確率について考え,
そこから以下の式を元に,衝突の起こる確率を求めて,問題を解いていきます。

    1 – 衝突の起こらない確率 = 衝突の起こる確率 …(a)

ちなみに,ハッシュ値を求める場合,
必ず,衝突が起こるか起こらないかのどちらかの場合になるため,

   衝突が起こる場合 + 衝突の起こらない場合 = すべての場合(= 1)

が成り立つことから,(a) の式を導くことができます。

なお,問題文の赤色の部分から,ハッシュ表のハッシュ値は,
キー値をハッシュ表の大きさ 10 で割った余りなので,

   キー値 / 10 の 余り = 0 ~ 9 の 10 個の値のいずれか

ということが分かります。

続いて,5 つのデータにおける,衝突の起こらない確率ですが,
これは,それぞれの場合についての可能性を順番に考えていけば OK です。

 ・ 最初(1 つ目)のデータの場合
  → まだ,ハッシュ表にはデータが 1 つも格納されていないので,
    最初のデータのハッシュ値は 0 ~ 9 のどの値でも構いません。
    よって,衝突が起こらない可能性は 1(10 分 の10)となります。

 ・ 2 つ目のデータの場合
  → ハッシュ表には,すでに 1 つのデータが格納されているので,
    2 つ目のデータのハッシュ値は,最初のデータのハッシュ値以外の
    9 個の値のうちのいずれか,でなければなりません。
    つまり,衝突が起こらない可能性は 0.9(10 分の 9)となります。

 ・ 3 つ目のデータの場合
  → 2 つ目のデータと同様に,すでに 2 つのデータがハッシュ表に格納されているので,
    3 つ目のデータのハッシュ値は,8 個の値のうちのいずれか,になります。
    したがって,衝突が起こらない可能性は 0.8(10 分の 8)です。

 ・ 4 つ目のデータ,5 つ目のデータの場合
  → 2 つめ以降にならって,それぞれの衝突の起こらない可能性を考えると,
    4 つ目のデータの場合は 0.7(10 分の 7),
    5 つ目のデータの場合は 0.6(10 分の 6)となります。

以上の可能性は,同時には起こらないので,

   1 × 0.9 × 0.8 × 0.7 × 0.6 = 0.3024(衝突の起こらない確率)

となります。

これを (a) の式に当てはめると,1 – 0.3024 ≒ 0.7 となり,
正解は (ウ) であることが分かります。

comments

夏休み最終日

楽しい楽しい夏休みもあっという間に最終日。

意地でも,夏休み中に第 2 章を終わらせようと,
最終日にもかかわらず,問題集を必死でやり切りました。

気になる結果はというと…,ものの見事に惨敗でした(涙)

やっぱり木構造とか,確率の問題が苦手な模様。
あとは,何回やっても間違える流れ図の問題もあったり…。

内容が濃い第 2 章なだけに,立ちはだかる幾多の壁って感じです。

とりあえず,木構造の巡回法に関する,自分メモだけアップして,
京都に戻りたいと思います!

★ 2 分探索木の巡回法

木構造のサンプル画像です

 ・ 幅優先探索法(幅優先順)
  → 分岐が多くなるように根に近い接点から順に探索する方法
    (例)15 → 8 → 18 → 2 → 10 → 20

 ・ 深さ優先探索法(深さ優先順)
  → できるだけ分岐せず,できるだけ深く探索する方法
    先行順,中間順,後行順の 3 つの巡回順があります。

    <先行順:節 → 左部分木 → 右部分木>
   (例)15 → 8 → 2 → 10 → 18 → 20

   <中間順:左部分木 → 節 → 右部分木>
   (例)2 → 8 → 10 → 15 → 18 → 20

   <後行順:左部分木 → 右部分木 → 節>
   (例)2 → 10 → 8 → 20 → 18 → 15

comments

夏休み 5 日目

地元の画像です

こんにちは!

こんな田んぼしかない田舎が故郷のひじきです。
(この画像は,帰りの電車の窓から撮影しました)

無事に,第 2 章のテキストを読み終えたので,章末問題にチャレンジしたわけですが,
昨日の自分メモが絡んだ問題がかなりあったおかげで,そこそこの出来でした!

間違ってしまった…というわけではないのですが,
なんとなくお気に入りなので,この問題を紹介しておきます(笑)

[問題]
A,B,C の順序で入力されるデータがある。各データについてスタックへの挿入と取出しを 1 回ずつ任意のタイミングで行うことができる場合,データの出力順序は何通りあるか。

  (ア) 3    (イ) 4    (ウ) 5    (エ) 6  

この問題の解き方は,非常に単純に,
実際にすべての場合について考えていけば良いのですが,
その際に注意しなければいけないのは,

  「スタックからデータを取り出す(pop)には,
   スタック内にデータが残っていないといけない」

という点についてです。

このことから,まずはスタックにデータを入力(push)しなければならないので,
最初の操作として,pop が来ることはない,というのが分かります。

これらをふまえて,すべての場合について考えてみると,
以下の 5 通りになります。

 (1) push(A) — pop(A) — push(B) — pop(B) — push(C) — pop(C)
 
  → 取り出された順番は,A・B・C の順。

 (2) push(A) — push(B) — pop(B) — push(C) — pop(C) — pop(A)

  → 取り出された順番は,B・C・A の順。

 (3) push(A) — pop(A) — push(B) — push(C) — pop(C) — pop(B)

  → 取り出された順番は,A・C・B の順。

 (4) push(A) — push(B) — pop(B) — pop(A) — push(C) — pop(C)

  → 取り出された順番は,B・A・C の順。

 (5) push(A) — push(B) — push(C) — pop(C) — pop(B) — pop(A)

  → 取り出された順番は,C・B・A の順。

したがって,正解は (ウ) です。

ちなみに,昨年もこの問題にチャレンジしたことがあり,
そのときは,各データに対して,push と pop を 1 回ずつ行えるのではなく,
それぞれの操作が全体で 1 回ずつしか行えないんだと勘違いして,
「そんなの,A を push して pop したら終わりじゃん」と馬鹿なことを考えてたのを
今でも覚えています。

…そういう意味では,私のおバカな脳みそもちょっとは成長したのかもしれません。

comments

夏休み 4 日目

暑さにやられて半分とけかけつつも,
お盆休み中に第 2 章を終わらせたい…という目標を達成すべく,
頑張ってテキストを読み終えました!

とりあえず,知識の整理を行うためにも,
自分用にいろいろメモっときます。

探索法の表です

まだまだメモは続くよー!

comments

夏休み 4 日目(メモその3)

これが最後のメモ!

ソートの表です
comments