Software Testing

bigstock-code-bug-13044284-300x225

Software Testing can be defined as the process of executing a program with the purpose of finding bugs, but the fact is that this process is just one part of what a complete Software Testing is. Besides of debugging, testing includes validating and verifying that a software meets the business and technical requirements, works as expected and can be implemented.

I’d like to list some important characteristics of software testing:

  • Testing is a process rather than a single activity.
  • To design tests early in the life cycle can prevent you from having defects in the code. That’s a reason why Agile Development is so cool!
  • Testing can be Static, it can test and find defects without executing code, it includes reviewing documents.
  • Or it can be Dynaminc, the code is executed to see the results of running tests.
  • From the beginning, it’s important to choose what testing we will do, by selecting test conditions and designing test cases.
  • We evaluate to check the results and the completion criteria.
  • Blackbox testing ignores the internal mechanism and focuses on the output generated.
  • Whitebox testing takes into account the internal mechanism.

There are many types of testing:

  • Unit Testing.
  • Integration Testing.
  • Functional Testing.
  • System Testing.
  • Stress Testing.
  • Performance Testing.
  • Usability Testing.
  • Acceptance Testing.
  • Regression Testing.
  • Beta Testing.

You can read more about them here.

Source:

 

 


Software implementation

This is my last article of the partial. And, to be honest, I’m quite tired from writing circa 2 posts daily (I guess that’s my fault for not making them in time). So, this article might feel poor compared to others. I apologize for that.

Software implementation refers to, as you may have guessed, implementing the software. This means: making software actually runnable in different computers.

Some of the tools that one needs to implement software are:

  • Compiler/interpreter
  • Visual editor
  • IDE
  • SCM tool
  • DBMS
  • Testing tool
  • Installation tool
  • Documentation generator
flickr photo by staceyjoy https://flickr.com/photos/redlipstick/7030601605 shared under a Creative Commons (BY-NC) license
flickr photo by staceyjoy https://flickr.com/photos/redlipstick/7030601605 shared under a Creative Commons (BY-NC) license

Software Architecture

3481530Software architecture is the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes. As many other definitions, it seems simple and irrelevant, but what’s the real meaning of this this concept?

It’s easy to explain what software architecture is. I bet all of us think about houses and buildings when we read the word “architecture”, and I think it’s an adequate analogy. Before you build a house, you have to design the structure and consider all the elementss you need to acomplish the building, and don’t forget about the environment. Well, that’s the same thing with software, before you build it, you need to have a base.

Software must have a solid foundation, it’s important to think about key scenarios, common problems, long term consequences. You must consider RISKS. A poor architecture will take your software to failure.

Build to change instead of building to last!!!

In this industry, everything changes soooooo fast. And your software must be flexible enough to support those changes. I mean, nobody’s perfect, duh. Also, people love updates, specially if they’re curious (like me).

Source:


The Cathedral and the Bazaar: My opinion

After reading The Cathedral and the Bazaar, an essay written by Eric S. Raymond, I got some thoughts about OSS. I have to admit: I fell in love with Rocket League at a level of stopping doing this blog (this wasn’t typed by me, but it is indeed, a true reflexion typed by a good friend). Anyways. Even that I already admired OSS, after reading the article my perspective changed. OSS was not only the gift of geniuses to us, but was also a development method.

Fred Brooks established one of his hyphotesis in the Mytical Man-Month, which mentions that as the number of programmers grows lineally, the time for the project to be developed grows quadratically. But, in this essay, Raymond proves that this is not necessarily true. In fact: when the number of developers grows enough, time diminishes drastically.

Another big characteristic of OSS is the way people work with you. If you reward the people that work in the project, if you tell them that they are important and if you make them believe they are important, they will work incredibly good, even that they do not receive a real payment.

There are many topics covered in this essay, but these two are the ones I consider more important. I highly recommend reading it.

flickr photo by mejs https://flickr.com/photos/samoian/2364021459 shared under a Creative Commons (BY-SA) license
flickr photo by mejs https://flickr.com/photos/samoian/2364021459 shared under a Creative Commons (BY-SA) license

What is open source software??

Alguna vez escuchas el término de “Open source”, en este blog daré una breve explicación de lo que es.

El término de open source se refiere a algo que las personas pueden modificar y adaptar de acuerdo a sus necesidades; debido a que éste es accesible. Open source es un código  que tiene un recurso para que las personas lo puedan modificar, cualquier persona lo puede hacer. Con un código abierto el usuario lo puede manipular y cambiar cada pieza específica  del software.

En los sistemas en los que el sistema no es de código abierto el usuario no puede modificarlo, tal es el caso de Windows, este sistema operativo ya viene establecido, se pueden hacer ciertas modificaciones mínimas, pero no es tan accesible como un open source. Sólo las compañías que crean este tipo de software pueden modificar, alterar y cambiarlo.

El código abierto es totalmente diferente, los creadores del software dejan un recurso para que el usuario pueda aprender de este, instalarlo, modificarlo y adaptarlo.

