Software Design

Software design can be seen as a way of solving problems or even creating new ones. IN order to solve these problems, designers can follow few steps or recommendations from others. One of the most important topics regarding the software design is software requirements analysis. This SRA lists some specifications that might be useful most of the time.

The following points are some recommendations of the software design principles:

  • The designer needs to have the ability to search for new solutions to the problems
  • The model of the software must be able to be traceable in order to find a solution in an easier way.
  • It is accepted to use solutions that have been discovered by others.
  • The design needs to be reachable, that means that it needs to be possible to take it into the real world.
  • The design must show coherence.
  • The designs must be well structured.
  • The design must be able to accept or adapt changes.
  • The idea of a software design is to solve problems, not to get worse.

There are some points that are needed to be taken into account, such as the compatibility, extensibility,  security, usability, performance, scalability, etc. These considerations may lead you to a great software design.

Retrieved from https://en.wikipedia.org/wiki/Software_design.


Software Testing

Pruebas de software: es el proceso de evaluar un sistema y sus componentes, con el propósito de encontrar otra manera de satisfacer las necesidades de los requerimientos especificados del software. Es ejecutar un sistema en orden para identificar errores o requerimientos faltantes. Son actividades dentro del desarrollo de software.

Los tipos de pruebas de software son:

Unitarias: Se centra en dividir el programa en módulos y mostrar que cada módulo funciona bien y cumple con los requerimientos.

Integración: Es la prueba que combina las partes de la aplicación y determina si estas funcionan correctamente. Este tipo de prueba se puede realizar de dos maneras “Bottom-up Integration Testing” y “Top-down integration testing”.

Sistema: Este tipo prueba al sistema como un conjunto. Una vez que se integra todo el sistema, se verifica que el sistema cumpla con las normas de calidad. Se llevan más pruebas especializadas.

Regresión: Cuando se hace un cambio en algún módulo del sistema, es probable que se hayan afectado los otros módulos del sistema. Este tipo de prueba se enfoca en verificar que un cambio no afecte al sistema por completo.

Aceptación: Se evalúa que el equipo cumpla con las especificaciones deseadas y satisface los requerimientos planteados por el cliente.  Con diferentes escenarios planteados se probará el programa.

Alpha: Es la primera etapa de la prueba, se combinan las pruebas unitarias, de integración y de sistema en este tipo. Durante la implementación de esta se revisan los siguientes aspectos:

  • Spelling Mistakes
  • Broken Links
  • Cloudy Directions
  • El sistema se probará en máquinas con la especificación más baja para probar los tiempos de ejecución

Betha: Esta prueba se pone en ejecución después de haber probado la Alpha, en esta una muestra de la audiencia pone a prueba la aplicación. También son conocidas como pruebas pre-lanzamiento. Es para que el sistema

Continue reading "Software Testing"

Design Pattern

Son las mejores herramientas usadas por desarrolladores que usan el concepto de programación orientada a objetos. Estas son soluciones para los problemas más comunes durante el desarrollo de software.  Patrones de diseño tienen dos usos en la ingeniería de software. Es necesario usarlos porque aunque tengamos un programa innovador o inusual, de seguro tendrá algún problema durante su implementación. Y si tenemos

Es una plataforma común para desarrolladores, nos dan un estándar de terminología y son para escenarios específicos. Usar un objeto para todos los desarrolladores están familiarizados con un diseño similar, y cuando este sea utilizado se que se decir a otros desarrolladores que sigue este patrón de diseño.

Los patrones de diseño han dedicado mucho en mejorar el patrón y este sea útil ante los problemas durante el desarrollo de software.

Los tipos de patrones de diseño son:

Creational Patterns

Este diseño ayuda a mejorar la manera de crear objetos, mientras se esconde la lógica de creación. Nos da un programa más flexible y así es más fácil saber qué objetos necesitamos crear.

Structural Patterns

Este diseño se enfoca en la clase y la composición de los objetos. Se utiliza la herencia para saber la composición de  las interfaces, así como las maneras en las que se compondrán los objetos y así obtener nuevas funcionalidades.

Behavioral Patterns

Se enfoca más en la comunicación de los objetos.

J2EE Patterns

Estos patrones son identificados por Sun Java Center.

 

Referencias:

Tutorials point.

Photo by Flickr

 

Chequen este vídeo de Creational Patterns


Floreth's Blog 2016-10-25 09:50:00

What is software design?


Moraru, S. (2016). Question the software design – Part 5 – Big project  [Ilustración]. Recuperado de http://mozaicworks.com/blog/question-software-design-part-5-big-projects/


"Software design is the process of defining software methods, functions, objects, and the overall structure and interaction of your code so that the resulting functionality will satisfy your users requirements" (UCAR, 2016). So software design is a break down of the architecture of your program, which should include databases, frameworks and hardware that your program will use or interact with. You should also include API's that your code has or that your code calls, because once it's used it is very difficult to change it without breaking other people's code.
They're actual flaws that programmers make when they're trying to design software:
  1. Writing code that isn't needed: It's not about whether you're going to need it in the future, it's about good design.
  2. Not making the code easy to change: Also called "Rigid design". They're two ways to accomplish this: the first one is the failure to understand that the requirements will change and number two writing code without enough design.
  3. Being too generic: AKA Over engineering. It's a flaw that senior developers fall into, too much effort for too little value.
