VIETIS EDU
情報とイベント

Group 140
「Pen Testを趣味で始めてみたら、予想以上にハマってしまいました!」

当センターでは、ペンテスト入門クラスで学んでいた男性受講生が今も強く印象に残っています。一見すると内向的で寡黙な印象でしたが、いざ学習が始まると、熱意にあふれ、活発な一面を見せました。深夜12時を過ぎても、講師に質問を投げかけ、議論を深めようとする姿が印象的でした。

「最初は、コードを書くよりもペンテストの方が面白そうだと思って、この講座を受講することにしました。ただ単に楽しみたいという軽い気持ちで始めたのですが、予想以上にハマってしまいました!」

ギアさんは、Pen Testを選んだ理由についてこう話します。「私は情報科学科の学生です。自分自身、好奇心旺盛で、新しいことを発見したり、自分の能力を試したりするのが好きなんです。だから、プログラミングだけでなく、別の分野にも挑戦してみたかったんです。」

VietIS Educationでの講座受講後、ギアさんはこう語りました。「この場を借りて、Hung先生に心から感謝の気持ちを伝えたいと思います。先生は、単に知識を教えてくださっただけでなく、時間をかけて熱心にサポートしてくださり、特に、私に自信とPen Testへの情熱を持たせてくださいました。」

今ではギアさんは、攻撃側(Red Team)として自分の道を定めました。毎日、時間を費やして、自分の興味のある分野について研究し、学んでいます。単に「面白そうだから」と勉強していた情報科学科の学生から、ギアさんは、自分が本当に好きな仕事を見つけました。

ギアさんの挑戦は、私たちに多くのことを教えてくれます。

1. 速く行くか遅く行くかは重要ではありません。重要なのは、一歩を踏み出すことです。

2.いつ始めるかは問題ではありません。大切なのは、今日から始めることです。

3.興味のある分野なら何でも挑戦してみましょう。費やした時間は決して無駄になりません。

ペネトレーションテストへの道は長く険しいものですが、VietIS Educationは、ギアさんがすでに順調なスタートを切っていると確信しています。将来、大きく飛躍できるよう、心から応援しています。ギアさんのセキュリティテストエンジニアとしての活躍を期待しています!

テスト自動化エンジニアとは?

IT業界において、「テスト自動化エンジニア」という職種はもはや聞き慣れないものではありません。これは、ソフトウェア製品の開発・リリースにおいて非常に重要な役割を担うポジションです。テスト自動化エンジニアとは何か、そしてそのキャリアパスについて詳しく見ていきましょう。

テスト自動化エンジニアとは?

テスト自動化エンジニアは、テストを自動化するスクリプトを作成し、実行することで、ソフトウェアの品質を確保します。具体的には、テストケースを設計し、スクリプト言語を用いて自動化ツールで実行可能なコードに変換します。その目的は、バグを最小限に抑え、製品を期限通りにリリースできることです。

テスト自動化エンジニアの仕事内容:

  • 顧客、現場チームのロジェクトマネージャー、開発者、ビジネスアナリスト、IT部門など、様々なメンバーと協力してプロジェクトを進める
  • テスト計画の策定: テストの範囲、スケジュール、リソースなどを計画する
  • 製品開発の初期段階から参加し、プログラムコード、プログラミングアーキテクチャ、コーディング規約などをより良く理解する
  • 既存のテクノロジーとテストツールを統合する

テスト自動化エンジニアの仕事内容は、業界や会社によって異なる場合がありますが、優れたテストエンジニアになるためには、ソフトウェアテスト全般について深い知識を持つことが重要です。技術的な知識やプログラミングスキルを身につけることで、高度なテストスクリプトを作成し、複雑な問題に対処できるようになります。 

テスト自動化エンジニアに関する誤解を解く

ソフトウェアが存在する限り、その品質を保証するためのテストは不可欠です。Mordor Intelligenceのレポートによると、テスト自動化市場は2021年から2026年にかけて14.2%という高い成長率で拡大し、その規模は400億ドルに達すると予測されています。

しかし、テスト自動化に関する誤解は存在し、この分野の仕事に対する誤った評価されている傾向にあります。ここでは、テスト自動化についてよく耳にする誤解をいくつかご紹介します。

誤解1:テスト自動化エンジニアの仕事は、開発者やプログラマーほど魅力的ではない

テスト自動化エンジニアの給与は、開発者やプログラマーと比較すると高くないケースもありますが、この考え方は、テスト自動化エンジニアの持つ潜在能力や、ソフトウェア開発における重要な役割を過小評価していると言えるでしょう。

確かに、テスターがいなければ、ソフトウェアはいつバグが発生してもおかしくなく、その原因を早期に特定して修正できる人がいなくなります。特に、製造ラインのような現場でソフトウェアに不具合が生じたら、どれほどの影響が生まれるでしょうか。

しかも、テスト自動化エンジニアの給与は決して低くありません。他の多くの職業と比較しても、テスト自動化エンジニアは魅力的なキャリアパスと言えるでしょう。この仕事は、専門的なスキルと継続的な学習意欲を必要とする、やりがいのある仕事なのです。

誤解2:自動化テストは簡単で、やることは少ない

