Date and time note was modified$= dv.current().file.mtime
Date and time note was created$= dv.current().file.ctime

What is a Software??

A Software is a program or a set of programs that enable a computer to do a certain task or operation

There are two categories of software::

Engineering

Engineering is to provide solutions to real world problems by application of science and maths.

There are many types of Engineering in general Two of them I know are :

  1. Software Engineering
  2. Hardware Engineering

What is software engineering

Definitions

To create and develop the software in a systematic,time-bound and in a maintainable way by applying different principles of engineering.

Note

The applications of a systematic,disciplined,quantifiable,approach to development,operation and maintenance of a software i.e application of engineering to software development( IEEE Standard Computer Dictionary ,610.12 , ISBN 155937-079-3,1990)

For more definitions refer this

Goals of Software engineering

  • To produce better quality software
  • reduce the time taken to produce it.
  • improve the cost of making the software i.e its budget.
  • is according to customer requirements.

Program vs Software

  • program
    • A program is a set of instructions that is to perform a certain task.
  • software
    • contains set of programs
    • explains each part of the program.
    • defines the procedures for setting up and operating the software.

Components of Software

Software= Program + Documentation of the program parts + Operating procedures for setting up and other operations

Software Engineering Process

  • way in which we produce a software
  • process to develop a software are as much important as buying more tools and having knowledgeable developers.

Hindrances in improvement of software processes

  • There is not enough time for making changes in the way software get developed.

  • Lack of knowledge is another factor that leads to the software process being stagnant.

  • Ignorance from the software developer’s end.

  • lack of right motivation for improvement leads to difficulty in improvement.

  • insufficient commitment i.e there are no set expectations to develop on software processes.

    As current productivity is not affected by the developing good processes for future ,the commitment to deal with future is often lost.

Software Characteristics in comparison with hardware characteristics.

  1. Softwares don’t get get worn out as is the case with hardware, they just get retired/obsolete.
  2. Softwares don’t have any manufacturing overhead (Overhead here implies to the cost and raw materials required.) while hardware making does involve some manufacturing overhead
  3. Hardware generally reuse the components to build while in software there are only few fields where usability is utilised.
  4. Softwares are flexible and can be made to do almost anything.

Terminologies used in Software Engineering

  1. Deliverables: The various elements generated during particular stage of software engineering is known as deliverables. Example: source code, user manuals and operating guidelines.
  2. Milestone: The current status of the project is called a milestone. Example: Generation of design of software.
  3. Product: Set of deliverables delivered to the customer
  4. Process: what is a software process?

Software Development Life Cycle(SDLC)

In order to develop a good quality software the software process must be mature i.e we should be able to identify the efforts and time required for developing the software by looking at the software process.

Software Life Cycle

Software Life Cycle is the period of time from when software product is in ideation up till when software becomes obsolete.

Software development life cycle The period from ideation i.e concept creation of a software up till its implementation. Phases in software development life cycle:

  1. Requirements Phase
  2. Design
  3. Implementation
  4. Software Testing
  5. Deployment
  6. Maintenance

An abstraction or tool that helps us to represent a software life cycle is known as Software Life Cycle Model.

There are several types of SDLC generated for representing a software development life cycle.

  • Build and fix model
  • Waterfall model
  • Increment Process model
    • Iterative Enhancement Model
    • RAD(Rapid Application Development) Model
  • Evolutionary Process Model
    • Prototype model
    • Spiral Model

Software Testing

Software testing is the process of finding bugs/ errors in the software. It is the process to test the software against the requirements specification such that it is performing the way it is said to perform.

Software Testing Objectives.

  • Software testing must be able to meet the requirements set by the user and business. It should contain enough test cases according to the specification set by the business.
  • Software testing must be able to produce the final product that are according to the wishes of the customer the software is adhering to.
  • Software testing must be done with end user perspective. What it means is that the testing must be done keeping the end user in mind and what test cases to handle i.e to test the software as if the tester is the user of the software.
  • Software testing increases the confidence in the software. How ??
    • The more the tests are performed on the software, the more it is probable that the software would work in real world.
  • Software testing must also include evaluating the software requirements specifications and the documents that are produced during the course of development of the software.
  • The last goal to software testing is to find bugs in the software and that’s what it is we need to find bugs we have to write the test cases accordingly so that the test cases lead to the errors in the software and so that we can fix them.

Terminology

Types of inputs

  • Test cases : Test cases are the inputs we provide to the software and the state change it provides to the software system and the output henceforth generated .( Remember it as : ISO : Input.State.Output)
  • Test suite : Test Suite is the collection of the test cases that we test our software against for the bugs/errors.

Types of degeneracy in the software

  • Errors : Errors are the setbacks in the requirements set by the tester in the test cases and are produced due to the negligence of the programmers.
  • Bug: Bug is error found by the tester which was accepted by the developer.
  • Defect : A software before coming to the real world is tested by a sample audience which tests if the product is ready to be used in the real world (beta testing) if any issues are occurring during that period then that issue is named as a defect.
  • Fault : A software is running successfully in the real world and an error occurring during that period is known as a fault in the software.
  • Failure : A software is failure if it doesn’t fulfills the needs of the user.

Principles in testing

  1. Testing should be done for finding bugs in the code
  2. Testing is never time exhaustive i.e testing cannot be done once and then its over, its a continuous process.
  3. Testing should be done early because testing will solve most of the problems with the software in the software development life cycle itself.
  4. Pesticide Paradox : Testing a software against certain test cases only can lead the test cases turn obsolete and hence the software would not produce any errors or bugs against those test cases. Comparing it with real world we may say that a bug turns tolerant to the pesticide ( test case) when we induce it to the pesticide again and again.
  5. Testing is dependent on the context of the environment: Testing software for mobile is different than testing the environment for the desktop/web environment.

Types Of Testing

Unit/module testing

Unit testing involves testing units/modules present in the software. This is a white box testing technique and is performed generally by the developers.

What are units ??

Units are small parts of the software/code that have individual functionality.

During unit testing the software is tested following these steps

  1. The module interface is tested in a way that each input produces a correct output through the unit.
  2. The local data structure of the unit interface is checked keeping the log of the temporary data that is stored to maintain its integrity.
  3. The Boundary conditions are valuated such that the software is able to perform in boundaries/limits of the software.
  4. All independent path during software are executed at least once.
  5. Error handling is taken special care of during this testing.

Integration testing

This is the next step to unit testing. It combines several inter-connected units which are related to each other and tests to produce the right output. Checks for the hardware and software working and their integration too.

The goal of integration testing is to check if the units related to each other work together in an integral form or not.

Types of integration testing

  1. Big Bang testing technique In this technique all the components/modules/units are integrated together without integration testing them individually.

    Advantage: Each component doesn’t require to be tested.

    Disadvantage: As all the components are integrated together , the error when occurs can be removed by removing components one by one and checking for the error occurrence in which component and hence is a tedious process.

  2. Incremental Approach In this the components are incrementally added for testing. Meaning : First two components are taken and then if no error occurs, a component is added and process is repeated in the same particular fashion until all the components are tested in an integrated form.

    Advantage: The error handling is easier as only small components are to be tested at once. This tests the system as a whole. It checks if the system is acting as specified in the SRS(Software Requirement Specification) and is according to specific quality standards. It is performed by a specialised team.

System Testing

Goals and importance

  • It is done to fulfil the functional and non-functional requirements step in the SDLC.

Incremental Approach types of system testing

  1. Alpha testing Alpha testing is the first stage in any software system testing. In this type of testing we perform a collection of other testing techniques as follows

    1. Unit testing
    2. Integration testing
    3. System testing

Alpha testing is the complete testing to determine if the system is working as complete unit and each its components are working as specified.

  1. Beta testing Beta testing is the testing of the software before it enters the mainstream/ real world. In this type of testing the software before coming to the real world is tested by a sample audience which tests if the product is ready to be used in the real world or not.

  2. User Acceptance testing/Acceptance Testing Testing the software in order to check if it is developed according to the standards specified. UAT checks if the software includes all the customer requirements or not. So essentially UAT depends on customer to reject or accept the software entirely.

Regression testing

When we test a software and bugs are found we make changes into that part of the software and are done with. But in real use case we should notice that making changes in one part of the software might lead to production of errors in other part of the software.This is where regression testing comes into play. We regress test the software for any affecting parts of the software when a unit is tested. Checks for any breaking changes that are in place by performing the tests on the earlier unchanged code after the changes are made.

Types of Regression testing

  1. Normal In this the tests are performed during the cycle of development so that any breaking changes can be reverted as soon as the change is made or the fix is done to any component that breaks any other components’ functionality.
  2. Final In this the tests are performed to validate the software build that doesn’t change over a period of time. It is done before the acceptance testing after which the software is shifted to the customer end and hence is known as pre-acceptance testing.

Performance testing

This type of testing involves testing the software for the performance issues i.e if the software is performing a action in x amount of time when it is suppose to do it in y amount of time etc. It deals with the responsiveness and the stability of the software under certain workload.

Use case of Performance testing

  • Comparison between two system performances
  • Finds the part of the system to perform badly.

Types of testing

  1. Stress testing This tests the software compatibility to deal with unfavorable instances/ incidents.It tests for the limits of the software.

  2. Load Testing This tests the software under certain workload such as testing it for the load of many concurrent users at the same time for certain type of transaction.

  3. Soak Testing This tests the software under the certain heavy workload for a pre-longed period of time such that we can see if the performance of software is as good as that of the beginning of the test.

  4. Spike testing The software being under heavy load suddenly such that it tests that it can deal with abrupt loads or not.

  5. Configuration testing The software is tested for how performance changes with change in configuration of the software.

Functional testing

This tests for the individual units producing the functions as set by the specification.

Usability Testing

This type of testing involves testing the software for its usability factor. See difference between Usability Vs Usefulness for clear understanding as to what is usability. This includes what type of interface user needs, how the functions become easier for user to understand and so on.

Retesting

The software is retested after the bug is removed so as to check if the output is now satisfying the software requirements or not.

Strategies to software testing

Other Concepts

  • path testing : flow graph and dd graph
  • DD Graph
    • first step of path testing is drawing a flow graph
    • after drawing a flow graph the dd graph is drawn
    • any previous sequential nodes are converted into a single node.
  • Cyclomatic complextiy (imp)
    • internal view of code
    • no of independent paths are found
    • max linearly independent paths are found
    • divided into 3 methods
    • Method 1:
      • uses number of edges(E) and number of nodes(N) of the control flow graph
    • Method 2:
      • bounded regions that is the area bounded by the nodes edges are utilised.

Product Management

JIRA

Software Design

-Rule of least power - Wikipedia

Software Architechture

Frontend Software Architechture

A System’s software architecture is the set of significant design decisions about how the software is organized to promote desired quality attributes and other properties.

Four Dimensions of Architechture

  1. Architecture Style
  2. Architecture Characteristics (Quality Attributes)