• Nenhum resultado encontrado

Aula 01 Engenharia de Software: Conceitos Gerais e Disciplinas de Engenharia de Software. 1 de 60

N/A
N/A
Protected

Academic year: 2022

Share "Aula 01 Engenharia de Software: Conceitos Gerais e Disciplinas de Engenharia de Software. 1 de 60"

Copied!
60
0
0

Texto

(1)

Aula 01 – Engenharia de

Software: Conceitos Gerais

e Disciplinas de Engenharia

de Software

(2)

Sumário

SUMÁRIO ...2

O QUE ESTUDAREMOS NA AULA DE HOJE?... 4

INTRODUÇÃO ... 4

CONCEITOS BÁSICOS... 4

DO HISTÓRICO... 5

DEFINIÇÃO DE SOFTWARE ... 5

CAMPOS DE APLICAÇÃO ... 6

DISCIPLINAS DA ENGENHARIA DE SOFTWARE ... 8

CICLO DE VIDA /MODELO DE PROCESSO ... 10

1. PROCESSO DE DESENVOLVIMENTO DE SOFTWARE ... 15

1.1. PROCESSO ITERATIVO E INCREMENTAL ... 16

1.2. CARACTERÍSTICAS ... 16

1.3. VANTAGENS ... 16

QUALIDADE DE SOFTWARE ... 17

MÉTRICA DE QUALIDADE ... 17

COESÃO ... 18

ACOPLAMENTO ... 18

QUESTÕES COMENTADAS PELO PROFESSOR ... 19

LISTA DE QUESTÕES... 39

GABARITO ... 54

RESUMO DIRECIONADO ... 55

CONCEITOS BÁSICOS... 55

DO HISTÓRICO... 55

DEFINIÇÃO DE SOFTWARE ... 56

CAMPOS DE APLICAÇÃO ... 56

DISCIPLINAS DA ENGENHARIA DE SOFTWARE ... 58

(3)

Neste material você terá:

Você nunca estudou Engenharia de Software: Conceitos gerais e disciplinas de engenharia de software. Ciclo de vida de software. Processo de desenvolvimento de software. Processo iterativo e incremental. para concursos?

Se a sua resposta foi: Não! Nunca estudei. Não tem problema. Esse curso também é para você.

Nós abordaremos a teoria necessária para compreensão e resolução dos exercícios no intuito de fazer você praticar e aprender exaustivamente cada assunto estudado para se sentir confiante a enfrentar a Banca Examinadora (Cespe/Cebraspe ou outra qualquer que venha ser a Banca escolhida). E caso nunca tenha ouvido falar sobre os assuntos relacionados acima, a minha recomendação é que você inicie por uma leitura atenta deste material e, em seguida, realize, calma e atenciosamente os exercícios.

Ah! Fique à vontade para me procurar no fórum de dúvidas sempre que for necessário. Estaremos disponíveis para sanar todas as suas dúvidas.

Caso queira tirar alguma dúvida, basta enviar-me um e-mail ou um direct pelo Instagram.

Curso completo em VÍDEO

teoria e exercícios resolvidos sobre TODOS os pontos do edital (Conceitos gerais e disciplinas de engenharia de software. Ciclo de vida de software. Processos de desenvolvimento de software. Processo iterativo e incremental. Processos e práticas ágeis de desenvolvimento de software. Extreme Programming (XP). Técnicas para planejamento e priorização incremental de escopo em projetos ágeis e Qualidade de software).

Curso completo escrito (PDF)

teoria e MAIS exercícios resolvidos sobre TODOS os pontos do edital (Conceitos gerais e disciplinas de engenharia de software. Ciclo de vida de software. Processos de desenvolvimento de software. Processo iterativo e incremental. Processos e práticas ágeis de desenvolvimento de software. Extreme Programming (XP). Técnicas para planejamento e priorização incremental de escopo em projetos ágeis e Qualidade de software).

Acesso direto ao professor

para você sanar suas dúvidas DIRETAMENTE conosco sempre que precisar

(4)

O que estudaremos na aula de hoje?

Engenharia de Software: Conceitos gerais e disciplinas de engenharia de software.

Introdução

Meu caro aluno e aluna, falaremos sobre a engenharia de software e seus diversos aspectos, mas Prof., para que serve essa tal engenharia de software, quais seus fundamentos, quais suas vertentes, e o que eu irei fazer com mais esta disciplina? Calma, responderemos todas as suas indagações meu querido e minha querida Padawan!

Pessoalmente, gosto muito da obra de Pressman e de sua abordagem nas definições e conceitos do que realmente é a engenharia de software, entretanto, temos outras enciclopédias referência no assunto, faremos uma miscigenação das duas principais obras na área da Engenharia de Software, também, com base no que cai em suas questões de provas da área, acompanhadas de exercícios sanando assim todas as dúvidas dentro do assunto lecionado.

Conceitos básicos

Dos conceitos da Engenharia de Softwares, temos:

“Engenharia de software é o estabelecimento e o emprego de sólidos princípios de engenharia de modo a obter software de maneira econômica, que seja confiável e funcione de forma eficiente em máquinas reais”.

“Engenharia de software é uma área da computação voltada à especificação, desenvolvimento, manutenção e criação de software, com a aplicação de tecnologias e práticas de gerência de projetos e outras disciplinas, visando a organização, produtividade e qualidade”.

Bom pessoal, com os dois conceitos citados acima sobre o que vem a ser a Engenharia de Software, já conseguiremos desenhar um pouco do que é esta disciplina e seus fundamentos e como são empregados em nosso dia a dia. Atualmente, as tecnologias e práticas da Engenharia de Software, englobam as mais diversas linguagens de programação, banco de dados, ferramentas e entre elas as IDEs, plataformas, bibliotecas, padrões de projeto de software, processo de software e qualidade de software. Entretanto, a engenharia de software deve oferecer mecanismos para que possamos planejar e gerenciar o processo de desenvolvimento de um sistema computacional de qualidade e que atenda às necessidades de um requisitante de software.

As bases científicas para a Engenharia de Software, se relacionam com o uso de modelos abstratos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantindo suas qualidades. A área responsável que estuda e avalia os processos de engenharia de software, propondo a evolução dos processos, ferramentas e métodos de suporte a engenharia.

(5)

Do Histórico

O termo Engenharia de Software, foi criado na década de 1960, porém, só utilizado oficialmente por volta do ano 1968, na NATO Science Commite. Sua criação, emergiu na tentativa de contornar a crise do software e dar um tratamento de engenharia mais sistemático, controlado e de qualidade mensurável ao desenvolvimento de sistemas e software complexos.

Um sistema de software complexo se caracteriza por um conjunto de componentes abstratos de software estruturas de dados e algoritmos encapsulados na forma de algoritmos, funções, módulos, objetos ou agentes interconectados, compondo a arquitetura do software, que deverão ser executados em sistemas computacionais.

No início, e ainda hoje em algumas empresas menores com a falta de profissionais experientes, desenvolver um sistema é uma jornada quase que infinita, ao oposto disso, a Engenharia veio para: criar modelos, padrões, processos, metodologias, documentações, uma linha de desenvolvimento. Pois como narrei no período inicial deste parágrafo, este processo era uma aventura e que na maioria das vezes a empresa a qual pagava pela construção de um determinado software, sempre ficava no prejuízo e as razões eram as mais diversas, podemos até citar algumas destas: tempo prolongado no desenvolvimento, linguagem de programação não adequada, a não realização de levantamentos de requisitos funcionais e não funcionais, antes de entrar em produção o software já não atendia aos requisitos básicos ao qual foi construído, entre centenas de problemas que poderiam causar o seu insucesso.