「テストなんて、バグを見つけるだけだろう?」と思う人もいるかもしれません。しかし、現実はそう単純ではありません。アプリケーションのコードはすでに完成しているように見えても、その内部では様々な要因が複雑に絡み合い、予期せぬ動作を引き起こす可能性があります。

すべての要素が正しく連携し、製品のリリースに耐えうる品質を確保するためには、テスト自動化エンジニアは、UI設計、API、データベースなど、多岐にわたる技術領域を深く理解し、様々なツールを使いこなす必要があります。例えば、統合開発環境(IDE)の確認や、Jiraを用いたリスク管理など、幅広い知識とスキルが求められます。

誤解3:テスト自動化エンジニアはコードを書けない

このような誤解を抱いている方は、自動化テストの仕事の本質を理解していないのかもしれません。優れたテストエンジニアになるためには、常に新しい技術に挑戦し、自らコードを書いて問題解決にあたる姿勢が求められます。

自動化テストの仕事では、Java、Perl、Rubyなどのプログラミング言語を用いてテストスクリプトを作成したり、複雑なSQLクエリを駆使してテストデータを生成したりするなど、高度なプログラミングスキルが求められます。また、異なるデータベース間のデータ移行など、幅広い技術知識も必要となります。

テスト自動化エンジニアの仕事とは

簡単に言うと、テスト自動化エンジニアは、ソフトウェアの品質を保証するために、反復的なテスト作業を自動化する専門家です。具体的には、以下の業務を行います。

  • テスト対象となるソフトウェアの機能や構造を深く理解し、様々な種類のソフトウェアテストの概念を習得します。
  • 自動化フレームワークを構築し、テストシナリオを開発するには、高度なプログラミングスキルと技術力が不可欠です。
  • テストの目的を明確にし、その目的を達成するために必要なテストケースを選定します。
  • レポートの比較やExcelデータの抽出など、反復的な作業を自動化することで、チーム全体の効率化を図ります。
  • チームメンバーと協力し、テストプロセスの継続的な改善に取り組みます。

上記に加え、各企業の事業内容によって、テスト自動化エンジニアの業務は多岐にわたります。特に、ソフトウェアサービスを提供する企業では、テストの迅速化とコスト削減が求められるため、テスト自動化エンジニアの役割は非常に重要です。

テスト自動化エンジニアは魅力的なキャリア選択肢ですが、テスト自動化の基盤を構築し、高度なテストケースを作成するための専門知識を習得する必要があります。

テスト自動化エンジニアへのステップアップ

手動テストの経験は、自動化テストのスキルアップに大きく貢献します。手動テストから自動化テストへキャリアチェンジを考えている方は、以下の10ステップを参考に進めてみましょう。

① テストに関する基礎知識の習得

テストの種類とテスト設計手法に関する基礎知識を習得することが重要です。特に、手動テストとテストケース設計の両方を担当する場合には、すべてのテストケースを漏れなく網羅し、正確に設計できる能力が求められます。

② HTML、CSS、Xpath知識の習得

HTML、CSS、XPathの知識は、テスト自動化において不可欠です。 これらの知識を習得することで、Webページ上の要素を正確に特定し、安定したテストスクリプトを作成することができます。そのおかげで、プロジェクトに自動化テストをより正確に適用できるようになります。

③ドメイン知識の習得

ドメインに関する誤った理解は、バグの発見漏れや、不適切なテストケース設計につながり、結果としてソフトウェアの品質低下を招く可能性があります。Linux、SQL Server、アプリケーションに関する知識も重要ですが、エンドユーザーのニーズを深く理解するためには、ドメイン知識が不可欠です。

テスト自動化エンジニアが、企業のビジョンや事業内容を深く理解していれば、より精度の高いテストシナリオを作成し、業界特有の潜在的な問題を早期に発見することができます。

.

④ テストフレームワークの熟練

テスト自動化フレームワークは、テストツールの標準機能では実現できない、プロジェクトに合わせたカスタマイズ可能な構成を提供します。テストフレームワークを活用することで、自分で一から構造を設計する手間を省くことができます。

⑤ ソフトウェアデザインパターンの理解

デザインパターンとは、さまざまな状況で使用できるテンプレートであり、コードに直接変換可能です。これにより、ソフトウェア開発者は時間とコストを節約し、エラーを減らすことができます。ソフトウェアデザインパターンを理解し、活用することで、フレームワークをより簡単に構築でき、エラーを迅速に発見し修正することができます。

現在、自動化テストにおいて最も広く採用されている設計パターンは、POM(Page Object Model)です。POMは、ページやページ内の要素を個別のオブジェクトとしてモデル化し、各ページ内のすべてのアクションと属性をまとめるのに役立ちます。他の多くのパターンについて学ぶことができますが、少なくともPOMパターンには習熟しておくべきです。

⑥オープンソースツールの活用

自分のテストケースを自動化するために選択するオープンソースは、プロジェクトや個人の習慣によって異なります。多くの組織はさまざまなアプリケーションを自動化するためにさまざまなアプローチを取っています。例えば:

・Webアプリケーション

・WebドライバーAPIまたはWebサービス

