Buscar

INTRODUÇÃO À ENGENHARIA DE SOFTWARE

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

INTRODUÇÃO À
ENGENHARIA DE
SOFTWARE
©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília
Apresentação 
Olá, seja muito bem-vindo(a)!
Os processos de desenvolvimento de software estão cada vez mais sofisticados, dentro das
boas práticas de tecnologia da informação e comunicação e parte disso é resultado da
engenharia de software. O termo engenharia de software se tornou comum nos diferentes
constructos acadêmicos e profissionais da área de tecnologia de forma mais ampla. Você já
teve curiosidade em compreender o que é engenharia de software e como ela surgiu?
É nessa perspectiva que conduzimos a Unidade 1. Há de se compreender, portanto, qual a
origem e o histórico da engenharia de software, bem como seus princípios e diferentes
áreas de conhecimento envolvidas nas etapas de desenvolvimento de software.
Esta Unidade está organizada em quatro seções que abordam, na sequência, os seguintes
conteúdos:
Histórico.
Conceitos e importância.
Princípio de desenvolvimento de software.
Áreas de conhecimento.
Bons estudos!
Objetivos
Conhecer o histórico da engenharia de software.
Compreender o conceito e a importância da engenharia de software.
Relacionar os princípios de desenvolvimento de software.
Conhecer as áreas de conhecimento correlatas às diferentes etapas de
desenvolvimento de software.
©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília
Desafio 
Vamos visitar o Portal da IEEE Computer Society?
Acessando o Portal da IEEE Computer Society você vai poder navegar e ter acesso a
diferentes tipos de conteúdos da área de tecnologia da informação e comunicação, nos
âmbitos profissionais, educativos e de pesquisa e desenvolvimento. Nesse espaço, você
também pode fazer o download da versão mais atual do Guide to the Software Engineering
Body of Knowledge (SWEBOK Guide).
Fonte: Computer.org, 2020.
O procedimento para download do SWEBOK é muito simples. Você precisa apenas fazer um
rápido registro, informando seu nome, propósito de uso do SWEBOK e o e-mail para o qual
deverá ser encaminhado o acesso ao arquivo .pdf do SWEBOK.
https://www.computer.org/education/bodies-of-knowledge/software-engineering
©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília
Conteúdo 
Histórico
A engenharia de software surgiu no contexto da crise do software, como uma alternativa de
estruturar diferentes técnicas e metodologias para o desenvolvimento de softwares. A crise
do software aconteceu nos anos de 1970, decorrente dos problemas enfrentados nas
atividades de desenvolvimento de software em função da falta de padronização, processos
bem definidos, metodologias e documentação, essenciais para o ciclo de vida de qualquer
software.
Ainda nos anos de 1970, com a tecnologia em geral se constituindo e se tornando cada vez
mais comercial, os sistemas começaram a ter estruturas mais complexas e, em paralelo, se
tornaram também mais complexos os problemas decorrentes da falta de documentação, de
técnicas, de teste e de rastreabilidade.
A expressão crise do software foi utilizada pela Association for Computing Machinery
(1972), que foi a primeira associação dedicada à educação e ciência em tecnologia. Como
parâmetros para o estabelecimento da expressão crise do software, a Association for
Computing Machinery elencou (no âmbito de desenvolvimento de software): o não
cumprimento dos prazos; os orçamentos realizados que ultrapassavam os orçamentos
previstos; requisitos de software ausentes ou em não conformidade; códigos confusos e de
difícil manutenção; e consequente baixa qualidade de software.
Os recorrentes problemas apresentados pelos sistemas de baixa qualidade fizeram emergir
a necessidade do estabelecimento de métodos e técnicas que trouxesse economia e
efetividade para o processo de desenvolvimento de software com uso de ferramentas
específicas e também com a previsão de treinamento para todos os atores envolvidos nas
diferentes etapas do ciclo de vida de software.  O ciclo de vida do software, nesse contexto,
refere-se à reunião dos processos, atividades e tarefas envolvidas nas etapas de
desenvolvimento, uso e manutenção de diferentes tipos de software, desde a concepção da
ideia de sua criação até o término de seu uso. De forma sumária, as atividades
fundamentais para o desenvolvimento de software são: análise e definição de requisitos;
prototipagem; codificação; testagem; e integração. Essas atividades podem conter
variações, incrementos ou adequações, dependendo do modelo utilizado para o
desenvolvimento de sistemas.
Figura 1 - Atividades Fundamentais da Engenharia de Software
Fonte: Elaborado pelo autor, 2020.
Para Mafra e Travassos  (2006), considerando os problemas ocasionados pela
imaturidade nos processos de desenvolvimento de software, há de se posicionar algumas
questões para evitá-los (os problemas), tais como:
1. Em qual tecnologia investir, visto que existem várias possibilidades tecnológicas e
cada uma delas tem suas potencialidades e prometem aprimorar a produtividade e a
qualidade no desenvolvimento de software?
2. Como metrificar o custo, o tempo e o esforço nos processos de desenvolvimento de
software?
3. Como aferir o retorno sobre o investimento?
4. Como avaliar as melhores circunstâncias para a recomendação e adoção de
diferentes tecnologias?
Em uma visão global do histórico da engenharia de software, há quatro eixos que podem ser
considerados: (i) a necessidade de profissionalização da área; (ii) o papel das mulheres no
contexto da tecnologia da informação e comunicação; (iii) a estrutura processual; e (iv) os
custos tanto de software, mas também dos hardwares envolvidos.
A necessidade de profissionalização da área de tecnologia da informação, assim como a
sua classificação como uma área de conhecimento, fez com que os processos de
desenvolvimento de software fossem repensados. Da mesma forma, os papéis e
responsabilidades dos envolvidos nas etapas de construção de software também
precisavam ter suas funções e atribuições definidas de modo a aprimorar o sistema de
informações em fábrica de software.
As mulheres tiveram papel de destaque na implementação das estruturas de comunicação e
informação informatizadas. Mulheres como Grace Hopper e Margaret Hamilton
contribuíram sobremaneira para o desenvolvimento das tecnologias que dariam base para o
contexto tecnológico atual. Grace Hopper, por exemplo, foi responsável pelo
desenvolvimento dos primeiros compiladores e também da ideia de linguagens de
programação independentes, e essa foi a gênese para a implementação do COBOL. Ela foi
cientista da computação e almirante da Marinha dos Estados Unidos da América. Por outro
lado, Margaret Heafield Hamilton, engenheira do laboratório de instrumentalização de
software do Massachusetts Institute of Technology (MIT). Mesmo tendo nomes de
expressão no histórico da engenharia de software e suas influências nas tecnologias
modernas, as profissões relacionadas à tecnologia da informação e comunicação foram
consideradas, por muito tempo, como predominantemente masculinas. Entretanto, este
cenário mudou e as mulheres estão cada vez mais presentes no contexto das novas
tecnologias da informação e comunicação, bem como no universo das startups. Para Sousa
e Melo  (2009, p.3), as estatísticas sobre a inserção da mulher nas esferas organizacionais
refletem, como um fato já consolidado, o aumento da participação feminina no mercado de
trabalho brasileiro. As autoras apontam ainda que o acesso mais amplo e mais frequente a
cargos de liderança e comando também é sinal da efetividade dessa mudança social.
A crescente participação da mulher no mercado de trabalho imprime novos
contornos às relações de gênero e de poder nas empresas. Esse fenômeno
sinaliza movimentos e processos de instalação do empoderamento da mulher. 
Associa-se ao alcance de bem-estar e de reconhecimento das relações sociais,
representando um desafioàs relações patriarcais e à manutenção dos privilégios
do gênero masculino. Consiste na tomada de consciência pela mulher de sua
habilidade e competência para produzir, criar, gerir e transformar sua própria
vida e seu entorno, tornando-se protagonista de sua história (SOUSA; MELO,
2009, p.1).
No eixo da estrutura processual, o estabelecimento de fluxos, processos, atividades e
tarefas tornou-se essencial para o desenvolvimento de qualquer tipo de sistemas de
informação. Por outro lado, demanda um trabalho analítico robusto para que o fluxo
informacional tenha suas entradas e saídas em conformidade às funcionalidades previstas
para os sistemas. Processo, neste contexto, é o termo designado para a divisão do trabalho
de desenvolvimento de software em fases (em nível macro); e também é o termo utilizado
para definir estruturas codificadas (em nível micro).
Sobre o eixo dos custos de software e hardware histórico dos processos de
desenvolvimento de projetos das organizações é muito importante para definir orçamentos
de manutenção de software. Se for possível medir o tamanho da nova funcionalidade que
será agregada ao sistema fica mais fácil definir o valor que a manutenção representará para
a empresa. Assim, os custos para a empresa podem aumentar ou diminuir de acordo com
as novas funcionalidades medidas. Se a quantidade de nova funcionalidade for determinada
e adicionada ao produto básico, o custo unitário de manutenção pode de fato cair, enquanto
o gasto real permanece constante ou aumenta. Sobre a proporcionalidade dos custos de
manutenção, caso estes crescem e, ao mesmo tempo, a taxa de crescimento dos pontos de
função for maior, significa que as taxas de manutenção estão em decréscimo.
A engenharia de software tem acompanhado o aprimoramento das tecnologias da
informação e comunicação e, em sua linha do tempo, assumiu diferentes características,
desde as mais clássicas até as mais contemporâneas.
Figura 2 – Linha do Tempo
Fonte: Elaborado pelo autor, 2020.
O infográfico da linha do tempo do histórico da engenharia de software apresenta 05 (cinco)
marcos principais. É claro que existem outros acontecimentos relevantes, mas esses são os
principais para o nosso contexto de desenvolvimento de software. O termo engenharia de
software foi definido entre 1945 e 1965, mas foi a partir deste período que se estabeleceu,
sobretudo, em função da crise do software como já apontamos. De 1985 até 1989, a
importância dos projetos e programas de software emergiu, metodologias mais definidas e
geração de documentações robustas, processuais e detalhadas. A Internet e,
consequentemente, os sistemas baseados em Internet se tornam mais massivos entre 1990
e 1999. Nos anos 2000, surgem as metodologias leves, ou metodologias ágeis, com menor
ênfase em documentação e maior ênfase em produtividade.
Conceitos
Antes de definirmos o que é engenharia de software, vamos relembrar o que é software?
Software é o conjunto de blocos e componentes lógicos que processam dados por meio de
sistemas e computadores. Trata-se de um conjunto de instruções (rotinas) que controlam o
funcionamento de computadores e também as funcionalidades dos sistemas. Ou seja, de
forma sumária, software é a parte lógica do computador, incluindo, basicamente, os
sistemas operacionais e os demais programas ou sistemas neles envolvidos.
E o que seria engenharia? Engenharia pode ser definida como uma área que reúne regras,
métodos, técnicas e ferramentas para a construção de algo, por meio do conhecimento
científico, técnico ou empírico.
Considerados os conceitos de software e engenharia, podemos chegar a uma definição
inicial sobre engenharia de software, como sendo o conjunto de métodos, técnicas e
ferramentas utilizadas para o desenvolvimento de softwares. Estes métodos permitem o
desenvolvimento, a gestão, a arquitetura e os testes de diferentes tipos de software.
Para Pressman (2006), a definição mais abrangente para a engenharia de software é como a
aplicação de uma abordagem sistemática, disciplinada e quantificável, com vistas ao
desenvolvimento, operação e manutenção do software, ou seja, aplicação da engenharia de
software.
Bauer (1972) definiu a engenharia de software como o estabelecimento e uso de sólidos
princípios de engenharia para que se possa obter um software economicamente viável, que
seja confiável e que funcione eficientemente em máquinas reais. Ou seja, para superar os
problemas da crise do software, utiliza-se a abordagem da engenharia ao desenvolvimento
de software, aliando processos de melhoria contínua, metodologias e técnicas e
ferramentas para ampliar a produtividade da equipe de desenvolvimento e consequente
qualidade do software (PRESSMAN , 2006).
Segundo Savi, Wangenheim e Borgatto  (2011), a engenharia de software é a aplicação de
abordagens sistemáticas, disciplinadas e quantificadas ao desenvolvimento, operação e
manutenção de software. Ainda segundo os autores, o profissional que atua na área de
engenharia de software precisa entender e saber aplicar teorias, modelos e técnicas
correntes para sistematicamente analisar e desenvolver artefatos de software com
qualidade. Precisa ter conhecimentos sobre gerenciamento de projetos e ser capaz de
conciliar objetivos de projeto conflitantes e considerar questões organizacionais. Também
precisa ter habilidades de trabalho em equipe, liderança, negociação e resolução de
conflitos.
Figura 3 – Eixos Principais
Fonte: Elaborado pelo autor, 2020.
Trazendo a engenharia de software para o contexto da programação de computadores,
podemos definir três eixos: (i) teoria; (ii) abstração; e (iii) design. Transversal a estes eixos,
está a estrutura de dados, que é a unidade temática das áreas de tecnologia     da
informação e comunicação responsável pelo estudo dos diversos mecanismos de
organização de dados para garantir o íntegro processamento do fluxo informacional.
O eixo teoria traz as definições, os axiomas, as provas e as interpretações para o
desenvolvimento de software. O eixo abstração define modelos, minimundos, modelos para
desenhar soluções, simplificações e compreensões de sistemas complexos. Por fim, o eixo
design apresenta os requisitos, as especificações de sistemas, modelagem e design e
processos de teste de software.
Qual seria, portanto, a diferença entre programas e softwares?
O termo programa está mais relacionado à informática, como sendo um conjunto de
códigos, rotinas e instruções que descrevem e executam comandos a serem realizados por
um computador. Trata-se de um conjunto de código fonte compilado, sequenciados em
linguagem de programação específica e com forma executável.
Figura 4 – Características fundamentais da Engenharia de Software
Fonte: Elaborado pelo autor, 2020.
O termo software está mais presente no contexto da tecnologia da informação e
comunicação e se diferencia dos programas porque, mesmo sendo um conjunto de código
fonte compilado e executável, contém manuais com procedimentos operacionais, além de
documentação sobre sua concepção, estrutura, funcionalidade, modelos de dados e
documentação que garante sua escalabilidade e manutenção. O software não é o mesmo o
tempo todo. Isso quer dizer que existem variáveis externas e mudanças tecnológicas que
influenciam na sua continuidade e na sua adaptabilidade.
Princípios de Desenvolvimento de Software
Para a constituição das etapas de desenvolvimento de software no âmbito da engenharia de
software, foram estabelecidos princípios para os relacionamentos, metodologias,
tecnologias e ferramentas a serem alocadas para o desenvolvimento de produtos e serviços
de tecnologia da informação e comunicação. Ou seja, desde a concepção da ideia do
software, passando pelas etapas de desenvolvimento, até sua entrega e utilização, são
cadenciadas várias etapas que demandam, inclusive, perspectivas multidisciplinares.
Lembre-se do conceito de engenharia de software apresentado na seção anterior. Apenas
para relembrarmos, apresentamos também o conceito do Institute of Electrical and
ElectronicsEngineers (IEEE) sobre engenharia de software, que a resume como a aplicação
prática e planejada da engenharia ao software, por meio de abordagens metodológicas
sistematizadas, disciplinada e metrificada ao seu desenvolvimento, operação e manutenção
(MOREIRA , 2012).
Figura 5 - IEEE
Fonte: IEEE, 2020.
O IEEE contém vários capítulos distribuídos em diferentes países, incluindo o Brasil e se
define como a maior organização do mundo de profissionais da área tecnológica dedicados
ao avanço da tecnologia em benefício da humanidade, com vistas à diversidade, equidade e
inclusão, usando a tecnologia para a redução das diferenças e da discriminação.
A base da engenharia de software estabelecida em metodologias clássicas e ágeis, com
ferramentas e profissionais especializados premissas-chaves que apoiam o processo de
desenvolvimento de software como um todo. Aqui, podemos relacionar oito premissas:
1. Formalidade.
2. Ausência de conflitos de interesse.
3. Modularização.
4. Abstração.
5. Mudanças preditivas.
6. Requisitos.
7. Generalidade.
8. Incremento.
Por outro lado, Hooker  (1999) já aspirava alguns princípios para a engenharia de software.
À ocasião, ele levantou sete princípios e os considerou como gerais porque percebeu que
poderiam ser adotados em todas as camadas da engenharia de software, individualmente,
ou no conjunto de camadas como um todo. Hooker (1999) elencou os sete princípios como:
Figura 6 – Princípios da Engenharia de Software
http://https/www.ieee.org/
Fonte: Hooker, 1999. (Adaptado)
Observe que Hooker (1999) traz os princípios no imperativo, mas sua relação é mais
prospectiva no sentido de se ter, como engenheiro de software, uma visão ampla com
enfoque nos desejos do cliente, nas tecnologias emergentes e na adaptabilidade dos
sistemas de informação.
Tratando especificamente cada princípio, temos que:
1. A razão pela qual tudo existe (the reason it all exists): o software a ser desenvolvido
tem que ter um propósito específico para o cliente. Ou seja, o cliente é o detentor de
todos os requisitos funcionais e não funcionais e cabe a ele tal definição. Para a
engenharia de software cabe a análise de aplicabilidade técnica e a transposição disso
tudo ao contexto das tecnologias da informação e comunicação, avaliando também
sobre o que realmente é necessário ao negócio do cliente como um todo, sobre o que
é supérfluo e sobre o que realmente agrega valor ao sistema de informações,
seguindo as regras de negócio estabelecidas pelo cliente. Assim, é importante que o
engenheiro de software leve o seu cliente a se questionar sobre a relevância das
funcionalidades que pede implementação. Caso exista dúvida, ou a resposta seja de
que não é relevante, é melhor não implementar e dedicar os esforços de
desenvolvimento para os requisitos essenciais. Justifique esse valor, pois esse é o
princípio base para todos os demais.
2. Mantenha as coisas simples (keep it simple): Hooker (1999) considera a importância
de se manter a simplicidade dos processos sem inibir sua complexidade. Você sabe
de onde veio a frase “menos é mais”? Ludwig Mies van der Rohe foi um renomado
arquiteto alemão, nacionalizado norte-americano, que trouxe sofisticação aos traços
da arquitetura com adoção de traços geométricos claros, limpos, simples e
sofisticados. Ele trouxe frases famosas como “less is more” (menos é mais) para
referir-se à questão de que a beleza está nas coisas simples; e “God is in the details”
(Deus está nos detalhes), para dizer que, não é preciso exagerar nas obras, pois basta
o necessário (SCHULZE , 1985). Esse preâmbulo é importante para que tenhamos
em mente que, os melhores sistemas de informação são aqueles que entregam
exatamente o que o cliente quer, sem burocracia, de forma integrada e correspondente
ao parque tecnológico de sua organização.
3. Mantenha o estilo/visão (maintain the vision): o software deve seguir a identidade
conceitual de seu requisitante, seja uma pessoa física ou uma pessoa jurídica. Deve-se
primar também pela compatibilidade de seus recursos aos recursos já existentes nos
demais serviços de tecnologia da informação e comunicação da empresa. É preciso,
portanto, manter a arquitetura da informação coerente. Essa arquitetura de software
que traz um sistema intensivo é também descrita pelo IEEE, assim como há
padronização pela ISO/IEC 42010:2007, o qual traz normas e padronizações para
Sistemas e Engenharia de Software - Prática recomendada para descrição de
arquitetura de sistemas intensivos de software (ISO/IEC/IEEE 42010:2011).
4. O que você produz, outros consumirão (what you produce, others will consume): ao se
desenvolver um determinado software, é preciso ter em mente que outras pessoas o
utilizarão e que isto se dará ao longo de um período, ou seja, dentro do ciclo de vida do
software. Então, deve-se primar por códigos limpos, reutilizáveis, de fácil manutenção,
atualização e escalabilidade. Pense em “escrever códigos” dentro de diferentes
“linguagens” de programação. Ou seja, como uma escrita de um romance, uma obra
literária, a escrita de códigos também precisa ter lógica, coerência e clareza. Em todos
os casos, é necessário pensar em documentação.
5. Esteja aberto para o futuro (be open to the future): a tecnologia não para de avançar.
Então, todo desenvolvimento de software deve contemplar possibilidades de
portabilidade e de escalabilidade, bem como condições arquitetônicas de integração,
modulação e reuso. Por outro lado, conforme Santos e Carvalho  (2009, p.46), “com a
acelerada mudança causada pelas tecnologias da informação e comunicação (TICs),
vários países do mundo passam a estruturar normas para amenizar as desigualdades
que as TICs podem causar.” Observe que isso vale para todos os constructos sociais.
Um exemplo disso é o programa sociedade da informação:
O Programa Sociedade da Informação tem por objetivo indicar rumos para
os diversos setores da sociedade, a fim de enfocar melhor diferentes
iniciativas que conjuntamente contribuam para impactos positivos das
tecnologias de informação e comunicação [...] bem como encurtar os
atrasos aos países centrais (TAKAHASHI , 2000, p.27).
6. Planeje com antecedência, com vistas ao reuso (plan ahead for reuse): O
planejamento dos sistemas de informação é essencial. É preciso rascunhar, desenhar,
modelar os sistemas de informação. Quanto maior for o tempo em planejamento,
menor será o esforço. A visão sistêmica sobre o produto de software leva à
compreensão de suas potencialidades e possibilidades de reuso, integração. Assim,
dentro de uma perspectiva preditiva, os(as) profissionais em engenharia de software
devem analisar custos, esforços, módulos, possibilidades e capacidades que o
software possa vir a ter. Isso contribui sobremaneira para que os clientes possam
prospectar avanços e melhorias tecnológicas, outras possibilidades integrativas,
avaliar o retorno sobre o investimento, bem como sobre qual será o legado de sua
tecnologia para sua instituição.
7. Pense (think): parece óbvio, mas este sétimo princípio é um dos mais importantes.
Analisar, refletir, experienciar, fazer testes, são ações que trazem recompensas para os
processos de desenvolvimento de software. Essas recompensas podem ser figuradas
como possibilidades de uso das tecnologias mais apropriadas e também com
tecnologias emergentes. Modelagem bem pensada resulta em sistemas complexos e
eficientes, orientados à modularização, ao reuso, à integração e a um ciclo de vida
estável.
Áreas de Conhecimento
A engenharia de software reúne diferentes áreas que são cadenciadas de forma
interdisciplinar, envolvendo diversas especialidades da área de tecnologia da informação e
comunicação.
Você conhece o SWEBOK? O Guide to the Software Engineering Body of Knowledge
(SWEBOK) é um guia que descreve um corpo de conhecimento sobre engenharia de
software, elencando 15 áreas de conhecimento (knowledge areas (KAs)), resumindo
conceitos básicos relacionados às etapas de desenvolvimento de software (BOURQUE;
FAIRLEY, 2014). O SWEBOK é mantidopor uma comunidade de tecnologia da informação e
comunicação e regulado pela IEEE Computer Society (BOURQUE; FAIRLEY, 2014).
O SWEBOK está em sua versão 3.0 SWEBOK Guide. Esse guia também tem reconhecimento
internacional pela ISO Technical Report 19759. O SWEBOK traz novas ferramentas, métodos,
tipos de software e boas práticas para o desenvolvimento de software, desde a concepção
da ideia de software até sua ambientação in loco, considerando processos de métricas,
estatísticas, volume entre outros elementos inerentes ao planejamento de software. A
Figura a seguir, por exemplo, é uma adaptação do processo de definição inicial de objetivos,
tal qual representado pelo SWEBOK (BOURQUE; FAIRLEY , 2014).
Figura 7 - Processo de Definição Inicial de Objetivos
Fonte: SWEBOK, 2014. (Adaptada)
A Figura anterior mostra a relação entre objetivos, estimativas e planejamento. Os objetivos
de software relacionam fatores externos à organização. Ou seja, trazem as necessidades e
regras de negócio, os requisitos funcionais e não funcionais definidos pelos clientes e
validados de forma colaborativa e também as expectativas de orçamento. As estimativas de
software relacionam fatores internos à organização, a qual tem que avaliar suas
capacidades e limitações e metrificar o esforço e a duração para o desenvolvimento de
software.
O planejamento deve ser obrigatório tanto para clientes quanto para desenvolvedores. No
caso dos desenvolvedores de software, é preciso dividir os objetivos, de forma especificada,
em atividades e marcos (milestones) de modo a facilitar a previsibilidade e a construção
modular. A abordagem ganha-ganha significa que, nos aspectos iniciais da negociação, é
importante que todos tenham vantagens (tanto clientes, quanto organizações de
desenvolvimento de software). Isso gera parceria e fidelização.
As 15 áreas de conhecimento (KAs) do SWEBOK (BOURQUE; FAIRLEY, 2014) são
classificadas de forma hierárquica correlacionando as etapas de desenvolvimento de
software, como uma alternativa para profissionalizar os processos de desenvolvimento de
software, mas também para delimitar as áreas, que podem ser denominadas de disciplinas.
1. Requisitos de software.
2. Desenho de software.
3. Construção de software.
4. Testes de software.
5. Manutenção de software.
6. Gestão de configuração de software.
7. Gestão de engenharia de software.
8. Processos de engenharia de software.
9. Ferramentas e métodos.
10. Qualidade de software.
11. Prática profissional de engenharia de software.
12. Economia na engenharia de software.
13. Fundamentos de computação.
14. Fundamentos de matemática.
15. Fundamentos de engenharia.
Fundamentalmente, as dez primeiras áreas de conhecimento referem-se às etapas de linha
de produção de software: (1) requisitos, (2) projeto, (3) construção, (4) testes, (5)
manutenção, (6) configuração, (7) gerenciamento, (8) processo, (9) ferramentas e métodos,
(10) qualidade. De forma geral, o objetivo é a promoção de uma visão holística da
engenharia de software (BOURQUE; FAIRLEY, 2014).
1. Requisitos de software: ao levantar os requisitos de software e requisitos de sistemas,
é preciso defini-los em funcionais ou não funcionais, com base em técnicas
apropriadas, elencando processos e propriedades emergentes. Sobre os processos,
são definidos os modelos atores, processos de gestão, suporte, qualidade e melhorias.
A análise de requisitos é feita considerando a perspectiva conceitual e a perspectiva
arquitetônica do software. Os requisitos são prototipados e validados com a
apresentação de documentação completa.
2. Desenho de software: os fundamentos de desenho de software trazem o conceito e o
contexto do software, considerando elementos gráficos, de interface com usuário,
acessibilidade e qualidade, ergonomia e esquemas de interação, localização e
internacionalização. Esta área de conhecimento também contempla famílias de
programas e Frameworks, além das definições de padrões e estilos arquitetônicos.
Questões de concorrência, controle de eventos e persistência de dados também são
desenvolvidas nesta área de conhecimento.
3. Construção de software: nesta área de conhecimento, são definidas e também
construídas tecnologias, com base em planejamento e métricas, visando a redução de
complexidade, antecipação de mudanças e construção de códigos verificáveis,
padronizados e reutilizáveis. O desenvolvimento de APIs, parametrização, exceções,
tolerância a falhas, middleware também são realizados na área de conhecimento
construção de software. Há outros elementos, como ajuste fino e análise de
performance, ambientes de desenvolvimento e ferramentas de teste unitário e para
construção de GUI.
4. Teste de software: a área de conhecimento de teste de software traz as questões-
chaves, critérios avaliativos e terminologias relacionadas aos processos de testagem
com princípios e técnicas bem definidas. Os testes são realizados conforme os níveis,
alvos e objetivos definidos pela equipe de desenvolvimento de software. Para a
realização dos testes de software são definidas técnicas específicas que podem ser
baseadas em código, falhas, uso, modelos, entre outras.
5. Manutenção de software: para que os processos de manutenção de software sem
efetivos, é preciso que se estabeleçam técnicas de compreensão de programa,
reengenharia, engenharia reversa, migração e avaliação de descontinuidade.
6.  Gestão de configuração de software: a gestão de conhecimento de software é
realizada por meio de planejamento com base em contextos organizacionais,
definição de premissas e restrições e a elaboração de um planejamento específico que
preveja requisição, avaliação e aprovação de serviços de mudança. Em paralelo, são
definidos processos de auditoria de software, tanto sob perspectiva funcional quanto
física.
7. de engenharia de software: a iniciação e a definição do escopo de software são itens
geridos por esta área de conhecimento que determina e negocia todos os requisitos,
características e outros processos de software. Nesse contexto, são avaliados os
riscos, a qualidade, os recursos alocados e os esforços envolvidos para o
desenvolvimento de software. Os riscos precisam ser classificados conforme sua
complexidade. Por outro lado, há de se definir o plano de implementação que preveja
critérios de aquisição, contratação e fornecimento, incluindo avaliação de terceira
parte.
8. Processo de engenharia de software: a gestão e infraestrutura de processos de
software definem ciclo de vida de software, relacionando categorias, modelos e
métodos, com vistas à qualidade do sistema de informações.
9. Métodos e modelos de engenharia de software: os princípios da engenharia de
software compõem a modelagem de software, sejam comportamental ou estrutural,
como um todo, envolvendo elementos de sintaxe, com condições, pré e pós condições,
análise semântica e pragmática, relacionando sistemas completos, corretos e
rastreáveis.
10. Qualidade de software: conceituar o que é qualidade não é uma tarefa tão simples
porque varia muito dependendo da área. Então, para área de tecnologia da informação
e comunicação, a qualidade pode ser metrificada por alguns pontos, tais como custo,
tempo de entrega, escopo, segurança, padrões de cultura e ética. A verificação da
qualidade deve ser feita com técnicas que contenham critérios claros e objetivos.
Finalizando a Unidade 
Esperamos que você tenha apreendido, após a leitura desta Unidade, os aspectos
introdutórios relacionados à engenharia de software, no contexto da tecnologia da
informação, bem como os princípios envolvidos nas áreas e etapas de
desenvolvimento de softwares especialistas e generalistas.
Especificamente, você teve a oportunidade de navegar em conteúdos relacionados ao
histórico da engenharia de software, relacionando sua importância, princípios e
diferentes áreas de conhecimento envolvidas nas etapas de desenvolvimento de
software.
©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília
Dica do Professor
Para saber um pouco mais sobre os aspectos introdutórios e outras curiosidades
relacionadas à engenharia de software, recomendamos a leitura do relatório técnico de Lima
et al. (2014), publicado em 2014, que traz possíveis ameaças à validade de experimentos
que envolvam prática ágil em metodologia de pair programming (programação em pares).
Você pode acessar essa obra buscando a seguinte referência nas bases científico-
acadêmicas:
LIMA, Vagner Carlos Marcolino; NETO, Adolfo Gustavo Serra Seca; EMER, Maria Claudia
Figueiredo Pereira. INVESTIGAÇÃO EXPERIMENTAL E PRÁTICAS ÁGEIS: AMEAÇAS À
VALIDADE DE EXPERIMENTOS ENVOLVENDO A PRÁTICA ÁGIL PROGRAMAÇÃO EM PAR.
Revista Eletrônica De Sistemas de Informação, v. 13, n. 1, p. 1, 2014.
©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília
Saiba Mais 
Você sabia que a carreira do(a) engenheiro(a) de software é regulada por um conselho
profissional?
É isso mesmo. O registro profissional habilita o(a) profissional para o pleno exercício da sua
função, de forma regulamentada, com funções, atribuições, responsabilidades, direitos e
garantias muito bem definidas.
As profissões relacionadas às diferentes áreas de tecnologia da informação e comunicação
são consideradas profissões do futuro pelo seu potencial transformador, inclusivo e
direcionado às diferentes necessidades das pessoas, sobretudo com o desenvolvimento de
inteligência artificial. Nesse contexto, o Brasil figura a primeira posição da América Latina e
está dentro dos dez países do mundo em mercado de softwares.
Voltando ao contexto da formação em engenharia de software, desde 2018, a profissão
passou a ser regulamentada com registro junto ao Conselho Regional de Engenharia e
Agronomia (CREA), o qual demanda habilidades e competências essenciais para a atuação
na área.
Assista ao vídeo “O que um Engenheiro de Software faz? ”, do canal Código Fonte TV. O
vídeo tem aproximadamente 8 minutos e traz interessantes reflexões sobre a profissão.