Las licencia de open source dan derecho a los usuarios de usar el software para el propósito que ellos deseen. Sin embargo las licencias establecen que cualquier persona que modifica o comparte un programa, también debe de compartir el código fuente, sin cobrar por hacerlo.

Las personas prefieren usar open source porque:

Control: se prefiere porque se tiene mayor control del sistema, debido a que puedes hacer los ajustes que tú quieras.

Training: a muchas personas les gusta porque con esto están practicando constantemente y se vuelven mejores programadores.

Security: se considera que el código abierto es más seguro que un software no libre, porque cuando se lanza el programa las personas detectan cualquier falla en el sistema y comparten cómo corregirlo. Y este proceso es más rápido en comparación cuando el sistema

Resultado de imagen para xubuntu
Continue reading "What is open source software??"

Open Source Software

Wouldn’t it be beautiful if all the best things in the world were free? Free as in freedom. Well, even that that’s not true, I still have good news: some things ARE free. And one of them is Open Source Software (OSS).

OSS is probably one of the best things that has happened to the software universe. Why? First, because it’s free. Second, because it’s good. And third, because it evolves and gets better. But what exactly is it? OSS consists in software which is, essentially, open to anyone to use, distribute and modify. This means EVERYONE can use it. Additonally, OSS is usually developed publicly, by many people (this is explained better in my following article about The Cathedral and the Bazaar).

OSS started with the Open Source Iniciative in 1998 by Bruce Perens and Eric S. Raymond. As the founding code, Netscape Communicator was released free. The OSI was inspired on the free software movement, commanded by Richard Stallman, the founder of GNU Project.

Now: I won’t talk about the benefits of developing OSS as a public project (that goes into another article), but I will explain why is OSS important in today’s world. Here are some examples of important software that is OSS:

  • Linux: if you think in OSS, you think in Linux. One of the biggest projects, Linux is a kernel used in various operative systems. Today, most of the servers run ina Linux-based ambient.
  • OpenPGP: online privacy is crucial today, since almost everyone can get on the internet today. Criptography makes this work. OpenPGP (Pretty Good Key) is a program for end-to-end encryption, based on private and public keys.
  • MySQL: data is in this world. If we cannot store it, we cannot analyze it.
  • GNU: oh boy, where to start with this one. Linux is built upon GNU.
    flickr photo by blieusong https://flickr.com/photos/blieusong/7233963842 shared under a Creative Commons (BY-SA) license
    Continue reading "Open Source Software"

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"

Software Design Patterns

A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.

Design patterns reside in the domain of modules and interconnections. At a higher level there are architectural patterns that are larger in scope, usually describing an overall pattern followed by an entire system.

There are many types of design patterns: Structural patterns address concerns related to the high level structure of an application being developed. Computational patterns address concerns related to the identification of key computations. Algorithm strategy patterns address concerns related to high level strategies that describe how to exploit application characteristic on a computation platform. Implementation strategy patterns address concerns related to the realization of the source code to support how the program itself is organized and the common data structures specific to parallel programming. Execution patterns address concerns related to the support of the execution of an application, including the strategies in executing streams of tasks and building blocks to support the synchronization between tasks.

Resultado de imagen para software design patterns

There are:

  • Creational design patterns
  • Structural design patterns
  • Behavioral design patterns

Software Architecture

The software architecture of a program or computing system is a depiction of the system that aids in the understanding of how the system will behave.

Software architecture serves as the blueprint for both the system and the project developing it, defining the work assignments that must be carried out by design and implementation teams. The architecture is the primary carrier of system qualities such as performance, modifiability, and security, none of which can be achieved without a unifying architectural vision. Architecture is an artifact for early analysis to make sure that a design approach will yield an acceptable system. By building effective architecture, you can identify design risks and mitigate them early in the development process.


Software Design

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.

The final goal of any engineering activity is to create some kind of documentation. When a design effort is complete, the design documentation is given to the manufacturing team. This is a different set of people with a different set of skills from those of the design team. If the design documents truly represent a complete design, the manufacturing team can proceed to build the product. In fact, they can proceed to build much of the product without further assistance from the designers. After reviewing the software development life cycle today, it appears that the only software documentation that actually seems to satisfy the criteria of an engineering design are the source code listings.

What are the ramifications?

  • Software runs on computers. It is a sequence of ones and zeros. Software is not a program listing.
  • A program listing is a document that represents a software design. Compilers, linkers, and interpreters actually build (manufacture) software.
  • Software is very cheap to build. You just press a button.
  • Software is expensive to design because it is complicated and all phases of the development cycle are part of the design process.
  • Programming is a design activity; a good software design process recognizes this and does not hesitate to code when coding makes sense.
  • Coding actually makes sense more often than believed. Often the process of rendering the design in code will reveal oversights and the need for more design effort. The earlier this happens, the better.
  • Testing and debugging are design activities – they are the equivalents of design validation and refinement in other engineering disciplines. They can not be short changed.
  • Formal
    Continue reading "Software Design"