・モバイルアプリケーション

・デスクトップアプリケーション

⑦ データベースに関する知識

ソフトウェア開発プロジェクトの多くはデータベースを利用するため、データベースに関する知識は不可欠です。データベースの構造を理解し、データの操作、クエリの実行、データの整合性確保などのスキルを習得することで、より効率的にテストを行うことができます。

⑧プログラミング言語とツールの習得

テスト自動化にはプログラミング言語が必要になります。

テスト自動化のスキル向上のためには、少なくとも1つのプログラミング言語を習得することが重要です。Java、JavaScript、Python、Groovy、Ruby、C#など、様々な言語が利用できます。これらの言語を習得することで、開発者とコードを共有し、共同で品質向上に貢献することができます。

さらに、異なるプログラミング言語を使用する場合にサポートされるさまざまなツールもあります。最適なサポートツールを選択するには、次の重要な要素を考慮する必要があります。

  • エラーのカテゴリ(データベースレベル、ビジネスロジック、GUIなど)
  • 自動化を担当する人(開発者またはテスター)
  • プログラミング言語と開発環境
  • テストデータのセットアップと管理プロセス
  •  バージョンとCIシステム管理
  • サポートされるプラットフォーム

これにより、現在の技術に適合した統合ツールを見つけ、テストプロセスを迅速化することができます。例えば、

  •  APIテストツール
  • オープンソーステストツール
  • テスト自動化ツール

⑨プログラミングの基本的なスキルの習得

テスト自動化エンジニアとして活躍するためには、プログラミングの基礎知識が不可欠です。コーディング、IDEの利用、ソースコード管理、競合の解決、コーディング規約の遵守、そしてプログラミングの基本的なスキルが求められます。

⑩ 新技術への対応 

自動化テストの分野は日々進化しており、新しいツールや手法が常に登場しています。テスト自動化エンジニアは、常に最新の技術動向に目を光らせ、新しい技術を積極的に取り入れる必要があります。

  • ビルドツール:Maven, ANT, Gradle, v.vv..
  • CI/CD: CircleCI, Docker, Jenkins, v.vv..
  • クラウド環境:Testingbot, AWS, Browserstack, v.vv..
  • BDD: Specflow, Serenity, Cucumber, v.vv..
  • モバイルテスト:Perfecto, Appium, v.vv..
  • デスクトップアプリテスト:AutoIT, Appium, v.vv..

多くのテスト自動化エンジニアは、この分野が常に新しい技術や知識を要求するため、独学でスキルアップを図っています。 自動化テストを学びたい方は、書籍、オンラインコース、動画などを活用し、積極的に知識を深めていきましょう。

テスト自動化とは? テスターに必要なスキル

テスト自動化は、ソフトウェアテストの一環であり、プログラムやソースコードを自動的に検査するための強力なツールです。手動テストと比較して、効率性が高く、障害を減らし、単調な作業を軽減することができます。

では、テスト自動化とは具体的に何なのでしょうか?そして、テスト自動化を行うためにテスターにはどのようなスキルが必要なのでしょうか。この記事では、これらの疑問にお答えします。

テスト自動化とは

テスト自動化を行うためには、テスト自動化ツールと呼ばれる専用のツールを使用します。このツールを使って、各テストケースに該当したコード(スクリプト)を作成します。そして、テスト自動化ツールは、このスクリプトに基づいてプログラムを実行し、テストを行い、テストケースに応じて結果(成功/失敗)を出力します。

現在、多くのテスト自動化ツールが存在しますが、その中でも特に有名なものとして以下が挙げられます。

  • Selenium: オープンソースで無料で利用できる、Webアプリケーション向けのテスト自動化ツールです。Windows、macOS、Linuxなど、さまざまなプラットフォーム上で動作し、Java、JavaScript、Pythonなど、複数のプログラミング言語に対応しています。
  • Appium: モバイルアプリ(Android、iOS)向けのオープンソースのテスト自動化ツールです。Java、Python、C#などのプログラミング言語に対応し、実機やエミュレーター上でテストを実行できます。
  • Cypress: Webアプリケーションのユーザーインターフェースをテストするためのツールです。Windows、Linux、macOSに対応し、エンドツーエンドテスト、統合テスト、単体テストなど、さまざまな種類のテストを実行できます。
  • Postman: API、特にREST APIを扱うためのツールですが、テスト自動化機能も備えています。APIのテストだけでなく、CI/CDパイプラインとの連携も可能です。
  • Apache JMeter: Webアプリケーションの性能テストを自動で行うためのオープンソースツールです。

テスト自動化の実行プロセス

プロジェクトにおいてテスト自動化を採用するかどうかは、プロジェクトの性質やチームメンバーのスキルセットに大きく依存します。テスト自動化には、テストスクリプトの作成能力など、一定のスキルが求められます。

一旦、テスト自動化の実施が決まれば、以下のステップに従って進めていきます。

1. テストツールの選定

テスト自動化には様々なツールが存在し、それぞれ特徴や得意とする分野が異なります。ツール選定の際には、以下の点を考慮する必要があります。

サポートされるプログラミング言語:Java、JavaScript、Pythonなどの言語に対応しているか。

