RSS

Engenharia de Software

Introdução

 

Praticamente todos os países, hoje em dia, dependem de sistemas complexos baseados em computadores. Infra-estruturas e serviços nacionais contam com sistemas baseados em computadores, e a maioria dos produtos elétricos inclui um computador e um software de controle. A manufatura e a distribuição industriais estão completamente automatizadas, assim como os sistemas financeiros. Portanto, produzir e manter o software dentro de custos adequados é essencial para o funcionamento da economia nacional e internacional.

A engenharia de software é um ramo da engenharia cujo foco é o desenvolvimento dentro de custos adequados de sistemas de software de alta qualidade. Software é abstrato e intangível. Não é limitado por materiais ou controlado por leis da física no potencial de software. Contudo, falta de restrições naturais significa que o software pode facilmente se tornar extremamente complexo e, portanto, muito difícil de ser compreendido.

O conceito de engenharia de software foi inicialmente proposto em 1968, em uma conferencia organizada para discutir o que foi então chamado “crise de software”. A crise de software resultava diretamente na introdução de novo hardware de computador baseado em circuitos integrados. Seu poder fez das aplicações de computador, consideradas até então não realizáveis, propostas viáveis. O software resultante era ordens de grandeza maiores e mais complexas que sistemas anteriores de software.

A experiência inicial na construção desses sistemas mostrou que o desenvolvimento informal de software não era suficiente. Projetos importantes apresentavam, algumas vezes, anos de atraso. O software, cujo custo superava as previsões, não era confiável, era difícil de manter e seu desempenho era insatisfatório. O desenvolvimento de software estava em crise. Os custos de hardware estavam caindo, enquanto os custos de software aumentavam rapidamente. Novas técnicas e métodos eram necessários para controlar a complexidade inerente aos grandes sistemas de software.

Essas técnicas tornaram-se parte da engenharia de software e são amplamente usadas hoje em dia. No entanto, assim como aumentou a habilidade de produzir software, cresceu também à necessidade por sistemas de software mais complexos. Novas tecnologias resultantes de convergências de computadores e sistemas de comunicação, e as complexas interfaces com o usuário, impuseram novos desafios aos engenheiros de software. Como muitas empresas ainda não aplicam as técnicas de engenharia de software de forma efetiva, muitos projetos produzem software de baixa confiabilidade, com atraso e com custo além do orçamento.

Penso que fizemos enormes progressos desde 1968 e que o desenvolvimento de engenharia de software melhorou acentuadamente nosso software. Entendemos melhor as atividades envolvidas no desenvolvimento de software. Desenvolvemos métodos eficazes de especificação, projeto e implementação de software. Novas notações e ferramentas reduzem o esforço necessário para produzir sistemas complexos e de grande porte.

Sabemos agora que não existe uma abordagem única “ideal” para a engenharia de software. A ampla diversidade de tipos de sistemas e organizações, que usam esses sistemas, significa que precisamos de uma diversidade de abordagens para o desenvolvimento de software. No entanto noções fundamentais de processo e de organizações de sistemas constituem a base de todas essas técnicas que constituem a essência da engenharia de software.

Os engenheiros de software podem, certamente, se orgulhar de suas realizações. Sem softwares complexos, não teríamos explorado o espaço, não existiria a Internet e as modernas telecomunicações e todos os meios de viagem seriam mais perigosos e caros. A engenharia de software tem contribuído muito e creio que, à medida que essa disciplina amadurece, sua contribuição no século XXI será ainda maior.

 Perguntas mais freqüentes sobre engenharia de software

 O que é software?

Muitas pessoas associam o termo software aos programas de computador. Na verdade, essa é uma visão muito pobre ou que dizer, restritiva. Software não é apenas o programa, mas também todos os dados de documentação e configuração associados, necessários para que o programa opere corretamente. Um sistema de software consiste, geralmente, de um conjunto de programas separados, arquivos de configuração, que são utilizados para configurar esses programas; documentação do sistema, que descreve a estrutura do sistema; a documentação do usuário, que explica como usar o sistema; sites Web por meio dos quais os usuários obtêm informações recentes sobre o produto.

