2013/2 Thiago P. da Silva thiagosilva@ufmt.br
Agenda Software Sistema Engenharia de Sistemas 2
Importância do Software no mundo moderno Infraestrutura e serviços são controlados por sistemas computacionais. Ex. Produtos elétricos possuem um hardware e um software que o controla. Sistemas de software são abstratos, intangíveis, e não são restringidos pelas propriedades dos materiais, nem governadas pelas leis da física ou pelos processos de manufatura. Não há limites naturais para o potencial do software. Entretanto sistemas de software podem se tornar extremamente complexos. Criar software é uma tarefa puramente intelectual Então!?!?!? Como criar algo intangível? Dar valor($$)? Evoluir? Perguntas que deverão ser respondidas pela disciplina!!! 3
Importância do Software no mundo moderno Vários sistemas são controlados por software[1]: O sistema de aviação dos caças F-22 Raptor, da força aérea americana, consiste de aproximadamente 1.7 milhão de linhas de código. O Boeing 787 Dreamliner contém 6.5 milhão de linhas de código de software. Um simples celular contém cerca de 2 milhões de linhas de código de software(imagine um smarthphone!!!) Exemplos de componentes de carros em que há software embutido: Sistema Air-bag; controle de alarme; sistema de entretenimento; ABS, sistema de navegação; monitoramento da pressão dos pneus; sistema ignição; sistema de comunicação; sistema eletrônico de estabilidade; sistema de navegação; controle da temperatura; etc. 4
Definição de software Programas de computador, documentação associada e dados de configuração [4]. Pode ser criado de várias formas diferentes: Pelo desenvolvimento de novos programas Pela configuração de sistemas de software genéricos Pelo reuso de software existente Fato: Podemos construir uma casa sem um projeto! Mas e o software? A abordagem "codificar e testar" (code & test) é suficiente? Vocês já criaram software? 5
Importância do Software no mundo moderno Softwares representam custos nos produtos: No caso de carros, por exemplo, os custos de software e eletrônicos foram de 5% em 1970 para 15% em 2005. Em alguns carros atualmente estes custos chegam a 45%. Estima-se que em 10 anos estes custos subam para 80% [1] Quem custa mais, software ou hardware?: Licença do AutoCAD 2012 [2] $4.195 ~ R$ 8.000 Notebook Lojas MM.com [3] R$ 999,87 6
Atributos de Software Atributos essenciais: Manutenibilidade: software evolui, os requisitos mudam. Confiança e Proteção: software não deve causar prejuízos e deve ser seguro. Eficiência: capacidade de resposta, tempo de processamento e memória. Aceitabilidade: compreensível, usável e compatível com outros sistemas. Atributos de qualidade diferenciam o desenvolvimento de software profissional do amador: Adequação ao propósito; Zero defeito (É possível?); Conformidade e segurança; Atendimento à necessidade definida e implícita do cliente Atributos podem conflitar! Ex. Eficiência x Segurança 7
Tipos de Software (alguns tipos) Software básico dão apoio a outros programas Software de tempo real monitora, analisa e controla eventos, sob restrição de tempo Software comercial propósitos comerciais e tomadas de decisões administrativas Software científico e de engenharia propósitos científicos Software embarcado projetado para um determinado hardware Software aplicativo ou de uso pessoal pessoal, gedit, paciência, LibreOffice Software de IA uso de técnicas da IA Software para Web (WebApps) utilizam a infraestrutura da Internet Como construir cada um dos tipos de software? Pode-se usar o mesmo processo de desenvolvimento? 8
Evolução do Software [7] 9
Evolução do Software [7] 10
Evolução do Software [7] Estimativas imprecisas Insatisfação do cliente Baixa Qualidade 11
Evolução do Software [7] 12
Evolução do Software [7] DSOA, MDD, Nuvem, Computação Ubíqua, etc 13
Guerra dos Software [8] 14
Definição de É uma disciplina (abordagem sistemática) de engenharia cujo foco está em todos os aspectos da produção de software, desde os estágios iniciais da especificação do sistema até a sua manutenção, quando o sistema já está sendo usado. [4] (1) The application of a systematic, disciplined and quantifiable approach to the development, operation and maintenance of software; that is, the application of engineering to software [5] (2) The study of approaches as in (1) [5] 15
Processo de Software A abordagem sistemática é, às vezes, chamada de processo de software. Processo de software é uma sequência de de atividades que leva à produção de um produto de software. Atividades são definíveis, repetíveis e mensuráveis que levam a um resultado útil. Existem vários modelos de processos, pois existem formas diferentes de se fazer a mesma coisa! Existem tipos diferentes de software. 16
Processo de Software Não existe um processo de software que se aplique a todos os software! Existem quatro atividades fundamentais comuns a todos os processo de software [4]: Especificação - necessidades do usuário são reunidas e convertidas em requisitos de software Desenvolvimento projeto, codificação e teste Validação o software atende a necessidade do cliente? Evolução refletir a mudanças nos requisitos do usuário e do mercado 17
Motivação 18
Motivação Hall da vergonha de Software [6] FBI Início do projeto em 2001: Base de dados com suspeitos de terrorismo. Em Janeiro de 2005: Gastos de US$ 170 milhões: not even close to having a working system McDonald's Início em 1999: Projeto Innovate, com orçamento previsto de US$ 1 bilhão Cancelado em 2002, após gastos de US$ 170 milhões Windows :P 19
, Ciência da Computação e Engenharia de Sistemas Ciência da Computação - Teorias e métodos que sustentam sistemas computacionais e de software. Aplicáveis para programas relativamente pequenos. (Ex. BD, estrutura de dados, linguagens de programação) Engenharia de Software - Se preocupa com os problemas práticos de produção de software útil. (Ex. Cronogramas, requisitos) Engenharia de Sistemas foco em todos os aspectos do desenvolvimento e evolução de sistemas complexos em que o software tem o papel principal. (Ex. Hardware, software, processos e pessoas) 20
Definição de Sistema Coleção de componentes inter-relacionados que trabalham em conjunto para atingir um objetivo 21
Sistema Técnicos Baseado em Computador (SBC) Arranjo de elementos organizados para atingir, através do processamento de informações, uma meta predefinida. Incluem componentes de Hardware e Software, mas não procedimentos e processos. 22
Sistemas Sociotécnicos Incluem um ou mais sistemas técnicos, mas, principalmente, também pessoas que entendem o propósito do software dentro do sistema. Processos e pessoas são partes inerentes do sistema, regulados por políticas e regras organizacionais. São sistemas corporativos destinados a contribuir para o cumprimento de uma meta de negócio. Ex. Aumentar as vendas, arrecadar impostos, segurança do espaço aéreo. 23
Processo de desenvolvimento de sistemas 24
Engenharia de Sistemas Engloba todas as atividades envolvidas na aquisição, especificação, projeto, implementação, validação, implantação, operação e manutenção dos sistemas sociotécnicos. O Engenheiro de Sistemas define a organização e interação dos elementos (hardware, pessoas, softwares e procedimentos) de um sistema baseado em computador. Deve-se enxergar a floresta, pois não se vê as florestas pelas árvores. Inicia-se com a clara compreensão do contexto! 25
Leitura complementar Capítulo 1. Sommerville Introdução à engenharia de software Capítulo 10. Sommerville Sistemas Sociotécnicos No silver bullet: Essence and accidents of software engineering. Brooks, F. P. Problemas da engenharia de software. Hall da Vergonha de Software. http://spectrum.ieee.org/computing/software/why-software-fails - Casos de fracassos em projetos de desenvolvimento de sistemas. 26
Referências [1] - This Car Runs on Code. Último acesso em Abril de 2013. http://www.spectrum.ieee.org/feb09/7649 [2] - AutoDesk AutoCAD. Último acesso em Abril de 2013. http://www.autodesk.com/products/autodesk-autocad/buy [3] - Lojas MM.com. Último acesso em Abril de 2013. http://www.lojasmm.com [4] Ian Sommerville. 9. ed. 2011.. [5] - IEEE 610.12 (1990) IEEE Standard Glossary of Software Engineering Terminology. [6] Hall da Vergonha de Software. Último acesso em Abril de 2013. http://spectrum.ieee.org/computing/software/why-software-fails [7]. Prof. Ricardo Argenton. Último acesso em Abril de 2013. www.univasf.edu.br/~ricardo.aramos/disciplinas [8] Software Wars. Último acesso em Abril de 2013. http://www.mshiltonj.com/software_wars/current/ 27