https://www.youtube.com/watch?v=wdU9L3DqU2w
http://savefrom.net/?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DwdU9L3DqU2w&utm_source=chrome&utm_medium=extensions&utm_campaign=link_modifier
©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília
Referências 
BAUER, F. L. Software Engineering - Information Processing. Amsterdam: North
Holland Publishing, 1972.
BOURQUE, Pierre; FAIRLEY, Richard E. Guide to the Software Engineering Body of
Knowledge (SWEBOK). Versão 3.0. IEEE Computer Society, 2014.
SCHULZE, Franz. Mies van der Rohe, a Critical Biography. The University of Chicago
Press, Chicago and London, 1985
HOOKER, David. A logging routine for Windows NT events. C/C++ Users Journal, v. 17,
n. 7, p. 65-68, 1999.
ISO/IEC/IEEE 42010:2011. Systems and software engineering - Architecture
description. International Organization for Standardization. 2011.
MAFRA, Sômulo Nogueira; TRAVASSOS, Guilherme Horta. Estudos Primários e
Secundários apoiando a busca por Evidência em Engenharia de Software. Relatório
Técnico, RT-ES, v. 687, n. 06, 2006.
MOREIRA, J. R. Análise de Pontos de Função em GTI. Engenharia de Software
Magazine. DEVMEDIA. Ed. 49. 2012.
PRESSMAN, ROGER S. Engenharia de Software. (6ª edição), São Paulo, Ed.
McGrawHill, 2006.
SANTOS, Plácida Leopoldina Ventura Amorim da et al. Sociedade da informação:
avanços e retrocessos no acesso e no uso da informação. Informação & Sociedade:
Estudos, p. 45-55, 2009.
SAVI, Rafael; WANGENHEIM, C.; BORGATTO, A. Um modelo de avaliação de jogos
educacionais na engenharia de software. Anais do XXV Simpósio Brasileiro de
Engenharia de Software (SBES 2011), São Paulo, 2011.
SOUSA, Rosa Maria Borges Cardoso de; MELO, Marlene Catarina de Oliveira Lopes.
Mulheres na gerência em tecnologia da informação: análise de expressões de
empoderamento. REGE Revista de Gestão, v. 16, n. 1, p. 1-16, 2009.
TAKAHASHI, T. (org.). Livro verde da Sociedade da Informação no Brasil. Brasília:
Ministério da Ciência e Tecnologia, 2000.

Outros materiais