Objetivo da aula
- Entender o conceito de Engenharia de Software focando nas seguintes questões:
- Pode-se resolver qualquer problema (grande e/ou complexo) começando pela análise e projeto
- Uma forma fácil de verificar a viabilidade é implementando o protótipo
- Para se construir um software dependemos inicialmente dos requisitos
- Se um problema for grande, basta efetuar uma decomposição
Introdução
Porque Engenharia de Software?
- Ricardo de Almeida Falbo - UFES
- Criar software é, muitas vezes, confundido com programação. Essa confusão se dá principalmente pela iniciação: começa com o desenvolvimento de habilidades de raciocínio lógico, através de MTP, por exemṕlo, e estruturas de dados
- Nada há de errado nessa estratégia. A idéia é essa mesmo, resolver pequenos problemas que gradativamente vão aumentando de complexidade, exigindo maiores conhecimentos e habilidades
- Com a experiência, normalmente chega-se a um ponto onde, dado o tamanho ou a complexidade do problema, essa abordagem individual, centrada na programação não é mais indicada
- Só é aplicável para resolver pequenos problemas, tais como calcular médias, ordenar conjuntos de dados etc, envolvendo basicamente o projeto de um único algoritmo
- Contudo, é insuficiente para problemas grandes e complexos, tais como:
- Automação bancária
- Informatização de indústrias
- Gestão hospitalar
- Sistemas empresariais, etc.
- Sistemas financeiro
- Universidades
- Bolsa de Valores
- Jurídico
- Comércio Eletrônico
- Pregão Eletrônico
- ??
- Em tais situações, uma abordagem de engenharia é necessária.
- Observando outras áreas, tal como a Engenharia Civil, podemos verificar que situações análogas ocorrem
- Para se construir essa pequena casinha, de madeira, no meio do mato, talvez seja factível sem elaborar um projeto de engenharia civil com plantas baixa, hidráulica e elétrica ou mesmo cálculos estruturais.
- Um bom pedreiro ou um cara muito esforçado será capaz de resolver o problema a contento
- Talvez não seja dada a melhor solução, mas o produto resultante pode atender aos requisitos pré-estabelecidos.
- Essa abordagem, contudo, não é viável para a construção de uma casa maior, de um edifício, de um galpão ou outra construção mais relevante.
- Nesse caso, é necessário realizar um estudo aprofundado, incluindo:
- Análises de solo
- Cálculos estruturais
- Análise de sustentabilidade
- Novas tecnologias, etc
- seguido de um planejamento da execução da obra e desenvolvimento de modelos (maquetes e plantas de diversas naturezas), até a realização da obra, que deve ocorrer por etapas, tais como:
- fundação
- alvenaria
- fiação
- hidráulica
- acabamento, etc.
- Ao longo da realização do trabalho, deve-se realizar um acompanhamento para verificar:
- prazos
- custos
- qualidade.
- legalidade
- aquisições
- riscos
- sustentabilidade
Software é a mesma coisa, exige requisitos detalhados, projeto apurado, acompanhamento contínuo e a percepção de que será usado por muito tempo e por muita gente de forma automática.
- Visando melhorar a qualidade dos produtos de software e aumentar a produtividade no processo de desenvolvimento, surgiu a Engenharia de Software
- Trata de aspectos relacionados ao estabelecimento de:
- processos
- métodos
- técnicas
- ferramentas
- possibilidade de melhorias
- ambientes de suporte ao desenvolvimento de software.
- Divide et Impera
- Assim como em outras áreas, em uma abordagem de engenharia de software, inicialmente o problema a ser tratado deve ser analisado e decomposto em partes menores
- “Dividir para conquistar”
- Assim como em outras áreas, em uma abordagem de engenharia de software, inicialmente o problema a ser tratado deve ser analisado e decomposto em partes menores

- Para cada uma dessas partes, uma solução deve ser elaborada. Solucionados os sub-problemas isoladamente, é necessário integrar as soluções
- Para tal, uma arquitetura deve ser estabelecida
O impacto do software
- Mas, será que softwares atingem todas as áreas da tecnologia?
- Uma questão séria discutida atualmente?
- http://www.youtube.com/watch?v=4iKu9qtCSXg ou
- Youtube => Todo mundo deveria aprender a programar (What most schools don't teach)
- Detalhe no tempo de 4:21 min.
- https://www.kickstarter.com/projects/thoughtstem/codespells-express-yourself-with-magic
Componentes e Tipos de Software
- Um sistema informatizado é formado por dois tipos de componentes:
- Executáveis em máquinas
- Não executáveis em máquinas
- Os componentes do software devem mapear as exigências do cliente em código executável.
- Tipos de software:
- Básico: APIs, sockets, drivers, DLLs, componentes de SO, ...
- Tempo real: monitora, analisa e controla eventos em tempo real
- Comercial: controle de estoque, vendas, etc. Normalmente manipulam algum mecanismo de persistência.
- Científico: intenso processamento de números e cálculos
- Embutido (Embedded): celulares, relógios, microondas, injeção eletrônica
- Saúde: Monitores cardíacos, Medidores de pressão arterial, tomografia, etc
- Pessoal: processador de texto, planilha, jogos, apresentações, etc
- Inteligência artificial: sistemas especialistas, redes neurais, robótica e elearning
- Games: Educacional, Games Sociais, Comercial, Aventura, Estratégia, RPG, Tabuleiro Eletrônico, MMO, Simulação, Esportes, Cartas,

Fato
- Praticamente, todos os países dependem de sistemas simples e complexos baseados em computadores.
- Imagine uma situação onde os negócios não sejam suportados por programas
- A dependência se acentua à medida que a nação é mais desenvolvida.
- É verdade que quanto mais complexa a atividade, maior o grau de automatização?
- Países emergentes anseiam por tornar-se dependentes de tecnologia
- Abeer: Brasil exporta silício bruto a aproximadamente US$ 60 por tonelada e importa, em média, a US$ 600 mil por tonelada em forma de processadores
A Engenharia de Software
- Ramo da engenharia cujo foco é o desenvolvimento de sistemas de software dentro de custos adequados de alta qualidade.
- Não existem limitações físicas no potencial do software
- Pode se tornar extremamente complexo
Conceito de Engenharia de Software
- Surgiu a 40 anos atrás em função da Crise do Software
- A experiência mostrou que o desenvolvimento informal de software não era suficiente
A Crise do Software
- Causas:
- Projetos importantes com anos de atraso
- Os custos superavam as previsões
- Desempenho insatisfatório
- Não era confiável
- Difícil de manter
- Os custos de hardware caíam e os custos de software aumentavam.
Questões
- Sempre que temos um problema para automatizar é interessante que já comecemos codificando o sistema?
- Qual a melhor maneira de começar a encarar um problema grande e complexo?
- No site foi dado um exemplo de passos para um estudo aprofundado de uma casa. E para um software, quais seria estes?
- Exemplifique uma área utilizada no mundo atual onde não é interessante ou não é necessária a utilização de um software, direta ou indiretamente?
- Dê alguns exemplos de componentes não executáveis em máquinas.
- Cite alguma sugestão de software ou alguma situação real que mostre que não existe limitação física para o software.
- O que foi a Crise do Software?
- Atualmente os custos de software continuam aumentando e os de software caindo?

