Perguntas e respostas da entrevista de engenharia de software [para calouros e experientes]

Publicados: 2020-11-18

A engenharia de software é uma das opções de carreira mais procuradas atualmente. Profissionais de sucesso neste campo competitivo precisam equilibrar suas habilidades técnicas, comerciais e pessoais para permanecer à frente no jogo.

Além disso, o avanço tecnológico está acelerando e interrompendo as indústrias. Portanto, é fundamental manter-se a par dos conceitos fundamentais. Através deste artigo, abordaremos as principais perguntas e respostas da entrevista de engenharia de software para guiá-lo em sua preparação.

Antes de passarmos para as perguntas e respostas, vamos dar uma olhada em algumas designações de trabalho que você pode assumir neste domínio:

  • Designer de software
  • Desenvolvedor fullstack
  • Programador de software
  • gerente de projetos de TI
  • Gerente de sistemas de informação
  • Cientista de dados
  • Engenheiro de aprendizado de máquina
  • Engenheiro de nuvem
  • Engenheiro de cibersegurança

Ao entrevistar para qualquer uma das posições acima, seu possível empregador testaria seu conhecimento e habilidades conceituais. Portanto, aspirantes a engenheiros de software podem se beneficiar da combinação de seus diplomas com experiência prática, seja por meio de projetos práticos ou estágios.

Além disso, sua capacidade de comunicação e orientação para a equipe podem desempenhar um papel significativo em diferenciá-lo de seus concorrentes. Portanto, ao se preparar para o ciclo de contratação, lembre-se dessas coisas.

Aprenda cursos de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Com isso, agora é hora de se aprofundar nas perguntas mais frequentes em entrevistas de emprego de engenharia de software.

Leia: Carreira em Desenvolvimento de Software

Perguntas e respostas da entrevista de engenharia de software

1. Liste os diferentes tipos de software.

O software de computador pode ser classificado nas seguintes categorias:

  • Software de sistema
  • Software aplicativo
  • Aplicativos da web
  • Software embutido
  • Software de IA
  • Software científico

2. Diferencie um programa de computador e um software de computador.

Um programa de computador compreende um código de programação capaz de realizar uma tarefa bem definida na execução. Por outro lado, o software de computador inclui arquivos (documentação e guia do usuário) além do código de programação. Portanto, tanto o programa quanto o software contêm um conjunto de instruções, mas o escopo do software é mais amplo em comparação com um programa.

3. Explique os principais passos do SDLC.

SDLC é uma forma abreviada do Ciclo de Vida de Desenvolvimento de Software. É composto por várias etapas, incluindo:

  • Planejamento: estimativa de software e outros aspectos do planejamento do projeto
  • Análise de viabilidade: Análise de requisitos, listando especificações de software
  • Design de software: Decidindo padrões de design, desenvolvendo protótipos
  • Desenvolvimento de software: Traduzindo requisitos em código de trabalho
  • Teste: Verificação do código quanto aos requisitos declarados, qualidade, práticas de desenvolvimento seguras, etc.
  • Implantação: Implementar o software e integrá-lo a diferentes sistemas para criar um produto totalmente funcional
  • Documentação do projeto: Reunir os recursos e organizar os arquivos de software, incluindo códigos, documentos e licenças.
  • Treinamento e suporte: comunicar o uso, funcionalidades e possibilidades da nova tecnologia e facilitar uma transferência efetiva de conhecimento
  • Operações e manutenção: relatar problemas e fazer melhorias no produto

4. Liste alguns modelos e metodologias básicos de SDLC. Na sua opinião, qual é o melhor?

Waterfall, V-Model, Iterative, Spiral, Big-bag e Agile são alguns dos modelos SDLC mais populares.

Quanto à metodologia melhor classificada, não há uma resposta única, pois a solução depende da necessidade do processo de desenvolvimento de software. Por exemplo, o modelo Waterfall é adequado para projetos de longo prazo onde a flexibilidade é preferível. O modelo em forma de V funciona bem quando há requisitos desconhecidos. O modelo Spiral é ideal para projetos altamente personalizados e assim por diante.

5. O que você entende por reengenharia de software?

A reengenharia de software visa melhorar um sistema de software. É o processo de atualização do software sem interferir em sua funcionalidade atual. Pode incluir tarefas de manutenção, como adicionar novos recursos para tornar o produto de software mais eficiente e fácil de usar.

