História da engenharia de software - History of software engineering

A história da engenharia de software começa na década de 1960. Escrever software evoluiu para uma profissão preocupada em como melhor maximizar a qualidade do software e em como criá-lo. Qualidade pode se referir a como o software é de manutenção, à sua estabilidade, velocidade, usabilidade, testabilidade, legibilidade, tamanho, custo, segurança e número de falhas ou "bugs", bem como a qualidades menos mensuráveis ​​como elegância, concisão e cliente satisfação, entre muitos outros atributos. A melhor forma de criar software de alta qualidade é um problema separado e controverso que abrange os princípios de design de software, as chamadas "melhores práticas" para escrever código, bem como questões de gerenciamento mais amplas, como tamanho ideal da equipe, processo, como melhor entregar software no prazo e, o mais rápido possível, "cultura" do local de trabalho, práticas de contratação e assim por diante. Tudo isso se enquadra na ampla rubrica de engenharia de software .

Visão geral

A evolução da engenharia de software é notável em várias áreas:

  • Surgimento como profissão: No início dos anos 1980, a engenharia de software já havia surgido como uma profissão de boa-fé , ficando ao lado da ciência da computação e da engenharia tradicional.
  • Papel das mulheres : antes de 1970, os homens que ocupavam cargos de engenharia de hardware de maior prestígio e melhor remuneração frequentemente delegavam a escrita de software a mulheres, e lendas como Grace Hopper ou Margaret Hamilton preenchiam muitos empregos de programação de computadores .
    Hoje, menos mulheres trabalham em engenharia de software do que em outras profissões, situação cuja causa não é claramente identificada. Muitas organizações acadêmicas e profissionais consideram esta situação desequilibrada e estão se esforçando para resolvê-la.
  • Processos: os processos se tornaram uma grande parte da engenharia de software. Eles são aclamados por seu potencial para melhorar o software, mas duramente criticados por seu potencial para restringir os programadores.
  • Custo do hardware: o custo relativo do software em relação ao hardware mudou substancialmente nos últimos 50 anos. Quando os mainframes eram caros e exigiam grandes equipes de suporte, as poucas organizações que os compravam também tinham os recursos para financiar projetos de engenharia de software personalizados grandes e caros. Os computadores agora são muito mais numerosos e poderosos, o que tem vários efeitos no software. O mercado maior pode oferecer suporte a grandes projetos para criar software comercial pronto para uso, como feito por empresas como a Microsoft . As máquinas baratas permitem que cada programador tenha um terminal capaz de uma compilação bastante rápida . Os programas em questão podem usar técnicas como coleta de lixo , o que os torna mais fáceis e rápidos de serem escritos pelo programador. Por outro lado, muito menos organizações estão interessadas em empregar programadores para grandes projetos de software customizado, em vez de usar software comercial pronto para uso, tanto quanto possível.

1945 a 1965: as origens

As origens putativas do termo engenharia de software incluem uma carta de 1965 do presidente da ACM Anthony Oettinger , palestras de Douglas T. Ross no MIT na década de 1950. Margaret H. Hamilton "é a pessoa que teve a ideia de nomear a disciplina, engenharia de software, como uma forma de dar-lhe legitimidade".

O Comitê Científico da OTAN patrocinou duas conferências sobre engenharia de software em 1968 ( Garmisch , Alemanha - ver relatório da conferência ) e 1969, que deram ao campo seu impulso inicial. Muitos acreditam que essas conferências marcaram o início oficial da profissão de engenharia de software .

1965 a 1985: A crise do software

A engenharia de software foi estimulada pela chamada crise de software das décadas de 1960, 1970 e 1980, que identificou muitos dos problemas de desenvolvimento de software. Muitos projetos ultrapassaram o orçamento e o cronograma. Alguns projetos causaram danos materiais. Alguns projetos causaram perda de vidas. A crise do software foi originalmente definida em termos de produtividade , mas evoluiu para enfatizar a qualidade . Alguns usaram o termo crise de software para se referir à incapacidade de contratar programadores qualificados suficientes.

  • Excesso de custos e orçamento : o sistema operacional OS / 360 foi um exemplo clássico. Este projeto de uma década de 1960 acabou produzindo um dos sistemas de software mais complexos da época. OS / 360 foi um dos primeiros grandes projetos de software (1000 programadores). Fred Brooks afirma em The Mythical Man-Month que cometeu um erro multimilionário ao não desenvolver uma arquitetura coerente antes de iniciar o desenvolvimento.
  • Danos à propriedade: Os defeitos do software podem causar danos à propriedade. A segurança de software ruim permite que os hackers roubem identidades, custando tempo, dinheiro e reputação.
  • Vida e morte: defeitos de software podem matar. Alguns sistemas embarcados usados ​​em máquinas de radioterapia falharam tão catastroficamente que administraram doses letais de radiação aos pacientes. A mais famosa dessas falhas é o incidente do Therac-25 .

