Você está na página 1de 28

Campus Anchieta

Superior Tecnologia em Gestão da Tecnologia da Informação


Fundamentos de Engenharia de Software

Prof. Dr. João Carlos Lopes Fernandes


joao.fernandes1@docente.unip.br

1º Semestre/2023
O que é Software?

Software consiste em: (1) instruções (programas de


computador) que, quando executadas, fornecem
características, funções e desempenho desejados; (2)
estruturas de dados que possibilitam aos programas
manipular informações adequadamente; e (3) informação
descritiva, tanto na forma impressa quanto na virtual,
descrevendo a operação e o uso dos programas.
(PRESSMAN, 2016, p. 4)

Um sistema de software (...) normalmente consiste em uma


série de programas separados e arquivos de configuração
que são usados para configurar esses programas. Isso pode
incluir documentação do sistema, que descreve a sua
estrutura; documentação do usuário, que explica como usar
o sistema; e sites, para usuários baixarem a informação
recente do produto. (SOMMERVILLE, 2011, pg. 4)
Tipos de Software (PRESSMAN):

Tipo de Software Definição


Conjunto de programas feito para atender a outros programas. (Ex.:
Software de sistema
Compiladores, sistemas operacionais, drivers)
Software de aplicação Programas independentes que solucionam uma necessidade
específica de negócio.
Software de Programas de “cálculo de massa” para engenharia ou áreacientífica.
engenharia/científico
Residente num produto ou sistema e utilizado para
Software embarcado
implementar e controlar características e funções para o
usuário e para o próprio sistema.
Projetado para prover capacidade específica de utilização
Software para linha de
por muitos clientes diferentes. (Ex.: Softwares de Prateleira)
produtos
Aplicações Web / aplicativos Aplicativos voltados para navegadores e software residente em
móveis dispositivos móveis.
Faz uso de algoritmos não numéricos para solucionar
Software de inteligência
problemas complexos que não são passíveis de computação
artificial
ou de análise direta.
Atributos essenciais (SOMMERVILLE):

Tipo de Software Definição


O software deve ser escrito de forma que possa evoluir para
Manutenibilidade atender às necessidades dos clientes.

Um software confiável não deve causar prejuízos físicos ou


Confiança e proteção econômicos no caso de falha de sistema.

O software não deve desperdiçar os recursos do sistema,


Eficiência como memória e ciclos do processador.

O software deve ser aceitável para o tipo de usuário para o qual


Aceitabilidade foi projetado. Isso significa que deve ser compreensível, usável e
compatível com outros sistemas usados por ele.
O que é Engenharia de Software?

A aplicação de uma abordagem sistemática, disciplinada e quantificável


no desenvolvimento, na operação e na manutenção de software; isto
é, a aplicação de engenharia ao software. (PRESSMAN, 2016, p. 15)
(SWEBOK, pg. xxxi)

É uma disciplinal de engenharia que se preocupa com todos os aspectos


de produção de software. (SOMMERVILLE, 2011, pg. 4)
Diferenças (SOMMERVILLE):

Comparação Definição
Ciência da computação foca a teoria e os fundamentos;
Engenharia de Software x engenharia de software preocupa-se com o lado prático do
Ciência da Computação desenvolvimento e entrega de softwares úteis.

Engenharia de sistemas se preocupa com todos os aspectos do


Engenharia de Software x desenvolvimento de sistemas computacionais, incluindo engenharia
Engenharia de Sistemas de hardware, software e processo. Engenharia de software é uma
parte específica desse processo mais genérico.
Princípios de (David) Hooker (PRESSMAN):

Princípio Definição
Razão de existir Agregar valor para seus usuários.
Todo projeto deve ser o mais simples possível, mas não simplista.
KISS (Keep It Simple, Stupid!)
“Qualquer idiota pode fazer algo complicado. O difícil é fazer algo
simples.” (Steve Jobs)
Mantenha a visão Uma visão clara é essencial para o sucesso.
De uma maneira ou de outra, alguém mais vai usar, manter,
O que um produz outros
documentar ou, de alguma forma, depender da capacidade de
consomem
entender seu sistema.
Esteja aberto para o futuro Sistemas precisam estar prontos para se adaptar a mudanças.
A reutilização de código e projetos tem sido proclamada como uma
Planeje com antecedência,
grande vantagem do uso de tecnologias orientadas a objetos,
visando a reutilização
porém, aproveitar as possibilidades de reutilização exige
planejamento e capacidade de fazer previsões.
Pensar bem e de forma clara antes de agir quase sempre produz
Pense!
melhores resultados.
Camadas da Engenharia de Software

(PRESSMAN)
Foco na qualidade

Qualquer abordagem de engenharia (inclusive engenharia de software)


deve estar fundamentada em um comprometimento organizacional com
a qualidade. (PRESSMAN, 2016, pg. 15)

Qualidade???
• Qualidade do produto (Adequação ao uso, conformidade com requisitos)
• Qualidade do processo (Eficiência)
• Qualidade da gestão
• ...
Processo

QUEM está fazendo O QUE e QUANDO

• O processo define uma metodologia (framework / paradigma).


• Constitui a base para o controle do gerenciamento de projetos de
software
• Estabelece o contexto no qual são aplicados métodos técnicos, são
produzidos artefatos (modelos, documentos, dados, relatórios,
formulários etc.), são estabelecidos marcos, a qualidade é garantida e
mudanças são geridas de forma apropriada.
Métodos

• Fornecem as informações técnicas para desenvolver software


(Instruções de trabalho).
• Conjuntos de tarefas com técnicas particulares para cada fase do
desenvolvimento de software.
• Os métodos envolvem uma ampla variedade de tarefas, que incluem:
comunicação, análise de requisitos, modelagem de projeto, construção
de programa, testes e suporte.
Ferramentas:

• As ferramentas da engenharia de software fornecem suporte


automatizado ou semiautomatizado para o processo e para os métodos.
• Quando as ferramentas são integradas, de modo que as informações
criadas por uma ferramenta possam ser utilizadas por outra, é
estabelecido um sistema para o suporte ao desenvolvimento de
software, denominado engenharia de software com o auxílio do
computador (Ferramentas CASE – Computer-Aided Software
Engineering).
O SWEBOK

O Guide to the Software Engineering Body of Knowledge,


conhecido pela sigla SWEBOK, é um documento criado sob o
patrocínio da IEEE com a finalidade de servir de referência
das práticas geralmente aceitas na comunidade de
Engenharia de Software.
Organização do SWEBOK

A versão 3, lançada em 2016, está organizada em 15 Áreas de


Conhecimento (em 2004 eram 10):

• Requisitos de Software • Modelos e Métodos de Engenharia de


• Desenho de Software Software
• Construção de Software • Qualidade de Software
• Teste de Software • Prática Profissional de Engenharia
• Manutenção de Software • Economia em Engenharia de Software
• Gerenciamento de Configuração de Software • Fundamentos de Computação
• Gerenciamento de Engenharia de Software • Fundamentos de Matemática
• Processo de Engenharia de Software • Fundamentos de Engenharia
Qual é a diferença entre engenharia de
software e engenharia de sistemas?

Engenharia de sistemas com base em computadores se ocupa de


todos os aspectos de desenvolvimento e da evolução de sistemas
baseado em computadores, incluindo hardware, software e engenharia
do processo.

A engenharia de software é parte desse processo.

Engenheiros de sistemas estão envolvidos na especificação do


sistema, na definição de sua arquitetura geral, integração e
desenvolvimento
Fábrica de software

A palavra 'Fábrica' é utilizada para fazer uma analogia à velocidade,


produção em larga escala e foco na alta produtividade, onde
metodologias e processos são estruturados de forma semelhante
àqueles das indústrias tradicionais.

A palavra 'Software', por sua vez, se refere ao conjunto de


componentes lógicos de um computador ou sistema de processamento
de dados. Programas de computadores, aplicativos mobile e web como
o Facebook, Twitter e Uber, são bons exemplos de softwares que
utilizamos todos os dias.
Fábrica de software

Logo, uma 'fábrica de software' nada mais é do que uma empresa que
constrói e presta manutenção de sistemas e aplicações web e mobile,
maximizando a produção com o intuito de reduzir custos no
desenvolvimento. Normalmente, os processos e metodologias estão
voltadas para desenvolvimento com padronização em algumas etapas,
assim como a reutilização de componentes anteriormente
desenvolvidos.
Processo de desenvolvimento de um produto
digital em uma fábrica de software

É importante dizer que cada fábrica tem seu próprio processo de


trabalho. Porém, na grande maioria, o principal objetivo é a rápida
velocidade no desenvolvimento da aplicação web, mobile ou desktop.
Trabalhar com padrões muito bem estabelecidos e com cronogramas
fechados é muitas vezes o que permite a agilidade na entrega.

18
Processo de desenvolvimento de um produto
digital em uma fábrica de software

É preciso ter em mente que parte do processo, ou até partes dos


