Engenharia de Software – Noturno Nome: RA.: Curso: Turma: Duração: 75 min. Prova P2 Gabarito CC Instruções: 1) 2a) 2b) 3a) leia atentamente o enunciado das questões; questões com apresentação pura do resultado, sem detalhamento (mesmo que correto) serão desconsideradas; manter celulares desligados; permitida a utilização de calculadoras, mas não o seu empréstimo; prova individual, sem consulta. No processo de desenvolvimento de software, todo software passa pelas fases de análise e projeto, associadas, respectivamente, com o que deve ser feito e como deve ser feito. A partir dessa informação, avalie a opções correta. a) Na fase de análise, três modelos que devem ser considerados são: do domínio da informação, o funcional e o comportamental. b) Na fase de projeto, dois níveis de projeto devem ser considerados: o projeto detalhado, que se preocupa com uma transformação dos requisitos em um projeto de dados e arquitetural; e o projeto preliminar, que se preocupa em aprimorar o projeto detalhado para que a implementação possa ser realizada em seguida. Errado: o projeto preliminar, como indica o nome, precede o detalhado. c) O objetivo do projeto arquitetural é desenvolver uma estrutura de programa e representar os diversos fluxos de dados entre os módulos. Errado: o projeto arquitetural é associado a estruturas, algo estático. Já o fluxo de dados entre módulos é algo dinâmico, sem relacionamento direto com arquitetura. d) O projeto arquitetural independe do paradigma de desenvolvimento. Errado: o projeto arquitetural sim depende do paradigma de desenvolvimento utilizado (e vice-versa). e) Para lidar com a complexidade do software, pode-se aplicar o princípio do particionamento, quebrando o problema em problemas menores. Esse princípio não é aplicado nas outras fases de desenvolvimento e ele não causa impacto nos custos de desenvolvimento. Errado: a primeira frase está correta: aplicar particionamento para abordar o projeto em problemas menores. Entretanto este princípio sim pode ser aplicado em outras etapas e, sim causa impactos no custo do desenvolvimento. Qual o possível impacto de interfaces entre sistemas em um projeto de software. O projeto de interfaces é um dos princípios básicos de um projeto de software e obrigatoriamente deve constar da definição e análise de requisito, tendo impacto direto na operação (manutenção). A quantidade e complexidade das interfaces influenciam diretamente o custo, prazo e dificuldade do projeto. Seu maior impacto vem da dificuldade do gerenciamento já que, na maioria das vezes, o owner e operação do outro sistema é independente, de difícil gerenciamento. Explique a importância da arquitetura de dados em um projeto de software. É representação do relacionamento lógico entre elementos de dados individuais, tão importantes quanto a arquitetura, pois afeta o projeto procedimental final e dela depende a implementação. Parte integrante do projeto detalhado Descreva o modelo que podemos utilizar na definição da estratégia de evolução de software legado. Na análise de um sistema legado, podemos mapear sua importância em um gráfico de Valor p/ Negócio x Qualidade, utilizando critérios específicos para isso. Engenharia de Software Engenharia de Software – Noturno Nome: RA.: Curso: Turma: Duração: 75 min. Prova P2 Gabarito CC Quando determinamos o quadrante em que se encontra o sistema analisado, a estratégia fica determinada: Baixa qualidade, baixo valor de negócio: sistemas devem ser substituídos. Baixa qualidade, alto valor negócio: reengenharia ou substituição. Alta qualidade, baixo valor de negócio: CotS, eliminação ou manutenção. Alta qualidade, alto valor de negócio: continuar operação. A análise do software deve focar em: Valor para o negócio Qualidade 3b) 4a) Fundamental analisar de diferentes pontos de vista (usuário final; clientes; gerentes da linha; gerentes de TI; Gerentes seniores) Entrevistar diferentes stakeholders e analise os resultados. Processos de negócio: quão bem os processos suportam as metas? Ambiente: quão efetivo / eficiente é o ambiente e qual o custo de mantê-lo? Aplicação: qual a qualidade da aplicação? Podemos determinar o número ideal de módulos de um sistema segundo o gráfico abaixo. Como isso impacta a qualidade do sistema (coesão e acoplamento)? Coesão e acoplamento são tidos como critérios de qualidade no desenvolvimento de software, dizemos que quanto maior a coesão e menor o acoplamento, maior a qualidade do código. O gráfico abaixo indica de um ponto de vista puramente financeiro o intervalo ótimo de número de módulos do sistema, o que pode estar em conflito com o número otimizado desde um ponto de vista de qualidade. Sendo assim, com foco em custo, pode ser necessário diminuir a coesão e aumentar o acoplamento do sistema visando baratear o custo final do sistema. Podemos descrever o custo do desenvolvimento de um sistema (modular) segundo o gráfico abaixo. Explique como podemos utilizá-lo na determinação do número ideal de módulos do sistema. Engenharia de Software Engenharia de Software – Noturno Nome: RA.: Curso: Turma: Duração: 75 min. 5a) Gabarito CC A curva em formato de parábola é gerada a partir da composição do custo unitário (por módulo) e o custo da integração dos módulos. O ponto de mínimo desta curva indica o custo mínimo no desenvolvimento de um sistema, composição entre baixar o custo unitário sem permitir que o custo de integração exploda. Detalhe a importância de um bom plano de comunicação na gerência de um grupo de desenvolvimento. 5b) Prova P2 Uma boa comunicação é essencial para um resultado efetivo. Intercâmbio de informação referente ao status do trabalho, decisões de arquitetura e desenho da solução e (principalmente) alterações de decisões tomadas anteriormente. Uma boa comunicação fortalece a coesão do grupo e promove a compreensão. Descreva algumas das vantagens de um grupo coeso no processo de desenvolvimento de software. Vantagens: padronização de qualidade pode ser desenvolvida / implementada; trabalho integrado: inibição devido a desconhecimento ou ignorância é reduzida; membros aprendem um com o outro e conhecem o trabalho de cada um; esforço para a melhoria do programa de cada membro, em detrimento do Ego. Engenharia de Software