ラベル SE の投稿を表示しています。 すべての投稿を表示
ラベル SE の投稿を表示しています。 すべての投稿を表示

2018年9月22日土曜日

【SEの仕事】ウォーターフォールになってない

多くの日本のIT企業はウォーターフォール開発を使っていると思います。(実際はアジャイルやプロトタイプも多いでしようが)。

ウォーターフォールの場合は、前の工程のアウトプット(成果物)が次の工程のインプットになります。建前としては前の工程に戻るという事は無いため、各工程の成果物は、品質の高いものになっている必要があります。
そのため、各工程では念入りに成果物の作成、レビューをします。かなり時間を費やすわけです。で、各工程のレビューはお客さんレビューも実施します。

ここで良く有るパターンが、各工程のレビューを自社レビューのみとしてしまうパターン。これをしてしまうと客先試験で、大ドンデン返しを食らう事があります。客先試験は大抵の場合、一番最後の工程なので途方も無い手戻りが発生する事があります。前に述べたとおり、各工程ではかなりの時間を費やすのです。それを全部ではないにしてもやり直す訳です。

そのため、各工程の成果物は、その都度お客さんにレビューしてもらい、こう言った手戻りが無いようにする必要があります。これが、正しい開発の在り方と思ってます。

ここで問題があって、お客さん側の都合で、仕様書・設計書レビューを試験後にやることが、決められているパターンや、忙しいとの理由でレビューを断られたり、試験後にして欲しいと言われて後回しにされてしまう事があります。そうしておきながら、お客さん試験でいざ使ってみると、こうじゃないと指摘をして、修正しろと言って来ます。

本来、仕事をサボった(ウォーターフォールの定石通りしなかった)のはお客さん側なのですが、それでもお金を貰っている以上やるしかないのです。こうなると前述の通り、かなりの時間をかけているわけですから、工数つまりお金の無駄使いとなってしまうわけです。なので、できることなら各工程でレビューをしてもらうよう努める必要があります。

更に言うと、各工程の最後にレビューをしてもらうだけではなく、週2位で打ち合わせをして、軽く成果物のレビューをしてもらうと大きく方向をズレること無く、方向の微調整が効きます。1チーム4人として、1人1日3ページ(実際はもっと作れるはず。)作れば、週2で打ち合わせするには、十分な量の資料が作成出来ます。

自信が無いなら叩き台レベルと言って作成完了してない旨匂わせます(これはお客さんによって未完成が気に食わないって人もいるでしょうが)。ここで言いたいのは、試験の最後に見てもらうより、各工程の最後、各工程の最後で見て貰うより、週単位で見てもらう。つまり、細かく刻んだほうが大きく道を反れることが無い※と言う事です。勿論、各工程の最後、お客さん試験も実施します。

※レビューア(成果物のレビューをする人)、試験者が違う場合で、2人の意見が違う場合、厄介なことになるのことがあります。

2018年9月21日金曜日

【SEの仕事】原因不明なエラーの解析【Java】【C#】

お客さんの都合により、複数の会社が同じWebアプリ内の機能を作成する事があります。もちろんそれぞれの会社の作成している機能は別物です。

OutOfMemoryErrorや原因が不明なエラーが発生した場合にどの会社が解析するのかと言う問題があります。

お客さんが事前にどの会社がやるのか決めてくれている場合は良いんですが、そうでない場合が厄介で、本来であれば契約に従う必要があり、契約書に無いことをやってはいけません。が、どの会社も契約してない場合は誰かがやるしかないんです。

しかし、誰もやろうとしないんですよね。
恩を売る、または勉強と割り切って自分で実施しましょう。やって見ないといつまでも機会がありません。こういうバグの解析は稀にしかありません。なぜなら、かなり出来る人間が毎回解析するため。年次が高くなっても出来ないと困ったことになります。プロジェクトを任されて、外のメンバーは1~3年目のみとか詰みます。

■解析方法
JavaやC#のExceptionがログファイルに出ていれば、ソースコードのファイル名と行番号からエラーが特定出来ます。

今回はそうではなく、良く分からないエラーの場合です。
良く分からないエラーって何です?って思いますよね?

