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.
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.
Refers mainly to the expected function of the product. Product or system features, or what the program does is what the functional requirements are. Definitely it is easier to determine the functional requirements than the non-functional because they are almost obvious.
What is a non-functional requirement?
These requirements refer mainly to the attributes that include performance, security, usability, etc. Developers usually miss these requirements because they focus mainly on the functional requirements. When addressing incorrectly these non-functional requirements, the system actually fails. For example, the lack of usability or performance can lead to frustration or system problems. This is why non-functional requirements are so important for a system to succeed.
The Waterfall Model was first Process Model to be introduced. It is also referred to as a linear-sequential life cycle model. It is very simple to understand and use. In a waterfall model, each phase must be completed before the next phase can begin and there is no overlapping in the phases.
Waterfall model is the earliest SDLC approach that was used for software development .
Waterfall Model design
Waterfall approach was first SDLC Model to be used widely in Software Engineering to ensure success of the project. In “The Waterfall” approach, the whole process of software development is divided into separate phases. In Waterfall model, typically, the outcome of one phase acts as the input for the next phase sequentially.
Following is a diagrammatic representation of different phases of waterfall model.
The advantage of waterfall development is that it allows for departmentalization and control. A schedule can be set with deadlines for each stage of development and a product can proceed through the development process model phases one by one.
Development moves from concept, through design, implementation, testing, installation, troubleshooting, and ends up at operation and maintenance. Each phase of development proceeds in strict order.
The disadvantage of waterfall development is that it does not allow for much reflection or revision. Once an application is in the testing stage, it is very difficult to go back and change something that was not well-documented or thought upon in the concept stage.
The requirement analysis is fundamental stage in SDLC. The information is used to plan the basic project approach and to conduct product in the technical areas. We are planning for the quality assurance requirements and found the risks associated with the project.
The product architecture is proposed and documented in a “Design Document Specification”. A design approach clearly defines all the architectural modules of the product along with its communication and data flow representation with the external and third party modules.
Integration and Implementation
Follow the coding guidelines defined by their organization and programming tools like compilers, interpreters, debuggers etc are used to generate the code.
Testing and documenting
Testing only stage of the product where products defects are reported, tracked, fixed and retested.
How to use the program and how it was completed.
Deployment and Maintenance
–Deployment: Once the product is tested and ready to be deployed it is released formally in the appropriate market
–Maintenance: It’s done for the existing customer base.
It is important to document all requirements to the software that you want to develop. You need to make interviews and all that stuff. Structure all incoming data, analyze them, consider all technical limitations that may arise on the client’s side, and come out with a ready-to-follow specification to meet the client’s needs. Consider also, the clients budget and time to spend on the project.
2. Design Phase
This involves the creation of a project scope document with mockups, or hand-drawn sketches, and a detailed software development specification.
To create a prototype, you need to figure out the following things:
The way the input data will be acquired and processed to produce the desired output data
The form in which the output data should be presented
Mockups are sent to UI/UX designers who turn them into colorful layouts.
3. Software Development Life Cycle Phase
This phase can also include the creation of an interactive prototype that is actually the skeleton of the future application. Such prototype helps define the overall system architecture. This step involves little coding, like coding buttons and simple forms, just to give the client an idea how the final product will operate. That’s why we included creation of a prototype into the software development phase.
4. Software Testing Phase
Once the product is developed, it should undergo a meticulous testing process to make sure that it solves the needs set forth during the requirements study phase. The client should be involved in the acceptance testing and try using it exactly the way it will be used when implemented . Once the major code problems are fixed, the software can be deployed. For minor fixes, a simple bug tracking system can
The term started in the ’60s. Writing software has envolved into a profession concerned with how best to maximize the quality of software and how to create it.
Emergence as a profession: by the early ’80s, to stand beside computer science and traditional engineering. In the software crisis of the 1960s, 1970s and 1980s, which identified many problems of software development. Many of the projects ran over budget and schedule, and a bunch of projects caused loss of life.
The software crisis has been fading from view, because it is psychologically extremely difficult to remain in crisis mode for a protracted period.
In the 1980’s the object oriented programming started to be a trend in software engineers, which allowed programmers to develop graphic user interfaces (GUI). In 1989, Tim Berners-Lee, a computer scientist from CERN, started to link papers with hypertext. And it was until the 1990’s that the browser was created to give users access to those papers.
In the last decade an important development was the “cloud” and software engineering has been focusing on creating apps for mobiles and tablets.
Thanks to my classmates who gave me inspiration to write this post. Love ya!
Software is more than just a program code. A program is an executable code, which serves some computational purpose. Software is considered to be collection of executable programming code, associated libraries and documentations. Software, when made for a specific requirement is called software product.
Engineering on the other hand, is all about developing products, using well-defined, scientific principles and methods.
High-quality software is characterized by:
High dependability (including safety, security and reliability)
A software product is said to have a life-cycle, or undergo a software process, which in software engineering terms consists essentially of two parts: development and evolution. Both involve traditional engineering phases, software development consisting primarily of concept creation, requirements specification, design, implementation, integration, testing, and deployment. On the other hand, software evolution involves operation and maintenance as well as some limited development activities aimed at improving the software.
En esta clase, el profesor aprovechó para presentarse y contarnos acerca de lo que abarcaría el curso. También creamos boletines informativos mediante MailChimp el cual desafortunadamente, al momento de enviar los boletines a nuestros compañeros de clase nos bloquearon la cuenta.
Además, empezamos con la creación de un prototipo para solucionar un problema que se diera en la actualidad. Debido a los tiempos, la actividad quedó pospuesta para la clase de la próxima semana.
Así fue nuestra primer día de clase en Fundamentos de Diseño Interactivo