Cursos e Campos de Estudo em CC

quarta-feira, 11 de junho de 2008

Áreas de Engenharia de Software - Qualidade de Software

A área de qualidade software está relacionada com considerações de qualidade de software que transcendem os processos de ciclo de vida do software. Ela está ligada diretamente com a qualidade do produto do software. Porém é impossível separar a qualidade final do produto da qualidade do processo onde o produto está sendo desenvolvido, pois o processo de desenvolvimento influencia fortemente o produto final gerado e se este processo não possuir um determinado grau de qualidade o resultado final não será satisfatório.

O gerenciamento da qualidade, hoje em dia, é visto como custo e grande parte das empresas não conseguem enxergar nenhuma vantagem em atribuir responsáveis e atividades para a garantia da mesma. Porém, com o gerenciamento da qualidade as chances do software possuir uma boa qualidade em uso são muito maiores. Isso é um ponto de grande importância no atual contexto das empresas desenvolvedoras de software, uma vez que existem inúmeras empresas no mercado de hoje, e a qualidade final do produto e a satisfação do cliente é um diferencial que auxiliará a empresa a se destacar neste mercado.

Áreas de Engenharia de Software - Gerenciamento de Software

A área de “Gerenciamento software”, foi escolhida por considerar que esta é uma área que influencia e recebe influência das outras áreas da engenharia de software, sendo desta forma fundamental para atingir um bom resultado ao final do projeto.

O gerenciamento da engenharia de software pode ser definido como a aplicação de atividades de acompanhamento planejamento e controle que garantem um desenvolvimento e uma manutenção sistemática dos projetos de softwares. Essas atividades podem ocorrer em três níveis: gerenciamento organizacional, gerenciamento de projeto e controle e planejamento de programas de medição.

Outro aspecto importante do gerenciamento é atividades relacionadas com o gerenciamento de pessoas, levando em consideração equipe, clientes e responsáveis da própria organização. Estas atividades tratam de treinamento, motivação pessoal. Além disso são necessários, os planejamentos e gerenciamentos da comunicação entre essas pessoas para melhorar o entendimento de todos, fator primordial para um bom resultados finais. Este ponto desperta um interesse extremo nesta área, pois se separa um pouco das áreas técnicas da engenharia de software, trazendo o seu foco para a compreensão e ajustamento dos indivíduos envolvidos e seus relacionamentos em grupo.

Segundo o PMBOK a área de “Gerenciamento da engenharia de software” se divide em 7 sub-áreas: gerenciamento de integração do projeto, gerenciamento do tempo do projeto, gerenciamento do custo do projeto, gerenciamento da qualidade do projeto, gerenciamento dos recursos humanos do projeto e gerenciamento das comunicações do projeto. As cinco primeiras estão relacionadas com o processo de gerenciamento do projeto e as duas ultimas relacionam-se com medições de dados do projeto. O processo de gerenciamento e as quantificações métricas estão intimamente ligados e um depende do outro para que se obtenha um gerenciamento efetivo e satisfatório.

Um fator importante com relação a esta área é que, como pôde ser observada, ela possui atividades distribuídas durante todo o ciclo de vida do projeto. Isto significa que ela está ligada a praticamente todas as atividades que acontecem durante o projeto e, caso as atividades do gerenciamento estejam comprometidas, as atividades de qualquer fase do ciclo de vida podem ser afetadas reduzindo a qualidade de seus resultados finais.

Áreas de Engenharia de Software - Projeto de Software

O projeto de software é a definição da arquitetura, dos componentes, das interfaces de um sistema ou componente. As sub-áreas que compõem esta área são as seguintes: fundamentos de projeto de software, pontos chaves no projeto de software, estrutura e arquitetura do projeto de software, análise e avaliação do projeto de software, notações do projeto de software e estratégias e métodos para projeto de software.

Esta é uma área de grande importância pois é durante suas atividades que podem ser detectados problemas do funcionamento do software que podem comprometer seu uso e até mesmo a conclusão do mesmo. Caso estes problemas fosse detectados apenas no transcorrer das atividades de construção do software, as suas correções poderiam ser bastante custosas e grande parte do trabalho de desenvolvimento poderia ser perdido. Além disso, com o projeto do software pode-se obter uma visão mais geral do sistema, permitindo-se calcular melhor quais os impactos de cada decisão tomada no decorrer do projeto.


Áreas de Engenharia de Software - Requisitos de software

O requisito pode ser definido como a propriedade que deve ser relatada com o intuito de solucionar um problema real. Esta área é dividida em sete sub-áreas: fundamentos de requisitos de software, processo de requisitos, elicitação de requisitos, análise de requisitos,especificação dos requisitos, validação dos requisitos e considerações práticas.

Esta área está relacionada com o levantamento das propriedades que o software deve possuir e as restrições existentes. Ela elícita, analisa e valida os requisitos de maneira a permitir que no final do projeto o software tenha uma chance maior de atender as necessidades dos clientes. Esta área é de extrema importância pois ao fazer a analise e a validação dos requisitos do software podem ser percebidos carência de algumas propriedades que o software deve possuir e até mesmo conflito entre as necessidades existentes, possibilitando prever problemas e propor mudanças antes do software começar a ser implementado.

Áreas de Engenharia de Software - Processo de Engenharia de Software

A área de conhecimento do processo de engenharia de software está relacionada com a definição, implementação, controle, e proposta de mudança no próprio processo. Esta área pode visualizada em dois níveis. O primeiro nível engloba as atividades técnicas e gerenciais executadas durante a aquisição, desenvolvimento e manutenção do software. O segundo nível, tratado nesta área de conhecimento, considera as definições, implementações, gerenciamento e mudanças no próprio processo.

