kpmgビジネスアシュアランスの橋本氏は,「記録を残さず,ユーザー部門からの電話1本でシステムを変更しているitエンジニアが少なくない」と指摘する。これは,日本版sox法対応という観点では大きなリスクと見なされる。 ¥æ°è¦ç©ããCOBOL2002 Professional Tool Kit ãã¼ã¿å½±é¿æ³¢ååæã¬ã¤ãåå¿é²ã調æ»åæã®ã½ã¼ã¹ã³ã¼ãã¨ã¨ãã«CSVãã¡ã¤ã«ã«åºåãã¦ï¼èª¿æ»ããçµæã®ã¨ããã³ã¹ã¨ãã¦å©ç¨ãã¾ããä¿®æ£å¯¾è±¡åæããå½±é¿ãåããã½ã¼ã¹ã³ã¼ãã®åæï¼å½±é¿åæï¼ãèªåçã«æ¤åºãã¾ãã1.4.2ãå½±é¿ç¯å²ã®èª¿æ»ã§ä¿®æ£ç¯å²ãæ確ã«ãã¦ããã°ã©ã ãä¿®æ£ããæ¯ä½ã¨ãªãããã°ã©ã ã®æ§é ãç解ãã¾ããããã°ã©ã ã®æ§é ãç解ããã«ã¯ï¼è¨è¨æ¹éãä¿å®ããã¥ã¡ã³ãã§ç¢ºèªãï¼è©³ç´°ãªä»æ§ã¯ã½ã¼ã¹ã³ã¼ããç´æ¥ç¢ºèªããªããï¼æ¬¡ã®é ç®ã調æ»ãã¾ããAll Rights Reserved.
はじめに こんにちは植木和樹@上越妙高オフィスです。本日は私がここ10年くらい意識している運用手順書を書くときのポイントについてまとめてみました。 対象読者 開発・構築したシステムを別の人に引き継ぐ予定のある人 他の人が … 受け身の話とも被ると思いますが、殆どの場合、考える気が無いんじゃないかと思います。3行になったら、①→②→③と紙に書き(1,2,3は三行の内容)、それぞれの項目を同様に細分化させる様に指示します。以上のことをしていない場合、理解する気が無いか、理解する方法を知らないかのどちらかだと思います。特に読むのを嫌がる、試すのを嫌がる、後回しにしようとする場合、理解する気が無いと断定して良いと思います。BingでもYahoo!でも百度でも何でも構いませんが、基礎知識を身につける、調べる際、検索力が低い所為で進捗が遅い可能性があります。具体的にはFizzBuzzなどの簡単な物なら自力で作れるし、数百行程度のプログラムなら詳細な実装仕様を与えれば、動く物が作れるが、機能仕様だけでは途端に手足が出ない。あれこれ考えた結果、私が最終的に辿り着いた「分からない理由」は以下の5つです。プログラムに限らず、詳細な手順書、つまりマニュアルさえあれば、殆どの部分はただの単純作業になります。特に初心者の頃に作る物なんて、完全に単純作業。故に「プログラミング」=「何も考えなくても良い」と思っているんじゃないかと。とにかく、流れで手を動かせば、何とかなる。私?便所以下のゲロ臭いコードを量産してますが何か?ヽ( ・∀・)ノプログラムも同じで、上手い人のコードを参考にして(コピペではない)、何度も糞コードを生産し、何故それが糞コードなのかを考え、リファクタリングをする。ごく一部の天才を除き、そうすることでしか、上達は無いと思います。理解を後回しにして分解、再構築など出来ません。にもかかわらず、後回ししているのなら、本人的には考えてるつもりでも、結果的に何も考えていない様にしか見えないでしょう。この位を聞いてみて、答えられない様なら、Google力が足りません。まずはGoogleについてGoogleさせるところから始めましょう。設計をするには「理解」「分解」「再構築」が必要ですが、「分解」と「再構築」には、それぞれ異なる能力が必要です。当初は「応用力」の低さなのかと考えていましたが、以下が足りないという結論に辿り着きました。別の言葉で言い換えるなら、具体的思考しか出来ないタイプの人であるともいえるでしょう。しかし、設計をするには、目的とする物を「理解」し、「分解」し、抽象的にまとめる「再構築」という、思考を経なければいけません。設計とは真に錬金術だ。しかし、彼らは「手順」しか観察していません。「手順」しかない為、明確に処理を区切る場所の判断基準が少なくなります。ピザの例の様に具体的な事象ならまだしも、抽象的な処理の手順だけから、区切りを見つけるのは難しいでしょう。3行でまとめられず、長々説明しようとしたり、とにかく具体的なことを話す人は、ボトムアップ思考で、説明力が足りていません。簡単にまとめる、わかりやすく伝える力を養って下さい。無論、数々分からん事にぶつかり、中には結局全く分からなくて諦めた物も多々あります。「分からないことがある」ということが分からない訳ではありません。ぶっちゃけ、知らないことは必要になってから詳細に知るのでも遅くはないのです。そういう場合は、そういう中間的なデータは普通に存在し、無駄ではない、悪ではないと言うことを理解させてあげる必要があると思います。例えばテニスなら、上達するには、実際に体を動かし、上手い人を参考にして何度も何度も糞なボールを打ち、何故自分が糞なのか考え、糞な部分を修正しつつ練習するしかありません。ボールが真っ直ぐ打てる様になるまで、ラケットは握らなかった人が居るでしょうか?先にも述べてますが、今回対象とする初心者は最低限のプログラミングを記述する能力があるとしています。FizzBuzz等は書けるのに、ちょっと複雑になったり、規模が大きくなると途端に何して良いか分からなくなります。最初の行程である「理解」をするには、必ず自分で勉強をする必要があります。理解の為の勉強は、主に以下の4つの行程からなります。初心者がプログラムを書く上で、何をすれば良いのか全く分からない、全部分からない。分からないことが分からない。幸か不幸か、そういう感覚が私にはさっぱり分かりません。「何をすれば良いのか分からない」というところで詰まった記憶が特にありません。自分は初心者のときに懇切丁寧に教えてもらったことを忘れて、いざ逆の立場になったらそういうのは、記憶力か人格が悪すぎると言われましたが、そもそも私のプログラミングは全て独学で、入門時に誰かに教えてもらったことは一度もありません。(だって、聞く相手がいなかったし。むろん、多くの書籍にはお世話になりました。)すなわち、プログラムは書けるが、プログラムの設計が出来ない人を、この記事では初心者と呼びます。理解における「基礎知識を身につける」が一番重要で、一番疎かにしたくなります。だって面倒くさいからね。基礎とかどうでも良いから、表面だけなぞって何となくできれば一番楽だもんね。どうでも良いけど、PythonとかはJavaのInterfaceとかC++のヘッダみたいに、枠だけ考えるってのが出来ないからすっげー嫌い。検索能力が低い場合は、Googleセンセーの動きを理解させる必要があります。単語じゃなくて、文章で検索してたりしたら、ヤバいですね。他には、そもそも、世に上手いプログラムを書ける人なんて一握りしか居ません。上手くない事なんて、気にする必要もない事です。常に、上手くあろうとする努力が重要なのです。そのままで分からないなら、分かる程度の大きさにまで、処理を分割すればいいだろう、と設計が出来る(と少なくとも思っている)側の人間は思います。しかし、そう言っても、彼らは首を捻るばかりで、それ以上は何もリアクションはありません。従って、受け身である人はいくらプログラミングを最低限覚えようと、何一つ解決が出来ない、という事態になるのではないかと。プログラムを設計する際、何から手を出せば良いのか分からない場合、分解の段階で躓いている可能性が大きいです。全体の中で、ほんの僅かな部分だけが出来ないことが、全部が出来ていないことだと思い、強いストレスを感じる人が居ます。おそらくは完璧主義なタイプか、潔癖症なのでしょう。一方で、私の様に明確に悪意があってサボっている訳ではない場合、基礎知識の会得手段を知らない可能性があります。具体的に言うと、全体を把握する前に詳細を把握しようとする。小事に拘って、大事を見ていません。基本的に何事も上手くこなすというのは、スキルです。スキルはどうやっても一朝一夕には手に入らない。なのに、上手く出来ないことが全部が出来ないことだと思い込んでしまうと、手が止まってしまいます。これは、結構な人が陥るパターンじゃないかなーと思います。私も時々陥ります。なお、この分割の程度は個性なので、あまりに極端な分割でなければ、OKを出しましょう。我々の思っている答えが絶対ではありません。共感することが出来ないなら、解析するしかない。というわけで、色々と考えてみたことを書いてみようかと。
(1) 全員の年齢の合計を求める 2. 開発プロセス. 次の問題を考えて見てください。 「5人の男性の年齢がそれぞれ21、18、22、19、20才のとき、その平均年齢を求めてください。」 この問題を解くのに皆さんは、全員の年齢の合計を求めて5で割ると答えるでしょう。これをもう少し詳しくいうと、 1.
システム開発は、いくつかの開発プロセスと呼ばれる工程に分けて行うのが通例です。この分け方は各コンピュータメーカーやSIerなどが定義している開発標準(後述)によって若干異なり、呼び方(名前)も様々です。 今回は例として、お客さんとか上司とかから要望を聞いて、既存のWebアプリケーションの画面を改修していく作業を行う場合を想定しています。取り扱う範囲は詳細設計-実装-単体テストとします。普段の仕事のやり方の備忘録として記載しますが色々と抜け漏れがあるので、加筆していく予定です。
ソースコードを追う手順. … 初心者がプログラムを書く上で、何をすれば良いのか全く分からない、全部分からない。分からないことが分からない。 幸か不幸か、そういう感覚が私にはさっぱり分かりません。「何をすれば良いのか分からない」というところで詰まった記憶が特にありません。 開発者(ドキュメント作成者)の立場からすると、作業する人のスキルがどの程度なのか分からないと、どこまで詳細に書いたらいいものか悩んでしまいます。そこで「最低限この辺のスキルができる人を対象にしてますよー」というのを示しておくと手順も必要以上に冗長にならず良いです。典型的な構成としては以下のものでしょうか。EC2あたりは要素の横に、動いているアプリケーション(ApacheとかTomcatとか)が書いてあると尚良いです。細かくページやファイルが分割されている場合は、分かりやすい構成になっていないと探したい情報に辿りつけない事が多いです。(で「◯◯の手順のドキュメントありましたっけ?」って開発担当者に聞くことになる)最初から完璧を求め過ぎると「ドキュメント書きたくない → 書かない → 属人化」の悪循環にはまってしまいます。まずは作業メモレベルで良いのです。版数はv1.0とかでなく、更新日付(v20160629とか)が一番わかりやすい。それと一つの作業をするのに複数のページを行き来しないといけなかったりするので使い勝手が悪いこともしばしばです。例えば障害のあったEC2を復旧させる手順について書く場合にはこんな感じでしょうか。しかしオペレーション担当は複数のシステムを横断的にみているため、階層の親子関係が逆になってた方が使いやすいのです。不幸なことに手順書通りに進めてもうまくいかないことがあります。また手順書に記載されていない作業が求められることもあるでしょう。特に想定外の障害が発生した場合には開発(保守)チームにエスカレーションすることになります。クラスメソッドのオペレーションチームでは標準スキルセットを定めてます(社内試験がある)ので、知りたい人はお声かけください。ルールを1つに決めると「オレはそのやり方気に入らない」「最近はこのやり方が流行り」という意見がでますので、時代時代にあわせて何パターンかの管理方法を決めて運用するという妥協も必要だと思ってます。いきなり「サーバーリブート手順」とだけあるのではなく、どんな時にその手順を実施するのか書いておいてください。ストーリーがあると理解しやすくなります。システムが増えれば増えるほど手順書も増えていくものです。見つけたドキュメントに自分の期待するものが書かれているのか、冒頭数行でわかるようになっているとうれしいです。そのため現場では自分たちが参照しやすいようにファイルをコピーしてしまい、版数の違う手順書が各所に散乱するという状態になりがちです。実際の作業手順は好きに書いてもらって良いです。最終的にはレビューして不足は修正していきますので。ドキュメントの最初には、このドキュメントに何が書かれているのかを100文字くらいで書いておくと良いでしょう。版数はつけてほしいです。手順書がファイル(WordやExcel(! 静的な解析は、あくまでプログラムの動作を予想することになる。 僕は新人seです。今、上司の方からあるシステムの基本設計書・システム設計書・プログラム設計書を作り、プログラミングまでしてから単体テスト・結合テストもやるように言われています。(全て1人で)おそらく経験のある方ならすぐにでき