Domande e risposte sull'intervista di ingegneria del software [per principianti ed esperti]

Pubblicato: 2020-11-18

L'ingegneria del software è una delle scelte di carriera più ambite oggi. I professionisti di successo in questo campo competitivo devono bilanciare le loro capacità tecniche, commerciali e personali per rimanere in vantaggio nel gioco.

Inoltre, il progresso tecnologico sta accelerando e sconvolgendo le industrie. Quindi, è fondamentale tenersi al passo con i concetti fondamentali. Attraverso questo articolo, toccheremo le principali domande e risposte del colloquio di ingegneria del software per guidarti nella tua preparazione.

Prima di passare alle domande e risposte, diamo prima un'occhiata ad alcune designazioni di lavoro che puoi accettare in questo dominio:

  • Progettista di software
  • Sviluppatore full-stack
  • Programmatore di software
  • Responsabile di progetto informatico
  • Responsabile dei sistemi informativi
  • Scienziato dei dati
  • Ingegnere di apprendimento automatico
  • Ingegnere cloud
  • Ingegnere della sicurezza informatica

Durante il colloquio per una delle posizioni di cui sopra, il tuo potenziale datore di lavoro metterà alla prova le tue conoscenze e abilità concettuali. Pertanto, gli aspiranti ingegneri del software possono trarre vantaggio dalla combinazione dei loro diplomi con l'esperienza pratica, sia attraverso progetti pratici che stage.

Inoltre, la tua capacità comunicativa e l'orientamento al team possono svolgere un ruolo significativo nel distinguerti dai tuoi concorrenti. Quindi, mentre ti prepari per il ciclo di assunzione, tieni a mente queste cose.

Impara i corsi di software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Con questo, è giunto il momento di approfondire le domande più frequenti nei colloqui di lavoro di ingegneria del software.

Leggi: Carriera nello sviluppo di software

Domande e risposte sull'intervista di ingegneria del software

1. Elenca i diversi tipi di software.

I software per computer possono essere classificati nelle seguenti categorie:

  • Software di sistema
  • Software applicativo
  • Applicazioni web
  • Software incorporato
  • Software di intelligenza artificiale
  • Software scientifico

2. Distinguere tra un programma per computer e un software per computer.

