Buscar

Engenharia de Software

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Capa
Resumo
Sumário / bibliográfica sommerville.
O SOFTWARE: INTRODUÇÃO
Software de computador é um produto desenvolvido por profissionais, ao qual abrange programas executáveis em um computador de diversas arquiteturas, abrangendo praticamente qualquer tipo de mídia eletrônica. A engenharia de software abrange um processo, um conjunto de métodos e um leque de ferramentas que possibilitam aos profissionais desenvolverem software de alta qualidade.
Os engenheiros de software criam e dão suporte a ele e, direta ou indiretamente, todos do mundo industrializado o utilizam. 
O Software é importante porque afeta quase todos os aspectos de nossas vidas, tornou-se algo incorporado, seja no comercio, na cultura e em nossas atividades Cotidianas. A engenharia de software é importante porque ela nos capacita para o desenvolvimento de sistemas complexos dentro de um determinado prazo e com alto nível de qualidade.
Na criação de um software muitas etapas são envolvidas, cria-se software para computadores da mesma forma que produtos bem-sucedido: aplicando-se um processo adaptável e ágil que conduza a um resultado de alta qualidade, atendendo as necessidades daqueles que usarão o produto. Aplica-se uma abordagem de engenharia de software.
Do ponto de vista de um engenheiro, um Software é um conjunto de programas, conteúdo (dados) e outros artefatos que são software. Entretanto, ao ponto de vista do usuário, o software consiste em informações resultantes que, de alguma forma, tornam a vida dele melhor.
Software de computadores continua a ser a tecnologia única mais importante do cenário mundial. Há cinquenta anos, ninguém poderia prever que o software iria se tornar uma ferramenta indispensável aos negócios, ciência e engenharia; que software iria viabilizar a criação de novas tecnologias, o aditivo por trás da revolução do computador pessoal; que tais seriam comprados pelos consumidores em lojas de bairro; que software evoluiria de produto para serviço, na medida que empresas de software “sob encomenda” oferecessem funcionalidades imediatas a seus clientes, por via de um navegador Web; que uma companhia de software iria se tornar a maior e mais influente do que quase todas as companhias da era industrial.
Conforme aumenta a importância do software, desenvolve-se tecnologias que tornem mais fácil, mais rápido e mais barato desenvolver e manter programas de computador de alta qualidade.
NATUREZA DO SOFTWARE
O software, nos dias de hoje, assume um papel duplo. Ele é um produto e, ao mesmo tempo é o veículo de distribuição de produtos. Como um produto, fornece o potencial computacional representado pelo hardware ou, por uma rede de computadores que podem ser acessados por um hardware local. Independente do software ser de um celular ou operar dentro de um mainframe, ele é um transformador de informação, produzindo, gerenciando, adquirindo, modificando, exibindo ou transmitindo informações que podem ser tão simples quanto um bit, ou complexo quanto uma apresentação multimídia. Como veículo de distribuição do produto, o software atua como a base para o controle do computador (Sistemas Operacionais), a comunicação de informações (redes) e a criação e o controle de outros programas (ferramenta de software e ambientes).
O software distribui o produto mais importante de nossa era: a informação. Ele transforma dados pessoais de modo que possam ser mais uteis num determinado contexto; fornece um portal para redes mundiais de informação (internet) e os meios para obter as informações.
O desempenho do software tem passado por grandes mudanças nos últimos cinquenta anos. O aperfeiçoamento no desempenho do hardware, grandes mudanças de arquitetura, evolução, aumento na capacidade de memória e armazenamento, tudo isso resultou em sistemas computacionais mais sofisticados e complexos, produzindo resultados impressionantes quando o sistema é bem-sucedido.
DEFININDO SOFTWARE
Uma descrição de software poderia ser a seguinte: (1) Software consiste em: instruções (programas de computadores) que, quando executadas, fornecem características, funções e desempenhos desejados; (2) estrutura de dados que possibilitam aos programas manipular informações adequadamente; e (3) informação descritiva, tanto na forma impressa como na virtual, descrevendo a operação e o uso dos programas.
SOFTWARE NÃO “SE DESGASTA” 
Software não é suscetível aos males ambientais o qual faz com que o hardware se desgaste. Portanto, mesmo não havendo desgaste, o software pode se encontrar em estado de deterioração. Durante sua vida, o software passa por alterações, e conforme essas medidas são tomadas, é provável que sejam introduzidos erros, assim o software pode vir a ficar deteriorado devido as modificações. Outro aspecto é que não existe peças de reposições de software. Cada defeito de software indica um erro no projeto ou no processo de codificação (programação).
SOFTWARE GENÉRICO E PERSONALIZADO
Existem dois tipos de software: genéricos (que são conhecidos popularmente como software de prateleiras) e os softwares sob encomenda. Os softwares genéricos são aqueles desenvolvidos por uma organização para qualquer pessoa que quiser compra-lo. Seu desenvolvimento é feito com base em estudos de necessidades de mercado, como por exemplo o Office da Microsoft, um software desenvolvido para o público em geral onde suas especificações são controladas pelo próprio desenvolvedor.
O software sob encomenda, são desenvolvidos de acordo com as especificações do cliente, com todo o foco nas necessidades do cliente especifico. 
CAMPOS DE APLICAÇÕES DE UM SOFTWARE
Existem sete grandes categorias de software que apresentam desafios para os engenheiros de software:
Software de sistema – conjunto de programas feito para atender a outros programas, como por exemplo, compiladores, editores, componentes de sistemas operacionais, drivers, entre outros. São sistemas caracterizados por pesada interação com o hardware do computador.
Software de aplicação – programas sob medida que solucionam uma necessidade especifica do usuário. Além das aplicações convencionais de processamento de dados, o software de aplicação é usado para controlar funções de negócio em tempo real (por exemplo, transação em pontos de venda).
Software cientifico – “processamento numérico pesado”. As aplicações vão da astronomia à vulcanologia, da análise de tensões na indústria automotiva à dinâmica orbital de ônibus espacial.
Software embutido – residente em um produto ou sistema e utilizado para implementar e controlar características e funções para o usuário final e para o próprio sistema. Executam funções limitadas como controle de painel de um forno, controle de nível de combustível de um veículo.
Software para linhas de produto – prover capacidade especifica de utilização por muitos clientes diferentes, como por exemplo controle de produtos de estoque, gerenciamento de banco de dados.
Aplicação para a web – chamadas de “WebApps”, essa categoria centralizada em redes embarca uma vasta quantidade de aplicações. Podem ser simples como um conjunto de arquivos de hipertexto interconectados até sofisticados ambientes computacionais integradas a banco de dados corporativos e aplicações comerciais.
Software de inteligência artificial – aplicações nessa área incluem: robótica, sistemas especialistas, reconhecimento de padrões de imagem e de voz, redes neurais artificiais, prova de teoremas e jogos.
Software aberto – uma tendência crescente que resulta na distribuição de código-fonte para aplicações de sistemas (banco de dados, sistemas operacionais e ambientes de desenvolvimento), de forma que muitas pessoas possam contribuir para o seu desenvolvimento.
2.1 SOFTWARE LEGADO
Sistema legado, é o termo utilizada para sistemas de uma organização que, fornecem serviços essenciais. São programas mais antigos, frequentemente denominados de software legado, foram desenvolvidos décadasatrás e tem sido modificado para se adequar a mudanças dos requisitos de negócio e plataformas computacionais. Um software legado é caracterizado pela longevidade e criticidade de negócios. Infelizmente há uma característica que pode estar presente em um software legado: baixa qualidade. Algumas vezes tem projetos não expansíveis, código trincado, documentação pobre ou inexistente, histórico de modificações mal administrado. Se o software legado atende as necessidades de seus usuários e roda de forma confiável, ele não precisa ser “consertado”. Com o passar do tempo esses softwares precisam passar por um processo de evolução pelas seguintes razões:
Adaptação para atender necessidades de novos ambientes ou novas tecnologias.
Aperfeiçoamento para implementar novos serviços de negócios.
Expandido para operar com outros bancos de dados ou sistemas mais modernos.
Rearquitetado para torná-lo viável em um ambiente de rede.
Quando essas evoluções acontecem, um sistema legado passa por um processo de reengenharia para permanecer viável no futuro. O objetivo da engenharia de software moderna é elaborar metodologias de que os sistemas de software que modifiquem-se continuamente, onde novos sistemas são construídos a partir dos antigos.
2.3 WEBAPPS
Por volta de 1990 a 1995, os sites eram formados somente por conjunto de arquivos de hipertexto lincados, onde apresentavam informações usando texto e gráficos limitados. Co o passar do tempo, o aumento da HTML, via ferramenta de desenvolvimento, por exemplo XML, Java, tornou possível oferecer capacidade computacional junto as informações, surge então as aplicações baseadas na web. Essas aplicações evoluíram para sofisticadas ferramentas que não apenas oferecem funções especializadas ao usuário final, como também foram integradas aos bancos de dados corporativos e as aplicações de negócios.
Os seguintes atributos são encontrados na grande maioria das aplicações Web: Uso intensivo de redes, simultaneidade (acessos ao mesmo tempo), carga não previsível (quanto a quantidade de usuários), desempenho, disponibilidade, orientada a dados, sensibilidade no conteúdo (qualidade), evolução contínua, imediatismo, segurança e estética.
ENGENHARIA DE SOFTWARE
O desenvolvedor de software deve estar preparado para os desafios do século vinte e um, devemos perceber uns fatos reais:
Software tornou-se algo profundamente incorporado em praticamente todos os aspectos de nossas vidas, o número de pessoas interessadas em utilizar desse recursos e funções oferecidas por essas aplicações, tem crescido consideravelmente. Quando uma aplicação, ou um sistema embutido está em processo de desenvolvimento, muitas vozes são ouvidas. Muitas delas possuem ideias ligeiramente diferente de quais recursos e funções essa aplicação deve oferecer. Compreende-se que, todo esforço deve se concentrar em resolução de problemas que os usuários necessitam antes mesmo de desenvolver o software.
Os requisitos de tecnologia estão se tornando cada vez mais completos a cada ano. Grandes equipes desenvolvem programas de computador que antigamente eram desenvolvidos por apenas um indivíduo. Software sofisticado, hoje em dia está incorporado em tudo, de produtos eletrônicos a equipamentos médicos e sistemas de armamento. Dessa complexidade requer uma demanda maior com as interações de todos os elementos de sistema, portanto, projetar tornou-se uma atividade chave.
Negócios, indivíduos e governos dependem de software para decisões estratégicas e táticas, como para controle e operações cotidianas. Se o software falhar, pessoas e empresas poderão vivenciar, desde pequenos inconvenientes até falhas catastróficas. Com tudo isso, compreende-se que um software deve apresentar uma qualidade elevada.
Conforme o valor de uma aplicação aumenta, a uma probabilidade de que sua base de usuários e longevidade também aumente, assim exigindo uma demanda por adaptação e aperfeiçoamento. Conclui-se que um software deve ser passível de manutenção. Conclui-se que, software, independente do seu campo de aplicação, deve passar por processo de engenharia.
DEFINIÇÕES
“Engenharia de software é o estabelecimento e o emprego de sólidos princípios de engenharia de modo a obter software de maneira econômica, que seja confiável e funcione de forma eficiente em maquinas reais”. Fritz Bauer [Nau69].
Essa definição não abrange muitos aspectos técnicos sobre engenharia de software tais como a qualidade; ela não trata diretamente da necessidade e satisfação do cliente ou da entrega do produto dentro do prazo; não menciona a importância e medições métricas, não declara a importância de um processo eficaz. Ainda assim nos fornece uma base sobre definição de engenharia de software.
A IEEE [IEE93a] definiu de uma forma mais abrangente ao afirmar que:
“Engenharia de software: A aplicação de uma abordagem sistemática, disciplinada e quantificável no desenvolvimento, na operação e na manutenção do software; isto é, a aplicação de engenharia ao software”.
A engenharia de software é uma tecnologia em camadas. Qualquer abordagem de engenharia (inclusive engenharia de software) dever estar fundamentada em um comprometimento organizacional com a qualidade. Qualquer filosofia de gestão de qualidade, promovem uma cultura de aperfeiçoamento contínuo de processo, e esta cultura desenvolve abordagens cada vez mais efetivas na engenharia de software. A pedra fundamental que sustenta a engenharia de software é o foco na qualidade.
A base para a engenharia de software é a acamada de processos. O processo de engenharia possibilita o desenvolvimento de software de forma racional e dentro do prazo. O processo de software constitui a base para o controle do gerenciamento de projetos de software, no qual são aplicados métodos técnicos (modelos, documentos, dados, relatórios, formulários etc.), a qualidade é garantida e mudanças são geridas de forma apropriada. 
Os métodos da engenharia de software envolvem tarefas, que incluem: comunicação, análise de requisitos, modelagem de projetos, construção de programa, teste e suporte. São princípios básicos que governam cada área da tecnologia e incluem atividades de modelagem e outras técnicas descritas.
As ferramentas da engenharia de software fornecem suporte para o processo e para os métodos. Quando as ferramentas são integradas de modo que as informações criadas por ela sejam usadas por outra ferramenta, é estabelecido um sistema para o suporte ao desenvolvimento de software, denominado engenharia de software com o auxílio do computador.
O PROCESSO DE SOFTWARE
Processo é um conjunto de atividades, ações e tarefas realizadas na criação de algum produto de trabalho. Uma atividade esforça-se para atingir um objetivo (como por exemplo, comunicar-se com os interessados) e é utilizada independente do campo de aplicação, do tamanho do projeto, esforços ou grau de rigor com que a engenharia de software será aplicada. Uma ação (por exemplo, projeto da arquitetura) envolve um conjunto de tarefas que resultam em um artefato de software fundamental (como um modelo de projeto de arquitetura). Uma tarefa se concentra em um objetivo pequeno, bem definido (testes de unidades por exemplo) e produz um resultado tangível.
No contexto de engenharia de software, um processo não é uma prescrição rígida como desenvolver um software, é uma abordagem adaptável que possibilita a equipe de software realizar o trabalho selecionar as ações e tarefas apropriáveis. O objetivo é sempre entregar o software dentro do prazo e com a qualidade suficiente de satisfazer aqueles que patrocinaram a sua criação e os que irão utiliza-lo.
Uma metodologia de processo (framework) estabelece o alicerce para um processo de engenharia completo, através da identificação de pequenas atividades estruturais aplicáveis a todos os projetos de software, independentemente do tamanho. A metodologia de processo engloba um conjunto de atividades aplicáveis em todo processo de software. Uma metodologia de processogenérica engloba cinco atividades:
Comunicação: é de vital importância comunicar-se antes de iniciar qualquer trabalho técnico e colaborar com o cliente (interessados). A intenção é absorver os objetivos dos interessados com o projeto, conhecer as necessidades que ajudarão a definir as funções e características do software.
Planejamento: um projeto de software é uma jornada complicada, o planejamento cria um caminho a se seguir, denomina-se plano de projeto de software, que define o trabalho de engenharia descrevendo as tarefas a ser conduzidas, os riscos, recursos, produtos resultantes e um cronograma de trabalho.
Modelagem: cria-se um esboço da coisa, que possa dar uma ideia do todo, qual a suar arquitetura e várias outras características. Um engenheiro de software cria modelos para melhor entender as necessidades do software e o projeto que ira atender as suas necessidades.
Construção: essa atividade combina geração de código e testes necessários para revelar erros na codificação.
Emprego: o software é entregue ao cliente, que avalia o produto e fornece feedback, baseado na avaliação.
Essas cinco atividades de métodos podem ser utilizadas para o desenvolvimento de programas pequenos e simples, pra grandes aplicações para a internet e para a engenharia de grandes sistemas baseados em computador. Os processos podem ser diferentes para cada caso, mas as metodologias permanecem as mesmas.
As atividades metodológicas do processo de engenharia de software são complementadas por uma série de atividades de apoio, são aplicadas ao longo do projeto, ajudando a equipe a gerenciar, controlar o processo, a qualidade, as mudanças e os riscos. As atividades são:
Controle e acompanhamento de projetos: possibilita a avaliação do progresso em relação ao plano do projeto e tomar medidas necessárias para cumprir o cronograma.
Administração de riscos: avalia riscos que possam afetar o resultado e a qualidade do produto (projeto).
Garantia da qualidade de software: define e conduz as atividades que garantem a qualidade do software.
Revisões técnicas: avaliam artefatos da engenharia de software, para identificar e eliminar erros antes que se propaguem para atividade seguinte.
Medição: define e coleta medidas (do processo, projeto e produto). Auxilia na entrega do software de acordo com os requisitos.
Gerenciamento da configuração de software: gerencia os efeitos das mudanças ao longo do processo.
Gerenciamento da reusabilidade: define critérios para o reuso de artefatos, incluindo os componentes de software e estabelece mecanismos para a obtenção de componentes reutilizáveis.
Preparo e produção de artefatos de software: engloba as atividades necessárias para criar artefatos como, por exemplo, modelos, documentos, logs, formulários e listas.
Um processo de engenharia não é rígido nem deve ser seguido à risca, mais que isso, ele dever ser ágil e adaptável aos problemas, projeto, equipe e cultura organizacional. 
PRATICA DA ENGENHARIA DE SOFTWARE
No contexto da engenharia de software, essas etapas de bom senso conduzem a uma série de questões essências:
Compreenda o problema. Infelizmente, compreender nem sempre é tão fácil assim. Algumas questões ajudam nessa compreensão:
Quem são os interessados na solução do problema?
Quais são as incógnitas?
O problema pode ser representado graficamente?
É possível criar um modelo analítico?
Planeje a solução. Após entender o problema e não vê a hora de começar a codificar, faça um pequeno projeto:
Existe um padrão de determinados erros? 
Ocorreu problemas similares anteriormente? 
Algum problema similar já foi resolvido? 
Existem soluções que podem ser reutilizados?
Execute/leve adiante o plano. O projeto serve como um mapa para o sistema. Podem surgir desvios inesperados e é possível criar um caminho ainda melhor a medida que se prossiga, o planejamento permite continuar sem se perder.
A solução se adequa ao plano?
O projeto e o código foram revistos? 
Provas de correção foram aplicadas ao algoritmo?
Examine o resultado. Não se pode ter certeza de que uma solução seja perfeita, porém, pode-se assegurar se os números de testes realizados foram suficientes para revelar o maior número de erros possível.
É possível testar cada parte componentes da solução? 
Foi implementada uma estratégia razoável de testes?
A solução produz resultados necessários?
PRINCÍPIOS GERAIS
Os princípios ajudam a estabelecer um modo de pensar para a prática segura de engenharia de software. David Hooker [Hoo96] propôs sete princípios que se concentram na prática de engenharia como um todo. Eles são:
1º A razão de existir. Um sistema de software existe por uma única razão, que é gerar valor a seus usuários. 
Bibliografia:
Digite o nome do livro pressman
Bibliografia complementar
Wikipedia
sumerville

Continue navegando