A figura a baixo, nos dar uma definição básica de fases da construção de um software.

Quando usamos das ferramentas certas ou adequadas, os métodos eficientes, o processo documentado e seguindo um fluxo, a qualidade se torna o resumo desta abstração.

Definição de Software

Amigos, começamos falando da Engenharia de Software, mas o que é realmente um software?

“É uma sequência de instruções a ser seguidas e/ou executadas, na manipulação,

redirecionamento ou modificação de um dado (informação) ou acontecimento”.

“Software, também é o nome dado ao comportamento exibido por essa sequência de instruções,

quando executada em um computador ou máquina semelhante, além de um produto desenvolvido

(6)

pela engenharia de

software, e inclui não só o programa de computador propriamente dito, mas

também manuais e especificações”.

A respeito do software, para fins contábeis e financeiros, ele é considerado um bem de consumo!

“Um software normalmente é composto por diversas funções, bibliotecas e módulos que gera um

programa executável ao final do processo de desenvolvimento e este, quando executado, recebe algum tipo de entrada de dados, no caso (input), processa as informações segundo uma série de algoritmos ou sequências de instruções lógicas e libera uma saída, esta, o (output) como resultado deste processamento. Um software bem desenvolvido é normalmente criado pela área da engenharia de software e inclui não apenas o programa de computador em si, mas também manuais,

especificações e configurações”.

Bom pessoal, agora que sabemos na prática o que é um software, vamos parti para suas aplicações.

Campos de Aplicação

Os campos de aplicações são os mais diversos, pois a Engenharia de Software, surgiu para colocar ordem na casa, rs. Antigamente, se desenvolvia um projeto de qualquer maneira, as datas de entrega da ferramenta quase sempre eram desobedecidas, construía-se algo de qualquer jeito, o que, para o cliente no final, não era o resultado desejado, e isto, não ocorria somente para software de sistemas, mas para diversos modelos de negócios, segue a relação das principais áreas em que a Engenharia de Software é aplicada:

Software de sistema: estes são, conjuntos de programas desenvolvidos para atender a outros programas ou necessidades fins. A exemplo temos: compiladores, editores e utilitários para gerenciamento de arquivos que processam estruturas de informações complexas, outras aplicações de sistema por exemplo, componentes de sistema operacional, drivers, softwares de redes de computadores, processadores de telecomunicações que processam dados amplamente indeterminados. Em ambos os casos, a área de software de sistemas é caracterizada por enorme interação com o hardware dos computadores, o uso intenso por múltiplos usuários, as operações concorrentes que requerem escalas de ordens altíssimas, compartilhamento de recursos e gestão de processo sofisticada; estruturas de dados complexas e múltiplas interfaces externas.

Software de aplicação: são programas específicos que solucionam uma necessidade específica de negócio. Aplicados nesta área, processam dados comerciais ou técnicos de uma forma que facilite as operações comerciais ou tomadas de decisões e administrativas/técnicas. Além das aplicações convencionais de processamento de dados, o software de aplicação é usado para controlar funções de negócio em tempo real, a exemplo, processamento de transações em pontos de venda, controle de processos de fabricação em tempo assíncrono.

Software científico/de engenharia: de uso e característico por algoritmos number crunching, para o processamento numérico pesado. As aplicações neste modelo, vai da astronomia à

(7)

vulcanologia, da análise de tensões na indústria automotiva à dinâmica orbital de ônibus espaciais, também da biologia molecular à fabricação automatizada. Entretanto, aplicações modernas dentro da área de engenharia/científica estão se afastando dos algoritmos numéricos convencionais. Projeto com o auxílio de computador, simulação de sistemas e outras aplicações interativas começaram a ter características de sistemas em tempo real e até mesmo de software de sistemas.

Software embutido: residente em produtos específicos ou sistema, é utilizado para implementar e controlar características e funções para o usuário final e para o próprio sistema. Executa funções limitadas e específicas por exemplo, controle do painel de um forno micro-ondas ou fornece funções significativas e capacidade de controle por exemplo, funções digitais de automóveis, tal como controle do nível de combustível, painéis de controle e sistemas de freios.

Software para linha de produtos: projetado para prover a capacidade específica de utilização por muitos clientes diferentes. Pode focalizar um mercado limitado e particularizado por exemplo, produtos para controle de estoques ou direcionar-se para mercados de consumo de massa por exemplo, processamento de texto, planilhas eletrônicas, computação gráfica, multimídia, entretenimento, gerenciamento de bancos de dados e aplicações financeiras pessoais e comerciais.

Aplicações para a Web: chamadas de WebApps, essa categoria de software, centralizada em redes alcança uma vasta gama de aplicações. Em sua forma mais simples, as WebApps podem ser pouco mais que um conjunto de arquivos de hipertexto interconectados, apresentando informações por meio de texto e informações gráficas limitadas. Entretanto, com o aparecimento da Web 2.0, elas têm evoluído e se transformado em sofisticados ambientes computacionais que não apenas fornecem recursos especializados, mas funções computacionais e conteúdo para o usuário final, como a integração de bancos de dados corporativos e aplicações comerciais.

Software de inteligência artificial: faz uso de algoritmos não numéricos para solucionar problemas complexos que não são passíveis de computação ou de análise direta. Aplicações nessa área incluem: robótica, sistemas especialistas, reconhecimento de padrões de imagem e voz, redes neurais artificiais, prova de teoremas e jogos. Milhões de engenheiros de software em todo o mundo trabalham arduamente em projetos de software nas mais diversas categorias. Em alguns casos, novos sistemas estão sendo construídos, porém em outros casos as aplicações já existentes e estão sendo corrigidas, adaptadas e aperfeiçoadas. Não é incomum para um jovem engenheiro de software trabalhar em um programa mais velho que ele!

Computação mundial aberta: o acelerado crescimento das redes sem fio pode, em breve, conduzir a uma verdadeira computação distribuída e ampliada, compartilhada e incorporada nos ambientes domésticos e comerciais. O desafio para os engenheiros de software, será o de desenvolver sistemas e software aplicativo que permitam que dispositivos móveis, computadores pessoais e sistemas corporativos se comuniquem através de extensas redes. O que hoje já acontece em grande escala!

(8)

Netsoursing (recursos via Internet): a Internet rapidamente tornou-se em um grande e avassalador mecanismo computacional, como um provedor de conteúdo. O desafio para os engenheiros de software consiste em arquitetar de aplicações simples, isto é, planejamento financeiro pessoal e sofisticados que forneçam benefícios aos mercados mundiais de usuários finais visados.

Software aberto: tendência esta crescente que resulta na distribuição de código-fonte para aplicações de sistemas por exemplo, sistemas operacionais, bancos de dados e ambientes de desenvolvimento, de forma que muitas pessoas possam contribuir para seu crescimento. O desafio para os engenheiros de software, consiste em construir um código fonte auto descritivo, mais importante ainda é desenvolver técnicas que permitam que tanto clientes quanto desenvolvedores saibam quais alterações foram feitas e como se manifestam dentro do software.

Disciplinas da Engenharia de Software

Dentro do processo da Engenharia de Software, iremos destacar algumas destas, lembrando que, não detalharemos esta parte, pois possuímos livros eletrônicos descrevendo cada uma delas em detalhes:

Requisitos de software: Na sistematização e engenharia de software, análise de requisitos engloba todas as tarefas que lidam com a investigação, definição e escopo de novos sistemas ou alterações. Análise de requisitos é parte importante do processo de desenvolvimento de softwares, na qual o engenheiro de requisitos e o analista de negócio, juntamente com engenheiros de sistema ou desenvolvedores de software, identificam as necessidades ou requisitos de um cliente. Uma vez que os requisitos do sistema tenham sido identificados, os projetistas de sistemas estarão preparados para projetar a solução.

A análise de requisitos é uma das primeiras atividades de desenvolvimento de software. O produto do seu trabalho é a especificação dos requisitos, esta define o escopo do software em duas dimensões: Requisito funcional e Requisito não-funcional. É nesta fase que o analista faz as primeiras reuniões com os clientes e/ou usuários do software para conhecer as funcionalidades do sistema que será desenvolvido. Também ocorre a maior parte dos erros, pois a falta de experiência dos clientes ou usuários faz com que nem sempre tenham claro em sua mente quais funcionalidades o software terá.

Outro conceito é: Análise de Requisitos é o processo que envolve o estudo das necessidades do usuário para encontrar-se uma definição correta ou completa do sistema ou requisito de software.

Projeto de software: parte responsável da engenharia de software que se encarrega de fazer todo o planejamento anterior ao desenvolvimento, incluindo a definição da arquitetura do software, e transformar tudo em um documento ou conjunto de documentos capazes de ser interpretados diretamente pelo programador. Para atingir este objetivo, o projetista deve mapear as estruturas e funcionalidades identificadas na análise de requerimentos dentro do contexto e das restrições da arquitetura, de forma a tornar possível a construção do software. Ao longo do tempo e nos diversos processos de software existentes, várias ferramentas foram idealizadas para facilitar e atingir este objetivo.

(9)

Construção de software: Um processo de desenvolvimento de software é um conjunto de atividades, parcialmente ordenadas, com a finalidade de obter um produto de software. Estudado dentro da área de Engenharia de Software, considerado um dos principais mecanismos para se obter software de qualidade e cumprir corretamente os contratos de desenvolvimento, sendo uma das respostas técnicas adequadas para resolver a crise do software. Este é um dos pilares da entrega de produto em tempo hábil.

Teste de software: O teste do software é a investigação do funcionamento do mesmo, a fim de fornecer informações sobre sua qualidade em relação ao contexto em que ele deve operar, se relaciona com o conceito de verificação e validação. Estas que foram levantadas através de requisitos funcionais e não funcionais. Isto inclui o processo de utilizar o produto para encontrar seus defeitos. O teste é um processo realizado pelo testador de software, que permeia outros processos da engenharia, e que envolve ações que vão do levantamento de requisitos até a execução do teste propriamente dito.

Manutenção de software: Em engenharia de software, manutenção de software é o processo de melhoria e otimização de um software já desenvolvido, lembrando que, um produto mal desenvolvido com certeza necessitará de manutenções constantes, também, reparos de defeitos. A manutenção do software é uma das fases do processo de desenvolvimento de software, ocorre após a entrada do software em produção. A manutenção pode ser preventiva ou mesmo corretiva. Também ocorre quando aponta para falhas no Processo de Desenvolvimento de Software - PDS que devem ser identificadas e tratadas, visando a melhoria contínua do processo. As anomalias são inseridas pelo processo em si ou pelo não entendimento dos requisitos do produto.

Gerência de configuração de software: A Gerência de configuração de software ou ainda gestão de configuração de software, é a área da engenharia de software responsável por fornecer o apoio para o desenvolvimento de deste. Suas atribuições básicas são o controle de versão, o controle de mudança e a auditoria das configurações.

Gerência de engenharia de software: A Engenharia de software, é uma área da computação voltada à especificação, desenvolvimento, manutenção e criação de software, com a aplicação de tecnologias e práticas de gerência de projetos e outras disciplinas, visando organização, produtividade e qualidade. Atualmente, essas tecnologias e práticas englobam linguagens de programação, banco de dados, ferramentas, plataformas, bibliotecas, padrões de projeto de software, processo de software e qualidade de software. Além disso, a engenharia de software deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento de um sistema computacional de qualidade e que atenda às necessidades de um requisitante de software.

Processos de Engenharia de Software: Um processo de Engenharia de Software, é composto por um conjunto de passos de processo parcialmente ordenados, relacionados com artefatos, pessoas, recursos, estruturas organizacionais e restrições, tendo como objetivo produzir e manter os produtos de software finais requeridos.

Ferramentas e Métodos de Engenharia de Software: Outro ponto crucial é, o uso de ferramentas CASE do inglês Computer-Aided Software Engineering. Essa classificação abrange toda ferramenta baseada em computadores que auxiliam as atividades da engenharia de software, desde a análise de requisitos, modelagem e até fase de testes. Os ambientes de desenvolvimento integrado (IDEs) têm maior destaque e suportam, entre outras:

Editor.

Debug.

Geração de código.

Modelagem.

Deploy.

(10)

Testes não automatizados.

Testes automatizados.

Refatoração (Refactoring).

Gestão de Riscos nos projetos de Software.

Uso da Prototipagem na Eng. de Requisitos.

Qualidade de software: O significado de qualidade, possui várias definições na literatura. O glossário do IEEE define qualidade como Grau de conformidade de um sistema, componente ou processo com os respectivos requisitos ou alternativamente, como Grau de conformidade de um sistema, componente ou processo com as necessidades e expectativas de clientes ou usuários.

Ambas as definições refletem os aspectos importantes da qualidade, diversos autores apresentam outras definições que, geralmente giram em torno dos temas de conformidade com os requisitos e atendimento das expectativas. Naturalmente, pode haver diferenças entre as aplicações dessas definições se os requisitos explícitos não refletirem corretamente as necessidades reais.

Ciclo de Vida / Modelo de Processo

Conhecido como Ciclo de Vida ou Modelo de Processo, é a estrutura contendo processos, atividades e tarefas envolvidas no desenvolvimento do software, operação e manutenção de um produto de software, abrangendo a vida do sistema, desde a definição de seus requisitos até o término de seu uso final.

O modelo de ciclo de vida é, a primeira escolha a ser feita no processo de software. A partir desta definição, definir-se desde a maneira mais adequada de obter as necessidades do cliente, até quando e como o cliente receberá sua primeira versão operacional do sistema. O Processo de software é o conjunto de atividades que constituem o desenvolvimento de um sistema computacional. Estas atividades são agrupadas em fases, a exemplo: definição de requisitos, análise, projeto, desenvolvimento, teste e implantação. Em cada fase são definidas, além das suas atividades, as funções e responsabilidades de cada membro da equipe, e como produto resultante, os artefatos.

O que diferencia um processo de software para outro, é a ordem em que as fases vão ocorrer, e isto veremos mais à frente, o tempo e a ênfase dados a cada fase, as atividades presentes, e os produtos entregues.

Com o crescimento do mercado de software, houve uma tendência a repetirem-se os passos e as práticas que deram certo. A etapa seguinte foi a formalização em modelos de ciclo de vida. Em outras palavras, os modelos de ciclo de vida são o esqueleto, ou as estruturas pré-definidas nas quais encaixamos as fases do processo. De acordo com a norma NBR ISO/IEC 12207:1998, o ciclo de vida é a sem dúvidas a estrutura contendo os processos, atividades e tarefas envolvidas no desenvolvimento, as operações e manutenções de um produto de software, abrange a vida do sistema, desde a definição de seus requisitos até o término de seu uso.

Resumindo: O modelo de ciclo de vida é a primeira escolha a ser feita no processo de software.