Un programma per computer comprende un codice di programmazione in grado di eseguire un'attività ben definita al momento dell'esecuzione. Al contrario, il software per computer include file (documentazione e guida per l'utente) oltre al codice di programmazione. Pertanto, sia il programma che il software contengono una serie di istruzioni, ma la portata del software è più ampia rispetto a un programma.

3. Spiegare i passaggi principali di SDLC.

SDLC è una forma abbreviata del ciclo di vita dello sviluppo del software. È composto da molte fasi, tra cui:

  • Pianificazione: stima del software e altri aspetti della pianificazione del progetto
  • Analisi di fattibilità: Analisi dei requisiti, elenco delle specifiche del software
  • Progettazione del software: decisione di modelli di progettazione, sviluppo di prototipi
  • Sviluppo software: tradurre i requisiti in codice funzionante
  • Test: controllo del codice per requisiti dichiarati, qualità, pratiche di sviluppo sicure, ecc.
  • Distribuzione: implementazione del software e integrazione con diversi sistemi per creare un prodotto completamente funzionale
  • Documentazione del progetto: raccolta delle risorse e organizzazione dei file del software, inclusi codici, documenti e licenze.
  • Formazione e supporto: comunicare l'uso, le funzionalità e le possibilità della nuova tecnologia e facilitare un efficace trasferimento di conoscenze
  • Operazioni e manutenzione: segnalare problemi e apportare miglioramenti al prodotto

4. Elenca alcuni modelli e metodologie SDLC di base. Secondo te qual è il migliore?

Waterfall, V-Model, Iterative, Spiral, Big-bag e Agile sono alcuni dei modelli SDLC più popolari.

Per quanto riguarda la metodologia più classificata, non esiste una risposta univoca in quanto la soluzione dipende dalle esigenze del processo di sviluppo del software. Ad esempio, il modello Waterfall è adatto per progetti a lungo termine in cui è preferibile la flessibilità. Il modello a forma di V funziona bene quando ci sono requisiti sconosciuti. Il modello Spiral è ideale per progetti altamente personalizzati e così via.

5. Cosa intendi per re-ingegnerizzazione del software?

La reingegnerizzazione del software mira a migliorare un sistema software. È il processo di aggiornamento del software senza interferire con la sua funzionalità attuale. Può includere attività di manutenibilità, come l'aggiunta di nuove funzionalità per rendere il prodotto software più efficiente e facile da usare.

6. Definire quanto segue nel contesto dello sviluppo del software: (i) verifica (ii) validazione (iii) debugging

(i) La verifica implica l'esecuzione di una serie di attività per garantire che il software possa implementare una funzione specifica.

(ii) La convalida riguarda la conferma che il software soddisfa le esigenze dei clienti.

(iii) Il debug è una parte del processo di test, inclusa la rimozione degli errori.

7. Come garantiresti che il tuo codice sia veloce e sicuro?

Se l'esecuzione del codice è lenta, si calcola la complessità temporale del programma. Si riferisce al numero di volte in cui viene eseguita un'istruzione, che dipende, tra gli altri fattori, dal linguaggio di programmazione, dal sistema operativo e dalla potenza di elaborazione.

Inoltre, indipendentemente dal linguaggio di programmazione utilizzato, esistono diversi modi per proteggere il codice. Qui, la conoscenza delle pratiche di codifica sicura diventa essenziale. Ad esempio, la scansione del codice con strumenti gratuiti può aiutarti a rilevare le vulnerabilità nei pacchetti open source su GitHub.

8. Quali sono i requisiti software funzionali e non funzionali?

I requisiti sono le descrizioni del sistema software, le sue caratteristiche desiderate e le funzionalità mirate. Possono essere suddivisi in requisiti funzionali e non funzionali.

I requisiti funzionali sono ciò che gli utenti si aspettano dal prodotto proposto e i requisiti non funzionali si riferiscono ad aspetti come l'aspetto, le prestazioni, la sicurezza e l'interfaccia utente.

9. Come terresti traccia dei requisiti software?

Sul mercato è disponibile un'ampia varietà di strumenti per la raccolta e la gestione dei requisiti software. Modern Requirements, ReQtest, Jama Connect e Orcanos sono alcuni dei software RM più richiesti dai professionisti di oggi. La selezione si basa sulle metodologie e sugli obiettivi e varia da progetto a progetto. Tuttavia, il primo passo nel processo di tracciamento è elencare i requisiti e creare un foglio Excel con dettagli come tipo, dipendenza, priorità, ecc.

10. Cosa sai di modularizzazione e coesione?

La modularizzazione divide il sistema software in moduli discreti. Qui, ogni modulo dovrebbe svolgere compiti specifici in modo indipendente. La coesione misura e definisce l'intra-affidabilità tra i diversi elementi di un modulo.

11. Cosa fa un project manager software?

Un project manager ha il compito di responsabilità come pianificazione del progetto, monitoraggio dei progressi e comunicazione. Nel processo di sviluppo del software, il compito principale di un project manager è gestire le risorse, bilanciare i rischi e fornire il prodotto previsto rispettando i vincoli di tempo, costi e qualità.

12. Che cos'è l'ambito del software?

L'ambito del software include tutte le attività necessarie per fornire un prodotto software. Definisce i seguenti aspetti per snellire il processo di sviluppo:

  • Cosa farà il prodotto
  • Cosa non fa parte del progetto
  • Stima del progetto (con l'aiuto di consulenti, esperti o formule)

13. Come determinerai la fattibilità del tuo progetto?

Uno studio di fattibilità aiuta a misurare i vantaggi pratici che un progetto di sviluppo software può apportare a un'organizzazione. Gli analizzatori di software considerano tre fattori principali prima di preparare il loro rapporto finale. Li abbiamo spiegati in dettaglio di seguito:

  • Economico: costo di funzionalità e strumenti aggiuntivi, costi di formazione e analisi costi-benefici complessiva del progetto finale
  • Tecnico: Idoneità delle macchine e del software operativo, inclusa la possibilità di sviluppare il sistema proposto con il supporto tecnico disponibile e le risorse umane
  • Operativo: capacità di apportare modifiche e stare al passo con le richieste e la dignità del progetto al costo stimato.

14. Cita alcuni strumenti di analisi e progettazione del software.

L'analisi del software e le procedure di progettazione aiutano a tradurre le specifiche dei requisiti in implementazione. Ecco alcuni strumenti standard:

  • Diagrammi di flusso dei dati
  • Dizionario dati
  • Grafici strutturati
  • Grafici HIPO (Hierarchical Input Process Output).
  • Entità-Relazione o diagrammi ER
  • Tabelle decisionali

15. Qual è la differenza tra Structured English e Psuedo Code?

La lingua madre inglese utilizzata per scrivere la struttura di un modulo di programma è nota come inglese strutturato. Include parole chiave del linguaggio di programmazione.

Al contrario, la metodologia Pseudo Code è molto simile al linguaggio di programmazione ma senza alcuna sintassi specifica.

Leggi anche: Idee per progetti di sviluppo software

16. Come troverai le dimensioni di un prodotto software?

È possibile calcolare la dimensione del software calcolando le righe del codice fornito o i punti funzione. I punti funzione sono considerati una misura rilevante in quanto rappresentano le caratteristiche offerte da un prodotto software.

17. Cosa sono le metriche del software?

Le metriche del software si riferiscono alle misurazioni dei requisiti e del prodotto stesso.

  • Le metriche dei requisiti includono aspetti come la lunghezza e la completezza.
  • Le metriche del prodotto si riferiscono al numero di linee di codifica, design, metriche di test, metriche orientate agli oggetti, ecc.

18. Quali sono alcune tecniche utili per la stima dei progetti?

La stima del progetto è parte integrante della solida pianificazione del progetto software. Ecco alcuni metodi ampiamente utilizzati:

  • Decomposizione (ridimensionamento del software, tecniche basate sui problemi e basate sui processi)
  • Empirico (analisi di regressione, modello di costo costruttivo ed equazione software)

19. Come misureresti l'esecuzione del progetto?

La revisione dell'implementazione del software comporterebbe il monitoraggio delle attività, liste di controllo delle tappe fondamentali e rapporti sullo stato.

Gli strumenti di gestione del progetto forniscono un modo comodo per controllare i progressi. Diagramma di Gantt, Diagramma di Pert e Istogramma delle risorse sono alcuni altri esempi.

20. Definire la gestione della configurazione del software.

La gestione della configurazione riguarda il monitoraggio e il controllo delle modifiche in un progetto software. È fondamentale mantenere la coerenza del sistema software con le regole ei regolamenti organizzativi.

21. Qual è la differenza tra garanzia di qualità e controllo di qualità?

Vengono effettuati controlli di garanzia della qualità per scoprire se è stato seguito il corretto processo di sviluppo. D'altra parte, il controllo di qualità riguarda il mantenimento della qualità del prodotto finale.

22. Confronta la programmazione orientata all'interfaccia, agli oggetti e agli aspetti.

La programmazione dell'interfaccia è un modello architettonico basato su contratto applicato per ottenere un design modulare a livello di componente.

La programmazione orientata agli oggetti si occupa della scrittura di oggetti granulari con uno scopo unico.

La programmazione orientata agli aspetti mira a segregare il codice in modo che più oggetti svolgano i compiti principali e oggetti indipendenti svolgano i compiti sussidiari.

23. Quando dichiarare una classe come astratta?

Non è possibile creare un'istanza di una classe contenente una parola chiave astratta nella sua dichiarazione. È meglio dichiarare una classe come astratta nelle situazioni menzionate di seguito.

  • Quando almeno uno dei metodi nella classe è dichiarato astratto.
  • Quando una classe ereditata da una classe astratta include ancora metodi astratti.

24. Menziona la differenza principale tra: (i) Stack e coda (ii) Design orientato agli oggetti e ai componenti (iii) Thread e processo (iv) EXE e DLL (v) Tag e rami

(i) Stack segue il principio LIFO (Last In, First Out). Mentre, Queue è sempre FIFO, cioè First In, First Out.

(ii) La progettazione orientata agli oggetti può essere incorporata in una certa misura nella progettazione basata sui componenti. Tuttavia, non è possibile il contrario.

(iii) "Processo" si riferisce a un'istanza di un programma per computer in esecuzione. È più pesante e richiede più cambio di contesto. Un "thread" è un processo leggero che uno scheduler gestisce in modo indipendente. Un singolo programma può avere più di un thread.

(iv) Sia EXE che DLL sono programmi che richiedono spazio di archiviazione per essere eseguiti. Mentre EXE è un programma eseguibile di base, DLL è più dinamico. È un repository di codice esterno che puoi caricare ed eseguire, occupando quindi meno spazio.

(v) I tag rimangono su una versione specifica del codice e di solito non cambiano. Agiscono come punti di attesa temporanei per le versioni di versioni. I rami puntano sempre all'inizio della linea di sviluppo. Quindi, vengono eliminati una volta inviato un nuovo commit o quando le modifiche vengono unite nel trunk.

25. È una buona idea usare catch (eccezione)?

Catch (eccezione) dovrebbe essere utilizzato quando i tipi di eccezione sono noti. È una cattiva idea in quanto non è possibile leggere l'eccezione quando non è stata definita alcuna variabile.

26. Quale è preferibile tra i due: digitazione forte o digitazione debole?

La tipizzazione forte dovrebbe unificare la tipizzazione debole poiché controlla le variabili in fase di compilazione. Inoltre, può ridurre notevolmente i bug di sistema. Un linguaggio debolmente tipizzato esegue conversioni solo in fase di esecuzione e può produrre risultati imprevedibili.

27. Che cos'è un design strutturato?

Il design strutturato concettualizza il problema seguendo la strategia del "divide et impera". Questo approccio sistematico comporta la scomposizione del problema nei suoi sotto-elementi e la gestione di questi problemi minori individualmente. A causa di questa tattica, è anche chiamato metodo di progettazione della soluzione.

28. Descrivere la programmazione funzionale.

Il metodo di programmazione funzionale prevede l'applicazione di concetti matematici. Fornisce un modo per calcolare funzioni matematiche, generando così risultati indipendentemente dallo stato del programma.

29. Come dare priorità ai requisiti?

Innanzitutto, devi valutare la struttura dei dati. Quindi, dovresti formulare una struttura di codice per supportare lo stesso.

30. Cosa sai degli strumenti CASE?

CASE è il termine abbreviato per Computer-Aided Software Engineering. Consiste in un insieme di applicazioni software automatizzate che supportano le attività SDLC. Gli strumenti CASE possono migliorare e rafforzare i progetti software offrendo questi servizi:

  • Analisi dei requisiti
  • Analisi della struttura
  • Generazione di codice
  • Generazione di casi di prova
  • Produzione di documenti
  • Ingegneria inversa

Gli asporto

Il Bureau of Labor Statistics (Stati Uniti) prevede che la domanda di sviluppatori di software aumenterà del 22% nel prossimo decennio. E è probabile che l'India incontrerà la stessa impennata della domanda.

Secondo il "Rapporto sulla forza lavoro per l'India" di LinkedIn, gli annunci di lavoro di ingegneria del software sulla sua piattaforma sono stati i più alti in più settori nella prima metà del 2018. Man mano che avanziamo, le opportunità in settori importanti come l'istruzione, il legale e il design sarebbero continuare a salire. Leggi lo stipendio degli sviluppatori di software in India.

Come osservato attraverso le domande sopra elencate, qualcuno che cerca di entrare in questa professione avrebbe bisogno di un'ampia gamma di competenze interconnesse. Ecco un'istantanea delle abilità difficili che dovresti acquisire:

  • C++, C#, Java
  • HTML, CSS JavaScript
  • SQL, Python, Bootstrap
  • Design orientato agli oggetti
  • Software di debug e test
  • Codifica nelle lingue moderne (Ruby, Go, R, ecc.)
  • Conoscenza di progetti di intelligenza artificiale e così via

Oltre a queste capacità tecniche, dovresti padroneggiare l'arte del multitasking, della comunicazione, della gestione del tempo, dell'attenzione ai dettagli e del lavoro di squadra.

Per quanto riguarda i titoli di studio, una laurea in informatica o settori correlati copre in genere i criteri minimi di ammissibilità per i lavori di livello base. Ma il percorso professionale di ognuno risulta un po' diverso. Alcuni potrebbero essere entrati nella forza lavoro attraverso lo studio autonomo, corsi online o bootcamp di codifica. Altri potrebbero aver conseguito un diploma avanzato dopo aver lavorato nell'IT per alcuni anni.

Avere credenziali di livello post-laurea può aiutarti a far ripartire la tua carriera e persino a guadagnare un'ambita promozione di lavoro. Dai un'occhiata al Master in Computer Science di upGrad certificato dalla Liverpool John Moores University. Mira a fornirti competenze rilevanti per il settore attraverso una pedagogia altamente interattiva.

Puoi anche scegliere il programma Executive PG in Software Development - Specialization in Full Stack Development di IIIT-B o una certificazione PG specializzata, a seconda dei tuoi interessi e aspirazioni di carriera. Tali certificati hanno un impegno di tempo più breve rispetto ai corsi di master e diploma. Ti consentono di dimostrare le tue abilità in un'area particolare, come sviluppo back-end, sviluppo front-end, sicurezza informatica, DevOps, big data e cloud computing.

Con questo, abbiamo coperto le principali domande e risposte del colloquio di ingegneria del software . Abbiamo cercato di includere argomenti generali e tecnici. Inoltre, abbiamo menzionato le potenziali scelte di carriera e fornito una panoramica delle tendenze e delle prospettive nel settore IT. Usa queste informazioni come segnaletica per il tuo percorso di apprendimento e ottimizza la tua strategia di preparazione!

Atterra sul lavoro dei tuoi sogni

Richiedi la Laurea Magistrale in Informatica