Este documento presenta una introducción a los atributos de calidad en el desarrollo de software con .Net. Explica conceptos clave como disponibilidad, escalabilidad, transaccionabilidad e instrumentación. También cubre temas como seguridad, usabilidad, testabilidad y mantenibilidad. Por último, resume métodos para evaluar atributos de calidad como Quality Attributes Workshop y Architecture Tradeoff Analysis Method.
2. Agenda
Contexto
Nociones generales
Atributos y su tratamiento con .Net
Métodos de evaluación
Conclusiones
Links relacionados
3. Contexto
Si los sistemas fallan pueden causar diferentes
consecuencias (perdidas tiempo, dinero)
No es suficiente con satisfacer los requerimientos
funcionales
Existe un contexto tecnológico que debe
analizarse
4. Contexto
Para implementar mejoras en la calidad primero
debe ser medida y analizada.
En ese contexto aparecen los Quality Attributes
para medir y analizar la calidad.
5. Nociones generales
Atributos de calidad: elementos que caracterizan la
calidad desde diferentes puntos de vista
Adquieren relevancia cuando se ponen en el
contexto adecuado
8. Disponibilidad
Es la característica de un sistema que mide el grado
de operación continua durante un período
determinado tiempo, dado un patrón de
operación y requerimientos mínimos de uso.
9. Disponibilidad
Infraestructura IIS - Network Load Balancing
Replicación de datos – Mirroring
Política de Back-ups
Failover Clustering
Capacidad de switchear de forma autómatica a
otro servidor redundante
Implementada con Windows Server y SQL
Server 2008 Failover Clustering
Disaster recovery
10. Escalabilidad
Es una característica deseada de un sistema, la cual
indica la habilidad de manejar el crecimiento del
volumen de trabajo de una manera adecuada.
Se destacan dos grandes maneras
Escalar verticalmente: agregando mas recursos
en un único nodo del sistema
Escalar horizontalmente: agregando mas
nodos al sistema
11. Escalabilidad
IIS Clustering
Network Load Balancing (Server farm)
Caching
NHibernate.Caches (Add-In)
Windows Server AppFabric (ex Velocity)
Diseño y optimización de Capa de datos
Desnormalización (Reporting)
ORM -> Mapeos (Lazy Load)
Queries (SQL / HQL)
Optimización en capa de presentación
Modularización (html + js + css)
AJAX (bien utilizado)
JSON (en lugar de xml)
Optimización de imágenes
12. Transaccionabilidad
Es la característica de un sistema que garantiza que
los procesos se manejan como operaciones
individuales e indivisibles, llamadas
transacciones. Cada transacción debe finalizar
exitosamente o fallar como una unidad completa,
no puede quedar en un estado intermedio.
13. Transaccionabilidad
System.Transactions
Posibilidad de hacer transacciones entre varias
Bases de datos
Desde .Net Framework 2.0
Clase TransactionScope()
A bajo nivel trabaja con COM+
NHibernate Transactions
Manejo de transacciones propio
Soporta System.Transactions
14. Instrumentación (Robustez)
Se refiere a la habilidad de monitorear y medir el
nivel de performance, para diagnosticar errores y
escribir información de traceo.
Cuando una aplicación contiene código de
instrumentación, puede ser administrada usando
diferentes herramientas.
15. Instrumentación (Robustez)
Framework de Logging
Log4Net
Framework de Instrumentación
Microsoft Enterprise Instrumentation
Framework (EIF)
ASP.NET Performance counters
Escritura en EventLog de Windows
16. Interoperabilidad
Es una propiedad relacionada a la habilidad de un
sistema de intercambiar datos vía un conjunto
predeterminado de formatos y de usar protocolos
comunes para su comunicación
Puede implementarse con el uso de Web
Services, los cuales manejan protocolos estándar
Cuidar el diseño desde el inicio
Pensar los servicios de forma atómica
Es posible con protocolos interoperables elegir
un mal diseño y hacer NO interoperable un
sistema
17. Usabilidad
Denota la facilidad con la que las personas pueden
utilizar una herramienta con el fin de llegar a su
objetivo. Se refiere a la claridad con la que se
efectúa la interacción de las personas con una
interfaz de un sistema.
Patrones UX
Librerías para facilitar la interacción
AJAX (JQuery, ASP.NET Ajax Library)
Silverlight
18. Seguridad
Autenticación y autorización
Identity y Principals (Customización)
Certificados SSL
Seguridad de contenido estático
Soporte de encriptación .Net Framework
Web Services
WS-Security
WS-Criptography
19. Testabilidad
Es la característica de un sistema, que indica su
capacidad de ser sometida a pruebas.
Generalmente se la asocia con el testing
automatizado.
20. Testabilidad
Arquitectura en capas
ASP.NET MVC
Inyección de dependencias
Spring.Net
Castle Framework
Mocking
Rhino Mocks
Moq
NUnit Framework
Visual Studio Team Foundation System
21. Mantenibilidad
Utilización de estándares
Code analysis
FXCop
StyleCop
Código documentado
NDoc
Políticas de Branching
KISS
22. Métodos de evaluación
Quality Attributes Workshop (QAW)
Architecture Tradeoff Analysis Method (ATAM)
Software Architecture Analysis Method (SAAM)
Active Reviews for Intermediate Designs (ARID)
23. Quality Attributes Workshop
El objetivo de QAW es identificar escenarios
desde el punto de vista de los diversos
participantes, identificar riesgos (p. ej. baja
performance, denegación de servicio) y posibles
estrategias de mitigación (p. ej. replicación,
prototipado, etc)
24. Quality Attributes Workshop - Pasos
1. Presentación e introducción al QAW
2. Presentación de Negocios/Misión
3. Presentación del Plan Arquitectónico
4. Identificación de los Drivers Arquitectónicos
5. Brainstorming de Escenarios
6. Consolidación de Escenarios
7. Priorización de Escenarios
8. Refinamiento de Escenarios
25. Conclusión
Tomar decisiones desde el inicio
Encontrar balance entre los diferentes atributos
Mantener la sencillez
Trabajo iterativo
Testear durante todo el ciclo de vida del proyecto
Pruebas de carga
Rendimiento
Concurrencia
Integrar continuamente
26. Links relacionados
Assessing quality in software architectures
http://www.ibm.com/developerworks/library/ar-qualassess.html
Software Architecture Quality Attributes
http://bradapp.blogspot.com/2008/02/software-architecture-quality.html
Windows Server AppFabric
http://msdn.microsoft.com/en-us/windowsserver/ee695849.aspx
Network Load Balancing
http://technet.microsoft.com/en-us/library/cc758834%28WS.10%29.aspx
SQL Server 2008 Failover Clustering
http://msdn.microsoft.com/en-us/library/ms189134.aspx