例えば、定期処理が動かなくなったとか、画面にもログファイルにも何も出てないが操作が出来ないとか、操作が途中で止まるとか、砂時計のままとか、少し違和感があるとか、異常に遅いとか、・・・。

Exceptionが出てない場合はエラー箇所が分からないため、ソースコードのどこに問題があるのか分からなかったりします。この場合、見るべきことが沢山あります。主なものを以下に記載します。

●Javaの場合
・ログファイル
 エラーが発生したと思われる時間帯の前のログなど。ログファイルは膨大なのでgrep、egrep、head、tail、unique、cut、sort、sed、awk、viewなどのテキスト関連のコマンド、サクラエディタ※1の正規表現置換、ブロック選択、Excelなどを駆使してエラー箇所を絞り込み、エラーの特定、そこまで行かなくても何の処理が動いてたかを把握して解析の取っ掛かりにしたりします。

・Catalina.out
 まずはOutOfMemoryErrorでgrep。Catalina.outも大量にログが出てる場合があります。なのでログファイルと同様の解析をしたりします。皆なんでCatalina.outに余計なログ出すかなあ?Catalina.outはOutOfMemoryとかErrorの子クラスだけにして欲しい。それ以外はロガーに出してくれ。

・リソース使用量
 ・sar
  サーバーのcpu使用量。グラフ化すれば、おかしくなり始めた時間帯などを特定出来ます。

 ・top
  現在の各プロセスのCPU使用量、メモリ使用量。

 ・ps
  スレッド数、ファイルディスクリプタ数などを調べられる。出来れば事前に定期観測しておく。

 ・free(Javaでは余り見ない)
  サーバーのメモリ使用量。

 ・iostat、vmstat記録してたが何に使ったっけ?

 ・コネクション数
  DBコネクション数が限界に達してないか?定期的に記録しておきましょう。何のコマンドだったな?vmstat?netstat?

 ・jconsole
  JavaのCPU使用量、ヒープ使用量、メモリ使用量。

 ・jstat
 ヒープ使用量定期観測。事前に仕掛けておく。

 ・ヒープ内の各クラスのメモリ使用量。コマンド名は何だったかな?
  メモリリークの場合、どのクラスがリークしてるか分かるので必須です。特に正常時と異常時の比較、起動直後と時間経過後の比較をすると、あっさり原因特定出来たりします。

・jstack
 ・スレッドの状態(最近はスレッド数が多くて一苦労)
 ・スタックの状態
 ・ロック残り、デッドロックの有無

●Windowsの場合
・タスクマネージャー
 windows用。列追加すると色々見られる。プロセスのCPU使用量、メモリ使用量、ファイルディスクリプタ、スレッド数、GDIオブジェクトなどのリーク。

・リソースマネージャー
 タスクマネージャーより詳しく見られるらしい。余り使ったこと無い。

・typeperf
 プロセスのCPU、メモリ使用量、ファイルディスクリプタ、スレッド数などを定期観測。事前にしかけておく。何れも増え続けているものは注意。typeperfはGDIオブジェクトが記録出来ない。何でだ?

●DBがある場合(製品によって確認方法が違うのでざっくり記載。)
・トランザクション残り
 デッドロックやトランザクション残りの特定。
 実行中のselect文が見られる場合があり、問題のある機能が特定出来る。また、手動でinsert文実行時にトランザクション途中でウィンドウを閉じて、トランザクションが残ってしまい、他の機能が動かない問題などの特定。トランザクション残りって呼んでますが、本当は何て呼ぶんでしょう?

・ロック残り
 トランザクション残りとほぼ同じ。デッドロックの特定。

怪しい箇所は時系列順にメモして、最初のエラーを特定します。リーク系は最初ではなく、時系列でみます。
また、正常時との比較も重点です。

※1 他のエディタでもいいですが、巨大なログファイルを扱える必要があります。サクラエディタは結構耐えてくれます。分割してもいいですが。

2018年9月20日木曜日

【SEの仕事】駄目なお客さん

駄目なお客さん、駄目な先輩、駄目な上司、駄目な後輩・・・はいくらでもいます。

そういう人達がいても業務が正しく進んでいる場合は良いです。大抵はそれを補うだけの戦力がアサインされますので、正しく進まない事態になることは、あまりありません。