O processo de engenharia de software envolve vários outros processos, como o de desenvolvimento o de gerenciamento, o de qualidade. Esta área está ligada com qualquer parte do gerenciamento do processo de ciclo de vida do software, onde mudanças são propostas com o intuito de melhorar o produto ou até mesmo o processo de produção.

Ao contrário do que é suposto, essa área importante não apenas para empresas grandes, mas também devem ser levadas em consideração para pequenas empresas, facilitando e auxiliando no crescimento dessas. O objetivo desse gerenciamento do processo é implementar novas práticas individuais, de projeto ou até mesmo organizacionais.

Uma das grandes dificuldades enfrentadas por está área é que a implementação das suas práticas geralmente não traz benefícios em curto prazo, porém com a evolução dos processos a empresa vai aumentando o seu nível de maturidade e o desempenho das equipes e qualidade final dos produtos é beneficiada.

domingo, 8 de junho de 2008

Computabilidade e Modelos de Computação

Computabilidade é uma propriedade elementar das máquinas ditas computáveis. Os computadores possuem a capacidade de receber como entrada de dados uma sentença (um programa) escrito em uma linguagem artificial computável (uma linguagem que o computador entende) e execultar tarefas bem definidas, baseada na interpretação da sentença recebida. O ato de interpretação da sentença é a execução do programa. Durante sua execução, o programa recebe entrada de dados informadas pelo usuário e produz saída de dados, que são captadas pelo usuário.
A entrada de dados efetuada pelo usuário do programa é formada por sentenças em uma linguagem abstrata (linguagem L1, mas adequada para pessoas). Assim a entrada de dados do programa pertence à linguagem artificial definida pelo programador.
A capacidade computacional plena (computabilidade) surge no momento em que a linguagem de máquina(linguagem L0), na qual o programa (a linguagem do programador) é construído, permite a construção de sentenças suficientemente poderosas (programas P0, escritos em L0), cuja a execução permite entrada de dados na linguagem abstrata (linguagem L1) , onde L1 irá tornar-se tão poderosa quanto L0. Os primeiro modelos de computabilidade, foram com:
  • Kurt Göedel - funções recursivas.
  • Alonso Church - lambda-calculus.
  • Alan Turing - Máquina de Turing.
Essas invenções levaram a construção dos primeiros computadores.
Modelos de computação são modelos que buscam representar, e estudar a forma como calculamos, assim a CC, segundo as definições de Modelo Matemático , é verdadeiramente uma componente da matemática com a ciência.
Tomando por base o funcionamento de um computador, modelos de computação devem associar sinais de entrada e saídas, representar a memória (estado interno), basear-se na especificação de regras e de uma sequência para sua execução, e depender de um intérprete ou executor(computador).

links:
Teoria da Computação_Lucilia Figueiredo_UFOP2008
Computabilidade_Jorge Fernandes_maio2002

quinta-feira, 5 de junho de 2008

Complexidade computacional

A Teoria da complexidade computacional é a parte da teoria da computação que estuda os recursos necessários durante o cálculo para resolver um problema.. Os recursos comumente estudados são o tempo (número de passos de execução de um algoritmo para resolver um problema) e o espaço (quantidade de memória utilizada para resolver um problema). Pode-se estudar igualmente outros parâmetros, tais como o número de processadores necessários para resolver o problema em paralelo.

Tipos

  • Espacial: Este tipo de complexidade representa o espaço de memória usado para executar o algoritmo, por exemplo.
  • Temporal: Este tipo de complexidade é o mais usado podendo dividir-se em dois grupos:
    • Tempo (real) necessário à execução do algoritmo.
    • Número de instruções necessárias à execução...

Perspectivas

São usadas três perspectivas no estudo do caso da complexidade:

  • Melhor Caso – Representado por Ω( ), consiste em assumir que vai acontecer o melhor. Pouco utilizado e de baixa aplicabilidade.
  • Caso médio – Representado por θ( ). Este é o caso que é o mais difícil de ser determinado, pois, necessita de análise estatística e em conseqüência de muitos testes, contudo é muito utilizado, pois é o que representa mais corretamente a complexidade do algoritmo.
  • Pior Caso – Representado normalmente por O( ). Se dissermos que um determinado algoritmo é representado por g(x) e a sua complexidade Caso Pior é n, será representada por g(x) = O(n). Consiste em assumir que o pior dos casos pode acontecer, sendo de grande utilização e também normalmente o mais fácil de ser determinado.

Wikipédia 1, 2

Análise de algoritmos

Em ciência da computação, a análise de algoritmos tem como função determinar os recursos necessários para executar um dado algoritmo. A maior parte dos algoritmos são pensados para trabalhar com entradas (inputs) de tamanho arbitrário. Em geral, a eficiência ou complexidade de um algoritmo é função do tamanho do problema, do número de passos necessário (complexidade temporal) e da complexidade espacial ou de memória do sistema usado para executar o algoritmo. Esta disciplina faz parte da mais vasta teoria da complexidade computacional, que permite fazer estimativas quanto aos recursos necessários para que um algoritmo resolva um determinado problema computacional.

Assim, o objetivo final não é apenas fazer códigos que funcionem, mas que sejam também eficientes. Para isso, deve-se estudar alguns tipos de problemas que podem ser resolvidos computacionalmente. Em seguida, deve ser visto como a abordagem adotada para resolver pode influenciar, levando a um algoritmo mais ou menos eficiente.



Wikipédia