Não existe um modelo ideal. O perfil e complexidade do negócio do cliente, o tempo disponível, o custo, a equipe, o ambiente operacional são fatores que influenciarão diretamente na escolha do ciclo de vida de software a ser adotado. Da mesma forma, também é difícil uma empresa adotar um único ciclo de vida. Na maior parte dos casos, vê-se a presença de mais de um ciclo de vida no processo. Os ciclos de vida se comportam de maneira sequencial, fases seguem determinada ordem e/ou incremental divisão de escopo e/ou iterativa retroalimentação de fases e/ou evolutiva software é aprimorado.

(11)

Apresentaremos alguns dos modelos mais utilizados neste processo:

1. Modelo Cascata.

2. Modelo Incremental.

3. Modelo Evolutivo.

4. Modelo Prototipagem.

5. Modelo Espiral.

6. Modelo RAD.

7. Modelo V.

Modelo Cascata - O modelo cascata, algumas vezes chamado ciclo de vida clássico, sugere uma abordagem sequencial e sistemática para o desenvolvimento de software, começando com o levantamento das necessidades por parte do cliente, avançando pelas fases de planejamento, modelagem, construção, emprego e culminando no suporte contínuo do software concluído.

O modelo cascata é o paradigma mais antigo da engenharia de software. Entretanto, ao longo das últimas três décadas, as críticas a este modelo de processo fizeram com que até mesmo seus mais ardentes defensores questionassem sua eficácia. Entre os problemas encontrados quando se aplica o modelo cascata.

Formalizado por Royce em 1970, é o modelo mais antigo. Suas atividades fundamentais são:

Análise e definição de requisitos;

Projeto;

Implementação;

Teste;

Integração.

Modelo Incremental – Neste modelo, de Mills em 1980, os requisitos do cliente são obtidos e de acordo com as funcionalidades, são agrupados em módulos. Após este agrupamento, a equipe, junto ao cliente, define a prioridade em que cada módulo será desenvolvido, a escolha deve ser baseada na importância daquela funcionalidade ao negócio do cliente.

Cada módulo passará por todas as fases cascata do projeto, e será entregue ao cliente um software operacional.

Assim, o cliente receberá parte do produto final em menos tempo. O modelo incremental combina elementos dos fluxos de processos lineares e paralelos, o modelo incremental aplica sequências lineares, de forma escalonada, à medida que o tempo vai avançando.

(12)

Modelo Evolutivo ou Evolucionário - Neste modelo, os requisitos são adquiridos em paralelo à evolução do sistema. O modelo evolutivo inicia-se do princípio de que o cliente desconhece grande parte dos requisitos funcionais, desta forma, a análise é feita em cima dos requisitos conseguidos até então, e a primeira versão é entregue ao cliente. Logo em seguida. O cliente usa o software no seu ambiente operacional, e como feedback ao pessoal da área de requisitos, esclarece o que não ficou bem entendido, passando assim mais informações sobre o que precisa e sobre o que deseja.

A partir deste feedback, é realizada nova análise, projeto e desenvolvimento são realizados, e uma segunda versão do software é entregue ao cliente que, novamente retorna com mais feedbacks. Assim, o software vai evoluindo e o processo torna-se agradável a todos, e bem mais completo, até atender todas as necessidades do cliente dentro do escopo estabelecido. Tem-se a versão final.

Modelo Prototipagem - Prototipagem é a construção de um exemplar do que foi entendido dos requisitos capturados do cliente. Ou seja, praticamente iremos desenvolver algo para que o cliente possa usar como se

(13)

fosse inicialmente o sistema. Pode ser considerado um ciclo de vida ou pode ser usado como ferramenta em outros ciclos de vida.

Um protótipo em engenharia de software pode ser o desenho de uma tela, um software contendo algumas funcionalidades do sistema. São considerados operacionais, podem ser utilizados pelo cliente no ambiente real, ou seja, em produção, ou não operacionais, não estão aptos para ser utilizados em produção. Os protótipos podem ser descartados, ou reaproveitados para evoluírem até a versão final que no caso é o que acontece com uma recorrência muito grande.

No ciclo de vida de prototipagem, conhecimento aprofundado dos requisitos num primeiro momento não é tão exigido. Isso é bastante útil quando os requisitos não são totalmente conhecidos, são muitos complexos ou confusos. Desta forma, se o cliente não sabe expressar o que deseja, a prototipagem vem para ajudar. A maneira de evitar que se perca tempo e recursos com uma má interpretação.

Desta forma, o cliente experimentará, na prática, como o sistema ou parte dele funcionará. A partir desse primeiro contato, o cliente esclarece o que não foi bem interpretado, aprofunda alguns conceitos e até descobre um pouco mais sobre o que realmente precisa. A partir deste feedback, novos requisitos são colhidos e o projeto ganha maior dimensão em conhecimento.

Modelo Espiral - Originalmente proposto por Barry Boehm, o modelo espiral é o processo de software evolucionário que acopla a natureza iterativa da prototipação com os aspectos sistemáticos e controlados do modelo cascata. Fornece força para o rápido desenvolvimento de versões cada vez mais completas do software. O modelo espiral de desenvolvimento é um gerador de modelos de processos dirigidos a riscos e é utilizado para guiar a engenharia de sistemas intensivos de software, que ocorre de forma concorrente e tem múltiplos envolvidos. Possui duas características básicas que o distinguem. A primeira consiste em uma abordagem cíclica voltada para ampliar incrementalmente o grau de definição e a implementação de um sistema, enquanto diminui o grau de risco do mesmo. A segunda característica consiste em uma série de pontos âncora de controle para assegurar o comprometimento de interessados quanto à busca de soluções de sistema que sejam mutuamente satisfatórias e praticáveis.

(14)

Fazendo o uso do modelo espiral, o software será desenvolvido em uma série de versões evolucionárias ou evolutivas. Nas primeiras iterações, a versão pode consistir em um modelo ou em um protótipo.

Já nas iterações posteriores, são produzidas versões cada vez mais completas do sistema que passa pelo processo de engenharia.

Modelo RAD – (Rapid Application Development) modelo, formalizado por James Martin em 1991, como uma evolução da prototipagem rápida, destaca-se pelo desenvolvimento rápido da aplicação. O ciclo de vida é extremamente comprimido, o que tem suas vantagens e desvantagens. É ideal para clientes que buscam lançar soluções pioneiras no mercado. O ciclo de vida é incremental e iterativo, é preferível que os requisitos tenham escopo restrito. A diferença principal do ciclo anterior é o forte paralelismo das atividades, requerendo assim, módulos bastante independentes. Aqui, os incrementos são desenvolvidos ao mesmo tempo, por equipes diferentes. Além do paralelismo, o baixo tempo de construção é devido a compressão agregada lá na fase de requisitos e na fase de implantação. Isso significa que na obtenção dos requisitos, costumam-se optar por metodologias mais dinâmicas e rápidas, como workshops ao invés de entrevistas.

(15)

Modelo V – é um modelo conceitual de Engenharia de Sistemas/Desenvolvimento de Produto visto como a melhoria ao problema de reatividade do modelo em cascata. Ele permite que, durante a integração de um sistema em seus diversos níveis, os testes sejam feitos contra os próprios requisitos do componente/interface que está sendo testado, em contraste com modelos anteriores onde o componente era testado contra a especificação do componente. Notar a diferença entre requisito e especificação. O Modelo V, tornou-se um padrão da indústria de software depois de 1980 e após o surgimento da Engenharia de Sistemas, sendo assim o conceito padrão em todos os domínios da indústria. O mundo do software tinha feito poucos avanços em termos de maturidade, em achar na bibliografia corrente as referências que poderiam se aplicar ao sistema.

1. Processo de Desenvolvimento de Software