Peter G. Neumann manteve uma lista contemporânea de problemas e desastres de software. A crise do software está desaparecendo de vista, porque é psicologicamente extremamente difícil permanecer em modo de crise por um período prolongado (mais de 20 anos). No entanto, o software - especialmente o software incorporado em tempo real - permanece arriscado e generalizado, e é crucial não ceder à complacência. Nos últimos 10-15 anos, Michael A. Jackson escreveu extensivamente sobre a natureza da engenharia de software, identificou a principal fonte de suas dificuldades como a falta de especialização e sugeriu que seus quadros de problemas fornecem a base para uma "prática normal" da engenharia de software, um pré-requisito para que a engenharia de software se torne uma ciência da engenharia.

1985 a 1989: " Sem bala de prata "

Por décadas, resolver a crise do software foi fundamental para pesquisadores e empresas produtoras de ferramentas de software. O custo de propriedade e manutenção de software na década de 1980 era duas vezes mais caro do que desenvolver o software.

  • Durante a década de 1990, o custo de propriedade e manutenção aumentou 30% em relação à década de 1980.
  • Em 1995, as estatísticas mostraram que metade dos projetos de desenvolvimento pesquisados ​​estavam operacionais, mas não foram considerados bem-sucedidos.
  • O projeto de software médio ultrapassa seu cronograma pela metade.
  • Três quartos de todos os grandes produtos de software entregues ao cliente são falhas que não são usadas ou não atendem aos requisitos do cliente.

Projetos de software

Aparentemente, cada nova tecnologia e prática da década de 1970 até a década de 1990 foi alardeada como uma bala de prata para resolver a crise do software. Ferramentas, disciplina, métodos formais , processo e profissionalismo foram apresentados como balas de prata:

  • Ferramentas: foram especialmente enfatizadas as ferramentas: programação estruturada , programação orientada a objetos , ferramentas CASE , como o sistema CADES CASE da ICL , Ada , documentação e padrões , considerados balas de prata.
  • Disciplina: Alguns especialistas argumentaram que a crise do software foi devido à falta de disciplina dos programadores.
  • Métodos formais: alguns acreditavam que, se as metodologias formais de engenharia fossem aplicadas ao desenvolvimento de software, a produção de software se tornaria uma indústria tão previsível quanto outros ramos da engenharia. Eles defenderam provar que todos os programas estavam corretos.
  • Processo: Muitos defendem o uso de processos e metodologias definidos, como o Capability Maturity Model .
  • Profissionalismo: Isso levou a trabalhar em um código de ética, licenças e profissionalismo.

Em 1986, Fred Brooks publicou seu artigo No Silver Bullet , argumentando que nenhuma tecnologia ou prática individual faria uma melhoria de 10 vezes na produtividade em 10 anos.

O debate sobre balas de prata grassou na década seguinte. Os defensores do Ada , componentes e processos continuaram argumentando por anos que sua tecnologia favorita seria uma bala de prata. Os céticos discordaram. Por fim, quase todos aceitaram que nenhuma bala de prata jamais seria encontrada. No entanto, afirmações sobre balas de prata surgem de vez em quando, mesmo hoje.

Alguns interpretam que não existe solução mágica para significar que a engenharia de software falhou. No entanto, com mais leitura, Brooks continua dizendo: "Certamente faremos um progresso substancial nos próximos 40 anos; uma ordem de magnitude em 40 anos dificilmente é mágica ..."

A busca por uma única chave para o sucesso nunca funcionou. Todas as tecnologias e práticas conhecidas fizeram apenas melhorias incrementais na produtividade e na qualidade. No entanto, também não existem balas de prata para qualquer outra profissão. Outros interpretam a ausência de bala de prata como prova de que a engenharia de software finalmente amadureceu e reconheceram que os projetos tiveram sucesso devido ao trabalho árduo.

No entanto, também poderia ser dito que há, de fato, uma variedade de balas de prata hoje, incluindo metodologias leves (consulte " Gerenciamento de projetos "), calculadoras de planilhas, navegadores personalizados , motores de busca in-site, geradores de relatórios de banco de dados, design integrado -teste editores de codificação com memória / diferenças / desfazer e lojas especializadas que geram software de nicho, como sites de informações, por uma fração do custo de desenvolvimento de sites totalmente customizados. No entanto, o campo da engenharia de software parece muito complexo e diversificado para que uma única "solução mágica" melhore a maioria dos problemas, e cada problema é responsável por apenas uma pequena parte de todos os problemas de software.

1990 a 1999: Destaque da Internet

O surgimento da Internet levou a um crescimento muito rápido na demanda por sistemas internacionais de exibição de informações / e-mail na World Wide Web. Os programadores eram obrigados a lidar com ilustrações, mapas, fotografias e outras imagens, além de animações simples, a uma taxa nunca antes vista, com poucos métodos conhecidos para otimizar a exibição / armazenamento de imagens (como o uso de imagens em miniatura).

