Universidade Federal de Juiz de Fora Departamento de Ciência da Computação Resumo Descritivo dos Conteúdos das Disciplinas de Ementa Aberta para 2012-1 Disciplina: DCC089 - TOPICOS EM COMPUTACAO CIENTIFICA I Perfil: P1 Professor: Ciro Barbosa Abordagem: Model Checking A ideia geral dessa técnica é realizar uma verificação automática de um modelo de um sistema, contra a especificação desse sistema. Estamos mais especificamente interessados na aplicação dessa técnica ao desenvolvimento de Sistemas Distribuídos. Por exemplo, sistemas operacionais, protocolos de comunicação de dados, protocolos de sinalização em ferrovias etc. Sistemas Distribuídos possuem uma complexidade inerente em seu comportamento devido à execução concorrente de seus componentes. O uso de Model Checking no seu processo de desenvolvimento ajuda a lidar com essa complexidade e a corrigir eventuais erros lógicos no sistema. A especificação do sistema será feita usando máquinas de estados finitos. Nessa disciplina veremos como especificar o sistema e verificar algumas de suas propriedades usando uma ferramenta automatizada. Autores importantes da área: - Edmund M. Clarke - E. Allen Emerson Livros: Principios de Model Checking. Christel Baier and Joost-Pieter Katoen Pricípios de Model Checking em Spin
Disciplina: DCC090 - TOPICOS EM COMPUTACAO CIENTIFICA II Perfil: P1, P2 e P3 Professora: Lorenza Leão Abordagem: Programação Competitiva Objetivo:Desenvolver no aluno a habilidade de resolver problemas computacionais em ambiente competitivo, como aquele encontrado em maratonas de programação. Os alunos serão estimulados a aprender e aplicar técnicas de projeto e análise de algoritmos, assim como a programar de forma criativa, cooperativa e rápida. Espera-se também formar times que representem o DCC/UFJF na maratona de programação da SBC (que acontece no segundo semestre). Ementa:Estudo de técnicas de projeto de algoritmos e programação visando problemas típicos de competições de programação: Programação Dinâmica, Algoritmos em Grafos, Backtracking e Heurísticas, Algoritmos Geométricos, Tópicos variáveis e atuais em competições de programação. Público alvo: Alunos que se interessem por programação, ambientes cooperativos e competitivos e que gostem de resolver problemas lógicos e computacionais de forma criativa. Pré-requisito: Estruturas de Dados
Disciplina: - DCC093 - TOPICOS EM DESENVOLVIMENTO DE SOFTWARE I Perfil: P3 Professor: José Maria Abordagem: - Desenvolvimento Distribuído de Software; Objetivo: Apresentar e analisar os conceitos de colaboração nas diferentes etapas do processo de desenvolvimento distribuído de software, bem como avaliar os sistemas que apoiam essas etapas. Ementa: A área de CSCW (Computer Supported Cooperative Work): oportunidades e desafios. Sistemas Colaborativos: uma visão geral. Conceitos e requisitos para sistemas colaborativos. Sistemas colaborativos para apoiar o desenvolvimento distribuído de software. Ciclo de vida da engenharia de software e as etapas nas quais os sistemas colaborativos podem apoiar. Modelagem de processos e o desenvolvimento distribuído de software. Contexto em relação às diversas áreas da computação: Além das disciplinas dos cursos de graduação, os conceitos abordados em Tópicos em Desenvolvimento de Software I poderão ser aplicados nas disciplinas da linha de pesquisa em Sistemas e Tecnologias da Computação do Programa de Pós-Graduação em Ciência da Computação. As técnicas para apoiar a colaboração, bem como os conceitos de Sistemas Colaborativos (redes sociais, editores cooperativos, ambientes virtuais de aprendizagem, sistemas de recomendação, ambientes de desenvolvimento de software, por exemplo) podem ser utilizados nas diferentes atividades dos projetos relacionados à Engenharia de Software e Banco de Dados. A disciplina de Tópicos em Desenvolvimento de Software I abordará os aspectos da área de Desenvolvimento Distribuído de Software, e requer o conhecimento dos conceitos utilizados na disciplina de Engenharia de Software.
Disciplina: DCC097 - SEMINARIO EM COMPUTACAO I Perfil: P2 Professor: Guilherme Abordagem: Protocolos de Segurança. Objetivo: Introduzir conceitos de criptografia e estudar sistematicamente os fundamentos dos principais protocolos de segurança existentes para aplicações na internet, bem como os principais ataques conhecidos. Ementa: Introdução sucinta à Criptografia: chave simétrica e chave pública. Autenticação, Autorização, Distribuição de chaves, Assinatura digital e Não-repúdio. Protocolos de segurança: Needham-Schroeder; Kerberos; Yahalom; Neumann-Stubblebine. Ataques: Man-in-the-middle; Replay; Relay; Reflection. Contexto em relação às diversas áreas da computação: O conteúdo a ser abordado neste seminário está no centro do desenvolvimento de tecnologias para todo tipo de aplicações na internet que exigem segurança e confiabilidade. Protocolos de Segurança podem ser vistos como aplicações dos métodos básicos de criptografia para possibilitar o funcionamento seguro e confiável de aplicações distribuídas pela internet que, sem protocolos de segurança, é insegura. Dessa forma, não vamos estudar criptografia básica nem desenvolvimento de aplicações seguras na internet. Vamos sim tentar compreender o porque da necessidade dos protocolos, como eles funcionam e algumas de suas falhas conhecidas. Algumas palavras-chave que contextualizam o conteúdo: computação distribuída, segurança na internet, criptografia.
Disciplina: DCC098 - SEMINARIO EM COMPUTACAO II Perfil: P2 Professor: Rodrigo Weber Abordagem: Arquiteturas e Programação Paralelas A dinâmica da disciplina é formada, entre outras atividades, por leitura e escrita de artigos/resumos e apresentação de seminários de temas relacionados ao assunto. Objetivo: o Seminário terá como objetivo a apresentação de temas básicos e avançados relacionados à programação paralela. Este tópico é pré-requisito fundamental para a formação de qualquer profissional que de alguma forma necessite desenvolver códigos eficientes. Isto fica evidente, visto que não há outra alternativa, além da programação paralela, que permita explorar os recursos computacionais disponíveis nas arquiteturas modernas de processamento, seja esta um simples desktop com processador multi-core, uma placa gráfica GPU, ou um aglomerado de computadores como no caso de computação em Nuvens. Ementa: -Arquiteturas Paralelas. -Modelos de Programação Paralela. -Padrões de projeto para programação paralela. - Avaliando e Compreendendo o Desempenho - Programação Paralela com MPI -Programação Paralela com OPENMP -Programação Paralela com Java Theads -Aplicações Contexto em relação às diversas áreas da computação: Este seminário tem como o foco a programação paralela, que hoje é pré-requisito fundamental para a formação de qualquer profissional que de alguma forma necessite desenvolver códigos eficientes. Isto fica evidente, visto que não há outra alternativa, além da programação paralela, que permita explorar os recursos computacionais disponíveis nas arquiteturas modernas de processamento, seja esta um simples desktop com processador multi-core, uma placa gráfica GPU, ou um aglomerado de computadores como no caso de computação em Nuvens.
Disciplina: DCC099 - SEMINARIO EM COMPUTACAO III Perfil: P3 Professora: Regina Braga Abordagem: escience Seminário ligado às pesquisas realizadas pela linha de Engenharia de Software/ Banco de Dados do Mestrado em Ciência da Computação. O conteúdo está relacionado aos temas dos grandes desafios da computação propostos pela SBC. Tópicos abordados: Caracterização; Engenharia de aplicações científicas; Mecanismos para gerenciamento e manutenção de conhecimento científico; Workflows Científicos; Redes Ponto a Ponto cientificas; Aplicações científicas distribuídas; Referências: Artigos científicos na área.
Disciplina: DCC101 - SEMINARIO EM COMPUTACAO V Perfil: P1 e P2 Professora: Ana Paula Abordagem: Redes Complexas Modelos e Aplicações O aumento significativo de informação sobre os mais variados sistemas formados por entidades que de alguma forma estão relacionadas vem despertando grande interesse no meio acadêmico e empresarial. Exemplos de tais sistemas, que podem ser representados por grafos (ou seja, redes), incluem redes tecnológicas (ex. Internet), redes sociais (ex. Orkut) e redes biológicas (ex. neurônios). Ao analisarmos a estrutura destes sistemas, dois fatos podem ser observados: (i) muitos sistemas possuem topologias não-triviais; (ii) há muita semelhança entre as topologias de diferentes sistemas. Redes Complexas surge como uma área cujos objetivos são caracterizar e compreender este abrangente fenômeno. O objetivo do seminário é apresentar uma introdução à teoria de redes complexas e suas aplicações em redes tecno-sociais encontradas nas áreas de Internet e Web (ex. Facebook, Twitter), em redes biológicas (ex. propagação de doenças, metabolismo) e em redes físicas (ex. distribuição de energia, malha de tráfego aéreo). Ementa: 1- Redes Complexas: Introdução e conceitos básicos 2 - Grafos e Medidas 3 - Redes do tipo Mundo Pequeno (Small World) 4 - Leis de Potência e redes de Escala Livre (Scale-free Networks) 5 - Caracterização de redes complexas 6 - Exemplos de modelagem e aplicações Contexto em relação às diversas áreas da computação: O assunto abordado neste seminário pode ser aplicado em diversas áreas da Ciência da Computação. Na área de Redes de Computadores, por exemplo, o conhecimento de redes complexas pode ser aplicado na análise do comportamento de usuários em redes sociais, com o objetivo de propor novos algoritmos de difusão de informação que sejam mais eficientes. Em termos práticos, podemos considerar o envio de propagandas por parte de uma empresa. Conhecendo a estrutura da rede social em questão, podemos encontrar usuários mais importantes que irão propagar a informação a um número maior de contatos. Além disso, é desejável identificar a comunidade que possui maior afinidade com o produto a ser divulgado. Ainda em redes de computadores, a teoria de redes complexas pode auxiliar na descoberta de spammers em uma rede de emails. A teoria de redes complexas também pode ser aplicada em sistemas biológicos. Por exemplo, se queremos erradicar uma doença e possuímos um número limitado de vacinas, devemos imunizar os indivíduos que possuem um maior número de contato, evitando a propagação acelerada da doença em questão.