Baixe o app para aproveitar ainda mais
Prévia do material em texto
INTRODUÇÃO À ENGENHARIA DE SOFTWARE ©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília Apresentação Olá, seja muito bem-vindo(a)! Os processos de desenvolvimento de software estão cada vez mais sofisticados, dentro das boas práticas de tecnologia da informação e comunicação e parte disso é resultado da engenharia de software. O termo engenharia de software se tornou comum nos diferentes constructos acadêmicos e profissionais da área de tecnologia de forma mais ampla. Você já teve curiosidade em compreender o que é engenharia de software e como ela surgiu? É nessa perspectiva que conduzimos a Unidade 1. Há de se compreender, portanto, qual a origem e o histórico da engenharia de software, bem como seus princípios e diferentes áreas de conhecimento envolvidas nas etapas de desenvolvimento de software. Esta Unidade está organizada em quatro seções que abordam, na sequência, os seguintes conteúdos: Histórico. Conceitos e importância. Princípio de desenvolvimento de software. Áreas de conhecimento. Bons estudos! Objetivos Conhecer o histórico da engenharia de software. Compreender o conceito e a importância da engenharia de software. Relacionar os princípios de desenvolvimento de software. Conhecer as áreas de conhecimento correlatas às diferentes etapas de desenvolvimento de software. ©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília Desafio Vamos visitar o Portal da IEEE Computer Society? Acessando o Portal da IEEE Computer Society você vai poder navegar e ter acesso a diferentes tipos de conteúdos da área de tecnologia da informação e comunicação, nos âmbitos profissionais, educativos e de pesquisa e desenvolvimento. Nesse espaço, você também pode fazer o download da versão mais atual do Guide to the Software Engineering Body of Knowledge (SWEBOK Guide). Fonte: Computer.org, 2020. O procedimento para download do SWEBOK é muito simples. Você precisa apenas fazer um rápido registro, informando seu nome, propósito de uso do SWEBOK e o e-mail para o qual deverá ser encaminhado o acesso ao arquivo .pdf do SWEBOK. https://www.computer.org/education/bodies-of-knowledge/software-engineering ©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília Conteúdo Histórico A engenharia de software surgiu no contexto da crise do software, como uma alternativa de estruturar diferentes técnicas e metodologias para o desenvolvimento de softwares. A crise do software aconteceu nos anos de 1970, decorrente dos problemas enfrentados nas atividades de desenvolvimento de software em função da falta de padronização, processos bem definidos, metodologias e documentação, essenciais para o ciclo de vida de qualquer software. Ainda nos anos de 1970, com a tecnologia em geral se constituindo e se tornando cada vez mais comercial, os sistemas começaram a ter estruturas mais complexas e, em paralelo, se tornaram também mais complexos os problemas decorrentes da falta de documentação, de técnicas, de teste e de rastreabilidade. A expressão crise do software foi utilizada pela Association for Computing Machinery (1972), que foi a primeira associação dedicada à educação e ciência em tecnologia. Como parâmetros para o estabelecimento da expressão crise do software, a Association for Computing Machinery elencou (no âmbito de desenvolvimento de software): o não cumprimento dos prazos; os orçamentos realizados que ultrapassavam os orçamentos previstos; requisitos de software ausentes ou em não conformidade; códigos confusos e de difícil manutenção; e consequente baixa qualidade de software. Os recorrentes problemas apresentados pelos sistemas de baixa qualidade fizeram emergir a necessidade do estabelecimento de métodos e técnicas que trouxesse economia e efetividade para o processo de desenvolvimento de software com uso de ferramentas específicas e também com a previsão de treinamento para todos os atores envolvidos nas diferentes etapas do ciclo de vida de software. O ciclo de vida do software, nesse contexto, refere-se à reunião dos processos, atividades e tarefas envolvidas nas etapas de desenvolvimento, uso e manutenção de diferentes tipos de software, desde a concepção da ideia de sua criação até o término de seu uso. De forma sumária, as atividades fundamentais para o desenvolvimento de software são: análise e definição de requisitos; prototipagem; codificação; testagem; e integração. Essas atividades podem conter variações, incrementos ou adequações, dependendo do modelo utilizado para o desenvolvimento de sistemas. Figura 1 - Atividades Fundamentais da Engenharia de Software Fonte: Elaborado pelo autor, 2020. Para Mafra e Travassos (2006), considerando os problemas ocasionados pela imaturidade nos processos de desenvolvimento de software, há de se posicionar algumas questões para evitá-los (os problemas), tais como: 1. Em qual tecnologia investir, visto que existem várias possibilidades tecnológicas e cada uma delas tem suas potencialidades e prometem aprimorar a produtividade e a qualidade no desenvolvimento de software? 2. Como metrificar o custo, o tempo e o esforço nos processos de desenvolvimento de software? 3. Como aferir o retorno sobre o investimento? 4. Como avaliar as melhores circunstâncias para a recomendação e adoção de diferentes tecnologias? Em uma visão global do histórico da engenharia de software, há quatro eixos que podem ser considerados: (i) a necessidade de profissionalização da área; (ii) o papel das mulheres no contexto da tecnologia da informação e comunicação; (iii) a estrutura processual; e (iv) os custos tanto de software, mas também dos hardwares envolvidos. A necessidade de profissionalização da área de tecnologia da informação, assim como a sua classificação como uma área de conhecimento, fez com que os processos de desenvolvimento de software fossem repensados. Da mesma forma, os papéis e responsabilidades dos envolvidos nas etapas de construção de software também precisavam ter suas funções e atribuições definidas de modo a aprimorar o sistema de informações em fábrica de software. As mulheres tiveram papel de destaque na implementação das estruturas de comunicação e informação informatizadas. Mulheres como Grace Hopper e Margaret Hamilton contribuíram sobremaneira para o desenvolvimento das tecnologias que dariam base para o contexto tecnológico atual. Grace Hopper, por exemplo, foi responsável pelo desenvolvimento dos primeiros compiladores e também da ideia de linguagens de programação independentes, e essa foi a gênese para a implementação do COBOL. Ela foi cientista da computação e almirante da Marinha dos Estados Unidos da América. Por outro lado, Margaret Heafield Hamilton, engenheira do laboratório de instrumentalização de software do Massachusetts Institute of Technology (MIT). Mesmo tendo nomes de expressão no histórico da engenharia de software e suas influências nas tecnologias modernas, as profissões relacionadas à tecnologia da informação e comunicação foram consideradas, por muito tempo, como predominantemente masculinas. Entretanto, este cenário mudou e as mulheres estão cada vez mais presentes no contexto das novas tecnologias da informação e comunicação, bem como no universo das startups. Para Sousa e Melo (2009, p.3), as estatísticas sobre a inserção da mulher nas esferas organizacionais refletem, como um fato já consolidado, o aumento da participação feminina no mercado de trabalho brasileiro. As autoras apontam ainda que o acesso mais amplo e mais frequente a cargos de liderança e comando também é sinal da efetividade dessa mudança social. A crescente participação da mulher no mercado de trabalho imprime novos contornos às relações de gênero e de poder nas empresas. Esse fenômeno sinaliza movimentos e processos de instalação do empoderamento da mulher. Associa-se ao alcance de bem-estar e de reconhecimento das relações sociais, representando um desafioàs relações patriarcais e à manutenção dos privilégios do gênero masculino. Consiste na tomada de consciência pela mulher de sua habilidade e competência para produzir, criar, gerir e transformar sua própria vida e seu entorno, tornando-se protagonista de sua história (SOUSA; MELO, 2009, p.1). No eixo da estrutura processual, o estabelecimento de fluxos, processos, atividades e tarefas tornou-se essencial para o desenvolvimento de qualquer tipo de sistemas de informação. Por outro lado, demanda um trabalho analítico robusto para que o fluxo informacional tenha suas entradas e saídas em conformidade às funcionalidades previstas para os sistemas. Processo, neste contexto, é o termo designado para a divisão do trabalho de desenvolvimento de software em fases (em nível macro); e também é o termo utilizado para definir estruturas codificadas (em nível micro). Sobre o eixo dos custos de software e hardware histórico dos processos de desenvolvimento de projetos das organizações é muito importante para definir orçamentos de manutenção de software. Se for possível medir o tamanho da nova funcionalidade que será agregada ao sistema fica mais fácil definir o valor que a manutenção representará para a empresa. Assim, os custos para a empresa podem aumentar ou diminuir de acordo com as novas funcionalidades medidas. Se a quantidade de nova funcionalidade for determinada e adicionada ao produto básico, o custo unitário de manutenção pode de fato cair, enquanto o gasto real permanece constante ou aumenta. Sobre a proporcionalidade dos custos de manutenção, caso estes crescem e, ao mesmo tempo, a taxa de crescimento dos pontos de função for maior, significa que as taxas de manutenção estão em decréscimo. A engenharia de software tem acompanhado o aprimoramento das tecnologias da informação e comunicação e, em sua linha do tempo, assumiu diferentes características, desde as mais clássicas até as mais contemporâneas. Figura 2 – Linha do Tempo Fonte: Elaborado pelo autor, 2020. O infográfico da linha do tempo do histórico da engenharia de software apresenta 05 (cinco) marcos principais. É claro que existem outros acontecimentos relevantes, mas esses são os principais para o nosso contexto de desenvolvimento de software. O termo engenharia de software foi definido entre 1945 e 1965, mas foi a partir deste período que se estabeleceu, sobretudo, em função da crise do software como já apontamos. De 1985 até 1989, a importância dos projetos e programas de software emergiu, metodologias mais definidas e geração de documentações robustas, processuais e detalhadas. A Internet e, consequentemente, os sistemas baseados em Internet se tornam mais massivos entre 1990 e 1999. Nos anos 2000, surgem as metodologias leves, ou metodologias ágeis, com menor ênfase em documentação e maior ênfase em produtividade. Conceitos Antes de definirmos o que é engenharia de software, vamos relembrar o que é software? Software é o conjunto de blocos e componentes lógicos que processam dados por meio de sistemas e computadores. Trata-se de um conjunto de instruções (rotinas) que controlam o funcionamento de computadores e também as funcionalidades dos sistemas. Ou seja, de forma sumária, software é a parte lógica do computador, incluindo, basicamente, os sistemas operacionais e os demais programas ou sistemas neles envolvidos. E o que seria engenharia? Engenharia pode ser definida como uma área que reúne regras, métodos, técnicas e ferramentas para a construção de algo, por meio do conhecimento científico, técnico ou empírico. Considerados os conceitos de software e engenharia, podemos chegar a uma definição inicial sobre engenharia de software, como sendo o conjunto de métodos, técnicas e ferramentas utilizadas para o desenvolvimento de softwares. Estes métodos permitem o desenvolvimento, a gestão, a arquitetura e os testes de diferentes tipos de software. Para Pressman (2006), a definição mais abrangente para a engenharia de software é como a aplicação de uma abordagem sistemática, disciplinada e quantificável, com vistas ao desenvolvimento, operação e manutenção do software, ou seja, aplicação da engenharia de software. Bauer (1972) definiu a engenharia de software como o estabelecimento e uso de sólidos princípios de engenharia para que se possa obter um software economicamente viável, que seja confiável e que funcione eficientemente em máquinas reais. Ou seja, para superar os problemas da crise do software, utiliza-se a abordagem da engenharia ao desenvolvimento de software, aliando processos de melhoria contínua, metodologias e técnicas e ferramentas para ampliar a produtividade da equipe de desenvolvimento e consequente qualidade do software (PRESSMAN , 2006). Segundo Savi, Wangenheim e Borgatto (2011), a engenharia de software é a aplicação de abordagens sistemáticas, disciplinadas e quantificadas ao desenvolvimento, operação e manutenção de software. Ainda segundo os autores, o profissional que atua na área de engenharia de software precisa entender e saber aplicar teorias, modelos e técnicas correntes para sistematicamente analisar e desenvolver artefatos de software com qualidade. Precisa ter conhecimentos sobre gerenciamento de projetos e ser capaz de conciliar objetivos de projeto conflitantes e considerar questões organizacionais. Também precisa ter habilidades de trabalho em equipe, liderança, negociação e resolução de conflitos. Figura 3 – Eixos Principais Fonte: Elaborado pelo autor, 2020. Trazendo a engenharia de software para o contexto da programação de computadores, podemos definir três eixos: (i) teoria; (ii) abstração; e (iii) design. Transversal a estes eixos, está a estrutura de dados, que é a unidade temática das áreas de tecnologia da informação e comunicação responsável pelo estudo dos diversos mecanismos de organização de dados para garantir o íntegro processamento do fluxo informacional. O eixo teoria traz as definições, os axiomas, as provas e as interpretações para o desenvolvimento de software. O eixo abstração define modelos, minimundos, modelos para desenhar soluções, simplificações e compreensões de sistemas complexos. Por fim, o eixo design apresenta os requisitos, as especificações de sistemas, modelagem e design e processos de teste de software. Qual seria, portanto, a diferença entre programas e softwares? O termo programa está mais relacionado à informática, como sendo um conjunto de códigos, rotinas e instruções que descrevem e executam comandos a serem realizados por um computador. Trata-se de um conjunto de código fonte compilado, sequenciados em linguagem de programação específica e com forma executável. Figura 4 – Características fundamentais da Engenharia de Software Fonte: Elaborado pelo autor, 2020. O termo software está mais presente no contexto da tecnologia da informação e comunicação e se diferencia dos programas porque, mesmo sendo um conjunto de código fonte compilado e executável, contém manuais com procedimentos operacionais, além de documentação sobre sua concepção, estrutura, funcionalidade, modelos de dados e documentação que garante sua escalabilidade e manutenção. O software não é o mesmo o tempo todo. Isso quer dizer que existem variáveis externas e mudanças tecnológicas que influenciam na sua continuidade e na sua adaptabilidade. Princípios de Desenvolvimento de Software Para a constituição das etapas de desenvolvimento de software no âmbito da engenharia de software, foram estabelecidos princípios para os relacionamentos, metodologias, tecnologias e ferramentas a serem alocadas para o desenvolvimento de produtos e serviços de tecnologia da informação e comunicação. Ou seja, desde a concepção da ideia do software, passando pelas etapas de desenvolvimento, até sua entrega e utilização, são cadenciadas várias etapas que demandam, inclusive, perspectivas multidisciplinares. Lembre-se do conceito de engenharia de software apresentado na seção anterior. Apenas para relembrarmos, apresentamos também o conceito do Institute of Electrical and ElectronicsEngineers (IEEE) sobre engenharia de software, que a resume como a aplicação prática e planejada da engenharia ao software, por meio de abordagens metodológicas sistematizadas, disciplinada e metrificada ao seu desenvolvimento, operação e manutenção (MOREIRA , 2012). Figura 5 - IEEE Fonte: IEEE, 2020. O IEEE contém vários capítulos distribuídos em diferentes países, incluindo o Brasil e se define como a maior organização do mundo de profissionais da área tecnológica dedicados ao avanço da tecnologia em benefício da humanidade, com vistas à diversidade, equidade e inclusão, usando a tecnologia para a redução das diferenças e da discriminação. A base da engenharia de software estabelecida em metodologias clássicas e ágeis, com ferramentas e profissionais especializados premissas-chaves que apoiam o processo de desenvolvimento de software como um todo. Aqui, podemos relacionar oito premissas: 1. Formalidade. 2. Ausência de conflitos de interesse. 3. Modularização. 4. Abstração. 5. Mudanças preditivas. 6. Requisitos. 7. Generalidade. 8. Incremento. Por outro lado, Hooker (1999) já aspirava alguns princípios para a engenharia de software. À ocasião, ele levantou sete princípios e os considerou como gerais porque percebeu que poderiam ser adotados em todas as camadas da engenharia de software, individualmente, ou no conjunto de camadas como um todo. Hooker (1999) elencou os sete princípios como: Figura 6 – Princípios da Engenharia de Software http://https/www.ieee.org/ Fonte: Hooker, 1999. (Adaptado) Observe que Hooker (1999) traz os princípios no imperativo, mas sua relação é mais prospectiva no sentido de se ter, como engenheiro de software, uma visão ampla com enfoque nos desejos do cliente, nas tecnologias emergentes e na adaptabilidade dos sistemas de informação. Tratando especificamente cada princípio, temos que: 1. A razão pela qual tudo existe (the reason it all exists): o software a ser desenvolvido tem que ter um propósito específico para o cliente. Ou seja, o cliente é o detentor de todos os requisitos funcionais e não funcionais e cabe a ele tal definição. Para a engenharia de software cabe a análise de aplicabilidade técnica e a transposição disso tudo ao contexto das tecnologias da informação e comunicação, avaliando também sobre o que realmente é necessário ao negócio do cliente como um todo, sobre o que é supérfluo e sobre o que realmente agrega valor ao sistema de informações, seguindo as regras de negócio estabelecidas pelo cliente. Assim, é importante que o engenheiro de software leve o seu cliente a se questionar sobre a relevância das funcionalidades que pede implementação. Caso exista dúvida, ou a resposta seja de que não é relevante, é melhor não implementar e dedicar os esforços de desenvolvimento para os requisitos essenciais. Justifique esse valor, pois esse é o princípio base para todos os demais. 2. Mantenha as coisas simples (keep it simple): Hooker (1999) considera a importância de se manter a simplicidade dos processos sem inibir sua complexidade. Você sabe de onde veio a frase “menos é mais”? Ludwig Mies van der Rohe foi um renomado arquiteto alemão, nacionalizado norte-americano, que trouxe sofisticação aos traços da arquitetura com adoção de traços geométricos claros, limpos, simples e sofisticados. Ele trouxe frases famosas como “less is more” (menos é mais) para referir-se à questão de que a beleza está nas coisas simples; e “God is in the details” (Deus está nos detalhes), para dizer que, não é preciso exagerar nas obras, pois basta o necessário (SCHULZE , 1985). Esse preâmbulo é importante para que tenhamos em mente que, os melhores sistemas de informação são aqueles que entregam exatamente o que o cliente quer, sem burocracia, de forma integrada e correspondente ao parque tecnológico de sua organização. 3. Mantenha o estilo/visão (maintain the vision): o software deve seguir a identidade conceitual de seu requisitante, seja uma pessoa física ou uma pessoa jurídica. Deve-se primar também pela compatibilidade de seus recursos aos recursos já existentes nos demais serviços de tecnologia da informação e comunicação da empresa. É preciso, portanto, manter a arquitetura da informação coerente. Essa arquitetura de software que traz um sistema intensivo é também descrita pelo IEEE, assim como há padronização pela ISO/IEC 42010:2007, o qual traz normas e padronizações para Sistemas e Engenharia de Software - Prática recomendada para descrição de arquitetura de sistemas intensivos de software (ISO/IEC/IEEE 42010:2011). 4. O que você produz, outros consumirão (what you produce, others will consume): ao se desenvolver um determinado software, é preciso ter em mente que outras pessoas o utilizarão e que isto se dará ao longo de um período, ou seja, dentro do ciclo de vida do software. Então, deve-se primar por códigos limpos, reutilizáveis, de fácil manutenção, atualização e escalabilidade. Pense em “escrever códigos” dentro de diferentes “linguagens” de programação. Ou seja, como uma escrita de um romance, uma obra literária, a escrita de códigos também precisa ter lógica, coerência e clareza. Em todos os casos, é necessário pensar em documentação. 5. Esteja aberto para o futuro (be open to the future): a tecnologia não para de avançar. Então, todo desenvolvimento de software deve contemplar possibilidades de portabilidade e de escalabilidade, bem como condições arquitetônicas de integração, modulação e reuso. Por outro lado, conforme Santos e Carvalho (2009, p.46), “com a acelerada mudança causada pelas tecnologias da informação e comunicação (TICs), vários países do mundo passam a estruturar normas para amenizar as desigualdades que as TICs podem causar.” Observe que isso vale para todos os constructos sociais. Um exemplo disso é o programa sociedade da informação: O Programa Sociedade da Informação tem por objetivo indicar rumos para os diversos setores da sociedade, a fim de enfocar melhor diferentes iniciativas que conjuntamente contribuam para impactos positivos das tecnologias de informação e comunicação [...] bem como encurtar os atrasos aos países centrais (TAKAHASHI , 2000, p.27). 6. Planeje com antecedência, com vistas ao reuso (plan ahead for reuse): O planejamento dos sistemas de informação é essencial. É preciso rascunhar, desenhar, modelar os sistemas de informação. Quanto maior for o tempo em planejamento, menor será o esforço. A visão sistêmica sobre o produto de software leva à compreensão de suas potencialidades e possibilidades de reuso, integração. Assim, dentro de uma perspectiva preditiva, os(as) profissionais em engenharia de software devem analisar custos, esforços, módulos, possibilidades e capacidades que o software possa vir a ter. Isso contribui sobremaneira para que os clientes possam prospectar avanços e melhorias tecnológicas, outras possibilidades integrativas, avaliar o retorno sobre o investimento, bem como sobre qual será o legado de sua tecnologia para sua instituição. 7. Pense (think): parece óbvio, mas este sétimo princípio é um dos mais importantes. Analisar, refletir, experienciar, fazer testes, são ações que trazem recompensas para os processos de desenvolvimento de software. Essas recompensas podem ser figuradas como possibilidades de uso das tecnologias mais apropriadas e também com tecnologias emergentes. Modelagem bem pensada resulta em sistemas complexos e eficientes, orientados à modularização, ao reuso, à integração e a um ciclo de vida estável. Áreas de Conhecimento A engenharia de software reúne diferentes áreas que são cadenciadas de forma interdisciplinar, envolvendo diversas especialidades da área de tecnologia da informação e comunicação. Você conhece o SWEBOK? O Guide to the Software Engineering Body of Knowledge (SWEBOK) é um guia que descreve um corpo de conhecimento sobre engenharia de software, elencando 15 áreas de conhecimento (knowledge areas (KAs)), resumindo conceitos básicos relacionados às etapas de desenvolvimento de software (BOURQUE; FAIRLEY, 2014). O SWEBOK é mantidopor uma comunidade de tecnologia da informação e comunicação e regulado pela IEEE Computer Society (BOURQUE; FAIRLEY, 2014). O SWEBOK está em sua versão 3.0 SWEBOK Guide. Esse guia também tem reconhecimento internacional pela ISO Technical Report 19759. O SWEBOK traz novas ferramentas, métodos, tipos de software e boas práticas para o desenvolvimento de software, desde a concepção da ideia de software até sua ambientação in loco, considerando processos de métricas, estatísticas, volume entre outros elementos inerentes ao planejamento de software. A Figura a seguir, por exemplo, é uma adaptação do processo de definição inicial de objetivos, tal qual representado pelo SWEBOK (BOURQUE; FAIRLEY , 2014). Figura 7 - Processo de Definição Inicial de Objetivos Fonte: SWEBOK, 2014. (Adaptada) A Figura anterior mostra a relação entre objetivos, estimativas e planejamento. Os objetivos de software relacionam fatores externos à organização. Ou seja, trazem as necessidades e regras de negócio, os requisitos funcionais e não funcionais definidos pelos clientes e validados de forma colaborativa e também as expectativas de orçamento. As estimativas de software relacionam fatores internos à organização, a qual tem que avaliar suas capacidades e limitações e metrificar o esforço e a duração para o desenvolvimento de software. O planejamento deve ser obrigatório tanto para clientes quanto para desenvolvedores. No caso dos desenvolvedores de software, é preciso dividir os objetivos, de forma especificada, em atividades e marcos (milestones) de modo a facilitar a previsibilidade e a construção modular. A abordagem ganha-ganha significa que, nos aspectos iniciais da negociação, é importante que todos tenham vantagens (tanto clientes, quanto organizações de desenvolvimento de software). Isso gera parceria e fidelização. As 15 áreas de conhecimento (KAs) do SWEBOK (BOURQUE; FAIRLEY, 2014) são classificadas de forma hierárquica correlacionando as etapas de desenvolvimento de software, como uma alternativa para profissionalizar os processos de desenvolvimento de software, mas também para delimitar as áreas, que podem ser denominadas de disciplinas. 1. Requisitos de software. 2. Desenho de software. 3. Construção de software. 4. Testes de software. 5. Manutenção de software. 6. Gestão de configuração de software. 7. Gestão de engenharia de software. 8. Processos de engenharia de software. 9. Ferramentas e métodos. 10. Qualidade de software. 11. Prática profissional de engenharia de software. 12. Economia na engenharia de software. 13. Fundamentos de computação. 14. Fundamentos de matemática. 15. Fundamentos de engenharia. Fundamentalmente, as dez primeiras áreas de conhecimento referem-se às etapas de linha de produção de software: (1) requisitos, (2) projeto, (3) construção, (4) testes, (5) manutenção, (6) configuração, (7) gerenciamento, (8) processo, (9) ferramentas e métodos, (10) qualidade. De forma geral, o objetivo é a promoção de uma visão holística da engenharia de software (BOURQUE; FAIRLEY, 2014). 1. Requisitos de software: ao levantar os requisitos de software e requisitos de sistemas, é preciso defini-los em funcionais ou não funcionais, com base em técnicas apropriadas, elencando processos e propriedades emergentes. Sobre os processos, são definidos os modelos atores, processos de gestão, suporte, qualidade e melhorias. A análise de requisitos é feita considerando a perspectiva conceitual e a perspectiva arquitetônica do software. Os requisitos são prototipados e validados com a apresentação de documentação completa. 2. Desenho de software: os fundamentos de desenho de software trazem o conceito e o contexto do software, considerando elementos gráficos, de interface com usuário, acessibilidade e qualidade, ergonomia e esquemas de interação, localização e internacionalização. Esta área de conhecimento também contempla famílias de programas e Frameworks, além das definições de padrões e estilos arquitetônicos. Questões de concorrência, controle de eventos e persistência de dados também são desenvolvidas nesta área de conhecimento. 3. Construção de software: nesta área de conhecimento, são definidas e também construídas tecnologias, com base em planejamento e métricas, visando a redução de complexidade, antecipação de mudanças e construção de códigos verificáveis, padronizados e reutilizáveis. O desenvolvimento de APIs, parametrização, exceções, tolerância a falhas, middleware também são realizados na área de conhecimento construção de software. Há outros elementos, como ajuste fino e análise de performance, ambientes de desenvolvimento e ferramentas de teste unitário e para construção de GUI. 4. Teste de software: a área de conhecimento de teste de software traz as questões- chaves, critérios avaliativos e terminologias relacionadas aos processos de testagem com princípios e técnicas bem definidas. Os testes são realizados conforme os níveis, alvos e objetivos definidos pela equipe de desenvolvimento de software. Para a realização dos testes de software são definidas técnicas específicas que podem ser baseadas em código, falhas, uso, modelos, entre outras. 5. Manutenção de software: para que os processos de manutenção de software sem efetivos, é preciso que se estabeleçam técnicas de compreensão de programa, reengenharia, engenharia reversa, migração e avaliação de descontinuidade. 6. Gestão de configuração de software: a gestão de conhecimento de software é realizada por meio de planejamento com base em contextos organizacionais, definição de premissas e restrições e a elaboração de um planejamento específico que preveja requisição, avaliação e aprovação de serviços de mudança. Em paralelo, são definidos processos de auditoria de software, tanto sob perspectiva funcional quanto física. 7. de engenharia de software: a iniciação e a definição do escopo de software são itens geridos por esta área de conhecimento que determina e negocia todos os requisitos, características e outros processos de software. Nesse contexto, são avaliados os riscos, a qualidade, os recursos alocados e os esforços envolvidos para o desenvolvimento de software. Os riscos precisam ser classificados conforme sua complexidade. Por outro lado, há de se definir o plano de implementação que preveja critérios de aquisição, contratação e fornecimento, incluindo avaliação de terceira parte. 8. Processo de engenharia de software: a gestão e infraestrutura de processos de software definem ciclo de vida de software, relacionando categorias, modelos e métodos, com vistas à qualidade do sistema de informações. 9. Métodos e modelos de engenharia de software: os princípios da engenharia de software compõem a modelagem de software, sejam comportamental ou estrutural, como um todo, envolvendo elementos de sintaxe, com condições, pré e pós condições, análise semântica e pragmática, relacionando sistemas completos, corretos e rastreáveis. 10. Qualidade de software: conceituar o que é qualidade não é uma tarefa tão simples porque varia muito dependendo da área. Então, para área de tecnologia da informação e comunicação, a qualidade pode ser metrificada por alguns pontos, tais como custo, tempo de entrega, escopo, segurança, padrões de cultura e ética. A verificação da qualidade deve ser feita com técnicas que contenham critérios claros e objetivos. Finalizando a Unidade Esperamos que você tenha apreendido, após a leitura desta Unidade, os aspectos introdutórios relacionados à engenharia de software, no contexto da tecnologia da informação, bem como os princípios envolvidos nas áreas e etapas de desenvolvimento de softwares especialistas e generalistas. Especificamente, você teve a oportunidade de navegar em conteúdos relacionados ao histórico da engenharia de software, relacionando sua importância, princípios e diferentes áreas de conhecimento envolvidas nas etapas de desenvolvimento de software. ©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília Dica do Professor Para saber um pouco mais sobre os aspectos introdutórios e outras curiosidades relacionadas à engenharia de software, recomendamos a leitura do relatório técnico de Lima et al. (2014), publicado em 2014, que traz possíveis ameaças à validade de experimentos que envolvam prática ágil em metodologia de pair programming (programação em pares). Você pode acessar essa obra buscando a seguinte referência nas bases científico- acadêmicas: LIMA, Vagner Carlos Marcolino; NETO, Adolfo Gustavo Serra Seca; EMER, Maria Claudia Figueiredo Pereira. INVESTIGAÇÃO EXPERIMENTAL E PRÁTICAS ÁGEIS: AMEAÇAS À VALIDADE DE EXPERIMENTOS ENVOLVENDO A PRÁTICA ÁGIL PROGRAMAÇÃO EM PAR. Revista Eletrônica De Sistemas de Informação, v. 13, n. 1, p. 1, 2014. ©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília Saiba Mais Você sabia que a carreira do(a) engenheiro(a) de software é regulada por um conselho profissional? É isso mesmo. O registro profissional habilita o(a) profissional para o pleno exercício da sua função, de forma regulamentada, com funções, atribuições, responsabilidades, direitos e garantias muito bem definidas. As profissões relacionadas às diferentes áreas de tecnologia da informação e comunicação são consideradas profissões do futuro pelo seu potencial transformador, inclusivo e direcionado às diferentes necessidades das pessoas, sobretudo com o desenvolvimento de inteligência artificial. Nesse contexto, o Brasil figura a primeira posição da América Latina e está dentro dos dez países do mundo em mercado de softwares. Voltando ao contexto da formação em engenharia de software, desde 2018, a profissão passou a ser regulamentada com registro junto ao Conselho Regional de Engenharia e Agronomia (CREA), o qual demanda habilidades e competências essenciais para a atuação na área. Assista ao vídeo “O que um Engenheiro de Software faz? ”, do canal Código Fonte TV. O vídeo tem aproximadamente 8 minutos e traz interessantes reflexões sobre a profissão. https://www.youtube.com/watch?v=wdU9L3DqU2w http://savefrom.net/?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DwdU9L3DqU2w&utm_source=chrome&utm_medium=extensions&utm_campaign=link_modifier ©2018 Copyright ©Católica EAD. Ensino a distância (EAD) com a qualidade da Universidade Católica de Brasília Referências BAUER, F. L. Software Engineering - Information Processing. Amsterdam: North Holland Publishing, 1972. BOURQUE, Pierre; FAIRLEY, Richard E. Guide to the Software Engineering Body of Knowledge (SWEBOK). Versão 3.0. IEEE Computer Society, 2014. SCHULZE, Franz. Mies van der Rohe, a Critical Biography. The University of Chicago Press, Chicago and London, 1985 HOOKER, David. A logging routine for Windows NT events. C/C++ Users Journal, v. 17, n. 7, p. 65-68, 1999. ISO/IEC/IEEE 42010:2011. Systems and software engineering - Architecture description. International Organization for Standardization. 2011. MAFRA, Sômulo Nogueira; TRAVASSOS, Guilherme Horta. Estudos Primários e Secundários apoiando a busca por Evidência em Engenharia de Software. Relatório Técnico, RT-ES, v. 687, n. 06, 2006. MOREIRA, J. R. Análise de Pontos de Função em GTI. Engenharia de Software Magazine. DEVMEDIA. Ed. 49. 2012. PRESSMAN, ROGER S. Engenharia de Software. (6ª edição), São Paulo, Ed. McGrawHill, 2006. SANTOS, Plácida Leopoldina Ventura Amorim da et al. Sociedade da informação: avanços e retrocessos no acesso e no uso da informação. Informação & Sociedade: Estudos, p. 45-55, 2009. SAVI, Rafael; WANGENHEIM, C.; BORGATTO, A. Um modelo de avaliação de jogos educacionais na engenharia de software. Anais do XXV Simpósio Brasileiro de Engenharia de Software (SBES 2011), São Paulo, 2011. SOUSA, Rosa Maria Borges Cardoso de; MELO, Marlene Catarina de Oliveira Lopes. Mulheres na gerência em tecnologia da informação: análise de expressões de empoderamento. REGE Revista de Gestão, v. 16, n. 1, p. 1-16, 2009. TAKAHASHI, T. (org.). Livro verde da Sociedade da Informação no Brasil. Brasília: Ministério da Ciência e Tecnologia, 2000.
Compartilhar