Modelo de Maturidade de Software – Introdução à Engenharia de Software
Software
Vamos começar a nossa aula com uma pergunta simples: a Engenharia de Software é uma engenharia ou uma arte?
Certamente muitos responderam que é uma engenharia, tão somente. Mas vamos tentar entender como a relação engenharia e arte funciona bem para a Engenharia de Software.
Software: arte ou engenharia?
Com o passar do tempo foram desenvolvidas técnicas e métodos para a programação, análise e projeto de software. Essas técnicas foram amplamente testadas e incorporadas nas organizações, tornando-se as melhores práticas em computação nos dias atuais. Mas hoje uma questão importante é se desenvolvemos software utilizando somente as técnicas disponíveis ou se precisamos também envolver a arte no desenvolvimento. Vamos entender melhor o que precisamos saber para desenvolver software.
Cientistas de computação e pesquisadores em engenharia de software estudam sistemas computacionais e teorias sobre como tornar o software mais produtivo e eficientes. Isso é a Engenharia no desenvolvimento. E eles também projetam sistemas computacionais e escrevem programas para realizar tarefas nesses sistemas. O que é uma arte no desenvolvimento de software.
Então desenvolver software é uma engenharia e uma arte também. Para desenvolver software precisamos conhecer as funções do computador e as teorias, as quais estão descritas nos fundamentos da ciência da computação. Precisamos também conhecer o problema, as necessidades dos clientes e as técnicas e ferramentas da Engenharia de Software.
Definição de software
Um conceito muito importante que todos devem saber é o de software, o que é realmente um software e quais são os seus componentes. Um Software é composto das seguintes partes:
Instruções: são os programas de computador que quando executadas produzem a função e o desempenho desejados;
Estruturas de dados: possibilitam que os programas manipulem adequadamente os dados que estão sendo tratados;
Documentos: os quais descrevem a operação e o uso dos programas.
Portanto, software é muito mais do que somente instruções, do que somente código. Ele é composto por um elemento muito importante que são as documentações. Quando compramos um software devemos receber toda a documentação necessária sobre ele, como: nota fiscal, licença de uso, manual de operação, manual de instalação e configuração, dentre outros.
Evolução do software
Vamos entender agora como ocorreu a evolução do software desde o surgimento da computação, no final da década de 1940 e início da década de 1950. A evolução do software está dividida em eras, que são:
1950 a 1965
A Primeira era do desenvolvimento de software
- O desenvolvimento de software era considerado uma arte;
- Haviam poucos métodos sistemáticos para o desenvolvimento;
- O desenvolvimento de software não era gerenciado;
- O hardware sofria contínuas mudanças e era o centro das atenções;
- O software era customizado, ou seja, adequado às necessidades do usuário final, e a sua distribuição era limitada;
- O software era desenvolvido e utilizado pela mesma pessoa ou organização;
- Não havia documentação, todas as informações necessárias sobre o software estavam na cabeça das pessoas que o desenvolveram (one’s head);
- O processamento de dados era em lote (batch).
1963 a 1974
A segunda era do desenvolvimento de software
- Surgimento da multiprogramação e dos sistemas multiusuários;
- Desenvolvimento de técnicas interativas homem-máquina;
- Utilização de sistemas de tempo real;
- Surgimento da 1ª geração de sgbds;
- Nascem as software houses e os produtos de software;
- O software era produzido para ampla distribuição em um mercado multidisciplinar, em várias áreas de conhecimentos;
- Surge o conceito de biblioteca de software;
- Devido à falta de metodologias de desenvolvimento e de documentação, a manutenção era praticamente impossível.
1973 a 1978
A terceira era do desenvolvimento de software
- Surgimento dos sistemas distribuídos e paralelos;
- Desenvolvimento das redes locais e globais de computadores;
- Necessidade de elevada demanda por acesso imediato a dados por parte dos usuários;
- Criação dos computadores de uso pessoal (PC – personal computers) e estações de trabalho (workstations);
- Uso generalizado de microprocessadores;
- Começa a haver um grande consumo de computadores, o que consequentemente baixa o custo do hardware;
- Há um forte impacto de consumo, pois os computadores tornaram-se acessíveis a um grande público que antes não tinham acesso ao uso de computadores.
1985 aos dias atuais
A quarta era do desenvolvimento de software
- Surgimento dos ambiente cliente-servidor;
- Desenvolvimento do paradigma orientado a objetos, da linguagem de modelagem unificada (UML) e do processo unificado;
- Surgimento dos sistemas multimídia e da realidade virtual;
- Desenvolvimento dos sistemas especialistas e de software de inteligência artificial utilizados em sistema do mundo real;
- Surgimento das técnicas de 4ª Geração (4GT);
- Desenvolvimento da computação biológica e da computação vestível (wearable computers);
- Surgimento da internet (information superhighway).
LEIA MAIS: https://codigoecafe.com/2013/05/17/resumo-do-livro-engenharia-de-software-de-ian-sommerville-8o-ed/
Classificação do software
Vamos entender agora quais são os diferentes tipos de software existentes e a sua classificação. O software está classificado nos seguintes tipos:
- Básico: é uma coleção de programas escritos para dar suporte a outros programas. Como por exemplo: compiladores, interpretadores, editores, componentes de sistemas operacionais, dentre outros.
- De Tempo Real: são programas que monitoram, analisam e controlam os eventos do mundo real quando eles ocorrem. Um sistema de tempo real precisa responder dentro de restrições de tempo especificadas. Há um limite máximo tolerável de resposta, de acordo com as especificações do software, como por exemplo: software de controle de usina nuclear, software de controle e navegação de satélites, dentre outros.
- Comercial: é o software desenvolvido para o negócio de uma organização. É a maior área para a qual o software é desenvolvido. Divide, basicamente, em Sistemas Discretos, como: sistemas de estoque, de contabilidade, de pagamento, dentre outros. E em Sistemas de Informações, como: sistemas de processamento de transações, sistemas de informações gerenciais, sistemas de suporte à decisão, sistemas de comércio eletrônico, dentre outros.
- Científico e de Engenharia: são caracterizados por algoritmos que tratam dados numéricos. Como por exemplo: software para cálculo da dinâmica da órbita de um ônibus espacial, software para computação auxiliada por computador (computer aided design), software para simulação de sistemas, dentre outros.
- Embutido ou Embarcado: é um software que normalmente reside em memória não volátil (ROM) e é utilizado para o controle de produtos e de sistemas para os mercados consumidor e industrial. Como por exemplo: software para controle de micro-ondas, para computadores de bordo de automóveis, para sistemas de freio, dentre outros.
- Computador Pessoal: é o software utilizado nas atividades domésticas para soluções de problemas do dia a dia, como por exemplo: processadores de texto, planilhas eletrônicas, multimídia, jogos, dentre outros.
- Inteligência Artificial: é o software que faz uso de algoritmos não numéricos para resolver problemas complexos que não podem ser tratados de forma convencional. Como por exemplo: software de apoio ao diagnóstico de infarto agudo do miocárdio, software para concessão de cartão de créditos, dentre outros.
Definição de engenharia de software
No início da computação a preocupação era com o hardware e o software, nada mais era do que uma reflexão posterior. Entretanto, essa visão mudou e com ela gerentes e técnicos se fazem as seguintes perguntas:
- Por que o software demora tanto tempo para ser concluído?
- Por que os custos de produção têm sido tão elevados?
- Por que não é possível detectar todos os erros antes que o software seja entregue ao cliente?
- Por que é tão difícil medir o progresso durante o processo de desenvolvimento?
A resposta para todas essas perguntas é: a não adoção de práticas de engenharia de software para o desenvolvimento de software, ou seja, devemos desenvolver software como uma engenharia, da mesma forma que utilizamos a engenharia civil para construir prédios ou utilizamos a engenharia aeronáutica para construir aviões.
A Engenharia objetiva analisar, projetar, construir, verificar e gerenciar entidades técnicas e/ou sociais. Quando a entidade a ser construída com a engenharia é software, temos a Engenharia de Software.
Então podemos definir Engenharia de Software como: o estabelecimento e uso de sólidos princípios de engenharia para que se possa obter economicamente um software que seja confiável e que funcione eficientemente em máquinas reais (PRESSMAN, 2006).
Também podemos definir da seguinte forma: Engenharia de Software é a aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, operação e manutenção de software (IEEE STANDARD 610.12).
Objetivo e características da engenharia de software
A engenharia de Software tem como objetivo projetar e desenvolver software com maior qualidade em menos tempo e com o menor custo possível para resolver problemas de forma eficiente e eficaz. A qualidade envolve desenvolver softwares mais eficientes, mais precisos, fáceis de modificar, de usar ou de entender. Essas são características importantes que devem ser priorizadas em um software.
A Engenharia de Software é uma disciplina de engenharia que está envolvida com todos os aspectos do desenvolvimento de produtos de software. Os produtos de software consistem de programas desenvolvidos, estruturas de dados e documentação associada. Essa engenharia não está voltada para a programação individual, mas para abordagens provendo mecanismos para que grupos possam lidar com complexidade e mudança na construção de um software.
Fatore que afetam a prática da engenharia de software
A Engenharia de Software tem uma série de fatores que afetam a viabilidade de entrega de produtos de software. Os fatores são:
- Necessidade de entregar produtos de software de acordo com as exigências do mercado. É o que é frequentemente referenciado como time to market;
- Mudanças na economia que afetam a computação. Grandes alterações na economia que têm forte impacto na área de Tecnologia da Computação;
- Maior disponibilidade de computadores de mesa potentes.
- Usuários têm computadores com ótimas configurações para atividades rotineiras;
- Redes de telecomunicações extensíveis.
- Grande disponibilidade de infraestrutura de redes de computadores à todos;
- Disponibilidade e adoção de tecnologia orientada a objetos;
- Necessidade de interfaces gráficas para os usuários;
- Imprevisibilidade do modelo cascata para o desenvolvimento de software.
Tecnologia em camadas
A Engenharia de Software é uma tecnologia em Camadas. Para que um problema seja resolvido, a solução deve empregar um conjunto variado de métodos ou técnicas, ferramentas e processos utilizando um paradigma de desenvolvimento específico. É muito importante que no desenvolvimento de um software haja um compromisso organizacional com a qualidade, que leva ao desenvolvimento de abordagens cada vez mais amadurecidas para a Engenharia de Software.
FERRAMENTAS
- Automatizam o processo de desenvolvimento de software dando suporte aos métodos;
- Elas são denominadas de ferramentas Case (Computer Aided Software Engineering – Engenharia de Software auxiliada por computador). Como por exemplo: editores, testadores, modeladores, gerenciadores;
- Quando as ferramentas são integradas é estabelecido um sistema de suporte ao desenvolvimento de software chamado I-CASE (Integrated CASE).
MÉTODOS
- Os métodos de Engenharia de Software fornecem a técnica de como fazer para construir software;
- Incluem um amplo conjunto de tarefas que abrange: análise de requisitos, projeto,construção de programas, teste e manutenção, dentre outros;
- São constituídos por um conjunto de princípios básicos, que regem cada área da tecnologia e incluem atividades de modelagem a outras técnicas descritivas.
PROCESSOS
- Representa o fundamento, o principal elemento, da Engenharia de Software;
- O processo da Engenharia de Software é o “adesivo” que mantém unidas as camadas de tecnologia e permite o desenvolvimento racional e oportuno de software para o computador.
LEIA MAIS: http://imasters.com.br/artigo/7909/linguagens/estudo-sobre-engenharia-de-software/
Atividade proposta
Faça uma comparação entre a Engenharia de Software e a Engenharia Civil, enfatizando a importância de cada uma destas engenharias para desenvolver um software e para construir um prédio.
R: Chave de resposta: Ambas devem ser vistas como engenharias e necessárias para que todas as técnicas sejam utilizadas para construir um software de qualidade e para a construção de um prédio com segurança e qualidade.
Referências
Base: Pós em Engenharia de Software – Estácio (EAD), com várias adaptações e melhorias.
PRESSMAN, Roger S. Engenharia de software – uma abordagem profissional. 7. ed. São Paulo: MCGRAW-HILL BRASIL, 2011.
SOMMERVILLE, Ian. Engenharia de software. 9. ed. São Paulo: Pearson (livros universitários), 2011.
PFLEEGER, Shari Lawrence. Engenharia de software – teoria e prática. 2. ed. São Paulo: Pearson (livros universitários), 2003.
Lista de Exercícios
Lista de Exercícios de Modelo de Maturidade de Software – Lista 2