Software engineering, craft or an engineering discipline?
Software development and design is part art and part science, it can be understood as a systematic approach to the analysis, design, assessment, implementation, test, maintenance and reengineerig of software, that is, the application of engineering to software. In the Software engineering approach, several models for the software life cycle are defined, and many methodologies for the definition and assessment of the different phases of a life-cycle model
History of Software Engineering
The term Software Engineering became known after a conference in 1968, when the difficulties and pitfalls of designing complex systems were frankly discussed. A search for solutions began. It concentrated on better methodologies and tools. The most prominent were programming languages reflecting the procedural, modular, and then object-oriented styles. Software engineering is intimately tied to their emergence and improvement. Also of significance were efforts of systematizing, even automating program documentation and…
SQL Server and relational databases (RDBMS) have been the go-to databases for over 20 years. However, the increased need to process higher volumes, velocities, and varieties of data at a rapid rate has altered the nature of data storage needs for application developers. In order to enable this scenario, NoSQL databases that enable storing unstructured and heterogeneous data at scale have gained in popularity. For most developers, relational databases are the default or go-to option because a table structure is easy to understand and is familiar, but there are many reasons to explore beyond relational databases.
Relational database advantages
Its use is more adapted and the profiles that know it are mainstream, and therefore less expensive.
Due to the amount of time that they’ve been on the market, these tools have better support, product suites and add-ons to manage these databases.
The atomicity of operations on the database. This means that on these databases either the entire operation is done or it’s not done at all, using the famous ‘rollback’ technique.
The data must comply with integrity requirements both in data type and compatibility.
Disadvantages in relational databases
The atomicity of the operations plays a crucial part in the database’s performance.
Scalability, even though it’s usually tested in productive environments, it’s usually lower than NoSQL databases.
Advantages of a NoSQL database
the scalability and its decentralized style. It supports distributed structures.
They’re usually much more open and flexible as databases. They allow adapting to the needs of a project in a much easier way than entity related models.
Changes in the schemes can be done without having to stop the database.
Horizontal scaling: they’re capable of growing in device number, instead of having to reside in one large device.
Reasons of doing it? Well, software is a model of reality and reality changes. If software is found to be useful, satisfied users want to extend the functionality of the system. Software is much cheaper to change than hardware. As a result, changes are made in software wherever possible. Successful software survives well beyond the lifetime of the hardware for which it was written. Software need to be modified to run on new hardware and operating system.
There are some types of maintenance based on their characteristics:
Corrective Maintenance – This includes modifications and updates done in order to correct or fix problems, which are either discovered by user or concluded by user error reports.
Adaptive Maintenance – This includes modifications applied to keep the software product up-to date and tuned to the ever changing world of technology and business environment.
Perfective Maintenance – This includes updates done in order to keep the software usable over long period of time. It includes new features, new user requirements for refining the software and improve its reliability and performance.
Preventive Maintenance – It aims to attend problems, which are not significant at this moment but may cause serious issues in future.
Here’s a little video about the software maintenance process:
User Interface Design focuses on anticipating what users might need to do and ensuring that the interface has elements that are easy to access, understand, and use to facilitate those actions.
Keep it simple, Simple UI design means that anyone can have access to very sophisticated applications. When applications are well designed, there is no price for access. You may have to pay for the application, but you don’t have to spend time learning how to use it.
What is the difference of UX and UI? Well UX Design refers to the term User Experience Design, while UI Design stands for User Interface Design. Both elements are crucial to a product and work closely together. But despite their professional relationship, the roles themselves are quite different, referring to very different parts of the process and the design discipline.
Verification and validation is the generic name given to checking processes which ensure that the software conforms to its specification and meets the needs of the customer.The system should be verified and validated at each stage of the software development process using documents produced in earlier stages. Verification and validation thus starts with requirements reviews and continues through design and code reviews to product testing.Verification and validation are sometimes confused, but they are different activities (SQA, n.d.).
The difference between the two can be summarised as follows:
Validation: Are we building the right product?
Verification: Are we building the product right?
Every testing execution should follow some sequence and V Model is the perfect way to perform the testing approaches. In V Model there are some steps or sequences specified which should be followed during performing test approach. Once one step completes we should move to the next step. Test execution sequences are followed in V shape. In software development life cycle, V Model testing should start at the beginning of the project when requirement analysis starts. In V Model project development and testing should go parallel. Verification phase should be carried out from Software Testing Life Cycle where validation phase should be carried out from STLC.
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.
Los métodos para la implementación de software son:
Es el proceso de programación en el cual escribimos código y las líneas de código aumentan, por lo cual el tamaño del software crece. Si no se tiene muy en mente lo que hace cada módulo del código, se vuelve difícil recordar todo lo que hacía cada parte y cómo corría esa parte; por esta razón se empieza a volver complicado encontrar los errores del programa.
La solución a esto es la programación estructurada, con esto se intenta que los programadores a usar bucles en lugar de saltos de código. Así el código se vuelve más claro y mejora la eficiencia de la programación, con este orden se reduce el tiempo de programación y se organiza mejor el código.
La programación estructurada usa tres conceptos principales:
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…
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.
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.