システム監査技術者試験を振り返る

 令和5年度秋のシステム監査技術者試験の振り返りです。あまり手応えがなかったこともあって受験時に記事にしていなかったのですが、確認したら幸いにも合格していました。学習中のメモなども結構残っていたので、それらを踏まえて詳細を報告します。

試験結果

 午前Ⅰ 免除
 午前Ⅱ 88.00点
 午後Ⅰ 71点(問2,3)
 午後Ⅱ A(問2)

 午前Ⅱは2ミス程度かと思いました。結果もほぼその通りでした。
 午後Ⅰも手応え相応といったところです。午後Ⅱの出来がちょっと厳しかったので正直諦めていたものの、なんとか踏みとどまって合格となりました。

受験の経緯

 応用情報を受験する時点で支援士→システム監査というコースを見据えていたので、いわばここ最近の学習の集大成といったところです。
 論文試験に慣れておく意味で春にシステムアーキテクトを受験することを検討したものの時間が取れなくて断念し、結局このたびのシステム監査が初の論文科目受験となりました。

使用した参考書等

  1. システム監査技術者過去問対策.com
  2. ALL IN ONE パーフェクトマスター システム監査技術者 2022年度(TAC)
  3. システム監査技術者 合格論文の書き方・事例集 第6版(アイテック)
  4. よくわかるシステム監査の実務解説 第3版(同文舘出版)

 1は午前Ⅱ対策に利用しました。誤字などいくつか不具合があるものの、いずれ最後は問題を見て瞬時に答えるだけの脳筋プレイになるので気にしませんでした。なお、このほかに応用情報と支援士の午前問題(該当する分野のみ)も復習しています。
 2は午前Ⅱから午後Ⅱまで幅広くカバーしていてメインの学習用にちょうどよろしいかと思います。改めて確認したら2022年度版でしたが、1年でそうそう変わる分野でもないので全く問題ありませんでした。
 3はもちろん午後Ⅱ対策用の論文事例集です。肝心の論文例に誤字脱字が多かったり、あまり重要でなさそうな事柄に字数を割いている例が目立つなど気になる部分は多いです。しかし「2時間でこのぐらい書けばなんとかなる」というリアリティを教えてくれるという意味でかなり重要です。
 4は試験対策書ではなくて実務書です。全編を読み込んだわけではありませんが6,9,10章あたりはかなり参考になりました。要は当たり前にやるべきことを並べているだけなのですが、結局は午後Ⅱ論文もその当たり前のことをどれだけ飽きずに並べられるかの勝負でしかないのだ、という貴重な悟りが得られます。

学習戦略

 総学習時間は140時間程度だったと思います。6月中に午前Ⅱと午後Ⅰの過去問を解き始めたので取り掛かりは遅くなかったのですが7月に入って中だるみがあったのと、午後Ⅱへの取り組みが不十分だった(結局演習が不足してヤマを張る結果となりました)ため学習時間は支援士のときより減ってしまった感じです。あと今年はとにかく暑さにやられてきつかったです。
 午前Ⅱはとにかく暗記するだけなので、以下ではメインの午後の学習について振り返ります。

午後Ⅰ対策

 H25以降の過去問を延べ60問ほど解きました。基本的に1回解いた時点で難しいと思った問題には二度と手を付けず、標準以下の難度だと思った問題を2回3回と繰り返しました。これまでの応用情報や支援士と比べてもフワッとした設問が多く、完璧な解答を追い求めてもキリがない、逆に言えば常識的に答えられる設問に確実に答えられるようになれば十分だろうと思ったことがその理由です。
 具体的に2回以上繰り返したのは次の問題です。
H25 Q2
H26 Q2(難),Q3
H27 Q1,Q2,Q3
H28 Q1,Q2,Q3
H29 Q2,Q3
H30 Q2,Q3
H31 Q1,Q2
R2 Q2,Q3
R3 Q1
R4 Q2,Q3(難)

 なお最も注意すべき点は、午後Ⅱにも言えますが監査手続を問われたときに具体的な技法(文書の査閲、インタビューなど)を含めて書くことです。これを忘れて単に「~であることを確認する」などと書くとまず間違いなく0点です。わかっているつもりでもついやってしまいがちです。