Um processo de desenvolvimento de software é um conjunto de atividades, parcialmente ordenadas, com a finalidade de obter um produto de software. Também é o estudo da área da Engenharia de Software, conceituado como um dos principais mecanismos para se obter software de qualidade e cumprir corretamente os contratos de desenvolvimento, sendo uma das respostas técnicas adequadas para resolver a crise do software.

Outro conceito que podemos utilizar para compreender o processo de desenvolvimento de software foi o apresentado por ‘Waslwick”, é formado por um conjunto de passos de processo parcialmente ordenados, relacionados a artefatos, pessoas, estruturas organizacionais e restrições, tendo como objetivo produzir e manter os produtos de software finais requeridos. Este é um conceito que considera o contexto ao qual o processo de desenvolvimento de software é aplicado destacando as suas interdependências com outros fatores como restrições, pessoas, recursos, padrões.

(16)

1.1. Processo Iterativo e Incremental

Como o processo de desenvolvimento iterativo, podemos entender as atividades em que a criação de um software é realizada por meio de progressos sucessivos. Assim, é comum que o sistema seja apresentado ainda incompleto ou com algumas partes deficitárias. O objetivo é que o refinamento do produto aconteça por etapas até que o resultado pretendido seja alcançado através do esforço com o uso desta técnica.

Deste modo, o método iterativo é frequentemente comparado ao trabalho de um escultor:

primeiramente, ele seleciona uma pedra do tamanho adequado para o seu trabalho, na sequência, ele começa a esculpir a peça de um modo geral, quando já é possível ter uma ideia de qual será o seu desfecho, na última etapa, ocorre o refinamento de detalhes, resultando em uma arte que cumpre com o seu propósito.

O desenvolvimento incremental, por outro lado, é aquele em que o software é entregue separadamente, ou seja, em pedaços, que são chamados de incrementos. Independentemente do tamanho desses subconjuntos, o fato que é que eles são entregues já na sua versão final. Assim, há uma concentração de esforços em determinadas partes até que elas estejam em pleno funcionamento, na maioria da vezes esta entrega em módulos é bem mais eficiente.

Podemos afirmar que no desenvolvimento iterativo há uma repetição das etapas do processo de criação do software, até que o resultado almejado seja obtido, já no desenvolvimento incremental, novas partes são integradas ao longo do período de construção.

1.2. Características

A criação de um processo de desenvolvimento iterativo e incremental, está nas bases das metodologias ágeis, como a Scrum. A ideia é que a criação de um software seja pautada por vários ciclos curtos, em que funcionalidades são introduzidas, feedbacks coletados e requisitos revistos, nisto a entrega de um produto viável e consistente, é certa e ágil.

Desta maneira, é possível atingir um maior nível de satisfação do cliente e garantir que o resultado final esteja dentro do esperado. Se no modelo em cascata a evolução é feita como um processo contínuo e sequenciado, no desenvolvimento iterativo e incremental, a empresa diminui tarefas e repete etapas sempre que for necessário.

Pretende-se, com isso, reduzir o número de falhas na solução entregue ao cliente final, criando um ambiente de trabalho que seja mais prático e capaz de realizar modificações em todas as etapas de desenvolvimento.

1.3. Vantagens

A adoção de um processo de desenvolvimento iterativo e incremental pode trazer uma série de vantagens para o negócio e elas vão além da melhora dos produtos entregues aos clientes como também a satisfação destes.

A seguir, veja alguns dos benefícios desses modelos:

Criação de um fluxo de entrega de softwares em que os requisitos são apresentados em pequenas partes funcionais.

(17)

Maior capacidade de acompanhar a evolução do desenvolvimento da aplicação.

Identificação precisa de erros e falhas durante a criação do sistema.

Redução de riscos a cada etapa do projeto.

Maior capacidade de modificar a direção de um projeto.

Criação de soluções de software com maior valor agregado.

Capacidade de otimizar a ferramenta continuamente.

Escopo de software mais flexível.

Mais agilidade e produtividade no dia a dia de cada time.

A soma destes fatores, contribuem para que a empresa possa atuar com mais agilidade e segurança. O negócio poderá solucionar demandas de clientes, eliminar falhas e diminuir as chances de a solução final não entregar uma experiência de qualidade.

Qualidade de Software

Qualidade é um conceito complexo e multifacetado, que pode ser descrito por cinco pontos de vista diferentes. A visão transcendental sustenta: assim como Persig que qualidade é algo que se reconhece imediatamente, mas não se consegue definir explicitamente. A visão do usuário vê a qualidade em termos das metas específicas de um usuário final. Se um produto atende a essas metas, ele apresenta qualidade. A visão do fabricante define qualidade em termos da especificação original do produto. Se o produto atende às especificações, ele apresenta qualidade.

Na realidade, qualidade engloba todas essas visões e outras mais. Qualidade de projeto refere-se às características que os projetistas especificam para um produto. A qualidade dos materiais, as tolerâncias e as especificações de desempenho, todos são fatores que contribuem para a qualidade de um projeto. Quanto mais materiais de alta qualidade forem usados, tolerâncias mais rígidas e níveis de desempenho maiores forem especificados, a qualidade de projeto de um produto aumentará se o produto for fabricado de acordo com essas especificações.

No desenvolvimento de software a qualidade de um projeto engloba o grau de atendimento às funções e características especificadas no modelo de requisitos. A qualidade de conformidade focaliza o grau em que a implementação segue o projeto e o sistema resultante, atende suas necessidades e as metas de desempenho.

Métrica de Qualidade

A medição é algo básico no mundo da engenharia. A engenharia de software está longe de desenvolver uma medição padrão amplamente aceita e com resultados sem fatores subjetivos. Há discordâncias sobre o que medir e como avaliar o resultado obtido das medições. As métricas de softwares possibilitam realizar uma das atividades mais fundamentais do processo de gerenciamento de projetos: o planejamento. A partir deste, pode-se identificar a quantidade de esforço, de custo e das atividades que serão necessárias para a realização do projeto.

As métricas de software, do ponto de vista de medição, podem ser divididas em duas categorias: medidas diretas e indiretas. Podemos considerar como medidas diretas do processo de engenharia de software o custo e o esforço aplicados ao desenvolvimento e manutenção do software e do produto, a quantidade de linhas de código produzidas e o total de defeitos registrados durante um determinado período de tempo. Porém, a

(18)

qualidade e a funcionalidade do software, ou a sua capacidade de manutenção, são mais difíceis de ser avaliadas, podendo ser medidas de forma indireta.

Coesão

A definição de coesão: é um sistema com sua relação existente entre a responsabilidade de uma classe e de cada um de seus métodos.

Uma classe coesa, possui responsabilidades e propósitos claros e bem definidos, enquanto com baixa coesão tem muitas responsabilidades diferentes e pouco relacionamento existente.

Acoplamento

Estes conceitos surgiram por volta do ano de 1960, fundando em um estudo conduzido por Larry Constatine, referente a definição de certos módulos de sistemas. Foram bastante estudados e utilizados no contexto da análise e projeto estruturado de sistemas. A falta de conhecimento ou mesmo o negligenciar destes conceitos e métricas, contribui para que muitos desenvolvedores, desenvolvam sistemas com características indesejáveis.

(19)

Questões comentadas pelo professor

1.

(CESPE - 2011 - MEC - Gerente de Projetos)

Com relação a conceitos gerais da engenharia de software, julgue.

A engenharia de software, disciplina relacionada aos aspectos da produção de software, abrange somente os processos técnicos do desenvolvimento de software.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Muito pelo contrário, a Engenharia de Software abrange todo o processo de produção de um projeto de software.

