ソフトウェア工学面接の質問と回答[新入生と経験者向け]
公開: 2020-11-18ソフトウェアエンジニアリングは、今日最も求められているキャリアの選択肢の1つです。 この競争の激しい分野で成功する専門家は、ゲームで先を行くために、技術、ビジネス、および個人のスキルのバランスをとる必要があります。
さらに、技術の進歩は産業を加速させ、混乱させています。 したがって、基本的な概念に遅れないようにすることが重要です。 この記事では、ソフトウェアエンジニアリングの面接に関する主要な質問と回答に触れて、準備を進めます。
Q&Aに進む前に、まずこのドメインで採用できるいくつかの職種を見てみましょう。
- ソフトウェアデザイナー
- フルスタック開発者
- ソフトウェアプログラマー
- ITプロジェクトマネージャー
- 情報システムマネージャー
- データサイエンティスト
- 機械学習エンジニア
- クラウドエンジニア
- サイバーセキュリティエンジニア
上記のポジションのいずれかについて面接するとき、あなたの将来の雇用主はあなたの概念的な知識とスキルをテストします。 したがって、意欲的なソフトウェアエンジニアは、実践的なプロジェクトであろうとインターンシップであろうと、学位と実践的な経験を組み合わせることで利益を得ることができます。
その上、あなたのコミュニケーション能力とチーム志向は、あなたを競合他社から際立たせる上で重要な役割を果たすことができます。 したがって、採用サイクルの準備をするときは、これらのことを念頭に置いてください。
世界のトップ大学からオンラインソフトウェアコースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

