Escolar Documentos
Profissional Documentos
Cultura Documentos
E NGENHARIA
DE
Thiago Schaedler Uhlmann
SOFTWARE
THIAGO SCHAEDLER UHLMANN
Código Logístico Fundação Biblioteca Nacional
ISBN 978-85-387-6552-3
IESDE BRASIL
2020
© 2020 – IESDE BRASIL S/A.
É proibida a reprodução, mesmo parcial, por qualquer processo, sem
autorização por escrito do autor e do detentor dos direitos autorais.
Apresentação 7
3. Engenharia de requisitos 39
3.1 Métodos para a coleta de requisitos 40
Gabarito 175
Apresentação
Bons estudos!
1
Introdução à engenharia de software
Preechar Bowonkitwanchai/Shutterstock
O engenheiro de software vem sendo requisitado em empresas
de todos os portes, seja para atividades de desenvolvimento ou
para gerenciamento de projetos. Além disso, esse profissional
tem sido muito procurado para trabalhar em startups, ou seja,
empresas de base tecnológica que atuam em ambientes de mercado
de extrema incerteza, sendo necessário que o engenheiro domine
outras habilidades, como trabalhar em equipes multidisciplinares
e saber resolver problemas com o máximo de eficiência.
Um engenheiro de software deve saber que uma organização tem
restrições financeiras, procedimentos a serem respeitados e perfis
profissionais distintos. Logo, precisa considerar adequadamente
essas situações em seu trabalho, bem como em seus projetos.
Esse profissional é o responsável pela gestão consciente
de recursos humanos, de materiais financeiros e tecnológicos
necessários para o desenvolvimento do software e de processos
de desenvolvimento, desde a coleta de requisitos até a entrega do
software em sua versão final.
Introdução à engenharia de software 13
PIYAWAT WONGOPASS/Shutterstock
Song_about_summer/Shutterstock
Durante o processo de desenvolvimento de software, é
necessária a definição de papéis e responsabilidades, de modo que
cada profissional saiba exatamente o que fará. Sommerville (2011)
cita como exemplos as funções de gerente de projeto, gerente de
configuração e programador.
Sendo tão relevante para o sucesso das organizações, o engenheiro
de software deve apresentar uma série de competências relacionadas
tanto à sua formação pessoal quanto ao seu desempenho profissional.
Essas competências, conforme afirmam Pressman e Maxim (2016),
são o senso de responsabilidade individual, a consciência aguçada
das necessidades de sua equipe de trabalho, a honestidade, a
capacidade de se mostrar resiliente sob pressão, o senso de lealdade,
a atenção aos detalhes e o pragmatismo.
Constantine (1993 apud PRESSMAN; MAXIM, 2016)
enumera paradigmas, ou padrões, para a formação de equipes de
desenvolvimento. Esses paradigmas consideram questões como a
formalidade de hierarquias, a colaboração entre os membros da
equipe e a capacidade de solucionar problemas.
No paradigma fechado, a principal característica é a existência
de uma hierarquia formal entre gestores e colaboradores, em que
se predomina a ordem. Porém, essa estrutura pode não ser ideal
quando se necessita desenvolver a criatividade e a inovação nas
Introdução à engenharia de software 19
Considerações finais
Conforme estudamos, as atribuições do engenheiro de software
são bastante diversas, assim como a forma como ele desempenha o
trabalho e organiza as equipes.
Além disso, compreendemos a importância do mercado de
software no Brasil e como este se encontra em crescimento, podendo
observar que a atuação do engenheiro de software não se resume a
atividades de programação, visto que, além de desenvolvedor, ele é
gestor de projetos.
Introdução à engenharia de software 21
Atividades
1. Agora que você sabe o que faz um engenheiro de software, é
hora de identificar como está o mercado de trabalho na área.
Pesquise, em sites de emprego, a disponibilidade de vagas de
trabalho para engenheiro de software. Escolha três vagas do
seu interesse e descreva por que você ser interessou por elas.
Referências
CONFEA – Conselho Federal de Engenharia e Agronomia. Resolução
n. 1.100, de 24 de maio de 2018. Diário Oficial da União, Brasília, DF, 8
jun. 2018. Disponível em: http://www.in.gov.br/materia/-/asset_publisher/
Kujrw0TZC2Mb/content/id/21012726/do1-2018-06-08-resolucao-n-1-
100-de-24-de-maio-de-2018-21012669. Acesso em: 9 out. 2019.
• Modelo em cascata
É o modelo mais antigo de desenvolvimento em engenharia de
software e, de acordo com Sommerville (2011, p. 20), é “um processo
dirigido a planos – em princípio, você deve planejar e programar
todas as atividades do processo antes de começar a trabalhar nelas”
(SOMMERVILLE, 2011, p. 20).
Nesse modelo, a estrutura básica de desenvolvimento é aplicada
de modo sequencial, ou seja, com uma atividade precedendo a
outra. Além disso, para passar de uma atividade a outra, é necessária
a aprovação do responsável pelo desenvolvimento, geralmente por
meio de um documento assinado. Dessa forma, nenhuma atividade
pode ser iniciada até que a anterior esteja concluída, e o software é
colocado em uso somente na etapa final (entrega).
A Figura 1, a seguir, representa o modelo em cascata. Observe
que nesse modelo o processo flui de modo constante, como em uma
cascata, e as cinco etapas são aplicadas sequencialmente.
Comunicação
Planejamento
Modelagem
Construção
Entrega
Entrega
Construção
Comunicação
Modelagem
Planejamento
Figura 3 – Modelo em V
Projeto de Verifica
Teste de sistema
arquitetura
Projeto de Verifica
Teste de integração
componente
Verifica
Geração de código Teste de unidade
Implantação
Planejamento rápido
Comunicação
Modelagem rápida
Entrega
(feedback)
Construção de
protótipos
Elaboração
Concepção Planejamento
Modelagem
Comunicação
Construção
Entrega
Construção
Transição
Considerações finais
Neste capítulo, estudamos os principais modelos utilizados para
o desenvolvimento de um software.
Primeiramente, conhecemos a estrutura básica do
desenvolvimento de software, abordando as etapas de comunicação,
planejamento, modelagem, construção e entrega.
Em seguida, identificamos os principais modelos tradicionais
– em cascata, em espiral, em V, cíclico e RUP – e, com relação
aos modelos ágeis, estudamos os princípios do Manifesto Ágil de
Desenvolvimento de Software, além dos modelos XP, scrum e AUP.
Estudar os modelos de desenvolvimento de software é muito
importante para que possamos escolher o mais adequado para
determinado projeto e fazer o máximo aproveitamento dos recursos
disponíveis.
Vale ressaltar que não há modelo mais correto ou melhor. A
escolha do modelo mais adequado dependerá do tipo de sistema
que deveremos construir, do perfil da nossa equipe de projeto e dos
requisitos do nosso cliente.
Atividades
1. No modelo ágil scrum são desempenhadas as funções de
scrum master, product owner e development team. Pesquise
e disserte sobre a importância de cada uma delas.
Referências
PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem
profissional. 8. ed. Porto Alegre: AMGH, 2016.
Vídeo
3.1 Métodos para a coleta de
requisitos
Imagine que você vai comprar um presente
para uma pessoa que não é muito próxima de
você – no amigo secreto da empresa onde você
trabalha, por exemplo. Para não errar na escolha e evitar que a pessoa
fique chateada, você, provavelmente, realizará uma entrevista com
os amigos próximos dela, observará os seus hábitos, o modo como
se veste, objetos que costuma usar, e, inclusive, poderá perguntar a
ela mesma do que gosta, quais são seus hobbies etc. Com isso, você
levantará os requisitos necessários para a escolha do presente. Esse
processo é bastante semelhante ao da engenharia de requisitos.
Correção
Rastreabilidade Precisão
Características
Modificabilidade
para o
Completeza
levantamento
de requisitos
Verificabilidade Consistência
Priorização
Concepção
Especificação
Levantamento
Validação
Elaboração
Gestão
Negociação
abertas fechadas
Suposição Situação
O que pode
inicial normal de
dar errado
utilização
01 02 03
04 05
Outras Estado do
atividades sistema na
conclusão
Vídeo
3.2 Classificação de requisitos
Agora que você já sabe o que são requisitos,
é importante realizar a distinção dos tipos de
requisitos. Pfleeger (2004) sugere a priorização
de requisitos em três categorias básicas, conforme
figura a seguir. Essa priorização é importante para
que a equipe de desenvolvimento seja melhor direcionada em relação
aos seus esforços e recursos para as tarefas de desenvolvimento.
Requisitos
possíveis, mas
totalmente altamente
que podem ser
satisfeitos desejáveis eliminados
Requisitos
Requisitos
funcionalidades básicas de
determinado sistema, descrevendo restrições do sistema, ou seja, não
o que este deverá executar em cada descrevem o que o sistema deverá
situação. O cumprimento desses executar, mas sim como ele se
requisitos garante que o sistema comportará durante a execução.
funcione conforme o esperado.
Requisitos não
Validação Gestão Outros requisitos
funcionais
1
Análise de problema
e especificação de
mudanças
2
Análise de
Estágios
mudanças e custos
3
Implementação
de mudanças
56 Engenharia de Software
Considerações finais
A engenharia de requisitos é uma atividade que não deve
acontecer apenas na fase inicial de desenvolvimento de software,
mas deve permear todo o processo de desenvolvimento de modo
que, conforme o software é desenvolvido, os desenvolvedores
estejam constantemente atentos às necessidades do usuário.
Os requisitos das partes interessadas, dos usuários e do
sistema encontram-se em constante mudança, principalmente se
considerarmos o fato de que as organizações estão inseridas em
mercados cada vez mais dinâmicos.
Desse modo, cabe ao engenheiro de software perceber
essas mudanças e aplicar, sempre que possível, os métodos de
levantamento de requisitos estudados neste capítulo, com o intuito
de manter sempre atualizados os requisitos do sistema, facilitando,
assim, o trabalho da equipe de desenvolvimento.
Engenharia de requisitos 57
Atividades
1. Escolha um software que você utilize – pode ser um aplicativo
de celular, um jogo, o sistema da empresa onde você trabalha
ou outro de sua preferência. Defina, no mínimo, três
requisitos funcionais e três requisitos não funcionais para
esse sistema.
CLASSE
CASO DE USO Atributo
Método INTERFACE
ATOR
COMPONENTE NÓ ESTADO
Fonte: Elaborada pelo autor com base em Booch, Rumbaugh, Jacobson, 2005.
DEPENDÊNCIA
GENERALIZAÇÃO
REALIZAÇÃO
Fonte: Elaborada pelo autor com base em Booch, Rumbaugh; Jacobson, 2005.
Vídeo
4.2 Diagramas
comportamentais
Os diagramas comportamentais têm o intuito
de especificar, descrever e documentar os possíveis
comportamentos do sistema e do usuário. Desse
modo, enfatizam questões como usabilidade, aspectos temporais,
troca de mensagens entre sistemas e entre sistemas e usuários, além
de mudanças de estado.
De acordo com Booch, Rumbaugh e Jacobson (2005), os
principais diagramas comportamentais da UML são diagrama de
caso de uso, diagrama de sequência, diagrama de comunicação,
diagrama de gráfico de estados e diagrama de atividades, descritos
a seguir.
68 Engenharia de Software
Selecionar peça
Autorizar acesso
Acrescentar
<<include>> cliente
<<include>>
Selecionar <<include>>
Restituir pedido Localizar pedido
assentos
sd Atualização de produtos
verdadeiro :int
sd Emitir Saldo
:Conta_Comum
Emitir saldo
Estado Inicial
Consultando Saldo
+ do / saldo_Conta()
Saldo
Estado Final
Exibir peças
Exibir eventos padrão
[Usuário selecionou
uma peça]
[Usuário selecionou
um evento] Exibir confirmação
[Usuário informou
intervalo de datas]
[Não]
Exibir peças para evento
selecionado [Sim]
Salvar informações
uma peça, o sistema solicitará uma confirmação por parte deste, que,
caso seja feita, as informações serão salvas e o processo é finalizado.
Antes de se modelar o sistema estruturalmente, é importante que
os aspectos comportamentais do usuário sejam descobertos e
modelados. Os diagramas comportamentais atendem a essa
necessidade, ao permitir a modelagem das múltiplas maneiras pelas
quais um sistema poderá ser utilizado.
Vídeo
4.3 Diagramas estruturais
Os diagramas estruturais “existem para
visualizar, especificar, construir e documentar
os aspectos estáticos de um sistema” (BOOCH,
RUMBAUGH; JACOBSON, 2005, p. 96), ou seja,
enfatizam os aspectos estruturais e técnicos de um sistema, como
classes, interfaces, componentes, dentre outros.
Segundo Booch, Rumbaugh e Jacobson (2005), os principais
diagramas estruturais da UML são diagrama de classes, diagrama
de componentes, diagrama de artefatos e diagrama de implantação,
descritos a seguir.
• Diagramas de classes
Esses diagramas são “encontrados com maior frequência
na modelagem de sistemas orientados a objetos” (BOOCH,
RUMBAUGH; JACOBSON, 2005, p. 107). Essa frequência se deve ao
fato de a orientação a objetos se basear, dentre outros fatores, no uso
de classes e objetos para a representação de elementos em um sistema.
Já os diagramas de objetos, construídos de modo similar ao diagrama
de classes, representam objetos construídos a partir de determinadas
classes de origem.
76 Engenharia de Software
- tipo_mov: int
- /dt_mov: Date
- /hor_mov: Time
- val_mov: Double
1..*
registra
Pessoa Conta_Comum
# nom_pessoa: String # nro_conta: long
# end_pessoa: String possui # /dt_abertura: Date
# cep_pessoa: long # /dt_encerramento: Date [0..1]
# tel_pessoa: String 1..* 1..*
# situação: int = 1
# renda_pessoa: double # senha: int
# sit_pessoa: int # /saldo: double = 0
Interface Caixa
Eletrônico
Firewall Gerenciador de
Autoatendimento
Gerenciador de
SGBD
Contas
dlog.dll
<<artifact>>
animator.exe
wrfrme.dll
render.dll
raytrce.dll
<<device>>
Servidor de Aplicação Departamento de Contabilidade
Sistema de Contabilidade
<<TCP-IP>>
<<device>>
Servidor de Aplicação Departamento de Vendas
Considerações finais
A UML consiste em um padrão universal de modelagem de
sistemas. Para isso, vale-se de notações visuais de fácil compreensão
e utilização, como símbolos, formas geométricas, flechas e outras
formas de representação.
Os diagramas UML são muito úteis para a modelagem de
sistemas, por possibilitarem a visualização de um sistema por
diferentes pontos de vista, seja do usuário ou do sistema.
Assim, um dos principais benefícios da UML é facilitar o
processo de desenvolvimento de software, pois as notações visuais
facilitam o trabalho do engenheiro de software em compreender o
sistema, antes mesmo que a primeira linha de código seja elaborada.
Modelagem de software com a UML 81
Atividades
1. Escolha um aplicativo qualquer. Liste as possíveis formas de
uso desse aplicativo, bem como suas funcionalidades. Com
base nessa listagem, elabore um diagrama de caso de uso
para esse aplicativo.
Referências
BLAHA, M.; RUMBAUGH, J. Modelagem e projetos baseados em objetos
com UML 2. Rio de Janeiro: Elsevier, 2006.
Vídeo
5.1 Projeto de software:
elementos básicos
Toda vez que alguém sonha em realizar algo,
a tendência é de, primeiramente, transformar esse
sonho em projeto. Uma viagem, por exemplo,
nasce da vontade de alguém viajar. Esse sonho se transforma em um
roteiro, com definições de para onde ir, o que visitar, onde comer
etc. Considerando que nenhuma viagem tende a durar para sempre,
é necessário definir as datas de ida e de retorno. Além disso, visto
que ninguém possui recursos financeiros infinitos, é fundamental
planejar para onde ir e quanto gastar. Outros aspectos a serem
considerados são os riscos, isto é, acontecimentos que podem
84 Engenharia de Software
5.1.1. Escopo
O escopo consiste na definição de como será realizado um
projeto. No caso de um software, o escopo define, portanto, as
funcionalidades que serão ou não implantadas e os requisitos
funcionais e não funcionais desse projeto.
De acordo com o PMBOK (PMI, 2014), o escopo de um projeto
também deve considerar o gerenciamento das partes interessadas,
ou seja, se o escopo de um projeto e seus requisitos atendem às
necessidades de clientes, fornecedores, patrocinadores e outros que, de
alguma forma, possam ser impactados pelos resultados desse projeto.
Para a definição do escopo de um projeto, pode-se utilizar várias
técnicas, como a realização de entrevistas com as partes interessadas,
Gestão de projetos de software 85
1. JOGO
5.1.2. Tempo
Desenvolver um software é uma atividade com início, meio e
fim. Sendo assim, é preciso considerar os impactos relacionados ao
tempo necessário para realizar esse desenvolvimento.
Um dos meios mais eficazes de realizar a gestão do tempo de um
projeto de software é a elaboração de um cronograma, que, segundo
o PMI (2014), pode ser de diferentes formas: consulta a opiniões de
especialistas para verificar o tempo de duração estimado para cada
atividade; uso de técnicas analíticas, como estudos, para verificar o
tempo de desempenho de cada tarefa; realização de reuniões com a
equipe de desenvolvimento para discutir esse cronograma.
Sugere-se que a elaboração do cronograma seja feita com base
nas entregas e subentregas propostas na EAP. Cada subentrega deve
ser realizada conforme determinado prazo, com marcos sinalizando
a data final de cada entrega.
5.1.3. Custos
Outro elemento essencial a ser considerado em um projeto de
software é o gerenciamento dos custos, que é possível a contar do
momento em que se sabe o que precisa ser desenvolvido (o escopo)
e a quantidade de tempo disponível a ser alocada.
88 Engenharia de Software
5.1.4. Qualidade
A qualidade de um projeto de software diz respeito à sua
adequabilidade aos requisitos e aos interesses das partes envolvidas,
a qual pode ser mensurada por métricas ou indicadores de
qualidade. Por meio das métricas, é possível verificar se a realização
do projeto está de acordo com as políticas e normas necessárias e
com os requisitos definidos conforme o escopo. Já os indicadores
podem ser utilizados para a mensuração de todos os aspectos de um
projeto, como tempo, custos, qualidade, aquisições e riscos. Alguns
exemplos de métricas em projetos de software são:
• tempo dispendido por funcionalidade desenvolvida;
• quantidade de linhas de código desenvolvidas por hora;
Gestão de projetos de software 89
Vídeo
5.2 Projeto de software:
elementos acessórios
A atividade de desenvolvimento de software
envolve, ainda, riscos a serem considerados,
como mudanças na equipe de desenvolvimento,
incompatibilidade do sistema desenvolvido com os demais
softwares e hardware do cliente, que, se não forem consideradas
logo no início do projeto, podem acarretar custos e tempo
adicionais, prejudicando o desempenho do projeto como um todo.
Vale destacar que um projeto é planejado e implementado por
pessoas, portanto é relevante efetuar a gestão dos recursos humanos,
bem como dos diferentes canais de comunicação entre os membros
e as partes interessadas de um projeto. Além dos recursos humanos,
são indispensáveis políticas e ações para a aquisição de recursos
materiais, de modo que o projeto conte com a matéria-prima
necessária para sua efetiva execução.
90 Engenharia de Software
5.2.1. Riscos
Além de escopo, custo, tempo e qualidade, existem outros
componentes que devem ser considerados na elaboração, realização
e análise de um projeto de software. Esses componentes, embora
secundários em relação aos mencionados anteriormente, também
merecem consideração para que o projeto seja executado com
a máxima eficiência (melhor utilização de recursos) e eficácia
(obtenção de resultados satisfatórios).
Um dos componentes também importantes em um projeto
de software é a gestão de riscos. Sendo uma atividade de
desenvolvimento tecnológico e que utiliza uma variedade e
complexidade de componentes físicos e virtuais, um software ou
sistema apresenta riscos no processo de desenvolvimento, os quais
geralmente são mensurados por meio de duas variáveis básicas:
probabilidade e impacto.
A probabilidade diz respeito às possibilidades quantitativas
de o risco se transformar no acontecimento de fato e geralmente
é mensurada em termos de porcentagem: quanto maior for a
porcentagem, maiores serão as chances de o risco se concretizar.
No entanto, caso o risco se concretize, o impacto diz respeito aos
possíveis acontecimentos que impactarão positiva ou negativamente
o projeto como um todo. São exemplos de impactos: perdas materiais
ou financeiras, atrasos no cronograma do projeto, problemas na
equipe de trabalho, entre outros.
5.2.2. Comunicação
Para a execução de todo projeto, é necessária a comunicação
entre os próprios membros da equipe desenvolvedora e entre essa
equipe e as partes interessadas. Essa comunicação pode ser feita
Gestão de projetos de software 91
5.2.4. Aquisições
Além dos recursos humanos, é importante considerar
em um projeto de software a aquisição e o uso adequado dos
recursos materiais. Em relação a essas aquisições, vale destacar a
necessidade de compras de ativos, como servidores, computadores,
dispositivos de comunicação móvel, serviços de telecomunicações,
hospedagem de conteúdo na nuvem, entre outros.
Gestão de projetos de software 93
5.2.5. Integração
A integração envolve as atividades de abertura, planejamento,
mudanças e encerramento do projeto, abrangendo os demais
componentes do projeto, como escopo, custos, tempo, qualidade,
riscos, comunicação, recursos humanos e aquisições, desde o início
até o final.
O termo de abertura é um dos documentos mais relevantes,
pois autoriza o início do projeto e descreve seus itens como
responsabilidades, requisitos, entregas, premissas e restrições. Outro
documento relevante é o plano de gerenciamento do projeto, que
descreve as diretrizes necessárias para gerenciar o projeto como
um todo, servindo de base para o planejamento das demais partes
componentes.
Desse modo, é possível observar que, assim como em outros
tipos de projetos, ao se desenvolver um software, é importante
elaborar um projeto considerando elementos como escopo,
tempo, custo, qualidade, riscos, comunicação, recursos humanos,
aquisições e integração, mesmo que o software utilize um método
ágil de desenvolvimento.
94 Engenharia de Software
Software Software
cliente cliente
Software
cliente Software
cliente
Armazenamento de dados
(repositório ou “quadro-negro”) Software
Software cliente
cliente
Software Software
cliente cliente
Tubos
Filtro Filtro
Filtro Filtro
Filtro
Filtro
Tubos e filtros
Fonte: Pressman; Maxim, 2016, p. 260.
Programa principal
Subprograma Subprograma
de aplicação de aplicação
Fonte: Pressman; Maxim, 2016, p. 260.
Componentes
Camada da interface
do usuário
Camada de aplicação
Camada de utilitários
Camada
central
Considerações finais
Neste capítulo, identificamos os principais elementos a serem
considerados no projeto de um software. Observamos, também,
que desenvolver um software requer conhecer as necessidades das
partes interessadas do projeto, como podem contribuir para o seu
desenvolvimento e os requisitos que elas estabelecem para o sistema
que será desenvolvido. Dentre as partes interessadas mais relevantes
para o projeto, encontram-se os clientes e fornecedores.
Além disso, requer conhecer aspectos técnicos, como o
desenvolvimento de arquiteturas. Esse conhecimento é importante
para que o projeto, além de gerido de maneira adequada, proporcione
resultados técnicos viáveis.
Como você pode observar, o projeto de um software deve
considerar aspectos técnicos, humanos e de gestão. Nenhum
desses aspectos deverá ser ignorado no desenvolvimento do
software, sob o risco de problemas durante a execução do projeto e,
consequentemente, aumento de custos ou atrasos no cronograma.
O projeto de um software é uma atividade de inovação, pois
recursos humanos, materiais, financeiros e tecnológicos são
transformados, dia após dia, em novas maneiras de se resolver
problemas e automatizar processos de negócio, isto é, software.
Atividades
1. Imagine que você fará um jantar para os seus amigos. Para
isso, elabore uma EAP (Estrutura Analítica do Projeto)
contemplando as entregas a serem realizadas por você nesse
jantar (como saladas, pratos quentes, mesa arrumada), e as
subentregas (ingredientes, por exemplo).
Referências
PAULA FILHO, W. P. Engenharia de software: fundamentos, métodos e
padrões. Rio de Janeiro: LTC, 2009.
• Planejamento (Capítulo 6)
Este capítulo aborda a necessidade de planejamento
organizacional para administrar os riscos e as oportunidades
inerentes à atividade que a organização desempenha, bem como
os objetivos da qualidade e as mudanças a serem realizadas na
organização.
Assim, uma equipe de desenvolvimento de software, por exemplo,
deve adotar ações para minimizar riscos, como o de mudanças de
requisitos, incompatibilidade do software desenvolvido com os
demais sistemas da organização-cliente, dentre outros.
Além disso, a organização deve definir objetivos de gestão a
serem alcançados, que devem ser coerentes e mensuráveis para a
conformidade de produtos e serviços, como o desenvolvimento de
software. Esses objetivos devem ser monitorados, para identificação
de seu cumprimento, comunicados aos clientes e atualizados sempre
que necessário.
• Apoio (Capítulo 7)
Este capítulo aborda a gestão de recursos materiais e humanos,
bem como a infraestrutura necessária para a execução das atividades.
Além disso, trata do ambiente operacional, que deve ser adequado
social, psicologica e fisicamente.
Desse modo, uma empresa de desenvolvimento de software, por
exemplo, deve proporcionar aos profissionais um ambiente calmo,
que evite o estresse e tenha a temperatura climática adequada, uma
vez que a atividade desenvolvida demanda concentração.
Esse capítulo ainda aborda a gestão do conhecimento
organizacional, sendo que a organização precisa determinar o
conjunto de conhecimentos necessários para que a operação dos
seus processos esteja em conformidade, além de adotar medidas
para as comunicações interna e externa.
Gestão da qualidade em engenharia de software 107
REVISÃO DO TRANSIÇÃO
PRODUTO DO PRODUTO
OPERAÇÃO
DO PRODUTO
Vídeo
6.3 Melhorias em software
Um dos principais motivos para a adoção de
práticas de gestão da qualidade nas organizações,
incluindo as de desenvolvimento de software,
é a realização de melhorias contínuas nos processos dessas
organizações.
Gestão da qualidade em engenharia de software 115
MEDIR
MUDAR ANALISAR
Considerações finais
Como você pôde perceber, desenvolver um software de qualidade
não é uma tarefa fácil, visto que, além da preocupação com o próprio
120 Engenharia de Software
Atividades
1. Uma das normas que norteiam o trabalho do engenheiro de
software é a ISO/IEC 12207. Pesquise e descreva os principais
processos dessa norma.
Referências
ABNT – Associação Brasileira de Normas Técnicas. NBR ISO 9000: Sistema
de Gestão da Qualidade – fundamentos e vocabulário. Rio de Janeiro:
ABNT, 2015a.
d) Teste funcional
Este teste permite verificar as funcionalidades de um sistema
ou componente antes de ser colocado em ambiente de operação
e é realizado “para avaliar a conformidade de um sistema ou
componente com os requisitos funcionais especificados” (PAULA
FILHO, 2009, p. 352).
Assim, o foco desse tipo de teste não está na estrutura, mas no
desempenho do componente ou software, para que ele atenda aos
requisitos funcionais. Dessa forma, recomenda-se a participação
do cliente ou usuário fazendo uso das funcionalidades do sistema
enquanto os desenvolvedores observam e registram os possíveis
erros ou necessidades de melhoria. Também, se possível, recomenda-
se, na realização dos testes, a verificação da interação do sistema
testado com outros sistemas da organização ou empresa do cliente,
para que, quando o sistema for implementado, possa interagir na
troca de informações.
e) Teste operacional
Após concluído, o software deve ser testado sob condições
realistas, por meio de simulações, de modo que seus componentes
sejam colocados à prova e, assim, seja possível verificar precisamente
se esse produto é capaz de atender aos requisitos funcionais e não
funcionais definidos ou se será necessária a realização de ajustes.
Dessa forma, o teste operacional é “realizado para avaliar um
sistema ou componente em seu ambiente operacional” (PAULA
FILHO, 2009, p. 352), ou seja, avalia-se o funcionamento do software
no ambiente em que ele será implementado. Assim, recomenda-se
a participação do usuário na manipulação das funcionalidades do
software e na simulação de diferentes casos de uso, principalmente
dos que podem resultar em falhas, possibilitando a adoção de
ações corretivas no software a tempo de finalizá-lo e colocá-lo em
ambiente de uso.
Testes e engenharia reversa em software 129
f) Teste de regressão
Esse tipo de teste consiste na análise comparativa de duas versões
do software: antes e depois da realização de alterações e melhorias.
Desse modo, é possível verificar se essas mudanças realmente
resultaram em melhoria de desempenho ou em defeitos no software.
O teste de regressão é “seletivamente repetido de um sistema ou
componente para verificar se alterações não causaram efeitos
indesejáveis e se o sistema ou componente mantém a conformidade
com seus requisitos especificados” (PAULA FILHO, 2009, p. 352).
Além disso, esses testes agem sobre os efeitos colaterais de
funcionamento de um sistema, que podem acontecer quando se
modificam seus componentes. A alteração desses componentes pode
resultar em modificações no comportamento de outros componentes,
que muitas vezes já foram testados. Assim, os testes de regressão nos
componentes de um sistema “verificam novamente as unidades já
testadas, para checar se eles continuam funcionando de maneira
apropriada após as alterações” (PAULA FILHO, 2009, p. 369). Dessa
forma, após as alterações realizadas em decorrência dos testes,
recomenda-se a realização dos testes de regressão para verificar se as
melhorias efetuadas atenderam aos requisitos esperados.
A importância do teste de regressão está em reconhecer que
falhas podem aparecer conforme são desenvolvidas as diferentes
versões do software. Se a equipe desenvolvedora não efetua o
adequado acompanhamento das alterações e melhorias do software
ao longo do tempo, a tendência é de que as falhas no funcionamento
do sistema sejam mais difíceis de serem detectadas.
g) Teste de integração
Neste teste, segundo Paula Filho (2009, p. 352), “componentes
são combinados e avaliados para testar a interação entre eles”,
possibilitando verificar se essa relação resulta em sucesso ou defeitos.
130 Engenharia de Software
Vídeo
7.2 Realização de testes
Assim como o desenvolvimento de um
software, a execução de testes como ferramenta
de melhoria requer um planejamento cuidadoso.
Ao se realizar testes de maneira sistematizada e
planejada, verificam-se, além de possíveis defeitos
no software e em seus componentes, a conformidade, a usabilidade e
o atendimento a requisitos funcionais e não funcionais.
Dessa forma, a realização de testes depende da definição de um
plano, no qual se estabeleça o planejamento, o desenho, a realização
e a forma de avaliação dos resultados. Pode-se organizar os testes de
modo a abranger todas as modalidades possíveis de teste, bem como
todos os componentes do software e suas interações.
de sistema
Teste
e de validação
Test
e integra
ste d çã
Te
o
de
ste de
Te nida
u
o
dig
Có
Projeto
Requisitos
Eng as
enharia de sistem
Teste de Especificações
unidade Requisitos Outros Especificação Ambiente
de projeto funcionais do requisitos de de requisitos do usuário
Compo
Teste de
unidade
stado
Comp
1 2 3
Estabelecimento Projeto dos casos Escrita dos casos
dos objetivos
4 5 6
Execução dos Avaliação dos
Teste dos casos testes resultados
Teste
Teste E
B, E, F
Teste A,
Teste F Teste C B, C, D,
E, F, G
Teste
Teste G
D, G
Teste B Teste E
Teste Teste A,
Teste A Teste C A, B, C, D Teste F B, C, D, E,
F, G
Teste D Teste G
Análise do
Engenharia inventário
direta
Reestruturação
do código
Reestruturação
dos dados
Engenharia
reversa
Reestruturação
dos documentos
Considerações finais
Tanto a realização de testes quanto práticas de reengenharia,
engenharia reversa, dentre outras, são essenciais para a racionalização
dos custos e esforços no processo de desenvolvimento de um software.
Testes e engenharia reversa em software 145
Atividades
1. Uma das áreas de atuação do engenheiro de software é no
projeto de sistemas de serviços on-line, como sistemas
bancários e sistemas de vendas de passagens aéreas. Quais
são os tipos de defeitos que podem ocorrer no projeto desses
sistemas?
Referências
PAULA FILHO, W. P. Engenharia de software: fundamentos, métodos e
padrões. Rio de Janeiro: LTC, 2009.
ProductionPerig/Shutterstock
Um exemplo de interface gráfica com o usuário é a tela de um smartphone, por meio da qual ele pode
acessar as funcionalidades de um aparelho, como aplicativos, representados pelos botões coloridos.
8.1.3. Prototipação
A prototipação é uma técnica na qual, por meio de um
dispositivo, processo ou objeto similar ao que seria o resultado final
de um projeto, simula-se a utilização de um produto ou serviço. “Os
protótipos são muito úteis quando se estão discutindo ideias com
stakeholders; são dispositivos que facilitam a comunicação entre
os membros das equipes e que consistem em uma maneira eficaz
de testar as ideias para você mesmo” (PREECE; ROGERS; SHARP,
2005, p. 261, grifo do original).
Assim, na engenharia de software, o uso de protótipos, interfaces
ou componentes é útil para a discussão de ideias e possibilidades
de abordagem em um projeto entre desenvolvedores e clientes. Os
autores supracitados defendem algumas finalidades para a elaboração
de protótipos, que também se aplicam à engenharia de software:
• Teste da viabilidade técnica de uma ideia: a partir de um
protótipo de um software ou interface, é possível verificar
questões como funcionalidades, interação com o usuário, se
há a possibilidade de requisitos funcionais ou não funcionais
serem atendidos, dentre outros.
• Esclarecimento de requisitos vagos: por meio do protótipo,
por exemplo, é possível aos desenvolvedores exporem seus
pontos de vista com relação aos requisitos de um software
no formato de um protótipo que simula esse requisito
sendo atendido. Dessa forma, o cliente pode analisar esse
protótipo para verificar se a interpretação dada pela equipe
de desenvolvimento condiz com o seu ponto de vista. Os
protótipos são ferramentas úteis na etapa de definição de
requisitos.
• Testes e avaliações com usuários: por meio de um protótipo,
é possível visualizar o usuário operando o que poderia ser
o software em sua versão acabada, avaliando-se possíveis
Práticas de engenharia de software 155
8.2.1. Ideia
Toda criação inicia-se com uma ideia, seja uma obra de arte, um
software ou mesmo um jogo. Uma ideia de jogo digital, para se tornar
viável, deve considerar, além de aspectos técnicos de desenvolvimento,
aspectos relativos ao principal componente de um jogo: o jogador.
158 Engenharia de Software
8.2.2. Narrativa
Assim como na vida real, um jogo tem desafios a serem cumpridos.
E, a cada desafio cumprido, uma história ou narrativa pode ser
contada. A narrativa também é um componente essencial na criação
de jogos. É por meio das narrativas, ou histórias, que o jogador se situa
no universo do jogo e se identifica com cenário, personagens, dentre
outros elementos.
Em um jogo digital, planejar uma narrativa é pensar no
sequenciamento das fases e da história de um jogo, o que significa,
também, pensar em horas trabalhadas por uma equipe de
desenvolvimento. Conforme Schell (2011), recomenda-se que o jogo
possibilite a personalização da história a ser contada por parte do
jogador, personalizando cenários e personagens. A personalização
da história, apesar de interessante, significa também desenvolver
Práticas de engenharia de software 159
8.2.3. Mecânica
Um jogo digital não se constrói somente por meio de histórias
e personagens bem elaborados. É necessário pensar em quais ações
são possíveis de serem realizadas, como serão realizadas e quais serão
as consequências. Além disso, devem ser consideradas as regras, ou
seja, como o jogo funcionará, quais objetos serão manipulados, qual
será o espaço disponível, quais habilidades o jogador desenvolverá ao
jogar e quais serão os aspectos probabilísticos e não probabilísticos
presentes no jogo, ou seja, o que tem base na sorte, e o que o jogador
pode controlar. Enfim, é necessário pensar nas mecânicas que
compõem o jogo.
Conforme Schell (2011), existem seis mecânicas possíveis que
devem ser consideradas no desenvolvimento de jogos, inclusive
digitais: espaço, objetos, ações, regras, habilidades e probabilidade.
• Espaço
A primeira mecânica exposta por Schell é o espaço, que, segundo
o autor, “define os vários lugares que podem existir em um jogo, e
como esses lugares estão relacionados entre si” (SCHELL, 2011, p. 130).
O espaço em um jogo digital é como um tabuleiro em um jogo
Práticas de engenharia de software 161
Devorado
Pac-Man come pelo Pac-
Hora de pastilhas de Azul: Man
sair da jaula Perseguindo energia Fugindo do
Na jaula o Pac-Man Pac-Man
Medidor
Medidor das das pastilhas
Olhos pastilhas de quase cheio
chegaram à energia cheio
jaula
Olhos Piscando:
Rolando: até Fugindo do
Devorado Pac-Man
a jaula pelo Pac-Man
Interfaces
Física Virtual
consiste nos elementos físicos consiste em controles e
que podem ser manipulados informações dispostas na
pelo jogador, como um mouse, tela do usuário, como escores
um joystick, um console, dentre (pontuação), botões acionados
outros. pelo mouse, dentre outros.
8.2.5. Documentação
Finalmente, o projeto de um jogo, para viabilizar a comunicação
entre clientes, designers e desenvolvedores, deve contemplar a
elaboração de uma documentação precisa e detalhada. Como
qualquer software, um jogo necessita da documentação de
seus requisitos, componentes e estrutura, de modo que possa
ser desenvolvido e, posteriormente, testado com relação ao
cumprimento de requisitos.
Conforme menciona Schell (2011), existem duas finalidades
importantes para a documentação em jogos: memória e
comunicação. Primeiramente, um documento de design tem a
finalidade de guardar informações a respeito de aspectos relativos
ao jogo, bem como requisitos, de modo que essa informação possa
ser facilmente recuperada pela equipe de desenvolvimento quando
necessário. Depois, um documento adequadamente elaborado
facilita a comunicação entre desenvolvedores, designers e clientes.
O autor também enumera cinco tipos de documentos essenciais
a serem desenvolvidos no caso de jogos: design, programação,
166 Engenharia de Software
Vídeo
8.3 Projeto de WebApps
e aplicativos móveis
O mercado de desenvolvimento de aplicativos
para dispositivos móveis, bem como de aplicativos
executados via web (WebApps), apresenta-se cada
vez mais promissor para a engenharia de software. A cada dia, cresce o
número de usuários de internet e, consequentemente, de smartphones
Práticas de engenharia de software 167
Considerações finais
Conforme estudamos nesse capítulo, as possibilidades de atuação
de um engenheiro de software são diversas, indo além do simples
desenvolvimento de software. O fato de cada vez mais pessoas
utilizarem dispositivos móveis, acessarem a internet e jogarem
proporciona ao engenheiro de software oportunidades de atuação
promissoras, fazendo com que esse profissional seja cada vez mais
requisitado pelas empresas para o desenvolvimento de soluções de
comunicação e interação com pessoas.
Soma-se a isso o fato de o engenheiro de software cada vez
mais precisar interagir com profissionais de diferentes áreas do
conhecimento. Seja para o desenvolvimento de interfaces, jogos ou
aplicativos móveis, a capacidade de se comunicar efetivamente com
designers, artistas, produtores e outros profissionais torna-se, assim,
uma competência essencial para esse profissional.
Práticas de engenharia de software 173
Atividades
1. Projete um jogo com base em um conto literário, um filme
ou uma outra obra de sua escolha. Para isso, lembre-se de
considerar todos os elementos estudados neste capítulo, como
narrativa, personagens, mecânicas, cenários, dentre outros.
Referências
AGÊNCIA BRASIL. Mercado de games no Brasil deve crescer 5,3% até
2022, diz estudo. Exame, São Paulo, 3 ago. 2019. Disponível em: https://
exame.abril.com.br/negocios/mercado-de-games-no-brasil-deve-crescer-
53-ate-2022-diz-estudo/. Acesso em: 12 dez. 2019.
3 Engenharia de requisitos
1. Para o software escolhido, você deverá definir, no mínimo,
três requisitos funcionais e três não funcionais.
INÍCIO
Apresentar opções de
cardápio Apresentar promoções
Selecionar pedido
Selecionar forma de
pagamento
Cartão de crédito ou
Dinheiro débito
Coletar a senha do
cliente
Informar número
do pedido
FIM
Gabarito 181
Escolher origem
Mostrar destinos
Selecionar
destino Finalizar reserva
Confirmar
reserva
182 Engenharia de Software
Cliente seleciona
origem e destino
Cliente escolhe
Cliente escolhe opções de voos de ida
opção de hotel e volta
Sistema confirma a
reserva para o cliente
FIM
1. JANTAR
O usuário realiza exercícios de musculação. Após os exercícios, o usuário toma banho e vai
para casa.