対応するテストの種類:統合テスト、単体テスト、システムテストなど、プロジェクトで実施したいテストに対応しているか。

対応するプラットフォーム:Webアプリケーション、デスクトップアプリケーション、モバイルアプリなど、テスト対象のアプリケーションが動作するプラットフォームに対応しているか。

レポート機能:テスト結果をわかりやすく報告できる機能が備わっているか。

2. テスト自動化の範囲の決定

テスト自動化は、以下のような特徴を持つ課題に適しています。

  • テストするデータ量が大きい
  • 複数の画面や機能でテストケースの再利用性が高い
  • 複雑なテストシナリオ: 手動テストでは実施が難しい、大量の同時アクセスや特定の条件下での動作検証など
  • 結果を検証する論理的な可行性:例えば、アプリケーションのUXを評価するためにテスト自動化を用いるのが非常に難しい場合

これらの特徴を踏まえ、プロジェクト内でテスト自動化を適用する範囲を決定します。

3. テストケースとスクリプトの作成

この段階では、具体的なテストケースに基づいて、テスト自動化ツールで実行するためのスクリプトを作成します。これは、プログラミングと同様の作業であり、作成したスクリプトは、他のプロジェクトや機能でも再利用できるよう、モジュール化を進めることが理想です。

4. テスト自動化の実行

5. 更新と保守

テスト自動化ケースは、まるで小さなプロジェクトのように管理する必要があります。ソフトウェアやアプリケーションが変更されるたびに、テストケースもそれに合わせて更新・修正する必要があります。これにより、テスト自動化の有効性を維持し、常に最新の状態に保つことが重要です。

テスト自動化エンジニアに必要なスキル

テスト自動化エンジニアを目指す方は、まず手動テストに関する基礎知識、テストの種類、手法をしっかりと身につけることが大切です。テスト自動化の技法はすべて基本的なテストに関する知識に基づいているため、テスト自動化は職業能力を拡張するためのツールとして捉え、独立した道としてではなく考えるようにしましょう。

テスト自動化エンジニアには、以下のスキルが求められます。

  • オブジェクトの識別:Webアプリケーションの対象要素を、HTMLやXPathなどの言語を用いて正確に特定するスキル
  • テスト自動化ツールの選択:Seleniumのような一般的なツールから、プロジェクトに適したツールを選択する能力
  • プログラミングスキル:テスト自動化ツールでスクリプトを作成するためのJava、Python、C#などのプログラミング言語の知識
  • コーディング、デバッグ、IDE活用のスキル
  • 継続的な学習:テスト自動化の分野に関する新しいツール、技術の学習能力

まとめ

テスト自動化はソフトウェアテストの一分野であり、現在も発展を続けており、プロジェクトの開発においてますます重要な役割を果たしています。テスト自動化エンジニアになることは、あなたのキャリアにとって大きなステップアップとなるかもしれません。この記事では、テスト自動化の概要と、テスト自動化エンジニアに必要なスキルについて解説しました。

この記事が、テスト自動化に興味のある方にとって、少しでも参考になれば幸いです。今後も、この分野に関する情報を発信していきますので、ぜひご期待ください。

ペンテストとは?侵入テストに関するノウハウ

技術アプリケーションを構築する際、ウェブアプリやモバイルアプリなどの製品のセキュリティを強化するために欠かせないステップの1つが、侵入テスト(ペネトレーションテスト)です。では、ペンテストとは具体的に何か、企業における情報セキュリティに対するこのモジュールの役割はどのようなものか、以下の記事で探ってみます。

ペンテストとは? 

ペンテストは「ペネトレーションテスト」の略で、システムの安全性を評価する手段として、実際の攻撃をシミュレーションした攻撃によって実施されます。シンプルに言えば、ペンテストはシステムに侵入し、ハッカーが悪用する可能性のある潜在的な弱点を発見しようとします。
ペンテストの目的は、組織ができるだけ多くの脆弱性を特定し、それを修正することで、将来的な攻撃の可能性を排除することです。侵入テストを行う人は「ペンテスター」と呼ばれます。
ペンテストは、コンピュータシステム、ウェブアプリ、モバイルアプリ、ネットワークインフラ、IoT、クラウドサービス、SaaSソフトウェアサービス、API、ソースコード、またはインターネットに接続され攻撃される可能性のあるIT対象に対して行われますが、最も一般的なのはウェブアプリとモバイルアプリのペンテストです。これらの要素は「ペンテスト対象」と呼ばれます。
侵入を実施する際、ペンテスターはそのシステムまたはソフトウェアの所有者からの許可を得る必要があります。許可がない場合、その行為は違法なハッキングと見なされます。実際、ペンテストとハッキングの境界は対象の所有者の許可によって決まります。したがって、ペンテストの概念は「倫理的ハッキング(エシカルハッキング)」に似た意味を持ち、ペンテスターは「ホワイトハットハッカー」とも呼ばれます。
ペンテストを理解するためには、セキュリティにおける「脆弱性」、「エクスプロイト」、「ペイロード」という3つの基本概念を理解する必要があります。

  • 脆弱性(vulnerabilities):これは、ソフトウェア、ハードウェア、オペレーティングシステム、またはウェブアプリケーションのセキュリティ上の弱点であり、攻撃者がシステムを攻撃するための足がかりを提供します。脆弱性は、弱いパスワードのような単純なものから、SQLインジェクションやバッファオーバーフローのような複雑なものまであります。
  • エクスプロイト(exploits):これは、脆弱性、エラー、バグを悪用して、コンピュータシステム上で異常な動作を引き起こすための行動です。この行動には、権限昇格、機密情報の盗難、サービス拒否攻撃などが含まれます。
  • ペイロード(payloads):これは脆弱性を持つシステムの一部であり、攻撃のターゲットです。

