Introdução ========== (?) What are you going to learn in this classe? - Technique => Algorithms and data structure I, II and III - Tactics => Modular programming - Strategy => Software Engineering (?) What is quality of software? A noção de qualidade de Software é subjetiva. Existem fatores de qualidade externos, isto é, que interagem diretamente com o usuário, e fatores de qualidade internos, com os quais os programadores devem interagir. Bertrand Meyer enumera alguns fatores de qualidade em seu livro: Fatores externos: - Corretude (?) how to check that a program is correct? - Robustez (?) how the language helps on robustness? - Extensibilidade (?) any example a situation that would force extension? (?) which good practices help on extendibility? - Zip code in Brazil - or - the millenium problem. (?) How to avoid this kind of problem? - Reusabilidade (?) what a library check out system, and a address book have in common? - Compatibilidade (?) are there problems in guaranteeing compatibility? - Eficiência (?) Why is efficiency being downplayed? - Portabilidade (?) Why did portability become a stronger need during the 90's? - Facilidade de uso (?) In which situations is easy-of-use a pain? (?) Why is important that the developer know the user of her software? - Funcionalidade (?) Is it true that simple is better? - Pontualidade (?) Why this is particularly important in computer science? - Segurança: (?) Why is this different from robustness? - Economia: - Manutenabilidade: (?) Which trade-offs we see in these criteria? - integrity X easy-of-use - efficiency X portability - timeliness X everything-else (?) Which are the most important quality factors? Fatores internos: - Legibilidade (?) does the language has anything to do with legibility? - Documentação - Padronização - Conscisão - Fatoração - Debugabilidade (?) Give examples of factors that makes debugging hard. - Modularidade Existe um padrão internacional para avaliação de qualidade de software o padrão ISO 9126. Este padrão agrupa os fatores de qualidade nas seguintes categorias: - Funcionalidade - Confiabilidade - Usabilidade - Eficiência - Manutenabilidade - Portabilidade Problemas de software podem ser classificados como defeitos ou não-conformidades.