UFU Universidade Federal de Uberlândia ANÁLISE E PROJETO...

Post on 10-Nov-2018

218 views 0 download

Transcript of UFU Universidade Federal de Uberlândia ANÁLISE E PROJETO...

ANÁLISE E PROJETO DE SISTEMAS INTRODUÇÃO A ENGENHARIA DE SOFTWARE

Professora: Fabíola Gonçalves.

UFU Universidade Federal de Uberlândia

AGENDA

Introdução à Engenharia de Software

Características do Software

Comunicação no desenvolvimento de Software

O que é Engenharia de Software

Qualidade versus Incidentes

Aplicações

Importância do Software

Princípios de Engenharia de Software

O QUE É SOFTWARE?

● “Programas de computador, juntamente com

as estruturas de dados e documentação

associada”.

● “Software de computador é o produto que os

profissionais de software constroem e, depois,

mantém ao longo do tempo. Abrange desde

programas que executam em computadores de

qualquer tamanho e arquitetura a sistemas

embutidos.”

O QUE É SOFTWARE?

● Onipresença / DEPENDÊNCIA de

“computadores”

● Computador "=" Software

● Quem o faz/desenvolve?

● Qual sua importância?

● Qual o produto do trabalho dos elaboradores

de um software?

SOFTWARE

Primeiras décadas da era do computador..

“Hoje o problema é diferente, o

principal desafio desta década é melhorar

a qualidade e reduzir o custo das

soluções baseadas em computador, ou

seja, que são resolvíveis com softwares de

computador”.

SOFTWARE

Evolução do Software...

CARACTERÍSTICAS DO SOFTWARE

Pontos chaves:

Comunicação entre o clientes e

desenvolvedores

“ Devemos entender o que o cliente quer e quais

são as suas necessidades, antes de começarmos a

construir um sistema que o ajude a resolver seus

problemas”.

Número de pessoas trabalhando em um

projeto?

CARACTERÍSTICAS DO SOFTWARE

Boa Comunicação? Por quê?

QUALIDADE..

PROBLEMAS COM SOFTWARE

*

FALHAS EM SOFTWARE

Ariane

Custo: $500 milhões

Desastre: Ariane 5, o mais novo foguete da Europa não-

tripulado, foi intencionalmente destruído segundos após

seu lançamento em seu vôo inaugural. Também foram

destruídos quatro satélites científicos para estudar como

o campo magnético da Terra interage com os ventos

solares.

Causa: O desligamento ocorreu quando o computador de

orientação tentou converter a velocidade do foguete de 64-

bits para um formato de 16 bits. O número era muito

grande, o que resultou em erro de estouro. Quando o

sistema de orientação desligou, o controle passou para

uma unidade idêntica redundante, que também falhou

porque nele estava correndo o mesmo algoritmo.

FALHAS EM SOFTWARE

3ª Guerra Mundial (Quase!) (1983)

Custo: Quase toda a humanidade

Desastre: O sistema de alerta soviético falsamente

indicou que os Estados Unidos tinham lançado cinco

mísseis balísticos. Felizmente, o oficial de serviço

soviético tinha uma “sensação esquisita no estômago” e

fundamentalmente, se os EUA estavam realmente

atacando, eles lançariam mais de cinco mísseis, por

isso ele relatou o aparente ataque como um alarme

falso.

Causa: Um bug no software soviético falhou ao

detectar reflexos solares como falsos mísseis.

QUALIDADE?

CARACTERÍSTICAS DO SOFTWARE

O software é um elemento de um sistema

lógico e não de um sistema físico..

O software é desenvolvido; não é fabricado no

sentido clássico.

O software não se desgasta: o software não é

suscetível aos males ambientais que causam

desgastes.

Natureza “MUTÁVEL”

do SW

ATRIBUTOS DE UM BOM SOFTWARE

Facilidade de manutenção: um software deve ser

escrito de modo que possa evoluir para atender as

necessidades mutáveis dos clientes.

Nível de confiança: incluem confiabilidade,

proteção e segurança. Um software confiável não

deve ocasionar danos físicos ou econômicos, no caso

de defeito no sistema.

Eficiência: inclui rapidez de resposta, o tempo de

processador, a utilização da memória, entre outros.

Facilidade de uso: deve dispor de interface

apropriada com o usuário e de documentação

adequada.

APLICAÇÕES DE SOFTWARE

● industrial automation

● business software

● video games

● telecommunications (i.e., the Internet and everything

that flows on it)

● databases

● educational software

● medical software

● image editing

● simulation software, word processing e Decision

making software

IMPORTÂNCIA DO SOFTWARE

● 98% dos microprocessadores não estão

nos computadores, mas embutidos em