Os engenheiros de software estão envolvidos com o desenvolvimento de produtos de software, isto é, software que pode ser vendido para um cliente. Existem dois tipos fundamentais de produto de software:

  • Produtos genéricos: São sistemas do tipo stand-alone, produzidos por uma organização de desenvolvimento e vendidos no mercado para qualquer cliente disposto a comprá-los. Dentre os exemplos deste tipo de produtos estão os softwares para PCs, como banco de dados, processadores de texto, pacotes gráficos e ferramentas de gerenciamento de projetos.
  • Produtos sob encomenda (ou personalizados): São sistemas encomendados por um determinado cliente. O software é desenvolvido especialmente para aquele cliente por uma empresa de software. Dentre os exemplos deste tipo de software destacam-se os sistemas de controle de dispositivos eletrônicos, desenvolvidos para apoiar um determinado processo de negócio e sistemas de controle de tráfego aéreo.

Uma diferença importante entre esses tipos de software é que, em produtos genéricos, a organização que desenvolve o software controla sua especificação. Para produtos encomendados, a especificação é normalmente desenvolvida e controlada pela organização que compra o software. Os desenvolvedores de software devem trabalhar de acordo com essa especificação.

No entanto, a linha entre esses tipos de produtos esta se tornando cada vez mais tênue. Muitas empresas de software desenvolvem um produto genérico e modificam-no de acordo com as necessidades de um cliente específico. Sistemas de planejamento de recursos empresariais (ERP – Enterprise Resource Planning), como sistemas SAP, são os melhores exemplos desse método. Nesse caso, um sistema grande e complexo é adaptado a uma empresa, incorporando informações sobre as regras e os processos de negócios, relatórios necessários etc.

 O que é engenharia de software?

 A engenharia de software é uma disciplina de engenharia relacionada com todos os aspectos da produção de software, desde os estágios iniciais de especificação do sistema até sua manutenção, depois que este entrar em operação. Nesta definição, há duas frases importantes:

  1. Disciplina de engenharia: os engenheiros fazem as coisas funcionarem. Eles aplicam teorias, métodos e ferramentas onde for apropriado, mas eles usam de forma seletiva e sempre procuram descobrir soluções para os problemas, mesmo quando não existirem teorias e métodos aplicáveis. Os engenheiros reconhecem também que devem trabalhar sob restrições organizacionais e financeiras, e procuram soluções sem perder de vistas estas restrições.
  2. Todos os aspectos da produção de software: a engenharia de software não esta relacionada apenas com os processos técnicos de desenvolvimento de software, mas também com atividades como o gerenciamento de projeto de software e o desenvolvimento de ferramentas, métodos e teorias que apóiem a produção de software.

Em geral, os engenheiros de software adotam uma abordagem sistemática e organizada em seu trabalho, que é, freqüentemente, a maneira mais eficaz de produzir software de alta qualidade. No entanto, a engenharia procura selecionar o método mais apropriado para um conjunto de circunstâncias e uma abordagem mais criativa e menos formal pode ser mais eficaz em outras circunstâncias. O desenvolvimento menos formal é particularmente apropriado para sistemas baseados na Web, que requerem uma combinação de habilidades em projeto gráfico em software.

 Qual a diferença entre a engenharia de software e ciência da computação?

Essencialmente, a ciência da computação diz respeito às teorias e os métodos que constituem a base de computadores e sistemas de software, enquanto a engenharia de software se dedica aos problemas práticos da produção de software. Algum conhecimento de ciência de computação é essencial para os engenheiros de software, da mesma forma que algum conhecimento de física é essencial para os engenheiros elétricos.

O ideal seria que todos os engenheiros de software se apoiassem em teorias da ciência da computação, mas na realidade isso nem sempre ocorre. Os engenheiros de software devem, com freqüência, usar métodos ad hoc para desenvolver software. Teorias mais elaboradas da ciência da computação nem sempre podem ser aplicadas aos problemas reais e complexos que requerem uma solução de software.

Qual a diferença entre engenharia de software e engenharia de sistemas?