これで、ソフトウェアエンジニアリングの就職の面接で最もよく聞かれる質問を掘り下げる時が来ました。
読む:ソフトウェア開発のキャリア
ソフトウェアエンジニアリングインタビューの質問と回答
1.さまざまな種類のソフトウェアを一覧表示します。
コンピュータソフトウェアは、次のカテゴリに分類できます。
- システムソフトウェア
- アプリケーションソフトウェア
- Webアプリケーション
- 組み込みソフトウェア
- AIソフトウェア
- 科学ソフトウェア
2.コンピュータプログラムとコンピュータソフトウェアを区別します。
コンピュータプログラムは、実行時に明確に定義されたタスクを実行できるプログラミングコードで構成されます。 逆に、コンピュータソフトウェアには、プログラミングコードに加えて、ファイル(ドキュメントとユーザーガイド)が含まれています。 したがって、プログラムとソフトウェアの両方に一連の命令が含まれていますが、ソフトウェアの範囲はプログラムに比べて広いです。
3.SDLCの主な手順を説明します。
SDLCは、ソフトウェア開発ライフサイクルの短縮形です。 これは、次のような多くの段階で構成されています。
- 計画:ソフトウェア見積もりおよびプロジェクト計画の他の側面
- 実現可能性分析:要件分析、ソフトウェア仕様の一覧表示
- ソフトウェア設計:設計パターンの決定、プロトタイプの開発
- ソフトウェア開発:要件を実用的なコードに変換する
- テスト:規定された要件、品質、安全な開発慣行などについてコードをチェックします。
- 展開:ソフトウェアを実装し、それをさまざまなシステムと統合して、完全に機能する製品を作成します
- プロジェクトのドキュメント:リソースを収集し、コード、ドキュメント、ライセンスなどのソフトウェアファイルを整理します。
- トレーニングとサポート:新しいテクノロジーの使用、機能、可能性を伝え、効果的な知識の伝達を促進します
- 運用と保守:問題の報告と製品の改善
4.いくつかの基本的なSDLCモデルと方法論をリストします。 あなたによると、どれが最高ですか?
ウォーターフォール、Vモデル、反復、スパイラル、ビッグバッグ、アジャイルは、最も人気のあるSDLCモデルの一部です。
最高ランクの方法論に関しては、ソリューションはソフトウェア開発プロセスの必要性に依存するため、単一の答えはありません。 たとえば、ウォーターフォールモデルは、柔軟性が望ましい長期プロジェクトに適しています。 V字型モデルは、不明な要件がある場合に適切に機能します。 スパイラルモデルは、高度にカスタマイズされたプロジェクトなどに最適です。
5.ソフトウェアリエンジニアリングとはどういう意味ですか?
ソフトウェアのリエンジニアリングは、ソフトウェアシステムの改善を目的としています。 これは、現在の機能を妨げることなくソフトウェアを更新するプロセスです。 これには、ソフトウェア製品をより効率的でユーザーフレンドリーにするための新機能の追加などの保守性タスクを含めることができます。
6.ソフトウェア開発のコンテキストで、以下を定義します。(i)検証(ii)検証(iii)デバッグ
(i)検証には、ソフトウェアが特定の機能を実装できることを確認するための一連のアクティビティの実行が含まれます。
(ii)検証とは、ソフトウェアがクライアントのニーズを満たしていることを確認することです。
(iii)デバッグは、エラーの除去を含むテストプロセスの一部です。
7.コードが高速で安全であることをどのように確認しますか?
コードの実行が遅い場合は、プログラムの時間計算量を計算します。 これは、ステートメントが実行される回数を指します。これは、プログラミング言語、オペレーティングシステム、処理能力などの要因によって異なります。
また、使用するプログラミング言語に関係なく、コードを保護する方法はいくつかあります。 ここでは、安全なコーディング手法の知識が不可欠になります。 たとえば、無料のツールを使用してコードをスキャンすると、GitHubのオープンソースパッケージの脆弱性を検出するのに役立ちます。
8.機能的および非機能的なソフトウェア要件は何ですか?
要件は、ソフトウェアシステムの説明、その必要な機能、および対象となる機能です。 それらは、機能要件と非機能要件に分けることができます。
機能要件は、ユーザーが提案された製品に期待するものであり、非機能要件は、外観、パフォーマンス、セキュリティ、ユーザーインターフェイスなどの側面に関連しています。
9.ソフトウェア要件をどのように追跡しますか?
市場のソフトウェア要件を収集および管理するために利用できるさまざまなツールがあります。 Modern Requirements、ReQtest、Jama Connect、およびOrcanosは、今日の実務家の間で最も人気のあるRMソフトウェアの一部です。 選択は方法論と目標に基づいており、プロジェクトごとに異なります。 それでも、追跡プロセスの最初のステップは、要件を一覧表示し、タイプ、依存関係、優先度などの詳細を含むExcelシートを作成することです。
10.モジュール化と結束について何を知っていますか?
モジュール化により、ソフトウェアシステムが個別のモジュールに分割されます。 ここでは、すべてのモジュールが指定されたタスクを独立して実行することが期待されています。 結束性は、モジュールのさまざまな要素間の内部依存性を測定および定義します。
11.ソフトウェアプロジェクトマネージャーは何をしますか?
プロジェクトマネージャーは、プロジェクト計画、進捗状況の監視、コミュニケーションなどの責任を負っています。 ソフトウェア開発プロセスでは、プロジェクトマネージャーの主な任務は、リソースを管理し、リスクのバランスを取り、時間、コスト、および品質の制約に準拠した目的の製品を提供することです。
12.ソフトウェアスコープとは何ですか?
ソフトウェアの範囲には、ソフトウェア製品を提供するために必要なすべてのアクティビティが含まれます。 開発プロセスを合理化するために、次の側面を定義します。
- 製品が何をするか
- プロジェクトの一部ではないもの
- プロジェクトの見積もり(コンサルタント、専門家、または公式の助けを借りて)
13.プロジェクトの実現可能性をどのように判断しますか?
実現可能性調査は、ソフトウェア開発プロジェクトが組織にもたらす可能性のある実際的なメリットを測定するのに役立ちます。 ソフトウェアアナライザーは、最終レポートを作成する前に、3つの主要な要素を考慮します。 以下に詳細を説明します。
- 経済的:追加の機能とツールのコスト、トレーニングコスト、および最終プロジェクトの全体的な費用便益分析
- 技術:利用可能な技術サポートと人材を使用して提案されたシステムを開発する可能性を含む、マシンとオペレーティングソフトウェアの適合性
- 運用:調整を行い、見積もりコストで需要とプロジェクトの価値に対応する能力。
14.いくつかのソフトウェア分析および設計ツールに言及します。
ソフトウェアの分析と設計手順は、要件仕様を実装に変換するのに役立ちます。 ここにいくつかの標準的なツールがあります:
- データフロー図
- データディクショナリ
- 構造化チャート
- HIPO(階層入力プロセス出力)チャート
- 実体関連図またはER図
- デシジョンテーブル
15.構造化英語と疑似コードの違いは何ですか?
プログラムモジュールの構造を書くために使用されるネイティブ英語は、構造化英語として知られています。 プログラミング言語のキーワードが含まれています。
対照的に、擬似コードの方法論はプログラミング言語によく似ていますが、特定の構文はありません。

また読む:ソフトウェア開発プロジェクトのアイデア
16.ソフトウェア製品のサイズをどのように見つけますか?
提供されたコードの行またはファンクションポイントを計算することにより、ソフトウェアサイズを計算できます。 ファンクションポイントは、ソフトウェア製品によって提供される機能を表すため、関連する測定値と見なされます。
17.ソフトウェアメトリクスとは何ですか?
ソフトウェアメトリクスは、要件と製品自体の測定値を指します。
- 要件メトリックには、長さや完全性などの側面が含まれます。
- 製品メトリックは、コーディングラインの数、設計、テストメトリック、オブジェクト指向メトリックなどに関連しています。
18.いくつかの有用なプロジェクト見積もり手法は何ですか?
プロジェクトの見積もりは、健全なソフトウェアプロジェクト計画の不可欠な部分です。 広く使用されている方法は次のとおりです。
- 分解(ソフトウェアのサイジング、問題ベース、およびプロセスベースの手法)
- 経験的(回帰分析、建設的コストモデル、およびソフトウェア方程式)
19.プロジェクトの実行をどのように測定しますか?
ソフトウェア実装のレビューには、アクティビティの監視、マイルストーンチェックリスト、およびステータスレポートが含まれます。
プロジェクト管理ツールは、進捗状況を確認するための快適な方法を提供します。 ガントチャート、パートチャート、およびリソースヒストグラムは他の例です。
20.ソフトウェア構成管理を定義します。
構成管理とは、ソフトウェアプロジェクトの変更を追跡および制御することです。 ソフトウェアシステムと組織の規則や規制との一貫性を維持することが重要です。
21.品質保証と品質管理の違いは何ですか?
適切な開発プロセスが実行されたかどうかを確認するために、品質保証チェックが行われます。 一方、品質管理は最終製品の品質を維持することに関係しています。
22.インターフェース指向、オブジェクト指向、およびアスペクト指向プログラミングを比較します。
インターフェイスプログラミングは、コンポーネントレベルでモジュラー設計を実現するために適用されるコントラクトベースのアーキテクチャパターンです。
オブジェクト指向プログラミングは、単一の目的を持つきめ細かいオブジェクトの記述を扱います。
アスペクト指向プログラミングは、複数のオブジェクトがメインタスクを実行し、独立したオブジェクトが補助タスクを実行するようにコードを分離することを目的としています。
23.クラスを抽象として宣言するのはいつですか?
宣言にabstractキーワードを含むクラスは、インスタンス化できません。 以下の状況では、クラスを抽象として宣言するのが最善です。
- クラス内のメソッドの少なくとも1つが抽象として宣言されている場合。
- 抽象クラスから継承されたクラスにまだ抽象メソッドが含まれている場合。
24.次の主な違いを挙げてください。(i)スタックとキュー(ii)オブジェクト指向とコンポーネント指向の設計(iii)スレッドとプロセス(iv)EXEとDLL(v)タグとブランチ
(i)スタックは後入れ先出し(LIFO)の原則に従います。 一方、キューは常にFIFO、つまり先入れ先出しです。
(ii)オブジェクト指向設計は、コンポーネントベースの設計にある程度組み込むことができます。 ただし、その逆はできません。
(iii)「プロセス」とは、実行中のコンピュータプログラムのインスタンスを指します。 それはより重く、より多くのコンテキスト切り替えを必要とします。 「スレッド」は、スケジューラーが独立して管理する軽量プロセスです。 1つのプログラムに複数のスレッドを含めることができます。
(iv)EXEとDLLはどちらも、実行にストレージスペースを必要とするプログラムです。 EXEは基本的な実行可能プログラムですが、DLLはより動的です。 これは、ロードして実行できる外部コードリポジトリであるため、占有するスペースが少なくて済みます。
(v)タグはコードの特定のバージョンに残り、通常は変更されません。 これらは、バージョン管理リリースの一時的な保管場所として機能します。 ブランチは常に開発ラインの最上位を指します。 したがって、新しいコミットがプッシュされるか、変更がトランクにマージされると、それらは削除されます。
25. catch(例外)を使用するのは良い考えですか?
例外タイプがわかっている場合は、キャッチ(例外)を使用する必要があります。 変数が定義されていない場合は例外を読み取ることができないため、これは悪い考えです。
26.強いタイピングと弱いタイピングのどちらが望ましいですか?
強い型付けは、コンパイル時に変数をチェックするため、弱い型付けを1つ上げることになっています。 また、システムのバグを大幅に最小限に抑えることができます。 弱い型の言語は実行時にのみ変換を実行し、予測できない結果を生成する可能性があります。
27.構造化設計とは何ですか?
構造化設計は、「分割統治」戦略に従って問題を概念化します。 この体系的なアプローチでは、問題をサブ要素に分割し、これらの小さな問題に個別に対処する必要があります。 この戦術により、ソリューション設計手法とも呼ばれます。
28.関数型プログラミングについて説明します。
関数型プログラミングの方法には、数学的概念の適用が含まれます。 数学関数を計算する方法を提供し、プログラムの状態に関係なく結果を生成します。
29.要件にどのように優先順位を付けますか?
まず第一に、データ構造を評価する必要があります。 次に、同じことをサポートするコード構造を作成する必要があります。
30. CASEツールについて何を知っていますか?
CASEは、Computer-AidedSoftwareEngineeringの略語です。 これは、SDLCアクティビティをサポートする一連の自動ソフトウェアアプリケーションで構成されています。 CASEツールは、次のサービスを提供することにより、ソフトウェアプロジェクトを強化および強化できます。
- 要件分析
- 構造解析
- コード生成
- テストケースの生成
- ドキュメントの作成
- リバースエンジニアリング
要点
労働統計局(米国)は、ソフトウェア開発者の需要が今後10年間で22%増加すると予測しています。 そして、インドも同様の需要の急増に直面する可能性があります。
LinkedInの「WorkforceReportforIndia」によると、そのプラットフォームでのソフトウェアエンジニアリングの求人広告は、2018年上半期に複数の業界で最高でした。今後、教育、法務、デザインなどの著名なセクターでの機会は上昇し続けます。 インドのソフトウェア開発者の給与について読んでください。
上記の質問からわかるように、この職業に就こうとしている人は、相互に関連する幅広い能力を必要とします。 把握する必要のあるハードスキルのスナップショットを次に示します。