しかし、明らかに業務が正しく進まないような状況では放置できません。
過去にあった事例を紹介したいと思います。

●駄目なお客さん①
<反応が無い。しかばねのようだ。>

メールを何度送っても何の返事も無いし、電話で質問や、お願いしてもやっておくと言ったまま、音沙汰無いお客さんです。

何かしらの反応があるなら、業務は進むと思います。意味が分かない返事だったりしても根気良く話を聞けば、少しずつでも業務は進みます。しかし、返事が無い場合は、一切進みません。

こういう場合はなんとしても一度、直接会う必要があります。で、その際に何としても定期的な打ち合わせを約束してもらいます。

また、会った時に必ずQA表(質問表)を印刷して持参します。その際、質問の解答期限を必ず書きます。少し早めの期限でいいです。値切り交渉に近いですが、無理と言われたら、少し期限を延ばせばいいです。

それと切羽詰まってなくても、ヤバい空気を出した方がいいです。この質問はいつまでに回答無いと進捗遅れになる旨伝えます。

更に、進捗遅れになる場合、自責では無いのでってリスケの話をぼそって出して危機感を煽ります。これはお客さんを怒らせる可能性もあるので(要はあんたのせいで遅れてますって面と向かって言ってることになりますので)、冗談っぽく言えると良いですね。私には無理ですが。リスケは言わない方が無難です。

●駄目なお客さん②
<AさんとBさんの意見が反対、食い違う>

窓口となる人を1人にして貰えばこんなことは起きません。普通のお客さんはそうします。
機能が多いなどの理由で、機能毎に別々の人が窓口となっている場合もいいです。

駄目なパターンは以下などのパターンです。
・お客さんのAさんが最初のレビューア、Bさんが次のレビューアになっている
・お客さんのAさんがこちらに指示して、Bさんがレビューアになっている

大抵、後にレビューする側(上記ではBさん)の方がリーダーに近いかリーダーだったり、偉いです。

Aさんの言った通り、ドキュメントを作ったにも関わらず、Bさんのレビューで覆されたりします。

当然、修正には工数(時間と思って下さい。)が掛かります。つまり、お金が掛かります(会社は私達に給料を払うわけですから)。正当な対価なはずですが、お客さんはその分のお金は出してくれません。こちらからするとAさん、Bさんどちらもお客さんです。お客さんであるAさんの言う通りに作ったにも関わらず、うちのお金を消費して修正する事になります。なんとも理不尽な話です(資本主義、ビジネス、お金の話を全く考えてないのでしょう)。

この時点でも困ったお客さんなのですが、最悪なのは、その二人の間で決着を付けてくれない場合です。

自社の意見が違った(纏まってない)状態で他社に依頼を出してる時点で恥ずべきこと(要求仕様書、要件定義書をお客さん側で作ってない、作ってもレビューしてないからこんなことになります。基礎中の基礎です。)なのに、それをズルズル引きずって、結論をいつまでも出せないなんて、はっきり言って小学校の学級会レベルです。

で結局は私がその2人を引き合わせて(下請けにこんな事させて本当に恥ずかしくないのか?)、話合ってもらったのですが、どちらも意見を曲げないので、こちらで中間案を出して納得してもらいました。

●駄目なお客さん③
<理想を語るだけのお客さん。>

ビジネスの世界では、期限が決まっていることが殆どです。SEでも納期はあります。

仕様検討、設計、実装、試験が終わり、期限は1週間後と言う状況です。にも関わらず、Aさんはこの機能を追加して欲しいと言ってきます。その機能が有るとユーザビリティが向上するものでした。しかし、無くても問題が起こるものではありませんでした。

しかも、その変更を入れるためには、Aさんの上司の許可を取らないといけないそうです。

Aさんに許可はいつ取れるか聞いたら、回答が曖昧で、上司を説得する必要があり、許可が取れるかも分からない、時間が掛かるかも知れないとのことです。

しかし、どうしてもその機能が欲しいらしく、その機能の有用性を繰り返し、色々な観点で主張します。

