- Presentación de la materia: slides.pdf
- Introducción a la ingeniería de software y gestión de proyectos.
- Caso de estudio: From FATS to feets.
- Niveles de abstracción en lenguajes de programación
- Repaso - Python
- Orientación a objetos
- Modelo de objetos + Composición
- Manejo de excepciones
- Decoradores y manejadores de contexto
- Clases abstractas + Meta programación
- Structural Pattern Matching
- Introducción a QA
- Análisis estático
- Debugging + Unit Testing
- Mock
- Code Coverage
- Property Based, Stateful & Fuzzy Testing
- Mutation Testing
- Profiling
- Intro a diseño
- Patrones de diseño
- Pandas, plots & Accessors
- Manejo de obsolescencia
- SOLID
- Scikit-Learn Design
- [Antipatrones]
- [Code-Smells]
Estos temas no tienen un contenido teórico muy robusto e involucran primordialmente aprender a utilizar alguna librería o framework que implementa alguna técnica de calidad o patrón de diseño
- Git
- Librerías de cómputo científico
- Objetos en el mundo real
- Pakaging
- Entornos virtuales
- TOX
- Licenciamiento
- **** - [Integración continua]
- **** - [Documentación]
- Si el código del práctico no está en un repositorio, y no esta con PEP-8, No se revisa.
- Si el código no tiene testing no se existe.
- Establecer el problema científico a resolver. Las bases teóricas del problema deben estar bien entendidas. Recordar que esto no es un proyecto de investigación científica, es un proyecto de desarrollo de software. El problema no debe tener una implementación de Python. BUSCAR en PyPI https://pypi.org/
- Repositorio público en GitHub/Gitlab/BitBucket. El prototipo debe estar disponible en un repositorio de github con el nombre del proyecto. Configurar el repositorio para que todos los integrantes del grupo tengan acceso.
- Grupos: Entre 3 y 5 personas. No hace falta que todos sean expertos en el tema. Ya tuvimos matemáticos haciendo dinámica y formación galáctica; y un biotecnólogo haciendo economía. Agarren un tema que les interese. Grupos más chicos tienen que justificarlo MUY bien. Más grandes no van a ser aceptados bajo ninguna circunstancia.
- Prototipo funcional de código. El prototipo debe ser capaz de resolver el problema científico propuesto. Considerar que en esta etapa no se pide ningún criterio de calidad de software, solo la funcionalidad del prototipo. El prototipo debe estar escrito en Python 3.12 válido.
Todas las clases van a haber consultas.
-
La funcionalidad del proyecto de software tiene que estar completa.
-
El valor del Coverage
>= 90%
(ideal~95%
). -
Todo el código tiene que tener estilo y tiene que ser validado por un linter (Ejemplos: Flake8 para Python, Fortran-Linter para Fortran.
- Para la gente que use Flake8 instalar los plugins
flake8-black
(si usan black),flake8-import-order
,pep8-naming
yflake8-builtins
- Para la gente que use Flake8 instalar los plugins
-
Usar un integrador de testing (como tox o un Make), que integre tests, coverage, check-manifest, docstyle y doc-build.
-
Tiene que andar y ser probado (local y remotamente) con todo python "vivo" actualmente. Vivo es todo lo que este en security o bugfix en este enlace https://devguide.python.org/versions/
-
Algún integrador continuo (travis, github actions, gitlab, circle-ci, azure, etc) que se encargue de comprobar las métricas de testing del proyecto
-
Documentación online que incluya:
- Motivación.
- Contactos.
- Guía de instalación.
- Tutorial con un ejemplo práctico.
- Referencia de API.
-
README, con motivación, badges, mini guia de instalacion e información de contacto.
-
LICENCIA (archivo en la raiz del repo
LICENSE
oCOPIYING
). -
Todo el proyecto versionado en github/gitlab.
-
Subir el proyecto a PyPI
-
Presentar informe hasta 48hs antes. Hay un template latex sugerido en el repositorio Github del curso (diseno_sci_sfw). Debe incluir el contexto científico, definir el problema a resolver, explicar la API, ejemplo de uso y calidad de software.
-
En el template para el informe final hay un archivo txt que contiene una lista de publicaciones listas para citar.
-
El final es una presentación grupal (con slides) con tiempo máximo de 40 min, en el cual uno explica el proyecto si entrar tanto en detalles técnicos, sino mas bien USO y por que es un aporte.
Si van a van a validar el curso en otro programa doctoral que no sea del de FaMAF-UNC, van a necesitar:
- Programa de la materia
- CV de los profesores: Mas adelante lo agrego
Estos son los editores o IDE más populares en Python
- Vim/NeoVim con fisa-vim-config.
- Emacs con Python mode.
- Sublime Text.
- Atom.
- VisualStudio Code (hay que instalar extensiones para cada lenguaje).
- PyCharm (IDE).
- Geany.
- Spyder (IDE).