- C ++、C#、Java
- HTML、CSS JavaScript
- SQL、Python、ブートストラップ
- オブジェクト指向デザイン
- ソフトウェアのデバッグとテスト
- 現代語でのコーディング(Ruby、Go、Rなど)
- 人工知能プロジェクトなどの知識
これらの技術的能力とは別に、マルチタスク、コミュニケーション、時間管理、細部への注意、およびチームワークの技術を習得する必要があります。
教育資格に関しては、コンピュータサイエンスまたは関連分野の学士号は、通常、エントリーレベルの仕事の最低資格基準をカバーしています。 しかし、すべての人のキャリアパスは少し異なります。 一部の人は、自習、オンラインコース、またはコーディングブートキャンプを通じて労働力に加わった可能性があります。 他の人は、ITで数年間働いた後、高度な学位を取得した可能性があります。
大学院レベルの資格を持っていると、キャリアをスタートさせ、切望されている昇進を得るのに役立ちます。 リバプールジョンムーア大学によって認定されたコンピュータサイエンスのupGradのマスターをチェックしてください。 高度にインタラクティブな教育法を通じて、業界に関連するスキルを身に付けることを目的としています。
また、興味やキャリア志向に応じて、ソフトウェア開発のエグゼクティブPGプログラム–IIIT-Bによるフルスタック開発の専門分野または専門のPG認定資格を取得することもできます。 そのような証明書は、マスターコースや卒業証書コースと比較して、より短い時間のコミットメントを持っています。 バックエンド開発、フロントエンド開発、サイバーセキュリティ、DevOps、ビッグデータ、クラウドコンピューティングなど、特定の分野でのスキルを示すことができます。
これで、ソフトウェアエンジニアリングの面接の上位の質問と回答について説明しました。 一般的なトピックと技術的なトピックを含めるようにしました。 また、潜在的なキャリアの選択肢について言及し、IT業界の傾向と展望の概要を説明しました。 この情報を学習の旅の道標として使用し、準備戦略を合理化してください。