Sachool Engineering Blog

プログラミング学習の記録

テスト!

| Comments

こんにちは!
東京オフィスのisseiです!

テスト業務を行いました!

前回より、切り込んだテストを実施。

前回約2ヶ月前程に実施した時には、試験書をみて間違っているところをひたすら探して報告するような作業でした。
その作業の中でエンジニアの大変さを痛感した訳ですが、今回はより本来の開発現場をひしひしと感じるようなテスト業務になりました。

ログを調べる

前回と比べて何が違うかといったらやはり、ログを見ながら作業を行う所でした。
そもそもログとは何か。
アプリケーション、OS、サービスが処理内容、警告などの履歴を逐一記録し、障害発生時や開発時(デバッグ)などに参照できるようにするため作成する。
Wikipediaには上記のようにありました。
障害を修正する為には、このログを分析して修正箇所を絞っていくのです。
前回報告で終わっていた作業でしたが、このログファイルを見てエラーが起こっていそうな箇所を報告するところまでを行いました。
ただ、このログファイルを見てもどこに何が書いてあるか分かりません。
英語と記号が書かれたファイルで、何か実行すると書き足されていく。。

そんな中試験を進めながら、エラーが発生したら先輩方に一緒に確認してもらいながらログファイルを眺めていると、
どこかのクラスの、どのメソッドを呼び出しているという情報が記載されていて、エラーが発生した場合にはその内容が記載されている事が分かりました。

バグ見つけるの簡単じゃん!ってなりそうですけど実際はそんな単純ではないようで。。
別の場所で生成した誤ったデータを、別のクラスのメソッドで使用するとエラーが発生する、みたいな。
時限爆弾的なバグを発見する作業は、根気と予測と幅広い知識が必要で、ここでエラーが発生してそうですと確認を取ってみると見当違いであることが多かったです。。
sql文や、クラスの構成まだまだ勉強不足を実感しました。

セキュリティ

サービスにおいてセキュリティは、最重要項目でしょう。
便利な技術がある一方で、悪意ある使用をする人もいるようで。。
そんな悪意ある攻撃からサービスを守る為に、様々な対策があります。
今回のテストで印象的だったのが、SQLインジェクションです。
SQLはデータベースのデータを、取り出したり変更したり操作する言語です。
SQLインジェクションは、セキュリティ上の不備を意図的に利用し、アプリケーションが意図しないSQL分を実行して不正にデータベースを操作する攻撃を指します。

これの何が怖いのかというと、ニュースでも取り上げられているような個人情報の流出が起こる可能性があるという事です。
例えばログイン機能、ユーザーからの入力を受け付け、入力されたパラメータを元に画面遷移を行います。
この、ユーザーから受け付けたパラメータをSQL文に埋め込む際、チェックを行う事で悪意のある攻撃から守る事ができます。

実際の例です。

SELECT * FROM user WHERE id=‘$id’ AND pwd=‘$pwd’

ユーザー名とパスワードを入力してログインする処理の一部で、idとpwdの組み合わせがデータベースのものと一致すると認証するというSQL文があるとします。
これに、

  • $id : sackle
  • $pwd : ‘ OR 'A’=‘A

上記を入力すると、SQL文は以下のようになります。

SELECT * FROM user WHERE id=‘sackle’ AND pwd=‘’ OR ‘A’=‘A’

これが実行できてしまうと、ORの後は常に真なので、パスワードが異なっていても認証されてしまうという現象が起こってしまいます。
これが悪意のある攻撃です。。

このような攻撃の対策としてエスケープ(文字列に変換)や関数の使用、プレースホルダの使用が必要になってきます。(まだ理解できていません。。)
試験では上記のような入力を念入りに行いましたが、LIKE句で特殊文字となっている「%」のみエスケープされていなかったり、様々なパターンがある事を知りました。
特にセキュリティに関しては、重要視されるだけあって確実に理解して開発を行わなければいけないと感じました。

テストを通じて見えてくる優秀なエンジニア像

テストは、バグをくまなく探し障害を未然に防ぐ為の大切な作業です。
テスト仕様書があり、様々なケースを想定して予想しない動きが無いかを確認していきます。

しかし、上記で書いたようなセキュリティに関して理解が出来ていれば、ここが怪しそうだと予測を立てながら漏れなく効率的に試験を行う事ができるでしょう。
また本来であれば発生したエラーに対して、ログや実際のコードを見ながらバグの指摘だけではなく修正案を提示出来るほうが優しいでしょう。
更に起こりそうなバグを、コードを見て未然に防げるのかもしれません。

厳しいテストと愛のある指摘。
素晴らしい優秀なエンジニアは、知識・技術だけではない人間性豊かなビジネスマンであると感じました。

前回とは違う、奥の深いエンジニアの仕事の難しさを感じたテスト業務でした。

Comments