O crescimento do uso do navegador, rodando em HyperText Markup Language (HTML), mudou a forma como a exibição e a recuperação de informações eram organizadas. As conexões de rede generalizadas levaram ao crescimento e prevenção de vírus de computador internacionais em computadores MS Windows, e a vasta proliferação de e-mail de spam se tornou um grande problema de design em sistemas de e-mail, inundando canais de comunicação e exigindo pré-triagem semiautomática . Os sistemas de busca por palavra-chave evoluíram para mecanismos de busca baseados na web , e muitos sistemas de software tiveram que ser reprojetados, para buscas internacionais, dependendo da otimização do mecanismo de busca (SEO). Os sistemas de tradução de linguagem natural humana foram necessários para tentar traduzir o fluxo de informações em vários idiomas estrangeiros, com muitos sistemas de software sendo projetados para uso em vários idiomas, com base em conceitos de design de tradutores humanos. As bases típicas de usuários de computador passaram de centenas, ou milhares de usuários, para, frequentemente, muitos milhões de usuários internacionais.

2000 a 2015: Metodologias leves

Com a crescente demanda por software em muitas organizações menores, a necessidade de soluções de software baratas levou ao crescimento de metodologias mais simples e rápidas que desenvolveram software em execução, dos requisitos à implantação, de forma mais rápida e fácil. O uso de prototipagem rápida evoluiu para metodologias totalmente leves , como Extreme Programming (XP), que tentava simplificar muitas áreas da engenharia de software, incluindo coleta de requisitos e teste de confiabilidade para o crescente e vasto número de pequenos sistemas de software. Sistemas de software muito grandes ainda usavam metodologias amplamente documentadas, com muitos volumes no conjunto de documentação; no entanto, sistemas menores tinham uma abordagem alternativa mais simples e rápida para gerenciar o desenvolvimento e manutenção de cálculos e algoritmos de software, armazenamento / recuperação e exibição de informações.

Tendências atuais em engenharia de software

Engenharia de software é uma disciplina jovem e ainda está em desenvolvimento. As direções nas quais a engenharia de software está se desenvolvendo incluem:

Aspects

Aspectos ajudam os engenheiros de software a lidar com atributos de qualidade , fornecendo ferramentas para adicionar ou remover código clichê de muitas áreas no código-fonte . Os aspectos descrevem como todos os objetos ou funções devem se comportar em circunstâncias específicas. Por exemplo, os aspectos podem adicionar depuração , registro ou controle de bloqueio em todos os objetos de tipos específicos. Os pesquisadores estão atualmente trabalhando para entender como usar aspectos para projetar código de uso geral. Os conceitos relacionados incluem programação generativa e modelos .

Experimental

A engenharia de software experimental é um ramo da engenharia de software interessado em criar experimentos em software, em coletar dados dos experimentos e em criar leis e teorias a partir desses dados. Os proponentes desse método defendem que a natureza do software é tal que podemos avançar no conhecimento do software apenas por meio de experimentos.

Linhas de produtos de software

As linhas de produtos de software, também conhecidas como engenharia da família de produtos , são uma forma sistemática de produzir famílias de sistemas de software, em vez de criar uma sucessão de produtos completamente individuais. Este método enfatiza a reutilização extensiva, sistemática e formal de código , para tentar industrializar o processo de desenvolvimento de software.

A conferência The Future of Software Engineering (FOSE), realizada no ICSE 2000, documentou o estado da arte do SE em 2000 e listou muitos problemas a serem resolvidos na próxima década. As trilhas do FOSE nas conferências ICSE 2000 e ICSE 2007 também ajudam a identificar o que há de mais moderno em engenharia de software.

Engenharia de software hoje

A profissão está tentando definir seus limites e conteúdo. O Corpo de Conhecimento em Engenharia de Software, SWEBOK , foi apresentado como um padrão ISO em 2006 (ISO / IEC TR 19759).

Em 2006, a Money Magazine e a Salary.com classificaram a engenharia de software como o melhor emprego na América em termos de crescimento, remuneração, níveis de estresse, flexibilidade de horários e ambiente de trabalho, criatividade e como é fácil entrar e avançar no campo.

Subdisciplinas

Inteligência artificial

Uma ampla variedade de plataformas permitiu o desenvolvimento de diferentes aspectos da IA, que vão desde sistemas especialistas , como Cyc, a estruturas de aprendizado profundo, a plataformas de robôs, como o Roomba com interface aberta. Recentes avanços em profunda redes neurais artificiais e computação distribuída levaram a uma proliferação de bibliotecas de software, incluindo Deeplearning4j , TensorFlow , Theano e Torch .

Um estudo de 2011 do McKinsey Global Institute descobriu uma escassez de 1,5 milhão de profissionais e gerentes de IA altamente treinados e vários bootcamps privados desenvolveram programas para atender a essa demanda, incluindo programas gratuitos como The Data Incubator ou programas pagos como General Assembly .

línguas

A IA simbólica inicial inspirou Lisp e Prolog , que dominou a programação inicial da IA. O desenvolvimento de IA moderna geralmente usa linguagens convencionais, como Python ou C ++ , ou linguagens de nicho, como Wolfram Language .

Figuras proeminentes na história da engenharia de software

Veja também

Referências

links externos