6. Defina o seguinte no contexto de desenvolvimento de software: (i) verificação (ii) validação (iii) depuração

(i) A verificação envolve a execução de um conjunto de atividades para garantir que o software possa implementar uma função específica.

(ii) A validação consiste em confirmar que o software atende às necessidades dos clientes.

(iii) A depuração faz parte do processo de teste, incluindo a remoção de erros.

7. Como você garantiria que seu código fosse rápido e seguro?

Se a execução do código for lenta, você calculará a complexidade de tempo do programa. Refere-se ao número de vezes que uma instrução é executada, que depende da linguagem de programação, sistema operacional e poder de processamento, entre outros fatores.

Além disso, independentemente da linguagem de programação que você usa, existem várias maneiras de proteger seu código. Aqui, o conhecimento de práticas de codificação seguras torna-se essencial. Por exemplo, escanear o código com ferramentas gratuitas pode ajudá-lo a detectar vulnerabilidades nos pacotes de código aberto no GitHub.

8. Quais são os requisitos de software funcionais e não funcionais?

Requisitos são as descrições do sistema de software, seus recursos desejados e funcionalidades direcionadas. Eles podem ser divididos em requisitos funcionais e não funcionais.

Os requisitos funcionais são o que os usuários esperam do produto proposto, e os requisitos não funcionais estão relacionados a aspectos como aparência, desempenho, segurança e interface do usuário.

9. Como você acompanharia os requisitos de software?

Existe uma grande variedade de ferramentas disponíveis para coletar e gerenciar requisitos de software no mercado. Requisitos modernos, ReQtest, Jama Connect e Orcanos são alguns dos softwares de RM mais procurados entre os profissionais atualmente. A seleção é baseada nas metodologias e objetivos e difere de projeto para projeto. No entanto, o primeiro passo no processo de rastreamento é listar os requisitos e criar uma planilha Excel com detalhes como tipo, dependência, prioridade, etc.

10. O que você sabe sobre modularização e coesão?

A modularização divide o sistema de software em módulos discretos. Aqui, espera-se que cada módulo execute tarefas especificadas de forma independente. A coesão mede e define a intradependência entre os diferentes elementos de um módulo.

11. O que faz um gerente de projeto de software?

Um gerente de projeto é encarregado de responsabilidades como planejamento do projeto, monitoramento do progresso e comunicação. No processo de desenvolvimento de software, o principal dever de um gerente de projeto é gerenciar os recursos, equilibrar os riscos e entregar o produto pretendido respeitando as restrições de tempo, custo e qualidade.

12. O que é escopo de software?

O escopo de software inclui todas as atividades necessárias para entregar um produto de software. Ele define os seguintes aspectos para agilizar o processo de desenvolvimento:

  • O que o produto fará
  • O que não faz parte do projeto
  • Estimativa do projeto (com a ajuda de consultores, especialistas ou fórmulas)

13. Como você determinará a viabilidade do seu projeto?

Um estudo de viabilidade ajuda a medir os benefícios práticos que um projeto de desenvolvimento de software pode trazer para uma organização. Os analisadores de software consideram três fatores principais antes de preparar seu relatório final. Nós os explicamos em detalhes abaixo:

  • Econômico: Custo de recursos e ferramentas adicionais, custos de treinamento e análise geral de custo-benefício do projeto final
  • Técnico: Adequação das máquinas e softwares operacionais, incluindo a possibilidade de desenvolvimento do sistema proposto com o suporte técnico e recursos humanos disponíveis
  • Operacional: Capacidade de fazer ajustes e acompanhar as demandas e o valor do projeto ao custo estimado.

14. Mencione algumas ferramentas de análise e projeto de software.

Os procedimentos de análise e projeto de software ajudam a traduzir as especificações de requisitos em implementação. Aqui estão algumas ferramentas padrão:

  • Diagramas de fluxo de dados
  • Dicionário de dados
  • Gráficos estruturados
  • Gráficos HIPO (Hierarchical Input Process Output)
  • Entidade-Relacionamento ou diagramas ER
  • Tabelas de decisão

15. Qual é a diferença entre o Inglês Estruturado e o Psuedo Code?

O idioma inglês nativo usado para escrever a estrutura de um módulo de programa é conhecido como inglês estruturado. Inclui palavras-chave de linguagem de programação.

Em contraste, a metodologia Pseudo Code se assemelha muito à linguagem de programação, mas sem nenhuma sintaxe específica.

