Esta disciplina ensina os princípios, técnicas e ferramentas envolvidos na construção e validação de sistemas de software de alta tecnologia, de forma aplicada às plataformas de suporte à execução standard de indústria (Java, .NET, C, C#). O foco é em temas de programação avançada, linguagens de programação por objectos e componentes, ferramentas de validação e detecção de erros em software. As competências transmitidas nesta cadeira são indispensáveis aos alunos com vocação para actividades de desenvolvimento e liderança de desenvolvimento de software de alta tecnologia.
São abordados:

  • Mecanismos de suporte à modularidade, integração, e composição; 
  • Linguagens de asserções para validar programas e especificar propriedades dos mesmos; 
  • Técnicas de validação rigorosa usando ferramentas como ESC/Java2Spec# e Java Modeling Language;
  • Programação concorrente (segura e correcta) usando threads e monitores em Java; 
  • Técnicas de detecção de erros em tempo de compilação com base na análise estática e/ou model-checking do código fonte, e suas ferramentas de suporte. 

Como se constrói um sistema de software de larga escala, envolvendo a integração de vários componentes heterogéneos? Que técnicas de modularização existem, e como podem ser estas melhor expressas nas linguagens de programação concretas existentes? Como garantir à partida que os vários elementos de um sistema de grande dimensão se integram de forma a preservar as propriedades e requisitos pretendidos? E que tipo de propriedades ou requisitos é importante garantir? Que linguagens e lógicas existem para expressar de forma útil essas propriedades, de forma integrada com as ferramentas de programação?  Que ferramentas e técnicas existem para analisar o software produzido e garantir que este não vai incorrer em erros graves, uma vez em produção?  E como funcionam essas ferramentas?  Como construir novas ferramentas de análise de software?
Mais informação: em 
http://ctp.di.fct.unl.pt/SCALT/CASSDOC.pdf