Engenharia de Software Engenharia de Computação CEFET/RJ campus Petrópolis Prof. Luis Retondaro Aula 1 Apresentação
Introdução O que é software? Um programa de computador que contém estruturas dinâmicas de acesso e armazenamento de dados que manipulam a máquina para processá-los e fornecer resultados formatados e solicitados por uma determinada demanda, seja genérica ou específica, de uma comunidade de usuários. 2
Introdução Qual foi o primeiro software criado? Se a definição for aceita, o primeiro software surgiu na Inglaterra em 1948, baseado num sistema criado pelo matemático húngaro John von Neumann (1903-1957). 3
Curiosidade 100 anos antes de Neumann, esse conceito de software já havia sido imaginado, na teoria, por uma mulher. Por isso, muitos estudiosos consideram que a primeira programadora do mundo teria sido a condessa Ada Lovelace (1815-1852) matemática, filha do célebre poeta romântico inglês Lord Byron. 4
Curiosidade Modelo experimental Tudo começou quando Ada conheceu Charles Babbage, visionário que tentava construir um computador mecânico. Entre 1842 e 1843, ela criou notas sobre a máquina analítica de Babbage, que foram republicadas mais de cem anos depois. A máquina foi reconhecida como primeiro modelo de computador e as anotações da condessa como o primeiro algoritmo especificamente criado para ser implementado em um computador. 5
Anos 40 Os primeiros computadores construídos não possuíam softwares. os comandos eram implantados na máquina a partir de conexões físicas entre os componentes À medida que se percebeu a necessidade de computadores mais flexíveis, surgiu o software 6
Anos 50 Foco de pesquisa e desenvolvimento de hardware. O UNIVAC I (de UNIVersal Automatic Computer - Computador Automático Universal) foi o primeiro computador comercial fabricado e comercializado nos Estados Unidos. Era programado ajustando-se cerca de 6.000 chaves e conectando-se cabos a um painel. 7
1957 O Brasil comprou seu primeiro grande computador. O governo do estado de São Paulo comprou um mainframe Univac-120, da Burroughs, empresa que, depois, se transformaria na Unisys. O equipamento tinha 60 bytes de memória RAM, e era utilizado para calcular quanta água se gastava no Estado. 8
1958 Surgem os primeiros circuitos integrados; Foi lançado o primeiro computador transistorizado, com 16 bits, o IBM TX-0. Era relativamente pequeno, rápido, tinha um bom monitor de vídeo, possuía dispositivo de saída sonora e até uma caneta ótica. 9
1958 Um videojogo foi criado pelo físico William Higinbotham. É considerado o primeiro jogo criado para ser jogado em computadores. Era um jogo de tênis simples, mostrado em um osciloscópio e processado por um computador analógico. Note-se que o objetivo do programador ao criar o jogo tinha sido simplesmente chamar a atenção do público, que visitava as instalações do "Brookhaven National Laboratories", para verificar o poderio nuclear dos E.U.A. 10
Anos 60 Surgem os microprocessadores Grandes sistemas passam a serem desenvolvidos por várias organizações Como o software era um construto abstrato, sua produção não se encaixava perfeitamente em nenhuma das engenharias, nem mesmo na mecânica e na elétrica, que são as mais próximas, por terem relação com as máquinas que efetuam as computações. Surgiu, então, o conceito de engenharia de software, inicialmente referindo-se aos processos para a produção desse tipo de construto abstrato. 11
1968 Aceita-se que a primeira conferência sobre Engenharia de Software tenha sido a Conferência de Engenharia de Software da OTAN, organizada em Garmish, Alemanha, em 1968. Apesar disso, o termo já era usado desde os anos 50. 12
1960-1980 Período marcado pela chamada crise do software foram identificados os maiores problemas relacionados à produção de software, especialmente em larga escala Inicialmente, a crise referenciava especialmente questões relacionadas com orçamento e cronograma de desenvolvimento, mas posteriormente passou também a abranger aspectos de qualidade de software, uma vez que os sistemas, depois de prontos, apresentavam muitos erros, causando prejuízos. 13
14
Lei de Brooks Um exemplo clássico da crise de software dos anos 1960 foi o projeto do sistema operacional OS/360, que utilizou mais de mil programadores. Brooks (1975) afirmou ter cometido um erro que custou milhões à IBM nesse projeto, por não ter definido uma arquitetura estável antes de iniciar o desenvolvimento propriamente dito. Atualmente, a Lei de Brooks afirma que adicionar programadores a um projeto atrasado faz com que ele fique ainda mais atrasado. 15
Edsger W. Dijkstra A expressão crise do software foi usada pela primeira vez com impacto por Dijkstra (1971). Ele avaliava que, considerando o rápido progresso do hardware e das demandas por sistemas cada vez mais complexos, os desenvolvedores simplesmente estavam se perdendo, porque a engenharia de software, na época, era uma disciplina incipiente. 16
Problemas relatados por Dijkstra Projetos que estouram o cronograma. Projetos que estouram o orçamento. Produto final de baixa qualidade ou que não atenda aos requisitos. Produtos não gerenciáveis e difíceis de manter e evoluir. 17
Mudança de paradigma Por décadas, a atividade de pesquisa tentou resolver a crise do software. Cada nova abordagem era apontada como solução da crise. Porém, pouco a pouco, chegou-se ao consenso de que tal solução mágica não existia. Ferramentas CASE (Computer Aided Software Engineering), especificação formal, processos, componentes etc. foram boas técnicas que ajudaram a engenharia de software a evoluir, mas hoje não se acredita mais em uma solução única e salvadora para os complexos problemas envolvidos com a produção de software. 18
Anos 90 Surgimento da internet; Consolidação da orientação a objetos como paradigma predominante; Novas necessidades surgiram e sistemas cada vez mais complexos, acessíveis de qualquer lugar do mundo, substituíram os antigos sistemas standalone. Com isso, novas preocupações relacionadas à segurança da informação e à proliferação de vírus e spam surgiram e passaram a fazer parte da agenda dos desenvolvedores de software. 19
Anos 2000 O crescimento da demanda por software em organizações de pequeno e médio porte levou ao surgimento de soluções mais simples e efetivas para o desenvolvimento de software para essas organizações. Assim surgiram os métodos ágeis, que procuram desburocratizar o processo de desenvolvimento e deixá-lo mais adequado a equipes pequenas mas competentes, capazes de desenvolver sistemas sem a necessidade de extensas listas de procedimentos ou de receitas de bolo 20
Atualmente... A área vem tentando se estabelecer como um corpo de conhecimentos coeso. O surgimento do SWEBOK (IEEE Computer Society, 2004) Guide to the Software Engineering Body of Knowledge, Sua adoção como padrão internacional em 2006 foi um avanço para a sistematização do corpo de conhecimentos da área 21