Escolar Documentos
Profissional Documentos
Cultura Documentos
Rodrigo Bonifácio
6 de junho de 2022
1 Objetivos da disciplina
O objetivo desta disciplina é explorar técnicas de programação que objetivam
(a) garantir o desenho modular de um software e (b) melhorar a corretude do
sistema via suite de testes automatizados e o uso de contratos de software. A
ementa da disciplina abrange:
2 Metodologia
A disciplina será conduzida utilizando uma abordagem que combina Aprendiza-
gem Baseada em Problemas (70%) com as estratégias inspiradas no conceito de
Sala de Aula Invertida [Tawfik and Lilly, 2015] (30%). Os objetivos de apren-
dizagem da disciplina serão alcançados a partir de cenários de evolução de um
compilador para a linguagem Oberon [N.Wirth, 1990, van den Brand, 2015,
Basten et al., 2015], cuja implementação iniciou no semestre 2020/1. Os alunos
serão organizados em grupos de cinco alunos (totalizando aproximadamente 10
grupos).
A arquitetura do compilador Oberon é organizado em termos de cinco módulos
principais:
(M1) Parser: Módulo que transforma um código fonte Oberon em uma parse
tree.
(M2) Type Checking: Módulo que verifica se todas as construções da linguagem
estão sendo usadas de forma correta em relação às definições de tipos.
1
(M3) Interpreter: Módulo que avalia um programa Oberon sem a necessidade
de compilação para uma linguagem de mais baixo nı́vel.
(M4) Control Flow Graph: Módulo que gera um grafo de fluxo de controle
para programas Oberon. Tais grafos são comumente usados para analisar
programas, como verificar se todo caminho em uma função leva a um
return.
(M5) Code Generation: Módulo que gera um programa na linguagem C a partir
de um programa Oberon. Esse programa em C pode então ser compilado
e executado diretamente pelo SO.
2
e a análise sintática de programas em Oberon. Detalhes da teoria relacionada à
construção desses componentes não serão explorados (existe uma disciplina que
cobre esses aspectos). De forma semelhante, implementaremos um módulo de
verificação de tipos, sem explorar em detalhes a teoria sobre sistemas de tipos
(algo que pode ser explorado durante todo um semestre em uma disciplina de
pós-graduação).
Adicionalmente, serão explorados Exercı́cios em Estilos de Programação. A
terceira e quarta semanas de Agosto serão reservadas para que o professor apre-
sente alguns estilos de programação descritos no livro Exercises in Programming
Style [Lopes, 2014]. Neste livro, a autora (Profa. Crista Lopes) apresenta um
conjunto de estilos de programação para resolver um mesmo problema (word
counting) de acordo com diferentes estratégias, agrupadas em nove categorias.
O professor da disciplina vai apresentar quatro ou cinco estilos de programação,
e cada grupo deve explorar um estilo de programação diferente. A atribuição
de um estilo a cada grupo será realizada de forma aleatória. Espera-se que uma
vı́deo aula de 20 a 30 minutos seja preparada para o estilo explorado por cada
grupo.
3 Avaliação
A média final vai ser computada pela Eq. (1)
7 × P1 + 3 × P2
MF = (1)
10
onde P1 é a média das notas atribuı́das a cada cenário de evolução e P2
corresponde à média atribuı́da às atividades relacionadas ao conteúdo sobre
Exercı́cios em Estilos de Programação.
4 Horário de Atendimento
Conforme mencionado, teremos encontros semanais de 20 a 30 minutos entre
o professor e cada um dos grupos. Esses encontros serão realizados de forma
presencial, em sala de aula. Encontros adicionais precisam ser agendadas com
o professor, observando os seguintes horários de atendimento:
5 Plano de Aulas
O conteúdo previsto para a disciplina vai ser explorado ao longo de todo o semes-
tre. Ou seja, aspectos sobre decomposição de software em módulos; qualidade
3
de software e testes automatizados; e desenho centrado em contratos serão exer-
citados em cada uma das sprints da implementação do compilador Oberon. Em
cada sprint, cada grupo deve contribuir com uma tarefa especı́fica, obedecendo
às decisões arquiteturais e restrições de implementação, implementando con-
tratos e testes unitários e avaliando a qualidade do software (usando inclusive
análise de cobertura de testes).
As aulas ao longo do semestre serão de acompanhamento de projeto, com
encontros semanais de 20 a 30 minutos e colaboração via ferramentas de comu-
nicação (Teams) e repositórios de software (GitHub). Aulas expositivas sobre
Exercı́cios em Estilos de Programação estão previstas para o mês de Agosto
6 Bibliografia
Serão usados artigos cientı́ficos, relatórios técnicos e textos em “literatura cin-
zenta” disponı́veis na Internet. Tal material vai ser selecionado e disponibilizado
pelo professor ao longo do semestre, no ambiente Microsoft Teams. Algumas
notas de aula no formato de slides também serão disponibilizados pelo profes-
sor. Recomenda-se a aquisição do livro “Cristina Videira Lopes. Exercises in
Programming Style. Chapman - Hall/CRC, 2014. ISBN 1482227371”.
7 Bibliografia Complementar
A seguinte lista de livros apresenta um conjunto de técnicas, práticas e reco-
mendações de desenvolvimento que são essenciais para quem tem interesse em
melhorar as habilidades de programação. Algumas dessas técnicas serão discu-
tidas no nosso curso.
• Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design
Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley
Longman Publishing Co., Inc., USA, 1995. ISBN 0201633612
• Refactoring: Improving the Design of Existing Code. Addison-Wesley
Longman Publishing Co., Inc., USA, 1999. ISBN 0201485672
• Beck. Test Driven Development: By Example. Addison-Wesley Longman
Publishing Co., Inc., USA, 2002. ISBN 0321146530
• Andrew Hunt and David Thomas. The Pragmatic Programmer: From
Journeyman to Master. Addison-Wesley Longman Publishing Co., Inc.,
USA, 2000. ISBN 020161622X
• Robert C. Martin. Clean Code: A Handbook of Agile Software Crafts-
manship. Prentice Hall PTR, USA, 1 edition, 2008. ISBN 0132350882
4
cuja primeira edição está disponı́vel gratuitamente online. Algumas referências
sobre programação funcional são:
Referências
Refactoring: Improving the Design of Existing Code. Addison-Wesley Longman
Publishing Co., Inc., USA, 1999. ISBN 0201485672.
Bas Basten, Jeroen van den Bos, Mark Hills, Paul Klint, Arnold Lan-
kamp, Bert Lisser, Atze van der Ploeg, Tijs van der Storm, and
Jurgen Vinju. Modular language implementation in rascal – experi-
ence report. Science of Computer Programming, 114:7 – 19, 2015.
ISSN 0167-6423. doi: https://doi.org/10.1016/j.scico.2015.11.003. URL
http://www.sciencedirect.com/science/article/pii/S0167642315003524.
LDTA (Language Descriptions, Tools, and Applications) Tool Challenge.
Beck. Test Driven Development: By Example. Addison-Wesley Longman Pu-
blishing Co., Inc., USA, 2002. ISBN 0321146530.
Richard Bird and Philip Wadler. An Introduction to Functional Programming.
Prentice Hall International (UK) Ltd., GBR, 1988. ISBN 0134841891.
Antony J. T. Davie. An Introduction to Functional Programming Systems Using
Haskell. Cambridge University Press, USA, 1992. ISBN 0521258308.
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Pat-
terns: Elements of Reusable Object-Oriented Software. Addison-Wesley Long-
man Publishing Co., Inc., USA, 1995. ISBN 0201633612.
Andrew Hunt and David Thomas. The Pragmatic Programmer: From Journey-
man to Master. Addison-Wesley Longman Publishing Co., Inc., USA, 2000.
ISBN 020161622X.
Graham Hutton. Programming in Haskell. Cambridge University Press, USA,
2nd edition, 2016. ISBN 1316626229.
5
Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship.
Prentice Hall PTR, USA, 1 edition, 2008. ISBN 0132350882.
N.Wirth. The programming language oberon, 1990. URL
https://people.inf.ethz.ch/wirth/Oberon/Oberon.Report.pdf.
Martin Odersky, Lex Spoon, and Bill Venners. Programming in Scala: Updated
for Scala 2.12. Artima Incorporation, Sunnyvale, CA, USA, 1st edition, 2016.
ISBN 0981531687.
Andrew A Tawfik and Christopher Lilly. Using a flipped classroom approach
to support problem-based learning. Technology, Knowledge and Learning, 20
(3):299–315, 2015.
Mark van den Brand. Introduction—the ldta tool challenge. Sci-
ence of Computer Programming, 114:1 – 6, 2015. ISSN 0167-
6423. doi: https://doi.org/10.1016/j.scico.2015.10.015. URL
http://www.sciencedirect.com/science/article/pii/S0167642315003184.
LDTA (Language Descriptions, Tools, and Applications) Tool Challenge.