A engenharia de sistemas diz respeito a todos os aspectos do desenvolvimento e da evolução de sistemas complexos, nos quais o software desempenha um papel importante. A engenharia de sistemas está, portanto relacionada ao desenvolvimento de hardware, projeto de políticas e de processos e implantação do sistema, assim com a engenharia de software. Os engenheiros de sistemas estão envolvidos com a especificação do sistema, com a definição de sua arquitetura com a engenharia dos componentes do sistema (hardware, software e etc.).

A engenharia de sistemas é uma disciplina mais antiga do que a engenharia de software. As pessoas têm especificado e integrado sistemas industriais complexos, como indústrias de aeronaves e químicas, por mais cem anos. No entanto, como a porcentagem de software aumentou nos sistemas, as técnicas de engenharia de software, tais como modelagem por casos de uso e gerenciamento de configuração, estão sendo usadas no processo de engenharia de sistemas. Eu explico a engenharia de sistemas mais adiante.

O que é processo de software?

Um processo de software é um conjunto de atividades e resultados associados que produz um produto de software. Existem quatro atividades fundamentais de processo, que são comuns a todos os processos de software. São elas:

  1. Especificação de software: clientes e engenheiros definem o software a ser produzido e as restrições para a sua operação.
  2. Desenvolvimento de software: o software é projetado e programado.
  3. Validação de software: na qual o software é verificado para garantir que é o que o Cliente deseja.
  4. Evolução de software: o software é modificado para se adaptar às mudanças dos requisitos do cliente e do mercado.

Diferentes tipos de sistemas necessitam de diferentes processos de desenvolvimento. Por exemplo, um software de tempo real de uma aeronave deve ser completamente especificado antes do inicio do desenvolvimento, enquanto nos sistemas de comércio eletrônico a especificação e o programa são, geralmente, desenvolvidas em conjunto. Conseqüentemente, essas atividades genéricas podem ser organizadas de diferentes maneiras e descritas em níveis de diferentes de detalhes, para diferentes tipos de software a ser desenvolvido e ou aumentar os custos de desenvolvimento.

 O que é um modelo de processo de software?

Um modelo de processo de software é uma descrição simplificada desse processo de software que apresenta uma visão dele. Os modelos de processo incluem atividades, que fazem parte do processo de software, os produtos de software e os papéis das pessoas envolvidas na engenharia de software. Alguns exemplos dos tipos de modelo de processo de software são:

  1. Um modelo de Workflow: mostra a seqüencia de atividades ao longo do processo, com suas entradas entre elas. As atividades neste modelo representam ações humanas.
  2. Um modelo de fluxo de dados ou modelo de atividade: representa o processo como um conjunto de atividades, no qual cada atividade realiza alguma transformação de dados. Mostra como a entrada do processo, como uma especificação, por exemplo, é transformada em uma saída, como um projeto. As atividades, nesse caso, podem representar transformações realizadas por pessoas ou por computadores.
  3. Um modelo de papel/ação: representa os papéis das pessoas envolvidas no processo de software e as atividades pelas quais são responsáveis.

A maioria dos modelos de processo de software é baseada em um dos três modelos gerais ou paradigmas de desenvolvimento de software:

  1. O modelo em cascata: considera as atividades apresentadas anteriormente e as representa como fases separadas de processo, como especificação de requisitos, projeto de software, implementação, teste e assim por diante. Depois que cada estágio é concluído, ele é aprovado e o desenvolvimento prossegue para o estágio seguinte.
  2. Desenvolvimento iterativo: esta abordagem intercala as atividades de especificação, desenvolvimento e validação. Um sistema inicial é desenvolvido rapidamente com base em especificações muito abstratas. È então refinado com as informações do cliente, para produzir as informações que satisfaça a necessidade deste. O sistema pode então ser entregue. Como alternativa ele pode ser reimplementado, utilizando uma abordagem mais estruturada, para produzir um sistema mais robusto e mais fácil de ser mantido.
  3. Engenharia de Software baseada em componentes (CBSE – Component Based Software Engineering): esta técnica supõe que partes do sistema já existam. O processo de desenvolvimento concentra-se mais na integração destas partes do que seu no seu desenvolvimento a partir do inicio.
Anúncios
 

Uma resposta para “Engenharia de Software

  1. joseomsar

    16/12/2015 at 4:31 PM

    Muito bom, mas assi como diz o bb “oi”

    Curtir

     

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: