Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Trab. eng.software (1), Trabalhos de Engenharia Informática

Trabalho Engenharia de software

Tipologia: Trabalhos

2012

Compartilhado em 17/04/2012

jefferson-henrique-3
jefferson-henrique-3 🇧🇷

3

(2)

9 documentos

1 / 22

Documentos relacionados


Pré-visualização parcial do texto

Baixe Trab. eng.software (1) e outras Trabalhos em PDF para Engenharia Informática, somente na Docsity! UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO INTRODUÇÃO A ENGENHARIA DA COMPUTAÇÃO Alberto Alencar Elianderson Coelho Felipe Santos Jefferson Henrique Bispo Paulo Fernando Victor Gustavo ENGENHARIA DE SOFTWARE Juazeiro-Ba, Novembro de 2011 Alberto Alencar Elianderson Coelho Felipe Santos Jefferson Henrique Bispo Paulo Fernando Victor Gustavo RESUMO DA APRESENTAÇÃO: ENGENHARIA DE SOFTWARE Resumo apresentado a Universidade Federal do Vale do São Francisco – UNIVASF, campus de Juazeiro, como avaliação parcial de requisito parcial de Introdução a Engenharia da Computação. Professor Rosalvo Oliveira. para facilitar isso. A falta de documentação dos softwares causou algumas consequências, como: Prazos não sendo cumpridos, recursos extrapolam a estimativa e a qualidade dos softwares era questionável muitas vezes o software não atendia as ideias gerais do produto solicitado, eram de difícil e constante manutenção e não era possível conhecer o efeito de uma mudança, pela falta de documentação era impossível saber o impacto de uma mudança na estrutura daquele software. Em 1960 por conta de todos os problemas que surgiram, ocorreu a “Software Crisis” ou crise do software, problemas os quais persistem até os dias de hoje. E em 1968, oito anos depois da crise se estabelecer, ouve uma conferencia onde vários profissionais apresentaram modelos que estiveram estudando durante este período, para tentar acabar com os problemas que geraram a crise, e assim implantaram os princípios da engenharia, enfoque estruturado e metodológico, para o desenvolvimento de softwares, surgindo assim a denominação para o desenvolvimento de softwares utilizando princípios de engenharia, que é a Engenharia de Software. 1.. A Importância do Software Durante as três primeiras décadas da era do computador, o principal desafio era desenvolver um hardware que reduzisse o custo de processamento e armazenagem de dados. Ao longo da década de 1980, avanços na microeletrônica resultaram em maior poder de computação a um custo cada vez mais baixo. Hoje, o problema é diferente. O principal desafio durante a década de 1990 é melhorar a qualidade (e reduzir o custo) de soluções baseadas em computador soluções que são implementadas com software. O poder de um computador mainframe da década de 1980 agora está a disposição sobre uma mesa. As assombrosas capacidades de processamento e armazenagem do moderno hardware representam um grande potencial de computação. O software é o mecanismo que nos possibilita aproveitar e dar vazão a esse potencial. 1.2. Aplicação do Software O software pode ser aplicado a qualquer situação em que um conjunto previamente especificado de passos procedimentais (um algoritmo) tiver sido definido. O conteúdo de informações e a previsibilidade são fatores importantes na determinação da natureza de um aplicativo. Desenvolver categorias genéricas para as aplicações de softwares é uma tarefa muito difícil. Quanto mais complexo é o sistema, mais difícil é determinar de forma clara os vários componentes do software. Podem-se dividir as aplicações em: • Software Básico – que é um conjunto de programas para dar apoio a outros programas. Tem como característica uma forte interação com o hardware, operações concorrentes, compartilhamento de recursos, uso por múltiplos usuários e múltiplas interfaces. • Software de Tempo Real – são programas que monitora, analisa e controla eventos do mundo real, devendo responder aos estímulos do mundo externo com restrições de tempo pré-determinadas. • Software Comercial – é a maior área de aplicação de softwares, são aplicações que gerenciam as operações comerciais de modo a facilitar o gerenciamento comercial do negócio da empresa, permitindo também a tomada de decisões. • Software Cientifico e de Engenharia – são caracterizados por algoritmos de processamento numérico, dependentes da coleta e processamento de dados para as mais variadas áreas do conhecimento. • Software Embutido – são desenvolvidos para executar atividades muito específicas e inseridos em produtos inteligentes tanto para atividades comerciais como para atividades domesticas. • Software de Computador Pessoal – são produtos desenvolvidos para o uso pessoal do computador, tais como planilhas eletrônicas, processadores de textos, jogos, etc.. • Software de Inteligência Artificial – faz uso de algoritmos não numéricos para resolver problemas complexos que não apresentam facilidades computacionais numéricas ou de análise direta. 3.. Evolução do Software O contexto em que o software foi desenvolvido está estreitamente ligado a quase cinco décadas de evolução dos sistemas computadorizados. O melhor desempenho de hardware, menor tamanho e custo mais baixo precipitaram o aparecimento de sistemas baseados em computadores mais sofisticados. Mudamos dos processadores a válvula para os dispositivos microeletrônicos que são capazes de processar 200 milhões de instruções por segundo. Em livros populares sobre a "revolução do computador", Osborne caracterizou uma "nova revolução industrial", Toffler chamou o advento da microeletrônica de "a terceira onda de mudança" na historia humana e Naisbitt previu que a transformação de uma sociedade industrial em uma "sociedade de informação" terá um profundo impacto sobre nossas vidas. Feigenbaum e McCorduck sugeriram que a informação e o conhecimento (controlados por computador) serão o foco principal de poder no século XXI, e Stoll argumentou que a "comunidade eletrônica" criada por redes e software e a chave para a troca de conhecimentos em todo o mundo. Quando se iniciava a década de 1990, Toffler descreveu uma "mudança de poder", em que as velhas estruturas de poder (governamental, educacional, industrial, econômico e militar) se desintegrarão enquanto os computadores e o software levarão a uma "democratização do conhecimento . A terceira era da evolução dos sistemas computadorizados começou em meados da década de 1970 e continua ate hoje. Os sistemas distribuídos - múltiplos computadores, cada um executando funções concorrentemente e comunicando-se um com o outro – aumentaram intensamente a complexidade dos sistemas baseados em computador. As redes globais e locais, as comunicações digitais de largura de banda (handwidth) elevada e a crescente demanda de acesso "instantâneo" a dados exigem muito dos desenvolvedores de software. A terceira era também foi caracterizada pelo advento e generalização do uso de microprocessadores, computadores pessoais e poderosas estações de trabalho (workstations) de mesa. O microprocessador gerou um amplo conjunto de produtos inteligentes – de automóveis a fornos de microondas, de robôs industriais a equipamentos para diagnostico de soro sangüíneo. Em muitos casos, a tecnologia de software esta sendo integrada a produtos por equipes técnicas que entendem de hardware, mas que frequentemente são principiantes em desenvolvimento de software. O computador pessoal foi o catalisador do crescimento de muitas empresas de software. Enquanto as empresas de software da segunda era vendiam centenas ou milhares de copias de seus programas, as empresas da terceira era vendem dezenas e ate mesmo centenas de milhares de cópias. O hardware de computador pessoal está se tornando rapidamente um produto primário, enquanto o software oferece a característica capaz de diferenciar. De fato, quando a taxa de crescimento das vendas de computadores pessoais se estabilizou em meados da década de 1980, as vendas de software continuaram a crescer. Na indústria ou em âmbito domestico, muitas pessoas gastaram mais dinheiro cm software do que aquilo que despenderam para comprar o computador no qual o software seria instalado. A quarta era do software de computador esta apenas começando. As tecnologias orientadas a objetos estão rapidamente ocupando o lugar das abordagens mais convencionais para o desenvolvimento de software em muitas áreas de aplicação. Autores tais como Feigenhaum, McCorduck e Allman prevêem que os computadores de "quinta geração", arquiteturas de computação radicalmente diferentes, e seu software correlato exercerão um profundo impacto sobre o equilíbrio do poder político e industrial em todo o mundo. As técnicas de "quarta geração" para o desenvolvimento de software já estão mudando a maneira segundo a qual alguns segmentos da comunidade de software constroem programas de computador. Os sistemas especialistas e o software de inteligência artificial finalmente saíram do laboratório para a aplicação pratica em problemas de amplo espectro do mundo real. O software de rede neural artificial abriu excitantes possibilidades para o reconhecimento de padrões e para capacidades de processamento de informações semelhantes as humanas. Quando nos movimentamos para a quinta era, os problemas associados ao software de computador continuam a se intensificar: • A sofisticação do software ultrapassou nossa capacidade de construir um software que extraia o potencial do hardware. • Nossa capacidade de construir programas não pode acompanhar o ritmo da demanda de novos programas. • Nossa capacidade de manter os programas existentes é ameaçada por projetos ruins e recursos inadequados. Em resposta a esses problemas, estão sendo adotadas práticas de engenharia em toda a indústria. 2. QUALIDADE DE SOFTWARE A qualidade de software é uma área de conhecimento da engenharia de software que objetiva garantir a qualidade do software através da definição e normatização de processos de desenvolvimento. Apesar dos modelos aplicados na garantia da qualidade de software atuar principalmente no processo, o principal objetivo é garantir um produto final que satisfaça às expectativas do cliente, dentro daquilo que foi acordado inicialmente. A qualidade do produto está diretamente relacionada à qualidade do processo de desenvolvimento, desta forma, é comum que a busca por um software de maior qualidade passe necessariamente por uma melhoria no processo de desenvolvimento. Para garantir a qualidade no desenvolvimento de softwares, foram criadas normas padronizadoras. Entre outras, destacamos a ISO/IEC 9126, que tem uma versão brasileira, a NBR 13596. Essa norma foca na qualidade do produto, propondo atributos de qualidade com seis características principais: funcionalidade, confiabilidade, usabilidade, eficiência, manutenibilidade, portabilidade. No Brasil, existe a MPS.BR (Melhoria de Processos de Softwares Brasileiro), baseada no mercado brasileiro e nas normas ISO/IEC 12207 e ISSO/EIC 15504. Recebe subsídios governamentais e é voltado ao mercado de micro e pequenas empresas, devido ao baixo custo frente às normas estrangeiras. 3. PROCESSO DE DESENVOLVIMENTO 3.1. Análise Econômica Visa a estabelecer se o projeto de Software gerará lucro, e se a receita gerada será o suficiente para cobrir os custos. Este processo acompanha todas as demais etapas de desenvolvimento do Software. 3.2. Análise de requisitos de software A extração dos requisitos de um desejado produto de software é a primeira tarefa na sua criação. Embora o cliente, provavelmente, acredite saber o que o software deva fazer, esta tarefa requer habilidade e experiência em engenharia de software para reconhecer a incompletude, ambigüidade ou contradição nos requisitos. 3.3. Especificação A especificação é a tarefa de descrever precisamente o software que será escrito, preferencialmente de uma forma matematicamente rigorosa. Na prática, somente especificações mais bem sucedidas foram escritas para aplicações bem compreendidas e afinadas que já estavam bem desenvolvidas, embora sistemas de software de missão crítica sejam freqüentemente bem especificados antes do desenvolvimento da aplicação. Especificações são mais importantes para interfaces externas que devem permanecer estáveis. 3.4. Arquitetura de Software A arquitetura de um sistema de software remete a uma representação abstrata daquele sistema. Arquitetura é concernente à garantia de que o sistema de software irá ao encontro de requisitos do produto, como também assegurar que futuros requisitos possam ser atendidos. A etapa da arquitetura também direciona as interfaces entre os sistemas de software e outros produtos de software, como também com o hardware básico ou com o sistema operacional. • Não prevê a manutenção; • Não permite a reutilização; 4.2 Modelo V O modelo de desenvolvimento de software em V foi desenvolvido a partir do preceito de que, para que haja melhor eficiência e segurança dos softwares desenvolvidos, deve-se seguir uma série de testes ainda na fase do desenvolvimento, garantindo assim a qualidade do serviço. Este modelo tem como vantagens: os testes são feitos junto do desenvolvimento, diminuindo assim os custos de correção do software; Os primeiros testes são mais longos, porém os testes seguintes são mais rápidos; Os resultados dos testes ajudam a entender qual a origem do problema, e traçar um caminho rápido para a resolução do mesmo; É usado como modelo internacional para desenvolvimento de grandes projetos. Como desvantagens, podemos citar: Mesmo com maior interação e iteração entre as fases, o modelo ainda é inflexível; Demanda muito tempo de produção, e um feedback muito alto entre as fases de produção de software. 5. MÉTODOS ÁGEIS As metodologias ágeis para desenvolvimento de software são uma resposta às chamadas metodologias pesadas ou tradicionais. Mesmo com a evolução dos computadores, das técnicas e ferramentas nos últimos anos, a produção de software confiável, correto e entregue dentro dos prazos e custos estipulados ainda é muito difícil. Mesmo os projetos cuja entrega é feita respeitando os limites de prazo e custos possuem qualidade suspeita, uma vez que provavelmente foram feitos com muita pressão sobre os desenvolvedores, o que pode quadruplicar o número de erros de software, segundo a mesma pesquisa. As principais razões destas falhas estavam relacionadas com o processo em Cascata. A recomendação final foi que o desenvolvimento de software deveria ser baseado em modelos incrementais, o que poderia evitar muitas das falhas reportadas. As maiorias das metodologias ágeis nada possuem de novo. O que as diferencia das metodologias tradicionais são o enfoque e os valores. A ideia das metodologias ágeis é o enfoque nas pessoas e não em processos ou algoritmos. Além disso, existe a preocupação de gastar menos tempo com documentação e mais com a implementação. Uma característica das metodologias ágeis é que elas são adaptativas ao invés de serem preditivas. Com isso, elas se adaptam a novos fatores decorrentes do desenvolvimento do projeto, ao invés de procurar analisar previamente tudo o que pode acontecer no decorrer do desenvolvimento. Dentre os métodos ágeis temos como exemplos: Scrum e a extreme programming (XP). O objetivo da Scrum é fornecer um processo conveniente para projeto e desenvolvimento orientado a objeto. Ela apresenta uma abordagem empírica que aplica algumas ideias da teoria de controle de processos industriais para o desenvolvimento de softwares, reintroduzindo as ideias de flexibilidade, adaptabilidade e produtividade. O foco da metodologia é encontrar uma forma de trabalho dos membros da equipe para produzir o software de forma flexível e em um ambiente em constante mudança. A ideia principal da Scrum é que o desenvolvimento de softwares envolve muitas variáveis técnicas e do ambiente, como requisitos, recursos e tecnologia, que podem mudar durante o processo. Isto torna o processo de desenvolvimento imprevisível e complexo, requerendo flexibilidade para acompanhar as mudanças. O ciclo de vida da Scrum é baseado em três fases principais: Pré- planejamento: os requisitos são descritos em um documento chamado backlog, onde são priorizados e são feitas estimativas de esforço para o desenvolvimento de cada requisito; Desenvolvimento: as muitas variáveis técnicas e do ambiente identificadas previamente são observadas e controladas durante o desenvolvimento, esta tarefa é feita continuamente, o que aumenta a flexibilidade para acompanhar as mudanças; Pós-planejamento: após a fase de desenvolvimento são feitas reuniões para analisar o progresso do projeto e demonstrar o software atual para os clientes. E temos a outra metodologia bastante conhecida e mais utilizada nos métodos ágeis é a extreme programming (XP). O nome foi cunhado por Beck (Beck, 2000) porque a abordagem foi desenvolvida pelo avanço de reconhecida boa pratica, tal como o desenvolvimento iterativo e o envolvimento do cliente em níveis extremos. Na extreme programming, todos os requisitos são expressos como cenários (chamados histórias dos usuários), que são implementados diretamente como uma série de tarefas. Após o desenvolvimento dos cartões de historias, a equipe de desenvolvimento os dividira em tarefas e estimara o esforço e s recursos necessários para implementação, o cliente então prioriza as historias para implementação, escolhendo as que podem ser usadas imediatamente para proporcionar apoio útil ao negocio. Quando os requisitos mudam, as historias que não foram implementadas mudam ou são descartadas e se forem necessárias mudanças em um sistema que já foi entregue, novos cartões de historias são desenvolvidos e, novamente, o cliente decide se essas mudanças devem ter prioridade sobre a nova funcionalidade Os programadores trabalham em pares e desenvolvem testes para cada tarefa antes da escrita do código. Todos os testes devem ser executados com sucesso quando um novo código é integrado ao sistema. O desafio futuro das Metodologias Ágeis é encontrar meios de eliminar alguns de seus pontos fracos, como a falta de análise de riscos, sem torná-las metodologias pesadas. Outro desafio é como usar essas metodologias em grandes empresas e equipes, uma vez que normalmente essas metodologias são baseadas em equipes pequenas. Neste caso, pelo menos é necessário resolver os problemas de comunicação internos na equipe, uma vez que é comum em grandes empresas os funcionários estarem separados geograficamente. Apesar do interesse nas metodologias ágeis, ainda faltam casos de sucesso de seu uso em projetos grandes e críticos. 6. PROTOTIPAÇÃO DE SOFTWARE A prototipação pode ser considerada uma forma de redução de riscos. O seu objetivo é entender os requisitos do usuário, afim de obter uma melhor definição dos requisitos do sistema. Permite que sejam detectadas falhas ou omissões no processo, facilitando a correção de defeitos antes da finalização do projeto. Possibilita, também, o contato do cliente com o produto ainda em desenvolvimento, permitindo que necessidades de ajustes sejam detectadas e implementadas. Existem dois tipos principais de prototipação: Prototipação descartável: O objetivo da prototipação descartável é validar ou derivar os requisitos do sistema. O processo começa com aqueles requisitos que não são bem descrevem a estrutura de dados, arquitetura de software, algoritmo e características de interface. Pode-se dizer que é onde o “esqueleto” do programa, estabelecido pelos requisitos, começa a ser montado. Construção de Software: Área da engenharia de software que escreve efetivamente o código do programa. É aqui onde todos os dados coletados pelos requisitos e as informações fornecidas pelos analistas e projetistas tomam a forma efetiva do programa. Teste de Software: Depois que o programa é construído e compilado para uma forma executável, são feitos extensivos testes para definir possíveis problemas de interpretação, código-fonte ou implementação. Depois de realizados os testes, o programa é liberado para uso. Manutenção de Software: Área que trabalha com o programa depois que ele é liberado, fazendo correções, adaptações ou melhoramentos no programa. A manutenção de correção ocorre quando o usuário encontra problemas ou erros, então o desenvolvedor muda o software para corrigir defeitos. Quando o ambiente para o qual foi escrito o programa (CPU, S.O., periféricos) muda, tem-se que fazer adaptações no software para que este possa funcionar normalmente. O melhoramento funcional são funções adicionais implementadas no software para facilitar a interação com o usuário. Qualidade de Software: Área de forte impacto no produto final de todo o processo. Os engenheiros de software que trabalham na área de qualidade são responsáveis por definir normas e modelos a serem aplicados na construção do software, para que este fique o mais fiel possível ao pedido do cliente, acordado entre este e a empresa. Gerência de Configuração de Software: Os profissionais responsáveis pela gerência de configuração trabalham com as melhorias ou versões posteriores realizadas no software, controlando as mesmas para que sejam liberadas com qualidade e que não afetem o sistema ou a estabilidade do programa. Gerenciamento de Engenharia de Software: O gerente de engenharia de software é o profissional responsável por gerir todo o processo de engenharia de software, acompanhando o desenvolvimento e garantindo a sistematização dos processos e dos outros profissionais envolvidos. É ele quem gerencia todos os profissionais do processo de construção de software. Processos de Engenharia de Software: Essa é a área do líder do projeto. É onde ele estabelece “quem faz o quê, quando e como”. Em outras palavras, é o profissional acima do gerente de engenharia de software, que define as áreas dos profissionais os quais o gerente vai organizar e supervisionar. 9. MERCADO DE TRABALHO Como já dito anteriormente, a engenharia de software estabeleceu-se como área separada das outras na década de 70, então a profissão é relativamente nova. Porém, o fato de ser uma profissão nova não reflete no mercado de trabalho, que está ávido por novas contratações. Segundo o jornal The New York Times, a engenharia de software é uma das melhores profissões de 2010, sendo a segunda colocada. Com o mercado de trabalho aquecido, surgem oportunidades para todos, autônomos ou empregados de multinacionais. Como o profissional com qualificação é difícil de ser encontrado, e o mercado está em constante cresimento, os salários iniciais alcançam valores significativos, estando na média de R$ 2.500,00 a R$ 3.000,00, com carga horária de 6 horas diárias, podendo variar conforme a necessidade da empresa ou o local ao qual esse profissional será alocado. 10. REFERENCIAL BIBLIOGRÁFICO Ambiente de desenvolvimento integrado disponível em http://pt.wikipedia.org/wiki/ Ambiente_de_Desenvolvimento_Integrado, acesso em 25 de novembro de 2011; Boaventura, Inês A. G. - Disponível em http://www.dcce.ibilce.unesp.br/~ines/cursos/ extensao/aula1.ppt, acesso em 22 de novembro de 2011; Ciclo de vida de Software disponível em: http://webx.sefaz.al.gov.br/posEngSoft/ documentos/qos1/Pos_Maceio_Parte2_CicloVida.pdf, acesso em 20 de novembro de 2011; Engenharia de Software – Disponível em http://pt.wikipedia.org/wiki/ Engenharia_de_Software, acesso em 24 de novembro de 2011; Melhorias de Processo de Software disponível em http://pt.wikipedia.org/wiki/MP S.BR, acesso em 22 de novembro de 2011; Modelo Cascata disponível em: http://pt.wikipedia.org/wiki/Modelos_ciclo_de_vida, acesso em 25 de novembro 2011; http://modelocascata.blogspot.com/, acesso em 25 de novembro de 2011; PFLEEGER, S.L. – Engenharia de Software Teoria e Prática, Prentice Hall,2004; Processo de Desenvolvimento de Software disponível em: http://pt.wikipedia.org/wiki/ Processo_de_desenvolvimento_de_software, acessado em 23 de novembro de 2011; Prototipação de Software disponível em http://www.dcce.ibilce.unesp.br/~ines/ cursos/eng_soft/aula07.pdf, acessado em 20 de novembro de 2011; http://www.webartigos.com/artigos/prototipacao-de-software/1896, acessado em 20 de novembro de 2011; Qualidade de software disponível em: http://pt.wikipedia.org/wiki/ Qualidade_de_software, acessado em 22 de novembro de 2011; SOARES, Marcelo, artigo, “Metodologias Ágeis Extreme Programming e Scrum para o Desenvolvimento de Software”. Sommerville, Ian - Engenharia de Software - 8ª Edição 2007.
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved