Software verification and validation

software-verification-and-validation

Validation: Are we building the right system?. Verification: Are we building the system right?

Validation is concerned with checking that the system will meet the customer’s actual needs. Verification will help to determine whether the software is of high quality, but not if it is useful.

VandVtoolbox.jpg

Many different V&V tools are already in use at most climate modelling labs, but there is room for adding more tools to the toolbox, and for sharpening the existing tools. But the question of how best to do this must proceed from a detailed analysis of current practices and how effective they are.

V&V tasks during different phases of development lifecycle:

  • Planning:
    –  Verification of contract
    –  Evaluation of Concept document
    –  Performing risk analysis
  • Requirement phase
    –  Evaluation of software requirements
    –  Evaluation / analysis of the interfaces
    –  Generation of systems test plan
    –  Generation of Acceptance test plan
  • Design Phase
    –  Evaluation of software design
    –  Evaluation / Analysis of the Interfaces (UI)
    –  Generation of Integration test plan
    –  Generation of Component test plan
    –  Generation of test design
  • Implementation Phase
    –  Evaluation of source code
    –  Evaluation of documents
    –  Generation of test cases
    –  Generation of test procedure
    –  Execution of Components test cases
  • Test Phase
    –  Execution of systems test case
    –  Execution of acceptance test case
    –  Updating of traceability metrics
    –  Risk analysis
  • Installation and checkout phase
    –  Audit of installation and configuration
    –  Final test of the installation candidate build.
    –  Generation of final test report
  • Operation Phase
    –  Evaluation of new constraint
    –  Assessment of the change proposed
  • Maintenance Phase
    –  Evaluation of the anomalies
    –  Assessment of migration
    –  Assessment of the retrial features
    –  Assessment of proposed change.
    –  Validating the production issues.

 

Conclude: V&V processes determine whether products of

Continue reading "Software verification and validation"

User interface design

ui-design-inspiration

User Interface (UI) 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.

Choosing Interface Elements

Users have become familiar with interface elements acting in a certain way, so try to be consistent and predictable in your choices and their layout. Interface elements include but are not limited to:

  • Input Controls: buttons, text fields, checkboxes, radio buttons, dropdown lists, list boxes, toggles, date field
  • Navigational Components: breadcrumb, slider, search field, pagination, slider, tags, icons
  • Informational Components: tooltips, icons, progress bar, notifications, message boxes, modal windows
  • Containers: accordion

Best Practices for Designing an Interface

Once you know about your user, make sure to consider the following when designing your interface:

  • Keep the interface simple. The best interfaces are almost invisible to the user. They avoid unnecessary elements and are clear in the language they use on labels and in messaging.
  • Create consistency and use common UI elements. By using common elements in your UI, users feel more comfortable and are able to get things done more quickly.  It is also important to create patterns in language, layout and design throughout the site to help facilitate efficiency.
  • Be purposeful in page layout.  Consider the spatial relationships between items on the page and structure the page based on importance.
  • Strategically use color and texture. You can direct attention toward or redirect attention away from items using color, light, contrast, and texture to your advantage.
  • Use typography to create hierarchy and clarity. Carefully consider how you use typeface. Different sizes, fonts, and arrangement of the text to help increase scanability, legibility and readability.
  • Make sure that the system communicates what’s happening.  Always inform your users of location, actions, changes
    Continue reading "User interface design"

Software maintenance

tools

Is the modification of a software product after delivery to correct faults, to improve performance or other attributes.

There are number of reasons, why modifications are required, some of them are briefly mentioned below:

  • Market Conditions: Policies, which changes over the time, such as taxation and newly introduced constraints like, how to maintain bookkeeping, may trigger need for modification.
  • Client Requirements: Over the time, customer may ask for new features or functions in the software.
  • Host Modifications: If any of the hardware and/or platform (such as operating system) of the target host changes, software changes are needed to keep adaptability.
  • Organization Changes: If there is any business level change at client end, such as reduction of organization strength, acquiring another company, organization venturing into new business, need to modify in the original software may arise.

Types of maintenance

In a software lifetime, type of maintenance may vary based on its nature. It may be just a routine maintenance tasks as some bug discovered by some user or it may be a large event in itself based on maintenance size or nature.

  • Corrective Maintenance: This includes modifications and updations 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 and updations 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 modifications and 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: This includes modifications and updations to prevent future problems of the software. It aims to attend problems, which are not significant at this moment but
    Continue reading "Software maintenance"

Software implementation

software_implementation

 

Software implementation is a systematically structured approach to effectively integrate a software based service or component into the workflow of an organizational structure or an individual end-user.