Videos about the three flaws explained by Max Kanat-Alexander the author of Code Simplicity: The Fundamentals of Software.

Part 1:

Part 2, 3 and 4:


Sources & Links:

Floreth's Blog 2016-10-25 09:50:00

What is software design?


Moraru, S. (2016). Question the software design – Part 5 – Big project  [Ilustración]. Recuperado de http://mozaicworks.com/blog/question-software-design-part-5-big-projects/


"Software design is the process of defining software methods, functions, objects, and the overall structure and interaction of your code so that the resulting functionality will satisfy your users requirements" (UCAR, 2016). So software design is a break down of the architecture of your program, which should include databases, frameworks and hardware that your program will use or interact with. You should also include API's that your code has or that your code calls, because once it's used it is very difficult to change it without breaking other people's code.
They're actual flaws that programmers make when they're trying to design software:
  1. Writing code that isn't needed: It's not about whether you're going to need it in the future, it's about good design.
  2. Not making the code easy to change: Also called "Rigid design". They're two ways to accomplish this: the first one is the failure to understand that the requirements will change and number two writing code without enough design.
  3. Being too generic: AKA Over engineering. It's a flaw that senior developers fall into, too much effort for too little value.
Videos about the three flaws explained by Max Kanat-Alexander the author of Code Simplicity: The Fundamentals of Software.

Part 1:

Part 2, 3 and 4:


Sources & Links:

Software design patterns

Design patterns are optimized, reusable solutions to the programming problems that we encounter every day. A design pattern is not a class or a library that we can simply plug into our system; it’s much more than that. It is a template that has to be implemented in the correct situation (Bautista, 2010).

The Gang of Four are the authors of the book, “Design Patterns: Elements of Reusable Object-Oriented Software”. This important book describes various development techniques and pitfalls in addition to providing 23 object-oriented programming design patterns (Carr, 2009).
gof-design-patterns-15-638
Gof design patterns (Vaka, 2013).

the23
When To Use Software Design Patterns (Hegoda, 2013).

One of the hardest question is which software design pattern to be applied when. Usually there isn’t a pattern to figure out which design pattern should be used. It comes through the understanding & experience of using design patterns correctly (Hegoda, 2013).

Design patterns are related to object-oriented programming, in this video Derek Banas makes a great tutorial that includes the topics:

References:

Carr, R. (22 August 2009). Gang of Four Design Patterns. Black Wasp. Retrieved from: http://www.blackwasp.co.uk/gofpatterns.aspx

Bautista, K. (7 July 2010). A Beginner’s Guide to Design Patterns. Envatotuts+. Retrieved from: https://code.tutsplus.com/articles/a-beginners-guide-to-design-patterns–net-12752

Hegoda, D. (6 October 2013). Why? When to? Software Design Patterns. dasonhegoda.com. Retrieved from: http://dasunhegoda.com/software-design-patterns/158/

Vaka, S. (16 January 2013). Gof design patterns. Slideshare. Retrieved from: http://www.slideshare.net/wwwvaka/gof-design-patterns-16016273


Design it like one of your french modules

550x-draw-me-like-one-of-your-french

Software design is the first step in SDLC (Software Design Life Cycle), which moves the concentration from problem domain to solution domain. It is the process of defining the overall structure and interaction of code so that it will satisfy the user’s requirements using modularization, a technique to divide a software system into multiple discrete and independent modules capable of carrying out tasks independently.

The design should include the hardware, databases, APIs and third party frameworks the software will use or interact with.

Architectural -identifies the software as a system with many components interacting with each other.

High-level  – how the system & its components can be implemented in forms of modules.

Detailed –  towards modules and their implementations.

The output of software design process is design documentation, pseudo codes, detailed logic diagrams, process diagrams, and detailed description of all functional or non-functional requirements.

The next phase, which is the implementation of software, depends on all outputs mentioned above.

RESOURCES: TutorialsPoint


Software design

El diseño de software

Es el proceso en el que se transforman los requerimientos del usuario a una forma concreta, la cual facilita al programador su implementación. Este es el primer paso de SDLC (Software Design Life Cycle).

El diseño de software se divide en 3 niveles:

Diseño de arquitectura: En este se identifica el software como un sistema de componentes que interactúan entre sí. En este nivel los diseñadores encuentran la manera de implementar la idea.

Diseño de alto nivel: Se enfoca en diseñar cómo los pequeños módulos se conectarán para alcanzar el objetivo del programa y crear un sistema más complejo. Se reconoce la estructura de cómo se comunicarán estos módulos.

Diseño de detalles: Es cuando implementamos el sistema y observamos lo que hace cada módulo, checamos que cada uno cumpla con su función establecida.

 

https://www.tutorialspoint.com/software_engineering/software_design_basics.htm