In one of our previous post we have talked about software testing. There are many options totest your software, but now we have another topic related to discuss. Is software validation the same as software verification?
Validation can be described as verifying that you are building what the customer wants. Software validation is the process of ensuring that your application meets functional and non-functional requirements before coding and during development.
Verification if verifying that the product is being assembled correctly, after you have determined what you are supposed to build.
Keep in mind both concepts, the difference between validation and verification is functional. Validations is to cover all of the “requirements” of the user, and verification means “functionality” in all of thse parts.
For example, we have shown that software testing is performed in different layers, from Unit testing to Exploratory testing. In verification you guarantee that all of this parts really works appropiately before the project is “built”.
User Interface Design is an area of the Software development, that emphazises the users needs by the time he/she is implementing the software we developed.
We have seen that, for example, Google and all of the big trademarks have chosen the method of minimize the style of their User interfaces. But first, what exactly is a user interface?
Acording the definition of http://techterms.com:
A user interface, also called a “UI” or simply an “interface,” is the means in which a person controls a software application or hardware device. A good user interface provides a “user-friendly” experience, allowing the user to interact with the software or hardware in a natural and intuitive way.
Yes, there is one keyword “user friendly”. Just imagine for a second your 10 years old son, brother, cousin managing all of those characters in your application, compiling, running and checking for all of the options code style (This doesn´t mean there aren´t boyswho did this), but in general, we need to offer a simple manner for users, to actually use what we develop.
UI has gone as far that hardware applications has also a UI instead they are not as complex as software UI´s (you know, high and low level are always trying to healp the other one).
So lets know what are the fundamentals of designing a UI:
The user is the most important part, so know for whom the Software is oriented to and this way you will know how to make your UI, it different an Android app to play minecraft or something, than a API to connect with your banks accounts.
Use good patterns, you know, if people likes the interface they really are going to use it.
Sinse we have discussed different topics about software we haven´t had the chance to discuss about Software Maintenance.
We mention this in SDLC, did you remember this?
Maintenance is an important part of the Software process. This refers to keep tracking all the upgrades, updates and changes a code or software experiments and keep developing on them. We have also mentioned how Open Source Software makes life of some developers easier. And maintenance is agood example of and advantage of Open Source as we comented before.
But, this maintenance has a cost, the most elevated of the SDLC process.
Identification – identification of requirement of modification or maintenance.
Analysis – The modification is analyzed for its impact on the system including safety and security implications.
Design – New modules, which need to be replaced or modified, are designed against requirement specifications set in the previous stage.
Implementation – The new modules are coded with the help of structured design created in the design step.Every programmer is expected to do unit testing in parallel.
System Testing – Integration testing is done among newly created modules. Integration testing is also carried out between new modules and the system. Finally the system is tested as a whole, following regressive testing procedures.
Acceptance Testing – After testing the system internally, it is tested for acceptance with the help of users.
It´s time to talk a little about Open Source Software.
If you can remember, we published a post about Software Licenses. This are to ensure software are going to be well distributed/implemented/modified by all of the user that sees it.
Recently I want to comment I assist to a litlle course of Software optimization for Machine learning, this means having all the posible resources of the machine (Yes Hardware level) really beaing used for your algorithm, code or software in general.
Only as a little intro, we used AVX3 and AVX2 to compare time execution and time optimization in code. All of these in Linux using gcc.
I am telling this little history because the topic of today is Open Source Software.
Acording to https://opensource.com/
Open source software is software with source code that anyone can inspect, modify, and enhance.
“Source code” is the part of software that most computer users don’t ever see; it’s the code computer programmers can manipulate to change how a piece of software—a “program” or “application”—works. Programmers who have access to a computer program’s source code can improve that program by adding features to it or fixing parts that don’t always work correctly.
Yes, If you remember i.e. GNU GPL this source code can be implemented, changed and distributed free. This means if you want to modify a part of the source code of a GNU GPL and sell it to another you can´t.
Something to keep on mind:
Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone.
Or, less formally, “Given enough eyeballs, all bugs are shallow.” I dub this: “Linus’s Law”.
Implementation is the carrying out, execution, or practice of a plan, a method, or any design, idea, model, specification, standard or policy for doing something. As such, implementation is the action that must follow any preliminary thinking in order for something to actually happen. (Rouse, M. 2016)
Basically, implementation is the phase in which the system is used, when the purpose and requirements are fulfilled and it is ready to be deployed. In order for an implementation to be successful, it is important to follow a series of steps and planning stages a priori. There are many methodologies to choose from; however, it is certain that most failed projects mean lack of planning stages.
Webinar on how to implement successfully
It is important to keep the target market or user in mind whenever software implementations are made.
“Testing is the process of evaluating a system or its component(s) with the intent to find whether it satisfies the specified requirements or not.” (TutorialsPoint, 2016)
Software needs to be tested to determine if all requirements were met. If there are any errors, bugs, mistakes, or gaps in the system.
Who does testing?
The more the better. Different points of view are required in this process: Normally, there is a software testing team; however, software developers, managers, and users also participate.
It is important to implement this phase throughout the development.
Why? To save time, reduce costs and errors.
Testing never ends
This means that there is always some improvement to the system; therefore, testing is needed to see if there is something to be improved.
Types of testing:
There are lots of testing types including compatibility, performance, usability, security, recovery, comparison, stress, unit, load, regression, system, etc.
Most known testing types are alpha testing which is done at the end of the development phase, where the software is almost complete; beta, where end-users are the ones testing the system supposedly finished; and black-box which tests if the system covers requirements.
So here you are again. If this is your first time, welcome to my blog, and congratulations for trying to learn something new.
What am I talking about?
Software Design Patterns, which are solutions to typical problems that software developers face during development. Trial and error was the method in which these solutions were obtained. A lot of time has been invested in Design Patterns.
What is GOF, and why is it important?
GOF or Gang of Four is the name of the crew that began this movement. Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides published their book Design Patterns – Elements of Reusable Object-Oriented Software in 1994. Their method in two basic methods of OOP (objected-oriented programming):
“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.” (SEI|CM, 2016)
Basically, Software architecture is the process of creating a blueprint of your program. What will be its functionalities, applications, method, designs, etc. The main difference between Software Architecture and Software Design is that the architecture will demonstrate what the system will do, and the design will show how it will do it. Software architecture is represented on a high-scale abstract style; henceforth, is just a guide to show developers what the system is intended to do, and what it needs to work.
We have talked a little about Software Design, and to be more specific we have talked about UML. This diagrams tools help us to design our general idea of understandig how software is going to behave.
Software Architecture is a little bit different. In a Software Architecture diagram, you show the “skeleton” of your software, is like thinking in layers were you separate by layer the functionality and each layer is intercomunicates with the others surrounding them by priority or programming level.
Software application architecture is the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability. It involves a series of decisions based on a wide range of factors, and each of these decisions can have considerable impact on the quality, performance, maintainability, and overall success of the application.
The goal of architecture is to identify the requirements that affect the structure of the application. Good architecture reduces the business risks associated with building a technical solution.
Key Architecture Principles
Consider the following key principles when designing your architecture:
Build to change instead of building to last. Consider how the application may need to change over time to address new requirements and challenges, and build in the flexibility to support this.
Model to analyze and reduce risk. Use design tools, modeling systems such as Unified Modeling Language (UML), and visualizations where appropriate to help you capture requirements and architectural and design decisions, and to analyze their impact. However, do not formalize the model to the extent that it suppresses the capability to iterate and adapt the design easily.