produtos

MERCADO DO SOFTWARE

● 2008: U$303bi

● 2013: U$457bi

● 40% em 5 anos!!!

● Carros modernos da GM possuem 100 milhões

de linha de código e mais de 30

microprocessadores.

● Modernos celulares possuem 20 milhões de

linha de código.

CRISE DO SOFTWARE

● Conferência da NATO (1968) – Crise de

Software

– Preço do hardware cai

– Maior demanda por software

– Baixa produtividade e qualidade: Projetos abandonados,

Módulos que não operam corretamente quando combinados, Sistemas tão difíceis de

usar que são descartados, Sistemas que simplesmente param de funcionar., etc.

● Resultado:

– Software entregue fora do prazo e com maior custo

– Grandes falhas

CRISE DO SOFTWARE - SOLUÇÃO

● Métodos e técnicas: como fazer (processo de

software).

– Combinar métodos para a fase de

desenvolvimento.

– Ferramentas para automatizar estes métodos.

● Técnicas para assegurar qualidade (Engenharia

de Software).

● Interesse do governo em treinamentos e

educação

POR QUE ENGENHARIA DE SOFTWARE?

● Termo criado em 1968

● Ideia de usar processos e métodos bem

definidos, quantificáveis, formais, para

desenvolvimento de software

● Aplicação de conceitos de engenharia ao

desenvolvimento de software

● Definições:

ENGENHARIA DE SOFTWARE

● “Aplicação de uma abordagem

sistemática, disciplinada e quantificável

para o desenvolvimento, operação e

manutenção do software”.

IEEE

ENGENHARIA DE SOFTWARE

● “Engenharia é a aplicação sistemática de

conhecimentos científicos na criação e

construção de soluções com um bom

custo-benefício para a resolução de

problemas práticos da sociedade”.

SEI

ÁREAS DA ENGENHARIA DE SOFTWARE

PRODUTO E PROCESSO DE SOFTWARE

A engenharia de software abrange um

conjunto de elementos Métodos: fornecem os detalhes de como fazer para

construir softwares...

Ferramentas: apoio automatizado ou semi-automatizado.

Procedimentos: definem a sequência em que os métodos

são aplicados, os produtos a serem disponibilizados,

controles de qualidade e avaliação.

Paradigmas: abordagem ou filosofia em particular para a

construção de software.

RESPONSABILIDADE E ÉTICA

RESPONSABILIDADE E ÉTICA

Dilemas/Pontos de vista divergentes

Discordar políticas da alta gerência?

Relatar problemas com o software?

Liberação de sw sem testes?

SW militares/nucleares?

MITOS DO SOFTWARE?

● “Se nos atrasarmos no planejamento,

podemos adicionar mais programadores”.

● “O estabelecimento geral de objetivos é

suficiente para iniciar o desenvolvimento do

software – podemos fornecer os detalhes

posteriormente”.

MITOS DO SOFTWARE

● “Quando escrevemos um programa e o

fazemos funcionar, nosso trabalho está

completo”.

● “Até que eu esteja com o programa

funcionando não tenho como avaliar sua

qualidade ”.

PRINCÍPIOS DE SOFTWARE

Objetivo SUCESSO no desenvolvimento

Envolve tanto PRODUTO quanto PROCESSO

GENÉRICOS

INDEPENDENTES de linguagem/BD/SO e etc…

Princípios de Software: “declarações gerais e

abstratas que descrevem as propriedades

desejadas dos processos de desenvolvimento e dos

produtos de software”.

PRINCÍPIOS DE SOFTWARE

PRINCÍPIOS DE SOFTWARE

Rigor e Formalismo

Desenvolvimento SW artesanal

CRIATIVO

INSPIRAÇÃO

RIGOR

Complemento à criatividade …

PRINCÍPIOS DE SOFTWARE

Modularização

Modular??

Dividir complexidade …

Facilitar manutenção

Bastante COESÃO

Pouca INTERRELAÇÃO

PRINCÍPIOS DE SOFTWARE

Abstração

Acompanha todo e qualquer processo de

implementação ou programação.

As linguagens de programação que

utilizamos nada mais são do que

construções abstratas para representar

soluções ou interagir com o hardware.

PRINCÍPIOS DE SOFTWARE

Generalização versus Decomposição

Focar na descoberta de um problema mais

geral que possa existir por trás do problema.

Capacidade de solucionar problemas mais e

associa-los em módulos comuns.

Reusabilidade (outro príncipio)

PRINCÍPIOS DE SOFTWARE

Incrementabilidade

A incrementabilidade é o princípio que

busca a perfeição ou a obtenção dos

objetivos através de passos que evoluem

(ou são incrementados) ao longo do tempo.