②と似たパターンですが、普通はその時期に変更はしません。Aさんの上司がまともな方なら、許可をは出さないでしょう。開発モデルにウォーターフォール開発モデルを採用していましたが、その場合、仕様検討の段階で、その意見を出して、設計、実装、試験をする必要があります。はっきり言って現実的ではありません。ウォーターフォール開発モデルと言うものを全く理解してません。

また、業務にもよりますが、本来の工程をかなり短縮して取り組んだとしたら以下などになります。

1日目:Aさんが上司に許可を貰う
        私:仕様書修正
           仕様書社内レビュー
2日目:仕様書修正を客先レビュー
           私:設計書修正
           設計書社内レビュー
3日目:設計書修正を客先レビュー
           私:Make※1
           社内Makeレビュー
4日目:客先Makeレビュー
           私:試験仕様書(項目書)作成※2
           試験仕様書社内レビュー
5日目:試験仕様書客先レビュー
           私:試験実施
           私:バグ修正
           バグ修正社内レビュー
           私:試験成績書作成
           試験成績書社内レビュー
6日目:試験成績書客先レビュー
           私:リリース準備
           私:マニュアル修正
           マニュアル修正社内レビュー
7日目:客先マニュアルレビュー
           リリース

リスクを全く考慮してません。また、お客さん側のレビューをスケジュールリング出来るのか?と言う問題もあります。

上記のスケジュールはやろうと思えば更に短縮出来ますが、何れにしてもやるべきではありません。

結局は1日で許可が取れたら、間に合うが、それ以上掛かるなら、間に合わないと伝え、諦めて貰いました。

※1 コーディング、プログラミングのこと。
※2 一つにしましたが、試験は単体、結合、総合試験などに別れそれぞれレビューしたりします。

●駄目なお客さん④
<言ってることとやってることが違う。
と言うとか、自分達のことを客観的に見られない。>

打ち合わせがあった時に議事録(打ち合わせの内容をメモした文章) は自分で取るようにしてます。で、このお客さんは誰も議事録取ってないので、私がそれをメールで周知してました。

そうしたら、ある日お客さんから言われました。

お客さん『なんで、○○さんが議事録取ってるの?ウチの仕事でしょ?』

私『・・・』(あんたらが議事録取らないからでしょーが!!)

自分達が何をして、何をしてないのか分かってないなんて有り得るのでしょうか?それとも

●駄目なお客さん⑤
<タスク・スケジュール管理してない>

ある日、お客さんから打ち合わせコーナーに呼びだされました。そこで、

お客さん『明日までにこれこれこういうツールを作って下さい。』

私『・・・』

③で書きましたが有り得ないです。

こういう無茶ぶりな依頼は断ることも出来なくは無いです。しかしお客さんが、困ってたら受何とかしてあげたいと思ってしまいます。

詳細は書けませんが、そのツールはその業務では、無ければ業務が完了できない必須のツールでした。しかも、大きいプロジェクトでした。多分全体で業務従事者は、数百か1000人越えてたと思います。

実際のツール使用開始は数日後で、翌日と言うのはお客さんレビューでした。それでも普通はあり得ません。

で、そのツールを私達のチームで作ってリリースしたら、バグだらけ(バグを出したのは私ではなかったですが)でユーザーにさんざん私が文句言われて、平謝りしました。

しかも、そのバグのうち幾つかは仕様伝達ミスで、私達には誤った仕様を伝えられ、更にリリース前のユーザー試運転で、バグが見つかってユーザーからお客さんには報告があったにも関わらず、お客さんから私達に連絡が無く、運用前日に、ユーザーから報告したのに治ってないと私が文句を言われ、『こんな駄目なツール』位の罵倒を浴びせられました。

バグを出したのは私達です。ですが、ですがですよ?
やり場の無い怒りが、込み上げて来るんです。

やりましたッ! やったんですよッ!!必死に!その結果がこれなんですよッ!


タスク管理、スケジュール管理は基本中の基本です。テスト用のツールならともかく、かなり重要なツールでしたので、1日でツールを作れなどあり得ません。こんなの4、5年目の社員でもできる人はできます。ホントに何考えて仕事してるのやら・・・

【SEの仕事】SEとしての脳トレ【速聴】