Resposta: Errado

2.

(CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Analista Judiciário - Tecnologia da Informação) Com relação a conceitos gerais da engenharia de software, julgue.

A engenharia de software engloba processos, métodos e ferramentas. Um de seus focos é a produção de software de alta qualidade a custos adequados.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Assertiva correta, vimos lá no início do nosso material que existe uma disciplina responsável pela qualidade do serviço entregue, esta é a Qualidade de Software.

Resposta: Certo

3.

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas) Com relação a conceitos gerais da engenharia de software, julgue.

Entre os desafios enfrentados pela engenharia de software estão lidar com sistemas legados, atender à crescente diversidade e atender às exigências quanto a prazos de entrega reduzidos.

(20)

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Pessoal, boa parte dos sistemas existentes no mercado, são sistemas legados: sistemas antigos que ainda estão em produção, mas na maioria da vezes atendem à demanda com diversas falhas, foram baseados em tecnologias antigas, a manutenção é inviável e em sua maioria muito cara, sem falar que nem sempre possuem manutenção e correções de bugs pelas fabricantes, o que torna complexo o desenvolver das atividades através destes softwares.

Resposta: Certo

4.

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas) Com relação a conceitos gerais da engenharia de software, julgue.

Segundo princípio da engenharia de software, os vários artefatos produzidos ao longo do seu ciclo de vida apresentam, de forma geral, nível de abstração cada vez menor

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Amigos, a assertiva é dada como correta, mas pessoalmente acho isto meio que relativo, sabe porquê?

Dependendo do modelo de desenvolvimento que usamos ou ciclo de vida que é utilizado, existem casos em que o cliente não consegue passar de forma clara alguns processos de requisito, o que lá na frente pode gerar um grande problema, ou seja, isto é muito relativo.

Resposta: Certo

5.

(CESPE - 2010 - TRE-BA - Técnico Judiciário - Programação de Sistemas) Com relação a conceitos gerais da engenharia de software, julgue.

Em uma visão restritiva, muitas pessoas costumam associar o termo software aos programas de computador.

Software não é apenas o programa, mas também todos os dados de documentação e configuração associados, necessários para que o programa opere corretamente.

A respeito de engenharia de software, julgue os itens

A engenharia de software está relacionada com todos os aspectos da produção de software, desde os estágios iniciais de especificação do sistema até sua manutenção, depois que este entrar em operação. A engenharia de

(21)

sistemas diz respeito aos aspectos do desenvolvimento e da evolução de sistemas complexos, nos quais o software desempenha um papel importante.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Correto, a Engenharia de Software é a área que percorre e deve se fazer presente por todo o processo do desenvolvimento do sistema.

Resposta: Certo

6.

(CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Analista Judiciário - Tecnologia da Informação) Com relação a conceitos gerais da engenharia de software, julgue.

As atividades fundamentais relacionadas ao processo de construção de um software incluem a especificação, o desenvolvimento, a validação e a evolução do software.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Estas são as atividades básicas para que a construção de um software seja bem sucedida, isto é, se todos os passos forem executados de maneira adequada e corretas.

Resposta: Certo

7.

(CESPE - 2013 - MPOG - Técnico de Nível Superior - V - Categoria Profissional 7) Com relação a conceitos gerais da engenharia de software, julgue.

A evolução de um software é realizada ao ser testados, integrados e aceitos os componentes individuais.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Na verdade, a evolução de software, ocorre quando se alteram os atuais sistemas de software para atender aos novos requisitos.

(22)

Resposta: Errado

8.

(CESPE - 2013 - TCE-RO - Analista de Informática) Com relação a conceitos gerais da engenharia de software, julgue.

Engenharia de software não está relacionada somente aos processos técnicos de desenvolvimento de softwares, mas também a atividades como gerenciamento de projeto e desenvolvimento de ferramentas, métodos e teorias que apoiem a produção de softwares.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

No processo da engenharia de software, ela não se preocupa apenas com os processos técnicos do desenvolvimento. Mais também inclui atividades como gerenciamento de projeto de software e desenvolvimento de ferramentas, métodos e teorias para apoiar a produção do produto.

Resposta: Certo

9.

(CESPE - 2013 - TCE-RO - Analista de Informática) Com relação a conceitos gerais da engenharia de software, julgue.

Sistemas que incluem software são classificados em duas categorias: sistemas técnicos embasados em computadores e sistemas sócio técnicos. Os primeiros incluem componentes de hardware, software, pessoas, procedimentos e processos; os segundos são regidos pelas políticas e regras organizacionais.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Sommerville, aborda em seu livro: Um sistema é o conjunto intencional de componentes inter-relacionados que funcionam juntos para atingir certo objetivo. São duas as categorias de sistemas que incluem softwares:

Sistemas técnicos baseados em computadores e Sistemas sociotécnicos.

Resposta: Errado

(23)

10.

(CESPE - 2013 - STF - Analista Judiciário - Análise de Sistemas de Informação) Com referência a aspectos diversos de engenharia de software, julgue os itens subsecutivos.

Engenharia de software é um ramo da ciência da computação que se preocupa com o desenvolvimento de códigos que sejam confiáveis, seguros, baratos e que, quando executados, funcionem e tenham o desempenho desejado.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

A questão do sempre barato, nos entregou a questão de graça, pois essa história do projeto de software barato, sabemos que isso não existe.

Resposta: Errado

11.

(CESGRANRIO - 2007 - EPE - Analista de Gestão Corporativa Júnior - Área Tecnologia da Informação)

Com referência a aspectos diversos de engenharia de software, julgue os itens subsecutivos.

O ciclo de vida clássico da engenharia de software tem sofrido críticas dos especialistas. Uma delas é o fato de o cliente ter de declarar todos os requisitos explicitamente na primeira parte do projeto, gerando insegurança.

Uma técnica utilizada para minimizar esse problema é conhecida como:

A) Análise por ponto de função.

B) Casos de teste.

C) Linha básica ou baseline.

D) Projeto de software.

E) Prototipação.

RESOLUÇÃO:

A Prototipação ou Prototipagem, é a construção de um exemplar do que foi entendido dos requisitos capturados do cliente. Ou seja, praticamente iremos desenvolver algo para que o cliente possa usar como se fosse inicialmente o sistema. Pode ser considerado um ciclo de vida ou pode ser usado como ferramenta em outros ciclos de vida. Esta modalidade trouxe segurança ao processo da Engenharia de Software usando o ciclo da prototipação.

Resposta: E

(24)

12.

(CESGRANRIO - 2007 - EPE - Analista de Gestão Corporativa Júnior - Área Tecnologia da Informação)

A análise por pontos de função utiliza diversas características para estimar o tamanho de um software. Das características abaixo, indique a que NÃO afeta a contagem nesse tipo de métrica.

A) Desempenho.

B) Necessidade de backup.

C) Necessidade de testes.

D) Necessidade de comunicação de dados.

E) Número de entradas do usuário.

RESOLUÇÃO:

A necessidade de testes, não oferece influência em nenhum momento em que são realizadas, a exemplo: no período de análise de pontos de função.

Resposta: C

13.

(CESGRANRIO - 2007 - EPE - Analista de Gestão Corporativa Júnior - Área Tecnologia da Informação)

Devido ao aumento da demanda por aplicações que funcionem 24 horas por dia na Internet, um software deve ser capaz de manter-se em operação após uma determinada falha. A estratégia de teste que melhor garante essa característica é o(a):

A) Teste de estresse.

B) Teste de recuperação.

C) Teste unitário.

D) Debugging.

E) Simulação combinatória.

RESOLUÇÃO:

Alunos, o teste ideal é o Teste de Recuperação, pois por meio dele conseguimos verificar a densidade e robustez e o próprio tempo de capacidade de um determinado software de retornar em caso de uma queda ou falha deste.

Resposta: C

(25)

14.

(CESGRANRIO - 2007 - EPE - Analista de Gestão Corporativa Júnior - Área Tecnologia da Informação)

Na análise estruturada, as duas ferramentas de modelagem que identificam de modo mais adequado a estrutura dos dados são:

A) Diagrama de entidades-relacionamentos e dicionário de dados.

B) Diagrama de transições de estado e diagrama de fluxo de dados.

C) Diagrama de fluxo de dados e dicionário de dados.

D) Diagrama de fluxo de dados e diagrama de entidades relacionamentos.

E) Dicionário de dados e diagrama de transições de estado.

RESOLUÇÃO:

O Diagrama de Fluxo de Dados são os responsáveis pela parte do fluxo de dados, também do processo dos dados. Os Diagramas de Transições de Estado, focam nos eventos e nos estados do sistema. O Dicionário de Dados, é responsável pela descrição de cada campo de uma tabela no bando de dados. DER, conhecido também como Diagrama de Entidade Relacionamento, descreve os dados e as suas colaborações entre eles no sistema.

Resposta: A

15.

(CESGRANRIO - 2007 - EPE - Analista de Gestão Corporativa Júnior - Área Tecnologia da Informação)

Um processo administrativo numa repartição pública poderá estar nos seguintes estados: aberto, na carga de um determinado funcionário, em trâmite ou arquivado. A ferramenta de modelagem que representa de modo mais adequado as regras de passagem de um estado para outro é:

A) Diagrama de fluxo de dados.

B) Diagrama de transições de estado.

C) Diagrama entidades-relacionamentos.

D) Dicionário de dados.

E) Especificação de processos.

RESOLUÇÃO:

Isto mesmo, a ferramenta de modelagem que representa a passagem de um modelo de um estado para o outro é o Diagrama de Transição, e este faz parte do UML.

Resposta: B

(26)

16.

(CESGRANRIO - 2007 - EPE - Analista de Gestão Corporativa Júnior - Área Tecnologia da Informação)

Numa linguagem de programação orientada a objetos é importante restringir a visibilidade de alguns atributos para garantir o conceito de:

A) Classe.

B) Encapsulamento.

C) Herança.

D) Instanciação.

E) Polimorfismo.

RESOLUÇÃO:

Correto, através da herança podemos dimensionar o nível de permissões e acesso a um atribulo

A) Classe: faz parte de uma estrutura da orientação a objetos, uma classe é uma descrição que abstrai um conjunto de objetos com características similares. Mais formalmente é um conceito que encapsula abstrações de dados e procedimentos que descrevem o conteúdo e o comportamento de entidades do mundo real, representadas por objetos. De outra forma, uma classe pode ser definida como uma descrição das propriedades ou estados possíveis de um conjunto de objetos, bem como os comportamentos ou ações aplicáveis a estes mesmos objetos.

B) Encapsulamento: Na programação orientada a objetos, o encapsulamento se refere ao agrupamento de dados com os métodos que operam nesses dados ou à restrição do acesso direto a alguns dos componentes de um objeto.

C) Herança: é um princípio de orientação a objetos, que permite que classes compartilhem atributos e métodos, através de heranças. Ela é usada na intenção de reaproveitar código ou comportamento generalizado ou especializar operações ou atributos. O conceito de herança de várias classes é conhecido como herança múltipla. A exemplo, pode-se observar as classes aluno e professor, onde ambas possuem atributos como nome, endereço e telefone. Nesse caso pode-se criar uma nova classe chamada pessoa, que contenha as semelhanças entre as duas classes, fazendo com que aluno e professor herdem as características de pessoa, desta maneira pode- se dizer que aluno e professor são subclasses de pessoa. Também podemos dizer que uma classe pode ser abstrata (abstract) ou seja ela não pode ter uma instância, ela apenas empresta seus atributos e métodos como molde para novas classes.

D) Instanciação: Uma instância de uma classe é um novo objeto criado dessa classe, com o operador new, instanciar uma classe é criar um novo objeto do mesmo tipo dessa classe. Uma classe somente poderá ser utilizada após ser instanciada.

(27)

E) Polimorfismo: Na programação orientada a objetos, o polimorfismo permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam.

Assim, é possível tratar vários tipos de maneira homogênea. O termo polimorfismo é originário do grego e significa muitas formas.

Resposta: C

17.

(CESPE - 2006 - ANATEL - Especialista em Regulação - Informática)

No que se refere aos modelos de desenvolvimento e ciclos de vida, julgue os itens que se seguem.

No modelo iterativo, divide-se o desenvolvimento em iterações. A cada iteração, podem ser acrescentadas novas funcionalidades ao software. Uma iteração parte do estado no qual se encontravam os artefatos ao término da iteração anterior e resulta em um incremento. Uma iteração pode ter disciplinas como captura de requisitos, análise, projeto, implementação e teste.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Perfeito, o desenvolvimento com uso de processo de iteração chegar a ser completo, devido o feedback entre o cliente e desenvolvedores durante todo o processo, pois a interação é constante neste processo.

Resposta: Certo

18.

(CESPE - 2006 - ANATEL - Especialista em Regulação - Informática)

No que se refere aos modelos de desenvolvimento e ciclos de vida, julgue os itens que se seguem.

Uma classe na análise orientada a objeto representa uma abstração que pode ser mapeada para mais de uma classe no projeto. As classes na análise podem ser fronteiras, controladoras ou entidades. Uma fronteira modela interações entre o sistema e atores, uma entidade modela apenas objetos persistentes e uma controladora só pode controlar interações entre instâncias de uma mesma classe.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Erradíssimo, a classe de análise é uma classe especificada no nível de detalhe apropriado para o workflow, o que significa que geralmente contém atributos, mas não operações.

Há três tipos de classes de análise: classes de interface, classes entidades e classes de controle.

Resposta: Errado

(28)

19.

(E - 2006 - ANATEL - Analista Administrativo - Informática)

No que se refere aos modelos de desenvolvimento e ciclos de vida, julgue os itens que se seguem.

Considerando a figura acima, que apresenta elementos componentes do modelo RUP, julgue os itens seguintes, acerca dos conceitos dos modelos RUP, CMMI, ITIL, COBIT e da UML.

O ciclo apresentado na figura, que compreende uma execução sequenciada das atividades de modelagem de negócios, requisitos, análise e desenho, implementação, testes, avaliação etc., forma o denominado ciclo de vida de software no modelo RUP.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Pessoal, o ciclo apresentado acima não é o RUP, está mais para o processo de iteração.

Resposta: Errado

20.

(CESPE - 2004 - TRE-AL - Analista Judiciário - Tecnologia da Informação)

A respeito de ferramentas CASE (computer-aided software engineering) - que auxiliam de diversas formas na elaboração de projetos de sistemas -, julgue os itens que se seguem.

Ferramentas CASE podem ser classificadas por função, por tipo de arquitetura de ambiente e por custo.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Pressman, em sua obra fala sobre as ferramentas CASE, podem ser classificadas por função, por seu papel como instrumentos para gerentes ou pessoal técnico.

Resposta: Certo

(29)

21.

(CESPE - 2004 - TRE-AL - Analista Judiciário - Tecnologia da Informação)

A respeito de ferramentas CASE (computer-aided software engineering) - que auxiliam de diversas formas na elaboração de projetos de sistemas -, julgue os itens que se seguem.

Ferramentas CASE modernas, para desenvolvimento de sistemas de software, suportam uma série de linguagens de programação orientadas a objetos, bem como dispositivos de conexão a banco de dados relacionais.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Questão correta, as ferramentas CASE, são desenvolvidas para trabalharem nas mais diversas plataformas de sistemas operacionais, também com os mais diversos banco de dados, podemos criar um projeto em uma ferramenta CASE, criando ao mesmo tempo a estrutura de um banco de dados relacional.

Resposta: Certo

22.

(CESPE - 2004 - TRE-AL - Analista Judiciário - Tecnologia da Informação)

A respeito de ferramentas CASE (computer-aided software engineering) - que auxiliam de diversas formas na elaboração de projetos de sistemas -, julgue os itens que se seguem.

Uma ferramenta CASE que suporte linguagem estruturada de dados deve gerar o modelo físico de dados a partir de um diagrama entidade-relacionamento.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

A aplicação do verbo “deve”, torna a assertiva errada, afinal, o deve dá a impressão de obrigação.

Resposta: Errado

23.

(CESPE - 2004 - TRE-AL - Analista Judiciário - Tecnologia da Informação)

A respeito de ferramentas CASE (computer-aided software engineering) - que auxiliam de diversas formas na elaboração de projetos de sistemas -, julgue os itens que se seguem.

Uma ferramenta CASE que suporte UML (Unified modeling language) como modelo de geração de projeto de software deve, necessariamente, suportar diretamente o acesso a banco de dados orientados a objetos.

(30)

( ) Certo.

( ) Errado.

RESOLUÇÃO:

A aplicação do verbo “deve necessariamente”, torna a assertiva errada, afinal, o deve passa a impressão de obrigação.

Resposta: Errado

24.

(CESPE - 2015 - MPOG - Analista em Tecnologia da Informação - Cargo 12)

Julgue o item a seguir, a respeito do ciclo de vida e das metodologias de desenvolvimento de software.

Metodologias de desenvolvimento ágil enfocam atividades de projeto e implementação, desconsiderando as atividades de elicitação de requisitos e a produção de documentação.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

O processo de elicitação é parte da documentação do levantamento de requisitos, o processo ágil não dispensa documentos do processo de levantamentos de requisitos.

Resposta: Errado

25.

(CESPE - 2016 - TCE-SC - Auditor Fiscal de Controle Externo - Informática)

No que se refere à modelagem de processos de negócio e às metodologias utilizadas para desenvolvimento de softwares, julgue o item que se segue.

Depois de ordenados os requisitos do product backlog pelo time de desenvolvimento, o Product Owner avalia a qualidade dos produtos entregues para certificar que os desenvolvedores realizaram adequadamente as avaliações de mercado e as necessidades dos clientes do produto. Práticas de estimativa, como burndown, em conjunto com gráficos de barra, são úteis para estabelecer o burndown baseline e auxiliar o time de desenvolvimento a gerir a complexidade do projeto.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

O Product Owner: pode ser um financiador ou alguém interessado no projeto, suas principais responsabilidades

(31)

são: Definir as funcionalidades do produto. - Concentra as informações vindas dos usuários. - Responsável pelo ROI. Pode alterar as prioridades dentro do Sprint. Aceita ou rejeita os resultados dos trabalhos. Corrigindo um equívoco do Pied Piper

Resposta: Errado

26.

(INSTITUTO AOCP - 2018 - UFOB - Técnico de Tecnologia da Informação)

A engenharia de software relaciona-se aos processos e às ferramentas que permitem o desenvolvimento de software de alta qualidade. Em relação às ferramentas, linguagens e abordagens utilizadas pela engenharia de software, julgue o item a seguir.

Scrum é um método de desenvolvimento ágil. Esse método envolve as etapas de requisitos, análise, projeto, evolução e entrega do software.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Correto, o Scrum é um método e uma framework de desenvolvimento ágil.

Resposta: Certo

27.

(CESPE - 2013 - STF - Analista Judiciário - Análise de Sistemas de Informação) Com referência a aspectos diversos de engenharia de software, julgue os itens subsecutivos.

XP (Extreme Programming) é uma metodologia ágil voltada para equipes pequenas e médias que desenvolvam software baseado em requisitos vagos e se caracteriza por possibilitar modificações rápidas.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Pessoal, o termo vagos, ficou realmente meio vago, rs. Porém, a metodologia XP foi escrita para pequenas e medias equipes de produção.

Resposta: Certo

(32)

28.

(CESPE - 2015 - STJ - Técnico Judiciário - Tecnologia da Informação) No que concerne a DevOps, julgue o item que se segue.

O profissional especialista em DevOps deve atuar e conhecer as áreas de desenvolvimento (engenharia de software), operações e controle de qualidade, além de conhecer, também, de forma ampla, os processos de desenvolvimento ágil.

( ) Certo.

( ) Errado.

RESOLUÇÃO:

Na Ciência da Computação o DevOps, contração de development e operation, é uma cultura na engenharia de software que aproxima os desenvolvedores de software (Dev.) e os operadores do software / administradores do sistema (Ops), com a característica principal de melhorar a comunicação dos dois papéis dentro de um projeto e defender a automação e monitoramento em todas as fases da construção de um software, desde a integração, teste, liberação para implantação, ao gerenciamento de infraestrutura, auxiliam empresas no gerenciamento de lançamento de novas versões, padronizando ambientes em ciclos de desenvolvimento menores, frequência de implantação aumentada, liberações mais seguras, em alinhamento próximo com os objetivos de negócio.

Resposta: Certo

29.

(CESPE - 2016 - FUNPRESP-EXE - Especialista - Tecnologia da Informação) Acerca de conceitos relativos a engenharia de software, julgue o próximo item.

Em projetos que executam o framework da metodologia ágil Scrum, o backlog do produto mostra a visão atualizada das funcionalidades desejadas para esse produto, sendo o conteúdo definido por seu dono (product Owner).

( ) Certo.

( ) Errado.

RESOLUÇÃO:

O início para o planejamento é o backlog do produto, que é a lista do trabalho a ser feito no projeto. Durante a fase de avaliação do Sprint, este é revisto, e as prioridades e os riscos são identificados.

Resposta: Certo

Referências

Documentos relacionados

Na Nova Zelândia em sistemas pastoris as vacas produzem em média 17 litros de leite ao dia, enquanto nos produtores analisados neste estudo a média de

Já o Ministério do Turismo (2010), divulga não apenas as atribuições gerais que o guia deve cumprir, mas também as atribuições específicas de acordo com a

• Gerar nos alunos de Análise e desenvolvimento de software a capacidade de analisa, documentar e especificar sistemas computacionais de informação.. Estes devem fazer uso

• O ciclo de vida iterativo e incremental pode ser visto como uma generalização da abordagem em cascata: o software é desenvolvimento em incrementos e cada incremento é desenvolvido

● O SW-CMM (Capability Maturity Model for Software) é um modelo de capacitação de processos de software, desenvolvido pelo SEI (Software Engineering Institute) e patrocinado

Nesta reunião, o ScrumMaster trabalha junto com o Proprietário do Produto e a Equipe de Desenvolvimento para definir qual a carga de tempo que cada funcionalidade do Product

Esse conjunto de função consiste naquelas funções não diretamente relacionada à definição, ao gerenciamento, ao desenvolvimento e ao teste de software, mas que não

Processo de Desenvolvimento de Software: Analises iniciais, ciclo de vida de um processo, modelos de processos de desenvolvimento, padrões de processos, processo unificado;