softwares, será feito com base em moldes pré-existentes. As necessidades
de cada cliente e de cada projeto são adequadas utilizando esses moldes
como base.

Com isso, o nível de personalização e customização tende a ser limitado, e


o cronograma fechado muitas vezes não permite a flexibilidade que o
mercado exige atualmente. Em compensação, possuem preços bastante
competitivos devido a este modelo de reutilização e padronização de
componentes.

Sua demanda em uma escala variável, quando desenvolvida em uma


fábrica de software, terá que se adequar a solução criada e cabe a você
entender se sua necessidade permite esta flexibilidade, ou se você não
pode abrir mão de um processo que se adeque 100% ao seu negócio.
19
Características dos softwares: Funcionalidade

A funcionalidade de um software diz respeito à satisfação de


necessidades que deram origem ao projeto. Abrange requisitos
implícitos e explícitos e está intimamente ligada à qualidade do código
criado.

Adequação
O produto deve estar de acordo com o objetivo que originou sua
demanda. Um software para uma clínica médica não tem os mesmos
recursos de um sistema desenvolvido para um restaurante, por
exemplo.
Características dos softwares: Funcionalidade

Acurácia
O software deve gerar resultados de qualidade para justificar seu
desenvolvimento e uso. Aumento de produtividade, redução de custos e
lucratividade são alguns dos indicadores de acurácia que podem ser
analisados.

Interoperabilidade
Um software de qualidade deve suportar a integração com outras
ferramentas, mesmo que não sejam desenvolvidas pela mesma
empresa. Para isso, tem que ser capaz de interagir com outros sistemas
e ser flexível.
Características dos softwares: Usabilidade

O software precisa ser de fácil utilização, principalmente porque a


grande maioria dos usuários não entende de linguagem de
programação.

Inteligibilidade
Compreender o objetivo do uso de um software é o primeiro passo
para valorizar os recursos disponíveis e viabilizar os resultados
esperados pela implementação da solução.
Características dos softwares: Usabilidade
Apreensibilidade
Além de ter um conceito de fácil compreensão, a ferramenta deve ser
intuitiva: qualquer pessoa que tenha um mínimo conhecimento
sobre inovação e tecnologia deve ser capaz de aprender a usar e
operar os recursos para viabilizar os resultados propostos pelas
funcionalidades da solução.

Operacionalidade
É preciso garantir continuidade para a operação. Os recursos devem
ser funcionais e estar disponíveis durante todo o uso da
aplicação. Além disso, ele deve ser capaz de executar os códigos de
forma ininterrupta quando requisitado ou informar as limitações para que
o usuário tenha consciência da real capacidade do software e possa
controlá-lo da forma mais pertinente.
Características dos softwares: Eficiência

Um nível de desempenho mínimo e máximo para o software


devem ser delimitados no início do projeto. Assim, é possível
mapear o comportamento da solução em relação aos recursos que
vai utilizar e ao tempo de resposta para o processamento. Tudo
deve ser compatível com o nível que foi requerido para o produto.
Características dos softwares:
Manutenibilidade

A facilidade com que as correções podem ser implementadas também


diz muito sobre a qualidade do software. Isso porque
permite atualizações rápidas e pouco onerosas, evitadas pelos
usuários que temem pela integridade das informações que já foram
armazenadas no banco de dados.

Rastreabilidade, modificabilidade e estabilidade


Qual o nível de dificuldade em encontrar uma falha quando ela ocorre? É
possível fazer modificações em blocos para não prejudicar outros
módulos do código e funcionalidades que não apontam erros?
Quanto mais rápida for a identificação do erro, menos onerosa será a
sua correção e mais provável o restabelecimento das funções sem
prejuízos para o restante da solução.
Características dos softwares:
Manutenibilidade

A estabilidade garante que a correção de bugs não interfira na


operabilidade da ferramenta.
Informação desnecessária ou inverídica, inconsistência e conflito de
dados, omissão de informações e múltiplas interpretações são apenas
alguns exemplos de defeitos que podem ocorrer e precisam ser
rastreados com facilidade.
Características dos softwares: Portabilidade

Essa característica se relaciona com a capacidade de escalabilidade da


solução, assim como a necessidade de menor dependência do
desenvolvedor que criou o código principal. Para isso, ele precisa ser
adaptável a qualquer ambiente sem a necessidade de outras
aplicações e estar de acordo com padrões de portabilidade para ser
substituído se necessário.

Além disso, uma documentação abrangente permite manter essa


escalabilidade e a continuidade do software, independentemente do
desenvolvedor.
Dúvidas

Você também pode gostar