Leia também: Ideias de projetos de desenvolvimento de software

16. Como você descobrirá o tamanho de um produto de software?

Você pode calcular o tamanho do software calculando as linhas do código entregue ou os pontos de função. Os pontos de função são considerados uma medida relevante, pois representam os recursos oferecidos por um produto de software.

17. O que são métricas de software?

As métricas de software referem-se às medições dos requisitos e do próprio produto.

  • As métricas de requisitos incluem aspectos como comprimento e integridade.
  • As métricas do produto estão relacionadas ao número de linhas de codificação, design, métricas de teste, métricas orientadas a objetos, etc.

18. Quais são algumas técnicas úteis de estimativa de projeto?

A estimativa de projeto é parte integrante de um planejamento de projeto de software sólido. Aqui estão alguns métodos amplamente utilizados:

  • Decomposição (dimensionamento de software, técnicas baseadas em problemas e técnicas baseadas em processos)
  • Empírico (análise de regressão, modelo de custo construtivo e equação de software)

19. Como você mediria a execução do projeto?

A revisão da implementação do software envolveria monitoramento de atividades, listas de verificação de marcos e relatórios de status.

As ferramentas de gerenciamento de projetos fornecem uma maneira confortável de verificar o progresso. Gráfico de Gantt, Gráfico de Pert e Histograma de Recursos são alguns outros exemplos.

20. Defina o gerenciamento de configuração de software.

O gerenciamento de configuração trata do rastreamento e controle de mudanças em um projeto de software. É vital manter a consistência do sistema de software com as regras e regulamentos organizacionais.

21. Qual é a diferença entre garantia de qualidade e controle de qualidade?

Verificações de garantia de qualidade são feitas para descobrir se o processo de desenvolvimento adequado foi seguido. Por outro lado, o controle de qualidade está preocupado em manter a qualidade do produto final.

22. Comparar programação orientada a interfaces, orientada a objetos e orientada a aspectos.

A programação de interface é um padrão de arquitetura baseado em contrato aplicado para alcançar o design modular no nível do componente.

A programação orientada a objetos lida com a escrita de objetos granulares com um propósito singular.

A programação orientada a aspectos visa segregar o código para que vários objetos carreguem as tarefas principais e objetos independentes carreguem as tarefas subsidiárias.

23. Quando declarar uma classe como abstrata?

Uma classe contendo uma palavra-chave abstrata em sua declaração não pode ser instanciada. É melhor declarar uma classe como abstrata nas situações mencionadas abaixo.

  • Quando pelo menos um dos métodos da classe é declarado como abstrato.
  • Quando uma classe herdada de uma classe abstrata ainda inclui métodos abstratos.

24. Mencione a principal diferença entre: (i) Stack vs queue (ii) Object-oriented vs component-oriented design (iii) Thread vs Process (iv) EXE vs DLL (v) Tags and branches

(i) A pilha segue o princípio Last In, First Out (LIFO). Considerando que, Queue é sempre FIFO, ou seja, First In, First Out.

(ii) O design orientado a objetos pode ser incorporado até certo ponto no design baseado em componentes. No entanto, o inverso não é possível.

(iii) 'Processo' refere-se a uma instância de um programa de computador em execução. É mais pesado e requer mais alternância de contexto. Um 'thread' é um processo leve que um agendador gerencia independentemente. Um único programa pode ter mais de um thread.

(iv) Tanto o EXE quanto o DLL são programas que requerem espaço de armazenamento para serem executados. Enquanto o EXE é um programa executável básico, o DLL é mais dinâmico. É um repositório de código externo que você pode carregar e executar, ocupando menos espaço.

(v) As tags permanecem em uma versão específica do código e geralmente não são alteradas. Eles agem como locais temporários para lançamentos de versão. As ramificações sempre apontam para o topo da linha de desenvolvimento. Portanto, eles são excluídos quando um novo commit é enviado ou quando as alterações são mescladas no tronco.

25. É uma boa ideia usar catch (exceção)?

Catch (exceção) deve ser usado quando os tipos de exceção são conhecidos. É uma má ideia, pois você não pode ler a exceção quando nenhuma variável foi definida.

26. O que é preferível entre os dois: tipagem forte ou tipagem fraca?