ペンテストの形式

ホワイトボックステスト:ホワイトボックスペンテストでは、テスト担当者に対して対象に関する詳細情報(IPアドレス、ネットワークインフラの図、使用されるプロトコル、ソースコードなど)が提供されます。

グレーボックステスト:グレーボックスペンテストは、テスト担当者が対象に関する制限された情報(URL、IPアドレスなど)を持つ形式です。対象の十分な情報やアクセス権限を持てない。

ブラックボックステスト:ブラックボックスペンテスト、または「ブラインドテスト」とも呼ばれるこの形式のペンテストは、現実世界のハッカーの視点から行われます。この形式では、テストを実施する専門家は、攻撃対象について事前に一切の情報を受け取らず、対象に関する情報を自ら調査・収集し、その後テストを行います。このタイプのペンテストは、多くの時間と攻撃への努力が必要なため、コストが高くなります。

他にも、ダブルブラインドテスト、外部テスト、内部テスト、ターゲットテストなどのペンテスト形式がありますが、これらはベトナムではあまり普及しておらず、特定の企業のニーズに応じてのみ使用されます。

ペネトレーションテストの歴史

1960年代半ば、コンピュータネットワークを介したデータ通信の能力が向上したことで、専門家たちは、政府や企業のネットワークへの侵入攻撃が発生し、交換されるデータにアクセスされる可能性について警告を発しました。1967年に開催された年次コンピュータ会議(AFIPS)には、15,000人以上のコンピュータセキュリティの専門家が集まり、そこで「ペネトレーション(侵入)」という用語が議論され、定義されました。
1967年の終わりに、RAND Corporationは米国の国防高等研究計画局(DARPA)と協力して、ウィリスレポート(プロジェクトリーダーの名前に由来)と呼ばれる専門的な報告書を作成しました。この報告書では、インターネットのセキュリティ問題について議論し、政策を提案しました。この報告書は、今日のセキュリティ対策の基礎を築いたものでした。この報告に基づいて、米国政府は企業と協力して「コンピュータネットワークシステムの脆弱性を発見し、侵入や不正利用からシステムを保護する」ことを目的としたグループを設立しました。
世界で最初のペンテストチームは「タイガーチーム」と呼ばれ、1960年代後半に設立され、コンピュータネットワークに攻撃を仕掛け、その防御力を評価する役割を担いました。その結果は、リーダーたちを驚かせるものでした。

なぜペンテストが必要なのか?

今日、テクノロジーの発展により、侵入テストは多くの企業の情報セキュリティシステムに欠かせないモジュールとなっています。
ペネトレーションテスト(侵入テスト)は、ウェブ、モバイルアプリ、ネットワーク、IoTなどをハッカーの攻撃から守るための効果的なセキュリティソリューションです。現実の攻撃をシミュレートすることにより、テストエンジニアはシステムのセキュリティ上の弱点を発見し、それによって企業がハッカーに利用される前に脆弱性を修正することで、金銭的損失や評判の損失を防ぐことができます。
市場調査会社Market Watchによると、ペンテスト市場は2018年に9億2000万ドルであり、2025年には24億2000万ドルに達すると予測され、2019年から2025年までの間に年平均成長率(CAGR)は14.9%に達する見込みです。サイバー犯罪者からのシステム耐性テストの需要は非常に高く、この成長の理由は4つの要素にあります。

ペンテストが現代企業に不可欠な4つの理由

ウェブアプリ、モバイルアプリの開発の増加

まず、デジタル経済のビジネスモデルは、企業がウェブサイトやモバイルアプリを使用して顧客とつながり、対話し、サービスを提供することを求めています。これは一部の組織にとって利点であると同時に、必要条件でもあります。なぜなら、消費者の行動は変化しており、彼らはオンラインでの利便性を好んでいるからです。したがって、オフライン販売のリスク(在庫、店舗コスト)を回避する一方で、企業はウェブサイトのハッキング、モバイルアプリのハッキング、顧客情報や重要なデータの盗難、業務の中断、ウイルスやマルウェアの感染など、サイバーリスクも背負うことになります。

デジタルトランスフォーメーションのトレンド

次に、現代企業は「デジタル化」や「デジタルトランスフォーメーション」のトレンドに追いつく必要があります。新しい技術を業務に取り入れることで、人件費や運用コストを削減できる一方で、ハッカーによる攻撃対象が増加します。ERPシステム、CRMシステム、IoTデバイスなどがその典型です。これらのデジタル製品が適切に保護されていない場合、サイバー犯罪者のターゲットとなる可能性があります。

