First off, verification & validation are two terms that are common used in software development. They are commonly mistaken as if they were equal. Let’s begin by defining each term.
Verification is an evaluation of the process of creating a final product. It is useful to determine if the project development goes in the right track. Intermediary work is analyzed: documentation, data bases, etc.
Review of requirements
Review of design documents, including HDL and LDD
It is the process of evaluating the final product to determine if it matches the user needs. Basically all types of testing post-development are considered validation.
Prepare test requirements documents and other test specifications to analyze results.
Evaluate if these results is fit for use and reflects the project requirements.
Test for complicated values, stress, and all possible functionalities.
Check if errors exist, if they do, if a graceful message explain them.
Check business requirements, and if it is fit for it.
Although validation and verification might mean the same, they are two different concepts that are used in software engineering. Just to avoid confusion, everything can be narrowed to this:
Validation: Are we building the right system?
Verification: Are we building the system right?
It is true that both of them require approval, but it dependes on the type of approval you need. Validation checks that what is being done, is what we need. This has to do with complying with the requirements that are proposed by the project managers. Verification, in the other hand, is to check that what we are doing, is being done the correct way. It is all about complying the requirements, so everything converges on reading the requirements the good way.
I’m might contradict myself a bit, but verification and validation do have things in common. These are processes in order to assure software quality and guess what, it also has to do with software testing and evaluation. This is a diagram of what could comprehend each of the concepts, and also what they do have in common.
Credit to Easterbrook, from here I obtained most of this content.
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.
As an occasional poetry/tales writer, I tend (except in certain times) to reread my works before marking them as concluding. Not only to check spelling or logical mistakes, but to check the quality of them. Well, software developing is the same.
Software testing is crucial for functional software. Why? Because we tend to make mistakes. If we were able to write flawless code, then we might not need testing. But given that only Jeff Dean may be like this, we, the mortal programmers & engineers, must test.
Testing helps us finding bugs and fixing them. Bugs are those little errors in the code, which may be unnoticed at first. But, when you notice them, they are a big headache. So, detecting them during development is extremelly better than detecting them during production.
There are two big types of testing: static and dynamic. The first one consists on reading the code, checking out documentation, asking others to review your code. Basic stuff. However, dynamic testing is more complex. Dynamic testing consists in the opposite of static testing: do not read. Work. Try. Experiment.
Some examples of dynamic testing are:
Alpha & beta testing: give your project to a limited number of users. They will find bugs for you, because users are the worst enemy of programs.
Destructive testing: try to break the program. If you succeed, then you must fix it.
Regression test: when you modify the code a lot, test, because it will probably fail.
A/B testing: given two inputs which are different, see how both outputs change.
As for the levels of testing, we can find:
Unit testing: as it name suggests, it focuses on units, simple modules, each small brick of the big building.
Integration testing: it focuses on the integration between units.
Software testing is a process of rating properties of a computer system /program to decide whether it meets the specified requirements and produces the desired results. In process, you identify bugs in software product/project (Guru99, 2014).
You might want to think about some types of software testing:
Static testing can find bugs without executing code! It’s done during verification process. Documents and source code are reviewed. All this in terms of walkthrough, inspection, etc.
Dynamic testing includes actual execution of the code. It’s done during validation process. All this in terms of unit testing, integration, system testing, etc.
With countless types of software testing, it can be daunting to figure out what you should focus on and when.
Types of Software Testing (Singh, 2011).
Guru99. (2014). Software Testing As a Career – Complete Guide. Guru99. Retrieved from: http://www.guru99.com/software-testing-career-complete-guide.html
Singh, R. (3 June 2011). Types of Software Testing. Optimus Information. Retrieved from: http://www.optimusinfo.com/types-of-software-testing/
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.
“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.
Up to this point we have talked a little about different ways to organize the way you program. Look one thing, we are posting different tools to help you and help us manage the way we program.
This doesn´t mean you need always to follow this specific rules to program step by step.
Program is like talking, everybody is different than the others.
Taking in mind that, we are going to talk about some of the testing tools that are availabe in the web to help you test your software.
First let´s see the different test steps according Atlassian.com:
Retrived from: Atlassian.com
Exploratory Software Testing:
This is the test related with the workflow of your work. This is also related with how is looked your software as users, some users will be domain experts while others will be beginners. Exploratory software test covers all types of users and is fundamental for validating user experience,as opposed to focusing on a specific area of code.
Exploratory tests fit well with the Agile concept of user stories. A user story is a plain English description of how software should work. Engineers implement software based on user stories. Software test engineers and other users can easily turn a user story into a Test Session. Test Sessions are short, focused tests that can evaluate a user story for correctness.
Also, a Exploratory Test allows you to receive good feedback of your work. This means, updates, and all the upgrades of it are followed directly from the users, that are the final consumers of your software.
Remember, a happy customer is a happy developer.
This means, testing all the parts of the project or the software by units of its. All of the units are the minimal
Software testing is a phase of the Software Development Life Cycle that focuses on executing a program and finding bugs. The process should validate and verify that the program meets the functional and non-functional requirements gathered in the first stage of the process.
During testing, the developers should find out if the program meets the technical and business needs that should have guided the design and coding phases. The program should work the way it was expected to and should be able to be implemented in the next stage.
Testing can be done as a process rather that a unique activity. It should take place during the whole software life cycle in small steps, to prevent defects in the code and to verify that the design is being implemented correctly.
Testing must be planned so reports and progress can be documented and the status of a program can be defined and updated. Preparations must be made by selecting conditions and designing test cases.
Static testing can be done without executing the code and it is used to verify the source code and static analysis.
Dynamic testing is done when the code is executed so results can be demonstrated. It is done during validation, some examples are unit testing, integration testing and system testing.
Evaluations must be done during the testing phase to check that the needed criteria was met and whether the software passes the needed tests and can now be launched.
Software testing is a necessary part of software development because everyone makes mistakes (we are human after all) and they should be corrected because they may lead to unnecessary risks and expensive corrections. It is good to have someone else check these mistakes because they are more likely to spot these mistakes than the original
Quality is not only for handcrafts and arts, it is also involved in software engineering. Apparently, quality might be something quite immeasurable, but in reality, there are several ways to measure it in software. To accomplish this, there are mainly two methods for testing quality: defect and attributes. The latter being the most popular.
The defects approach is focused on determining the quality by counting the amount of defects, failure or lack of requirements. They are measured by their severity, likeliness to happen, and damage implications of the defect.
On the other hand, the attributes method focuses more on features and development quality itself. This method takes into consideration five main software characteristics:
Each one of them provides an insight on how each category performs throughout runtime process.
Software Quality Testing is one of the most important steps before releasing a new product. This phase marks the success of the product, because the testers are commonly the end user.