A tipagem forte deve compensar a tipagem fraca, pois verifica as variáveis ​​em tempo de compilação. Além disso, pode minimizar consideravelmente os bugs do sistema. Uma linguagem de tipagem fraca executa conversões apenas em tempo de execução e pode produzir resultados imprevisíveis.

27. O que é um projeto estruturado?

O design estruturado conceitua o problema seguindo a estratégia de 'dividir para conquistar'. Essa abordagem sistemática envolve dividir o problema em seus subelementos e lidar com essas questões menores individualmente. Devido a essa tática, também é chamado de método de design de solução.

28. Descreva a programação funcional.

O método de programação funcional envolve a aplicação de conceitos matemáticos. Ele fornece uma maneira de calcular funções matemáticas, gerando resultados independentemente do estado do programa.

29. Como você prioriza os requisitos?

Em primeiro lugar, você deve avaliar a estrutura de dados. Então, você precisaria formular uma estrutura de código para suportar o mesmo.

30. O que você sabe sobre as ferramentas CASE?

CASE é o termo abreviado para Engenharia de Software Auxiliada por Computador. Consiste em um conjunto de aplicativos de software automatizados que suportam atividades SDLC. As ferramentas CASE podem aprimorar e fortalecer projetos de software oferecendo estes serviços:

  • Análise de requisitos
  • Análise de estrutura
  • Geração de código
  • Geração de casos de teste
  • Produção de documentos
  • Engenharia reversa

As dicas

O Bureau of Labor Statistics (Estados Unidos) projeta que a demanda por desenvolvedores de software cresça 22% na próxima década. E a Índia provavelmente encontrará o mesmo aumento na demanda.

De acordo com o 'Workforce Report for India' do LinkedIn, as vagas de emprego de engenharia de software em sua plataforma foram as mais altas em vários setores no primeiro semestre de 2018. À medida que avançamos, as oportunidades em setores proeminentes como educação, jurídico e design aumentariam continuar a subir. Leia sobre o salário do desenvolvedor de software na Índia.

Conforme observado através das perguntas listadas acima, alguém que deseja ingressar nesta profissão precisaria de uma ampla gama de competências inter-relacionadas. Aqui está um instantâneo das hard skills que você precisaria dominar:

  • C++, C#, Java
  • HTML, CSS JavaScript
  • SQL, Python, Bootstrap
  • Projeto orientado a objetos
  • Software de depuração e teste
  • Codificação em linguagens modernas (Ruby, Go, R, etc.)
  • Conhecimento de projetos de inteligência artificial, e assim por diante

Além dessas habilidades técnicas, você precisaria dominar a arte de multitarefa, comunicação, gerenciamento de tempo, atenção aos detalhes e trabalho em equipe.

Quanto às qualificações educacionais, um diploma de bacharel em ciência da computação ou áreas afins normalmente cobre os critérios mínimos de elegibilidade para empregos de nível básico. Mas a carreira de todos acaba sendo um pouco diferente. Alguns podem ter entrado no mercado de trabalho por meio de autoestudo, cursos on-line ou bootcamps de codificação. Outros podem ter buscado um grau avançado depois de ter trabalhado em TI por alguns anos.

Ter credenciais de nível de pós-graduação pode ajudá-lo a alavancar sua carreira e até mesmo ganhar uma cobiçada promoção de emprego. Confira o Mestrado em Ciência da Computação do upGrad certificado pela Liverpool John Moores University. Destina-se a equipá-lo com habilidades relevantes para o setor por meio de uma pedagogia altamente interativa.

Você também pode optar pelo Programa PG Executivo em Desenvolvimento de Software – Especialização em Desenvolvimento Full Stack pelo IIIT-B ou uma certificação PG especializada, dependendo de seus interesses e aspirações de carreira. Tais certificados têm um compromisso de tempo menor em comparação aos cursos de mestrado e diploma. Eles permitem que você demonstre suas habilidades em uma área específica, como desenvolvimento de back-end, desenvolvimento de front-end, segurança cibernética, DevOps, big data e computação em nuvem.

Com isso, cobrimos as principais perguntas e respostas da entrevista de engenharia de software . Tentamos incluir tópicos gerais e técnicos. Além disso, mencionamos as opções de carreira em potencial e fornecemos uma visão geral das tendências e perspectivas do setor de TI. Use essas informações como um guia para sua jornada de aprendizado e simplifique sua estratégia de preparação!

Aterre no seu emprego dos sonhos

Candidate-se ao Mestrado em Ciência da Computação