SaaSソフトウェア

次に、第三に、オンプレミス ソフトウェアと比較して、有料の「as-a-service」ソフトウェアを使用する傾向が増加しています。これはユーザーに利便性を提供する一方で、サービス提供者にとってはセキュリティリスクが増大します。SaaS、IaaS、PaaS、FaaSのようなサービスモデルは常にインターネット接続を必要とするため、サービスの中断や攻撃のリスクが高まり、ユーザーエクスペリエンスに影響を与える可能性があります。

人間の創造性を持つ攻撃者

最後に、シミュレーション攻撃によるセキュリティ強化は、どんなに高度な防御システムでも提供できない利点を企業にもたらします。ペンテスターは、現実のハッカーと同じように「人間らしい」クリエイティブな方法で攻撃を行います。

ペンテストの利点

定期的かつ適切にペンテストを実施することで、企業は重要なセキュリティ目標を達成できます。

  • ウェブアプリ、モバイルアプリ、ネットワーク、IoT、API、クラウドシステム、SaaS、ハードウェアなどのセキュリティを強化し、ハッカーによる不正侵入を最小限に抑える。
  • リーダーは、組織のアプリケーションと技術製品のセキュリティ全体像を把握できる。
  • 実際の攻撃が引き起こす可能性のある損害を予測できる。
  • 企業のデータベースや重要な情報、ユーザー情報を保護する。
  • システムが安定して稼働し、攻撃による中断のリスクを最小限に抑えることができる。
  • 自動防御ツールでは見つけにくい危険な脆弱性を特定できる。
  • 各業界のセキュリティ基準(PCI DSS、HIPAA、ISO 27001など)を満たすことができる。
  • 顧客、パートナー、投資家に信頼感を与える。

データベースとは何ですか?現在の一般的なデータベースの種類

データベースは、関連する情報のストレージユニットの集まりであり、データベース管理システム(DBMS)によって管理されています。データベースは1960年代に、コンピュータシステム内の増大する複雑なデータの保存と管理の問題を解決する手段として登場しました。それ以前は、情報は個別のファイルに保存されており、体系的に整理されていなかったため、データ管理は非常に困難で、エラーが発生しやすく、時間がかかっていました。

  1. データベースとは? 

データベースは、関連する情報のストレージユニットの集まりであり、データベース管理システム-Database Management System(DBMS)によって管理されています。

ある会社が何百人もの従業員がいて、各従業員の名前、住所、電話番号、職位、給与などの情報を保存する必要があると想像してみます。データベースがない時代、この会社は各従業員の情報をテキストファイル(txt)やスプレッドシートファイル(csv)のような個別のファイルに保存していました。これは多くの問題があります:

  • データの重複:従業員の電話番号が変更された場合、その番号を含むすべてのファイルでこの情報を探して更新しなければなりません。これは時間がかかるだけでなく、見落としがあればエラーが発生する可能性があります。
  • データの検索が困難:特定の部門の全従業員を検索する場合、情報を確認するために各ファイルを開かなければならず、非常に不便で時間がかかります。
  • 整合性の欠如:従業員に関する情報がファイル間で不一致に更新された場合、企業は誤ったデータに基づいて意思決定を行うリスクがあります。

データベースは、関連するすべての情報を集中システムに保存することで、これらの問題を解決します。たとえば、従業員情報を個別のファイルに保存するのではなく、すべてのデータをデータベースに保存します。

従業員の電話番号を変更するとき、一つの場所で更新すればよく、その後のすべてのクエリは自動的にその変更を反映します。これにより重複が避けられ、データの整合性が確保され、情報の検索が容易で迅速に行えるようになります。

  1. 一般的なデータベースの種類

2.1 リレーショナルデータベース(関係データベース管理システム)

RDBMSは、一貫した信頼性のあるデータストレージソリューションを提供するために作成され、データが常に有効で安全な状態に保たれることを保証します。

2.1.1 リレーショナルデータベースとは? 

リレーショナルデータベースは、構造化されたデータストレージシステムであり、データは行(rows)と列(columns)の形式でテーブルに整理されます。各テーブルには一意の識別子(プライマリーキー)があり、外部キーを介して他のテーブルと関連付けることができます。

プライマリーキーは、各行のための一意の識別子であり、これは一つの列または複数の列の組み合わせで、テーブル内の各行が一意であることを保証します。このプライマリーキーは、その後、テーブルのインデックスを作成するために使用され、データのアクセスと検索を迅速化します。プライマリーキーとして選択される列の例には、電話番号、電子メール、従業員コード、製品コードなどがあります。

外部キーは、あるテーブルの列(または列の組み合わせ)であり、他のテーブル内の特定の行を参照するために使用されます。これにより、データベース内のテーブル間に関係が作れます。

2.1.2 リレーショナルデータベースの特徴

  • データの正規化:正規化は、データベース内のテーブルを調整して冗長性を排除し、データベースの整合性を改善するためのプロセスです。正規形は7つの階層構造で組織されています。
  • トランザクションはACIDを遵守:ACIDは、関係データベース内のトランザクションが安全かつ信頼性を持って実行されることを保証するための特性のセットであり、特に高い信頼性が求められるシステム(銀行や他の金融システム)で重要です。
  • SQLによるデータの取得:SQL(Structured Query Language)は、データベースと対話し操作するために使用されるクエリ言語です。SQLを使用して、データのクエリ、新しいデータの挿入、データの更新、データの削除などの操作を実行できます。