午後Ⅱ対策

 上記のアイテックの論文集からセキュリティと開発に絞って10問ほどを写経し、さらに3,4問を自分で考えて書いてみただけです。
 それだけでも数十時間かかるとはいえ、思い返しても全くお粗末な準備でした。ただ、書けば書くほど伸びるという話でもないように思えてきたので、受験直前では作戦を整理して明確にすることを優先しました。具体的には以下のような内容です。

  • むやみに字数を追わない
     写経しても2時間で書ける字数は3000字にも達しない。設問アを準備しておくことはもちろんだが、それでも結局は600+900+900=2400字ぐらいが限度だと割り切る。
  • 設問ア対策
     具体的なシステム例を数種類用意しておく。
     システムの機能だけでなく規模や稼働箇所(複数拠点の場合も考慮する)、利用者の特徴、負荷の大きい時期など、リスクに関連する概要を用意しておく。
     システムの開発や新技術の導入などは、なるべく全社的な取り組みとして様々な場面で活用しようとしているように記述する。そうすれば推進体制や責任分担のリスクを含めて書き進めることができる。逆にそうしないと現場視点の説明に終始してしまい話が続かない恐れがある。
  • なるべく経験した体裁で書く
     基本的に「経験と考えに基づいて~」というように問われるので「~するのがよい」といった第三者的な論じ方ではなく「こう考えてこうした」という経験を記すか、あるいは「~する」という自らの判断を示す。
  • 設問イ対策
     問題文の内容に沿って「マニュアルを整備していること」といった基本的なコントロールを挙げればある程度の分量になるが、字数的にも内容的にも不足するので補完的なコントロールを掘り下げる(最重要ポイント)。どのようなシステム、プロジェクトであっても変わらずだいたい次のようなものになる。
    -組織体制の整備
     -責任と分担の明確化
     -各関係者による責任と分担の理解促進
     -問題発生時の責任者への連絡体制確立
    -計画書、規程類、マニュアルの整備
     -適切な承認
     -周知徹底
     -継続的な見直し体制確立
    -開発における成果物、期限の具体化
     -各段階での実績報告や審査の仕組み
     -適切な承認、審査の実施
    -運用段階にて生じる問題に対応できる体制の整備
     -実際に生じた問題への対処、記録、報告
     -継続的改善に向けた見直し体制確立
  • 設問ウ対策
     コントロールをきちんと挙げられていれば、それらに対応する監査手続を1つ1つ記していくだけでよい。
     経験に基づいて記すという意味でも、閲覧する(した)文書名は「~について記した文書」とするより「~計画書」「~報告書」などとする方が自然。会議名なども同様。よくある名称を多数暗記しておくに越したことはない。
     「監査手続で留意すべき点」とか、「監査手続で確認すべきポイント」といった問い方をされることがある。監査項目などと言い換えることはできるが、問われていることに答えているという印象を与えるためにもなるべく設問で示された言葉を使う。
     設問イでコントロールや監査要点を述べた場合でも監査手続中で再度それに触れつつ回答する。そうしないと対応付けがわからないし、字数も足りなくなるので設問イと同じ文言をそのまま繰り返してよい。具体的には「~というコントロールについては~を閲覧して~の確認印が押されていることを確認する」という記し方が字数を稼ぎやすい。

試験当日

 小さい試験会場だったのでシステム監査の受験者は数えるほどしかしかいませんでした。プロマネの方は人が多くてすごいなあと思いました;-o-)
 午前Ⅱは特に問題なし。結果を考えると午前問題の過去問学習に時間をかけすぎな気もしますが、少しでも「ダメだったかもしれない」と思うと午後の集中力に影響する気がするので必要な取り組みだと思っています。
 午後Ⅰは問2,3を選択しました。こちらは高得点を狙いに行くよりもオウム返しでいいから否定しようのない感じの内容を書き、減点覚悟で7割を確保するという作戦で臨んで実際に7割取れました。我ながらこの点については老獪の境地に達した感じがします;-o-)
 午後Ⅱは問2を選択しました。支援士からの受験だったのでこのセキュリティ問題が出題されたことは非常にラッキーでした。
 とはいえ文章作成には不手際が目立ちました。設問アは十分に書けたと思うものの、設問イ以降で見出しを使って見やすく整理する(かつ字数を稼ぐ)という基本を怠り、改行のみで進めていくという形にしてしまいました。これがたたって特に設問イで字数不足に苦しみましたし、文章が場当たり的に展開してしまった印象がぬぐえませんでした。ただ、設問ウでは時間切れまで思いつく限りを並べ立てて最終的には700+750+1000字くらい書けたと思います。ちなみに鉛筆を持つ手にかなり力が入るため親指にバンドエイドを巻いて人差し指に爪が食い込まないようにしましたが、それでも指に跡が残りました。