Structured Programming

In the process of coding, the lines of code keep multiplying, thus, size of the software increases. Gradually, it becomes next to impossible to remember the flow of program. If one forgets how software and its underlying programs, files, procedures are constructed it then becomes very difficult to share, debug and modify the program.

Top-down analysis – A software is always made to perform some rational work. This rational work is known as problem in the software parlance. Thus it is very important that we understand how to solve the problem.

Modular Programming – While programming, the code is broken down into smaller group of instructions. These groups are known as modules, subprograms or subroutines. Modular programming based on the understanding of top-down analysis.

Structured Coding – In reference with top-down analysis, structured coding sub-divides the modules into further smaller units of code in the order of their execution.

Functional Programming

Functional programming is style of programming language, which uses the concepts of mathematical functions. A function in mathematics should always produce the same result on receiving the same argument. In procedural languages, the flow of the program runs through procedures, i.e. the control of program is transferred to the called procedure.

First class and High-order functions – These functions have capability to accept another function as argument or they return other functions as results.

Pure functions – These functions do not include destructive updates, that is, they do not affect any I/O or memory and if they are not in use, they can easily be removed without hampering the rest of the program.

Recursion – Recursion is a

Continue reading "Software implementation"

Software testing – what kinds of testing?

software_testing_types

Is an investigation conducted to provide stakeholders with information about the quality of the product or service under test. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation. Test techniques include the process of executing a program or application with the intent of finding software bugs.

Types of Software Testing:

Manual Testing

Manual testing includes testing a software manually, i.e., without using any automated tool or any script. In this type, the tester takes over the role of an end-user and tests the software to identify any unexpected behavior or bug. There are different stages for manual testing such as unit testing, integration testing, system testing, and user acceptance testing.

Automation Testing

Automation testing, which is also known as Test Automation, is when the tester writes scripts and uses another software to test the product. This process involves automation of a manual process. Automation Testing is used to re-run the test scenarios that were performed manually, quickly, and repeatedly.

Agile Testing
Agile Testing is a type of software testing that accommodates agile software development approach and practices. In an Agile development environment,testing is an integral part of software development and is done along with coding. Agile testing allows incremental and iterative coding and testing.

Beta Testing
This is a formal type of software testing that is carried out by end customers before releasing or handing over software to end users. Successful completion of Beta testing means customer acceptance of the software.

Component Testing
This type of software testing is performed by developers. Component testing is carried out after completing unit testing. Component testing involves testing a group of units as code together as a whole rather than testing individual functions, methods.

Functional

Continue reading "Software testing – what kinds of testing?"

Software testing – what kinds of testing?

software_testing_types

Is an investigation conducted to provide stakeholders with information about the quality of the product or service under test. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation. Test techniques include the process of executing a program or application with the intent of finding software bugs.

Types of Software Testing:

Manual Testing

Manual testing includes testing a software manually, i.e., without using any automated tool or any script. In this type, the tester takes over the role of an end-user and tests the software to identify any unexpected behavior or bug. There are different stages for manual testing such as unit testing, integration testing, system testing, and user acceptance testing.

Automation Testing

Automation testing, which is also known as Test Automation, is when the tester writes scripts and uses another software to test the product. This process involves automation of a manual process. Automation Testing is used to re-run the test scenarios that were performed manually, quickly, and repeatedly.

Agile Testing
Agile Testing is a type of software testing that accommodates agile software development approach and practices. In an Agile development environment,testing is an integral part of software development and is done along with coding. Agile testing allows incremental and iterative coding and testing.

Beta Testing
This is a formal type of software testing that is carried out by end customers before releasing or handing over software to end users. Successful completion of Beta testing means customer acceptance of the software.

Component Testing
This type of software testing is performed by developers. Component testing is carried out after completing unit testing. Component testing involves testing a group of units as code together as a whole rather than testing individual functions, methods.

Functional

Continue reading "Software testing – what kinds of testing?"

Software requirements elicitation and specification

slide_2

The software requirements are description of features and functionalities of the target system. Requirements convey the expectations of users from the software product. The requirements can be obvious or hidden, known or unknown, expected or unexpected from client’s point of view.

Requirement

The process to gather the software requirements from client, analyze and document them is known as requirement engineering. The goal of requirement engineering is to develop and maintain sophisticated and descriptive ‘System Requirements Specification’ document.

Requirement Engineering Process

  • easibility Study
  • Requirement Gathering
  • Software Requirement Specification
  • Software Requirement Validation

Feasibility study

When the client approaches the organization for getting the desired product developed, it comes up with rough idea about what all functions the software must perform and which all features are expected from the software.

