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?
The process of evaluating work-products (not the actual final product) of a development phase to determine whether they meet the specified requirements for that phase.
The process of evaluating software during or at the end of the development process to determine whether it satisfies specified business requirements.
To ensure that the product is being built according to the requirements and design specifications. In other words, to ensure that work products meet their specified requirements.
To ensure that the product actually meets the user’s needs, and that the specifications were correct in the first place. In other words, to demonstrate that the product fulfills its intended use when placed in its intended environment.
Are we building the product right?
Are we building the right product?
Plans, Requirement Specs, Design Specs, Code, Test Cases
The actual product/software.
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
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. UI brings together concepts from interaction design, visual design, and information architecture (usability.gov, n.d.).
A brief history:
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. Google has given everyone access to unbelievable amounts of information, Amazon to an amazing number of products, and Facebook to virtually everyone on the Internet (Green, 2015). This idea of simplicity as a selling point clashes with the old thinking of constantly adding new features to your product in order to make it more appealing to your customers.
What about the process?
What is the diference 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. Where UX Design is a more analytical and technical field, UI Design is closer to what we refer to as graphic design, though the responsibilities are somewhat more complex (Lamprecht, 2016).
Software maintenance is defined as the process of modifying a software system or component after delivery to correct faults, improve performance or other attributes, or adapt to a changed environment (NCSU, n.d.)
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.
Developers love building new things. The excitement, however, seems to wane once the project is done and out in the wild. Fighting the urge to move on to the Next Great Thing, this talk cover aspects of maintaining a project. Starting with the initial project setup, then moving into the issues surrounding ongoing work, refactoring, balancing feature requests and keeping clean,
Continue reading "Software maintenance"→
Open Source Software is an amazing new form of spreading knowledge, it is generally free software that can be used in any business. Developers of open source are people that choose to distribute their code publicly and make it available for anyone to use, as long as the users give credit back to the original developer, they can view and edit the original code in any way they want.
It works in mostly the same way as paid software, you get a license, you just don’t pay for it.
There is a great philosophy behind open source, users are basically co-developers because they can suggest their own ideas to improve the code and customize programs to their own needs and expectations.
Well first of all it is free, and who doesn’t like free stuff? Open software is a great way for businesses to save money and there are unlimited possibilities for growth because of its evolving nature and quality is always improving because of the multiple developers that can input their knowledge and share it with others. It is also great to be able to adapt to any businesses specific requirements.
A few Disadvantages:
Because of the lack of commercial products, some open source software has become targeted for developers only, and doesn’t get much attention from non-developers that could potentially use the software because of the programs forgetting to be “user-friendly” and user interfaces are not really developed.
Another thing is that when things go wrong it is very hard to search for help because of the constantly changing nature and reliability on certain developers.
Also, everyone being able to edit the source code is quite insecure because anyone with bad intentions can edit the code and exploit potential vulnerabilities.
There has to always be a business justification, if a company is going to spend a lot of money they must have a need for software, so first of all the software has to have a solid value proposition, so there should be a gain or benefit because of its use:
ROI = (GAIN FROM INVESTMENT-COST OF INVESTMENT)/COST OF INVESTMENT
A business implements a software and all of the stakeholders or trading partners use the software you will have a higher Return on Investment.
Vendor election is very important for a business because the software success will depend largely on the maintenance and installation process a company gives them , that is why installation and change must be very swift and not cause stress for the business and their employees.
To make sure that a project is executed according to plan there must be a set governance structure, this enables people to be able to hold themselves and other accountable for problems that might occur during the implementation process.
When a software will be upgraded or a new software will be implemented many problems emerge because people are already used to what they have and many people suffer from fear of change.
Because of this fear of change, people don’t pay attention to the training and then businesses spend a lot of money on things that will then not be used, not because of the SW not working properly or not being good enough but because employees in a company did not pay attention to the training and do not know how to use the new systems.
Open source refers to any program whose source code is made available for use or modification as users or other developers see fit. Open source software is usually developed as a public collaboration and made freely available (Rouse, 2009).
The principles of these idea are written in “The Open Source Definition”, which is a document published by the Open Source Initiative, to determine whether a software license can be labeled with the open-source certification mark. The definition was based on the Debian Free Software Guidelines, written and adapted primarily by Bruce Perens with input from Eric S. Raymond and others (Wikipedia, n.d.).
Linux is the best-known and most-used open source operating system. As an operating system, Linux is software that sits underneath all of the other software on a computer, receiving requests from those programs and relaying these requests to the computer’s hardware (opensource.com, n.d.).
The Linux Foundation
OpenSource.com (n.d.). What is Linux. opensource.com. Retrieved from: https://opensource.com/resources/what-is-linux
Rouse, M. (May 2009). Open Source. Tech Target. Retrieved from: http://searchenterpriselinux.techtarget.com/definition/open-source
Wikipedia (n.d.). The Open Source Definition. Wikipedia. Retrieved from: https://en.wikipedia.org/wiki/The_Open_Source_Definition
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/
Design patterns are optimized, reusable solutions to the programming problems that we encounter every day. A design pattern is not a class or a library that we can simply plug into our system; it’s much more than that. It is a template that has to be implemented in the correct situation (Bautista, 2010).
The Gang of Four are the authors of the book, “Design Patterns: Elements of Reusable Object-Oriented Software”. This important book describes various development techniques and pitfalls in addition to providing 23 object-oriented programming design patterns (Carr, 2009).
Gof design patterns (Vaka, 2013).
When To Use Software Design Patterns (Hegoda, 2013).
One of the hardest question is which software design pattern to be applied when. Usually there isn’t a pattern to figure out which design pattern should be used. It comes through the understanding & experience of using design patterns correctly (Hegoda, 2013).
Design patterns are related to object-oriented programming, in this video Derek Banas makes a great tutorial that includes the topics:
Carr, R. (22 August 2009). Gang of Four Design Patterns. Black Wasp. Retrieved from: http://www.blackwasp.co.uk/gofpatterns.aspx
Bautista, K. (7 July 2010). A Beginner’s Guide to Design Patterns. Envatotuts+. Retrieved from: https://code.tutsplus.com/articles/a-beginners-guide-to-design-patterns–net-12752
Hegoda, D. (6 October 2013). Why? When to? Software Design Patterns. dasonhegoda.com. Retrieved from: http://dasunhegoda.com/software-design-patterns/158/
Vaka, S. (16 January 2013). Gof design patterns. Slideshare. Retrieved from: http://www.slideshare.net/wwwvaka/gof-design-patterns-16016273
Software design is a process of defining the architecture, components, interfaces, and other characteristics of a system or component and planning for a software solution. After the purpose and specifications of software is determined, software developers will design or employ designers to develop a plan for a solution (archive.cnx.org, n.d).
Developing software involves many important steps and phases, just as any product does. The product’s efficacy, the customer’s satisfaction, and the cost-effectiveness are all as important as they are for any developed hardware product, and are likewise reliant on a multi-stepped and sometimes complicated process. The actual design, which can be thought of as a blue print, cannot begin until the requirements are determined. Software requirements documents help determine what the software must accomplish. After this step, the actual design is done, and then the coding can take place, after which testing, debugging, and maintenance occur (“Software design”, n.d., para 1).
We can see software design in three main levels:
Architectural Design – The architectural design is the highest abstract version of the system. It identifies the software as a system with many components interacting with each other (Tutorialspoint, n.d.).
High-level Design- Focuses on how the system along with all of its components can be implemented in forms of modules. It recognizes modular structure of each sub-system and their relation and interaction among each other(Tutorialspoint, n.d.)..
Detailed Design- It is more detailed towards modules and their implementations. It defines logical structure of each module and their interfaces to communicate with other modules(Tutorialspoint, n.d.).
UML is a modeling language used in software engineering that helps by providing a standard and organized way to visualize the design of a system. It was created with the intention of standardizing the diverse notational systems of software design.
Large applications must have a great structure so they can work succesfully under stressful conditions; they should enable scalability and high level security. Also their structure should be simple enough so that any programmer can be able to address any given problem within the code without having to learn how to give specific maintenance to that certain piece of code, also it enables code reuse.
UML’s capability to adapt allows you to use it in code programmed in any type of programming language, operating system, combination of hardware and network. It is specially useful in languages such as C++, Java and C#; but it works as well with COBOL, VB or Fortarn.
“Some tools on the market execute UML models typically in one of two ways: some tools execute your model interpretively in a way that lets you confirm that it really does would you want but without the scalability and speed that you need in your deployed application. Other tools […] generate program language code from UML, producing most of a bug-free, deployable application that runs quickly if the code generator incorporates best-practice scalable patterns […]” (Object Management Group, 2005).
With UML you can model:
– Structure Diagrams
– Behavior Diagrams
– Interaction Diagrams
If you want to start a UML based project you have to follow 3 simple steps:
1.- Select a Methodology (There are many types of methodologies; there are probably some that fit with what you want to do but others that don’t. It is important to pick the right one)