SE以外でも効果はあると思います。脳トレとして速聴をやっている話です。

会社(IT系)に勤めて10数年経ちます。最近は減りましたが、入社して7~8年目位までは先輩・上司に怒られたものです。

普通の人ならば…
普通に仕事してれば2年目~4年目位でそのレベルに達するのでしょう。
しかし私は違いました。かなり時間が掛かりました。(今でもまだまだなのですが。)

入社前からc言語、Java、DB、Linux、仮想化、・・・色々学び、知識においては同期に負けない自信がありました。けど、そんな知識など仕事では大して役に立ちませんでした。

なぜなら、業務内容は…

試験、試験、試験。 試験しかありません。
つまり、SEとしての基礎知識よりも、その業務特有の知識(例えば、Aの画面を使うには、事前にBの画面で設定をしておくとか)が必要なのです。当然、業務にアサイン※1されてからその業務の内容を知りますので、事前に勉強しておくことなどできません。
じゃあ、仕様書や設計書を持ち帰り、勉強すればいいのか?

ダメです。うちの会社は一切のデータ持ち帰り禁止。一応上司に許可を取れば持ち帰られることになっていますが、実質許可は下りません(家で仕事させない分、良心的と捉えることもできます)。

ということで、先輩から仕事が与えられたら即理解し、作業をこなす必要があります。過去に教わったことは覚えておく必要が有りますし、言われたことを正しく理解する必要があります。これは当然のことなのですが…

私にはこれができなかったのです。
何故か?

・
・
・


頭が悪いからです。

一口に頭が悪いと言っても、頭の悪さには色々な意味があるわけですが、私の場合は「とろい」「どんくさい」という言葉がかなり近いです※2 ※3。

SEの仕事ではコミュニケーション能力が非常に大事と言われています。デジタル、0か1かの世界なので、あいまいなことが許されません。先輩や上司の言っていることを一言一句、正確に理解する必要があります。

誤った理解、解釈のまま仕事を進めると、試験ではバグを見逃すでしょう。設定漏れによりシステムを破壊するかもしれません。仕様検討、設計、製造それぞれ違った問題を引き起こしますが、いずれにしてもSEの仕事はうまくいきません。

したがって、コミュニケーション能力は非常に重要になります。前述の通り、私は「どんくさい」ので、お察しの通りです。1年目2年目なら多めに見てくれることもあるでしょう。しかし、4年目、5年目ではそうは行きません。

で、速聴の出番です。
速聴は「どんくさい」を解消できる脳トレです(人によって効果に差があります)。

実の所、入社前…というかもっと前から自分が「どんくさい」というのは分かっていましたので(20年以上生きてれば気づきますよね。)、速聴を試す程度のことはしていました。速聴の書籍に付属のCDを聞いてみる程度でしたが。
ただ、そのCDを毎日聴いているだけ、つまり同じ内容を繰り返すだけではあまり効果は無いように思います。

なので、毎日のニュース番組を速聴するようにしています。
私のやり方は以下です。

1. PCでニュース番組をTV録画。
2. tsファイルからmp3抽出。※4
3. mp3をPCからAndroidタブレットに転送。※5
4. 早送りで聴く。※6

始めたころは、上記ではなく、もっと効率の悪い手順でした。そもそも、スマホもタブレットもありませんでした。今ではアプリが充実しているので結構簡単に上記が実現できます。

効果の程ですが、人並みには「聴く」能力はついたと思っています。客観的に測る手段がないため、どの程度の効果なのか示すことができませんが。気になるなら書籍やWebにたくさん情報があると思います。
それと半年程度では効果は少ないように思います。最低でも2~3年は必要だと思います。

あと、ここまで書いておいて覆すようですが、普通の人であれば、普通に人付き合いしていれば、人並みのコミュニケーション能力はつくのだと思います。私は昔から人付き合いが苦手だったので、コミュニケーション能力も上がらなかったのです。なので、速聴を選択しました。ここでのベストチョイスはサークルなり、飲み友達を増やすといった方法です。私はその選択ではなく速聴を選びました。