Requirement Gathering

If the feasibility report is positive towards undertaking the project, next phase starts with gathering requirements from the user. Analysts and engineers communicate with the client and end-users to know their ideas on what the software should provide and which features they want the software to include.

Software Requirement Specification

SRS is a document created by system analyst after the requirements are collected from various stakeholders. SRS defines how the intended software will interact with hardware, external interfaces, speed of operation, response time of system, portability of software across various platforms, maintainability, speed of recovery after crashing, Security, Quality, Limitations etc.

Software Requirement Validation

After requirement specifications are developed, the requirements mentioned in this document are validated. User might ask for illegal, impractical solution or experts may interpret the requirements incorrectly. This results in huge increase in cost if not nipped in the bud. Requirements can be checked against following conditions –

Software requirements elicitation and specification

slide_2

The software requirements are description of features and functionalities of the target system. Requirements convey the expectations of users from the software product. The requirements can be obvious or hidden, known or unknown, expected or unexpected from client’s point of view.

Requirement

The process to gather the software requirements from client, analyze and document them is known as requirement engineering. The goal of requirement engineering is to develop and maintain sophisticated and descriptive ‘System Requirements Specification’ document.

Requirement Engineering Process

  • easibility Study
  • Requirement Gathering
  • Software Requirement Specification
  • Software Requirement Validation

Feasibility study

When the client approaches the organization for getting the desired product developed, it comes up with rough idea about what all functions the software must perform and which all features are expected from the software.

Requirement Gathering

If the feasibility report is positive towards undertaking the project, next phase starts with gathering requirements from the user. Analysts and engineers communicate with the client and end-users to know their ideas on what the software should provide and which features they want the software to include.

Software Requirement Specification

SRS is a document created by system analyst after the requirements are collected from various stakeholders. SRS defines how the intended software will interact with hardware, external interfaces, speed of operation, response time of system, portability of software across various platforms, maintainability, speed of recovery after crashing, Security, Quality, Limitations etc.

Software Requirement Validation

After requirement specifications are developed, the requirements mentioned in this document are validated. User might ask for illegal, impractical solution or experts may interpret the requirements incorrectly. This results in huge increase in cost if not nipped in the bud. Requirements can be checked against following conditions –

Open source software

open-source-softwareThe term Open Source refers to something people can modify and share because its design is publicly accessible. Originated in the context of software development to designate a specific approach to creating computer programs. Today,  Open source projects, products, or initiatives embrace and celebrate principles of open exchange, collaborative participation, rapid prototyping, transparency, meritocracy, and community-oriented development.

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.

A different between with open source software and other types of software is that some software has source code that only the person, team, or organization who created it and maintains exclusive control over it can modify.

People prefer using open source software because they have control, Training, Security, Stability.

Advantages and disadvantages

Open source software is usually easier to obtain than proprietary software, often resulting in increased usage. Additionally, the availability of an open source implementation of a standard can increase adoption of that standard It has also helped to build developer loyalty as developers feel empowered and have a sense of ownership of the end product.

Moreover, lower costs of marketing and logistical services are needed for OSS. OSS also helps companies keep abreast of technology developments. It is a good tool to promote a company’s image, including its commercial products. The OSS development approach has helped produce reliable, high quality software quickly and inexpensively.

Open source development offers the potential for a more flexible technology and quicker innovation. It is said to be more reliable since it typically has thousands of independent programmers testing and fixing bugs of the software. It

Continue reading "Open source software"

Software design patterns

page1thumb

Is a general reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code. It is a description or template for how to solve a problem that can be used in many different situations. Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system.

Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved. Patterns that imply mutable state may be unsuited for functional programming languages, some patterns can be rendered unnecessary in languages that have built-in support for solving the problem they are trying to solve, and object-oriented patterns are not necessarily suitable for non-object-oriented languages.

Design patterns can speed up the development process by providing tested, proven development paradigms. Effective software design requires considering issues that may not become visible until later in the implementation. Reusing design patterns helps to prevent subtle issues that can cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.

Design patterns are composed of several sections. Of particular interest are the Structure, Participants, and Collaboration sections. These sections describe a design motif: a prototypical micro-architecture that developers copy and adapt to their particular designs to solve the recurrent problem described by the design pattern.

Types of software desing patterns

  • Algorithm strategy patterns: Related to high-level strategies describing how to exploit application characteristics on a computing platform.
  • Computational design patterns: Related to key computation identification.
  • Execution patterns: Which address issues related to lower-level support of application execution, including strategies for executing streams of tasks and for the definition of building
    Continue reading "Software design patterns"