終わりに

 午後Ⅱは話をある程度大きく持っていってあとはコントロールを体系的に列挙できるようになればなんとかなると思いました。ここで上記の「よくわかるシステム監査の実務解説」が決定的に役立ったと感じています。
 あとは手を動かすのも大事ですが、世の中のさまざまな業務について「ここではどういうシステムが動いているのか、誰がどう使っているのか、動かなくなったらどうなるのか、誰が困るのか」といったことをイメージする習慣をつけることが重要なのではないかと感じました。

 なお、情報処理技術者試験についてはここ3年で3回受験し、いずれも勝利となりました(AP→SC→AU)。
 春も受験していればもっと成果が出たかもしれませんが逆に息切れしていたような気もするので、このぐらいのペースが自分には向いていたのかもしれません。受験はしばらくはお休みしたいと思いますが、何か受けるとすれば簿記2級とか別ジャンルの試験になりそうです。

AOJ2199 Differential Pulse Code Modulation

 Python in Excelに向けて改めてPythonの勉強をしようと思ったことと、AOJでPyPy3が使えるようになったのをたまたま知ったことから、以前ハマった問題を解いてみました。

https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2199&lang=jp

  • xの配列で与えられる量子化信号(0~255)を、そのままではなく差分を取る形で記録する
  • 差分はx[i]-x[i-1]で取得するのではなく所与の配列c(コードブック)から選択する(xの1つごとに選び直せる)
  • 復元後の信号には当然誤差が発生するが、誤差の二乗和が最小になるようcを選択していった場合の最小値はいくらか
といった内容です。

 なんとか通ったPyPy3でのAC例はこちら。Python3だと遅すぎて無理です。

while True:
    n, m = map(int, input().split())
    if n == m == 0:
        break
    else:
        c = [int(input()) for i in range(m)]
        x = [0]+[int(input()) for i in range(n)]

        dp = [[10**9]*256 for i in range(n+1)]
        dp[0][128] = 0

        for i in range(n):
            for j in range(256):
                for k in c:
                    to = j+k
                    if to < 0:
                        to = 0
                    elif to > 255:
                        to = 255
                    dp[i+1][to] = min(dp[i][j]+(to-x[i+1])**2, dp[i+1][to])

        print(min(dp[n]))

 2次元dpをやるわけですが配列dpの軸の1つは0~n(xに対応)、もう1つは0~255(信号値が取りうる範囲)とします。
 改めてやってみてもこの選択が思いつきませんでした;-o-)解説を見ればごもっともという気がするんですが、考えていると0~m(コードブックcに対応)を使うのではないかなどとセンスのない方向に行ってしまいます。
 漸化式自体は難しくなく、cの各要素に対応する次の信号値を計算し、二乗和が小さくなるようなら置き換えるというだけです。ただし復元後の信号値が0未満になる場合は0に、255超になる場合は255に丸めるというのが曲者で、これにより
   dp[i][j] = min(dp[i-1][from]~)
のように配列を後戻りする形で参照しようとすると面倒が増えるという罠があります。
 最終的な答えは最後のxにおける二乗和の最小値つまりmin(dp[n])となります。


 言語の恩恵でコードは割と短く済んでいるものの、実際は試行錯誤しているうちに何時間かかかってしまいました。
 問題は学生向けプログラミングコンテストで出題されたものだそうですが、こんなものを30分とかで解ける人たちはやっぱり頭の作りが違うと思いました。

Python in Excelが導入されるようです

 あけましておめでとうございます。
 しばらくブログに手を付けられずにいましたが、時間に余裕ができたので再開したいと思います。


 本題ですが、10日ほど前から「ついにPythonがExcelに搭載!」と話題になっています。

forest.watch.impress.co.jp

 Pythonの導入については何年か前から噂があったのを知っていますし、そのときから漠然と「古くなったVBAを置き換えるもの」というふうに捉えていました。しかし今回のPython in Excelはそうではなく「セルにPythonコードを直接書き込む」という仕組みになっているとのことで、つまり色を塗ったり印刷したりといった手作業の代替ではなく、強力なライブラリを使ってデータ分析やら機械学習やらができる、という部分がメインになっているようです。


  というわけでPythonについては初心者ですしライブラリもよく知らないのですが、Insiderプログラムを適用しているサブマシンで10分ほどいじってみました。
 当たり前ですがwhileループや関数定義(def)ができ、LAMBDA関数単体では困難だった再帰も楽勝でできます。これは素晴らしい。キュー/スタックのようなデータ構造が扱えるのもデカいです。LAMBDAのときに「これでExcel数式が完全なプログラミング言語に!」といった(いささか誇大な)宣伝がされていましたが、今回のは文句なしにプログラミングです。あと正規表現が扱えるはずなので、文字列の扱いも改善してくれそうです。
 コードはクラウドで実行され結果が返ってくる仕組みなので留意すべき点はありますが、アルゴリズムの適用とデータ処理の可能性が大きく増したのはとても良いことなので、勉強をしながら正式リリースを待ちたいと思います。