2.1.3 一般的なリレーショナルデータベース

  • MySQL:非常に人気のあるオープンソースの関係データベース管理システムで、高いパフォーマンスと安定性を持ち、Oracle Corporationによって開発および維持されています。MySQLは、WordPress、Joomla、Drupalなどのウェブアプリケーションによく使用されます。
  • PostgreSQL:オープンソースの先進的な関係データベース管理システムで、SQL標準への厳密な準拠で知られています。PostgreSQLは、多くの種類のインデックス、外部キー、トリガー、カスタムデータ型をサポートし、高いデータ整合性を求めるアプリケーションで人気の選択肢となっています。
  • Microsoft SQL Server:Microsoftが開発した関係データベース管理システムで、Azureや.NETなどの他のMicrosoft製品を使用する企業で広く使用されています。SQL Serverは、データ分析、レポート作成のためのツールを提供し、Microsoftの他のシステムとの統合が容易にできます。
  • Oracle Database:大規模企業や高いパフォーマンスとセキュリティを要求するシステムで広く使用される関係データベース管理システムです。Oracleは、データパーティショニング、マルチユーザー管理、複雑なトランザクションなどの高度な機能をサポートし、特に金融や銀行業界で役立ちます。

2.2 NoSQLデータベース

NoSQLは、従来のRDBMSとは異なる目的で設計されて、RDBMSの原則に従うのではなく、これらの原則を打破し、データの保存と管理における異なるニーズに合わせた新しい原則を作り出しています。

2.2.1 NoSQLデータベースとは? 

NoSQLデータベースとは、構造化されていないデータ、半構造化データ、または従来のリレーショナルデータベースのようなテーブルモデルに従わないデータ(画像、音声、動画など)を処理するために設計されたデータベース管理システムの一種です。
NoSQLは「No SQL(SQLなし)」の略ではなく、実際には「Not Only SQL(SQLだけではない)」の略となります。これは、NoSQLデータベースがSQLを完全に排除するのではなく、従来のリレーショナルデータベース(RDBMS)とは異なるデータの保存とクエリの解決策を提供することを意味します。
NoSQLデータベースは、通常ACID原則に厳密に従うのではなく、分散環境において高いパフォーマンスと可用性を達成するために、BASE(Basically Available, Soft state, Eventually consistent)という原則を使用します。

2.2.2 NoSQLデータベースの特性

BASE原則の遵守:BASEは、ACID原則のより柔軟なバージョンであり、NoSQLの柔軟性に適応するために設計されています。NoSQLはデータが即座に一貫性がない可能性があることを受け入れますが、時間がたって一貫性が得られるようになります。

CAP原則との強い関連性:NoSQLは、整合性、一貫性、パーティション耐性のバランスを取るためにCAP原則(Consistency, Availability, Partition tolerance)を適用します。アプリケーションの具体的な要求に応じて、NoSQLシステムはCAPの要素の1つまたは2つを優先するように構成でき、残りの要素とのトレードオフを受け入れます。

2.2.3 一般的なNoSQLデータベースの種類

ドキュメント型データベース:これは、データをドキュメント形式で保存するNoSQLデータベースの一種であり、通常はJSON(JavaScript Object Notation)、XML(eXtensible Markup Language)、またはBSON(Binary JSON)などの形式が使われます。この種類に所属する一般的なデータベースにはMongoDB、CouchDB、Amazon DynamoDB、RethinkDBなどがあります。

キー・バリュー型データベース:これは、NoSQLデータベースの中で最もシンプルな種類であり、名前の通り、キーとバリューのペアとして値を保存します。各キーはインデックスであり、バリューはそのキーに対応する値です。この種類に所属する一般的なデータベースにはRedis、Riak KV、Berkeley DBなどがあります。

カラム指向データベース:これは、データを行ではなく列で保存すNoSQLデータベースの一種であり、リレーショナルデータベース(RDBMS)とは異なります。この種類に所属する一般的なデータベースにはHBase、Cassandra、Google Bigtableなどがあります。

グラフ型データベース:これは、グラフ構造のデータを保存し、クエリを最適化するために設計されたNoSQLデータベースの一種です。グラフ型データベースでは、データはノードとノード間の関係として表現されます。この種類に所属する一般的なデータベースにはNeo4j、Amazon Neptune、OrientDBなどがあります。

3. 結論

データベースは情報システムの中核要素であり、データを組織的かつ効率的に保存、管理、取得する役割を果たしています。技術の発展により、さまざまな種類のデータベースが登場し、それぞれ特定の目的に応じた特性と利点を持っています。
適切なデータベースの種類を選択することは、技術的要件だけでなく、アプリケーションのスケールや目的にもよります。各データベースの特性と利点・欠点を理解することで、正確な意思決定ができ、長期的なシステムのパフォーマンスと可用性を最適化することができます。