ちなみに私は努力は嫌いではなかったので、常にプログラミングの勉強はしていましたが、仕事の上では全くもって無意味な努力でした(プログラミングは趣味も兼ねているので、苦ではありませんでしたが)。いや、数年後には役に立ちましたが、その当時の業務では役に立ちませんでした。
何を言いたいかと言うと、重要なのは自分の弱点を見つけ、その弱点を克服する事が大事です。間違っても原因が「どんくさい」なのに、プログラミング技術向上やSEの知識を付けるなど誤った方向の努力をしないことです。そこそこ勉強するのはいいですが、弱点克服に重点を起きましょう。
もし、自分が「どんくさい」とわかっているのであれば、プログラミングの学習ではなく、速聴などの脳トレをしたほうが効果的です。


※1 割り当てられること。
※2 記憶力も低いです。
※3 どんくさいにも種類があります。耳が悪いせいで相手の話が聞こえない、集中力が無くて聴いてない。
※4 タスクスケジューラからc#の独自ツールを起動し、FFmpegにかける。
※5 WiFiでPCからAndroidタブレットへAndroidアプリFolderSyncを使って転送。
※6 AndroidアプリMapleでピッチ調整して聴く。

2018年9月19日水曜日

【SEの仕事】何して良いか分からない場合はTODOリスト作成から

TODOリスト:やることリスト

開発の初期から携わった場合、始めは何して良いか分からないことがある。上司・先輩が指示してくれる場合は従えば良いが、自分が最高年次だったら、そうはいかない。

最初はスケジュール作成だろってつっこまれそうですが(大抵はその通りだと思います。)。いやいや、顧客との打ち合わせだろ?と言う人もいますかね。

とは言え、TODOリスト作成するに至る理屈は単純で、以外の通りです。

何をするか分からない。
↓
何をするか考える。
↓
やるべきことが浮かんでくる。
↓
複数思いつく。
↓
チームメンバーへの周知、ステータス管理※1、忘れないために文章化する。

で大ざっぱなスケジュールを作成して、TODOリスト、スケジュールを成果物として、顧客との初回打ち合わせに臨みます。

※1 未着手、実施中、完了など。

【SEの仕事】Proxyの設定漏れ

普通の会社ならネットワーク接続はマニュアル化されてますが、新しい業務にアサイン※1された場合で社外勤務などの場合、ネットワークが接続出来ない場合があります。

最初はpingで周りのPCとの通信確認をすると思います。

次はIPアドレスの見直し。ping通っていれば大丈夫とは思いますが、基本中の基本なので念のため確認します。
ついでにサブネットマスク、デフォルトゲートウェイも、調べて問題無いことを確認します。

でもインターネットには繋がらない。

で、その他の原因はいくつか可能性が考えられるのですが、良く見落とされるのがプロキシの設定です。

SEでは常識レベルの設定ですが、お客さんがネットワークに疎く、マニュアル化もされてないって場合があります。

なのでインターネットに繋がらない場合はプロキシの設定見直しも必須です。

主題から反れますがその他のネットワーク接続不良を記載します。
・IPアドレス重複
・サブネットマスク間違い
・ゲートウェイ間違い
・MACアドレス重複(VM使用時)
・LANケーブル断線、接触不良
・HUBや他のスイッチ電源OFF
・DHCP設定によるIPアドレスリース切れ
  ・
  ・

キリがないです。

※1 割り当てられること。

【SEの仕事】報連相のタイミング

会社に入ると良く「報連相」(報告、連絡、相談)を徹底するよう言われます。

分かっているつもりで、これが中々出来ません。

自分は報告はこまめにするよう心掛けてますが、やりすぎると報告を受ける先輩や上司は迷惑なわけです。

そのため、報告は必要最低限にすべきなのですが、頻度を下げすぎると、後でなんで報告しなかった?と怒られます。
これは中々難しいです。

上司、先輩によって適度な報告タイミングが変わってくるので、そのタイミングを探る必要があります。

とは言え、基本は以下で報告します(下記は連絡なとも含めてます。)。
・朝ミ、夕ミ※
・各作業の終わりの完了報告
・問題が発生した場合、問題解決時
・誤認が発覚した場合
・決めが必要な場合(夕ミでも良い)
・周知事項発生時

※ 朝ミーティング、夕ミーティング