ブリッジSEとは?役割と必要なスキルをわかりやすく解説!

ブリッジシステムエンジニア(BrSE)は、IT分野におけるポジションであり、ますます需要が高まっています。VietIS Eduと一緒に、ブリッジエンジニアについて学んでみましょう。

1.ブリッジSE(BrSE)とは?

BrSEとは?

ブリッジシステムエンジニア(BrSE)とは、英語でBridge System Engineerの略称です。その名の通りこのポジションは、ITプロジェクトにおいて、顧客とプロダクト開発チームの間を取り持つ役割を担う人材を指します。日本企業とのコラボレーションプロジェクトでは、ブリッジSEが顧客との相互理解を確保し、プロジェクトの進捗管理を行うことが求められます。

IT業界の採用市場では、ブリッジSEは IT業界において非常に重要な役割を果たしていますが、人材不足に悩んでいます。なぜなら、ブリッジSEには顧客とのコミュニケーションに必要な日本語能力(N2以上)と、ソフトウェア製品の助言・提案・意見交換をできるように技術的な知識の両方が求められるからです。

顧客のニーズを理解し、開発チームに適切に伝えるとともに、開発計画や進捗状況を顧客に説明する役割を担います。優れたコミュニケーション能力と技術的な知識を兼ね備えた人材が求められています。

2.ブリッジSEとしての役割と必要なスキル

2.1.なぜブリッジSEが必要とされるのか?

ブリッジSEは、プロジェクトのあらゆる段階で、顧客と開発チームをつなぐ役割を担います。その業務は多岐にわたり、プロジェクトの規模や性質によって変化します。ブリッジSEの役割を要約すると以下のようになります。

ブリッジSE = ビジネスアナリスト + プロジェクトマネージャー + 開発者 + テスター

営業段階では、専門性の高いチームを編成する必要はありません。この段階では、ブリッジSEが顧客との窓口、計画立案、直接コーディング・テスト、製品デモなどの業務を一手に引き受けることができます。つまり、BrSEには以下のような役割が求められます。

ブリッジSE = ビジネスアナリスト + プロジェクトマネージャー + 開発者 + テスター

2.2.ブリッジSEの仕事内容

ブリッジSEの日々の業務内容

企業の事業領域によって異なりますが、一般的に以下のような業務が含まれます。

  • メールの管理・対応、顧客とのコミュニケーション
  • 日々の作業計画の立案
  • プロジェクトの進捗管理と品質管理
  • 定期的な進捗状況の評価
  • 週次/月次報告

ブリッジSEは自社と顧客双方との調整役を担い、両者の密接な協力体制を確保する必要があります。そのため、常に最新の情報を共有し、お互いの理解を深めることが重要です。

プロジェクト内での業務内容

ブリッジSEの業務は、プロジェクトの段階によって変化します。主な業務は以下のように分類できます。

  • プロジェクト開始時:研究、計画立案、準備
  • プロジェクト実行中:プロジェクトの活動の管理・監督、生産性及び品質を向上するための戦略や手法の見直し
  • プロジェクト終了時:総括、製品テスト、顧客への引き渡し

BrSEには、状況に応じて柔軟に対応し、高い生産性と品質を維持する能力が求められます。

2.3. ブリッジSEに必要とされる資質

専門知識

一部のBrSEポジションでは、翻訳・通訳業務が中心で、コーディングスキルは必須ではない場合もあります。しかし、本格的なBrSEとして、大規模なプロジェクトに携わるには、コーディングスキルが不可欠です。プロセス全体を理解し、自ら実行したり管理したりできる能力が求められます。

外国語能力

顧客の所在地によって、必要とされる外国語が異なります。ただし、少なくとも英語とクライアントの母語の2カ国語に堪能であれば、業務遂行に大いに役立ちます。

コミュニケーション力

橋渡し役として、両者の良好な関係を維持することが重要です。コンフリクトを回避し、円滑なコミュニケーションを実現する能力が必要とされます。

ソフトスキル

誰もが万能ではありません。上司や先輩から学び、自ら成長していく姿勢が重要です。書籍やマニュアルの学習、観察・模倣による学習など、あらゆる方法を活用して、スキルアップを図る必要があります。

2.4. ブリッジSEの給与水準

一般的に、BrSEとなるには少なくとも3年の経験が必要とされ、初期キャリアの人材は「フレッシャー」と呼ばれます。このレベルの人材は経験豊富なBrSEのもとで働き、月給は2,000ドル程度となります。

1~2年の経験を積むと、レベル1のブリッジSEとなり、自立して業務を担当できるようになります。この段階の月給は2,000~3,000ドルです。

レベル2のブリッジSEは、状況対応力とコミュニケーション力が求められ、小規模な部門長のような役割を担います。月給は3,000~4,000ドルです。

レベル3のブリッジSEは、個人での業務遂行力に加えて、計画立案やクライアントとの折衝、契約締結など、より高度な能力が必要とされます。月給は4,000~6,000ドルとなります。

長年の経験を積み、一定の実績を挙げたブリッジSEは、レベル4に到達し、自身で会社を設立する条件を備えます。この段階では、プロジェクトからの収益に応じた給与水準となります。