Conversation

Your input fuels progress! Share your tips or experiences on prioritizing mental wellness at work. Let's inspire change together!

Join the discussion and share your insights now!

Comments 0


advertisement

What is Software Development in Agile

agile software development


Introduction

The electronic computers evolved in the 1940s. Hardware posed a major challenge at that time, and the early efforts were focused on designing the hardware. Hardware was where most technical difficulties existed. However, with the advent of new techniques, the problem subsided. With the availability of cheaper and more powerful machines, higher-level languages, and more user-friendly operating systems, the applications of computers grew rapidly. In addition, the nature of software engineering evolved from simple programming exercises to developing software systems, which were much larger in scope, and required great effort by many people.

The techniques for writing simple programs could not be scaled up for developing software systems, and the computing world found itself during a 'software crisis'. At that time, the term software engineering was coined in the conferences sponsored by the NATO Science Committee in Europe in 1960. The IEEE Glossary of Software Engineering defines software engineering as: "The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software."

Currently, computer systems are used in such diverse areas as business applications, scientific work, video games, air traffic control, and so on. This increase in the use of computers in every field has led to a dramatic increase in the need for software. Furthermore, the complexity of these systems is also increasing imagine the complexity of the software for aircraft control or a telephone network monitoring system. The complexity has grown at such a pace that one is unable to deal with it. Consequently, many years after the software crisis was declared, one finds that it has not yet ended. Software engineering is the discipline whose goal is to deal with this problem.

Today, software takes on a dual role. It is a product, and at the same time, the vehicle to deliver a product. As a product, it delivers the computing potential embodied by computer hardware. Whether it resides within a cellular phone or operates inside a mainframe computer, software is an information transformer producing, managing, acquiring, modifying, displaying, or transmitting information that can be as simple as a single bit or as complex as a multimedia simulation. As the vehicle used to deliver the product, the software acts as the basis for the control of the computer (operating systems), the communication of information (networks), and the creation and control of other programs (software tools and environments).


Software

Software is not merely a collection of computer programs. IEEE defines software as a collection of computer programs, procedures, rules, and associated documentation and data. Unlike a program, the programming system product is generally not used only by the author of the program but is used largely by people other than the developers of the system.

The different components of software are as follows:

  • Instructions or computer programs - The execution of these provides desired features, functions, and performance.
  • Data structures - These are used to store information required by programs to work on the process.
  • Documentation - These describe the operation and use of programs.

    Software falls under the category of programming systems products. The user may be of different backgrounds so it is generally provided with a proper user interface. The programs are thoroughly tested before operational use so that there are no bugs left behind. Also, as diverse people have diverse hardware environments use the product.
    A software process may be defined as "a framework for the tasks that are required to build high-quality software".


1. Need for Software

Software is developed to either automate or speed up an existing manual task with increased accuracy. It executes complex tasks that cannot be performed by an individual alone. A large amount of data or information can be managed efficiently and retrieved through software.

Some of the reasons that need software development are as follows:

  • A market trend or a demand
  • A business requirement
  • A client requirement
  • A legal requirement Need to upgrade from manual to automated processes
  • Systems such as transportation, medical, telecommunications, military, industrial, entertainment, and so on


Development of Software

The development of software is an ongoing process. As the business needs change, the software may become less useful with the new changes in the business requirements. Hence, it constantly needs to be updated or replaced.

1. Software as a Process

A software process is a set of activities, together with ordering constraints among them, such that if they are performed properly and by the ordering constraints, the desired result is produced. The desired result is high-quality software at a low cost. A process that does not scale up, that is, cannot handle large software projects or cannot produce good-quality software is not a suitable process.

The fundamental objectives of a process are optimality and scalability. Optimality means that the process should be able to produce high-quality software at low cost, and scalability means that it should also apply to large software projects. To achieve these objectives, a process should have some properties.

A few important properties are discussed as follows:

  • Predictability: The predictability of a process determines how accurately the outcome of the following process in a project can be predicted before the project is completed. If it is not predictable, the process is of limited use. If the past experiences to control costs and ensure quality are used, a predictable process must be used. With low predictability, the experience gained through projects is of little value. predictable process is also said to be under statistical control.

  • Maintainability: Maintenance costs generally exceed the development costs during the life of the software. Thus, to reduce the overall cost of software, the goal of development should be to reduce the maintenance effort.
    According to a survey done by Bell Labs, the effort distribution is within phases of a software process.

    Effort Distribution with Different Phases:

    Activity               |            Percentage
    Requirement        |              10%
    Design               |               20%
    Coding               |               20%
    Testing               |               50%



    Programmer Activity and Time Spent:

    Programmers Activity                  |      Time Percentage
    Writing Programs                       |          13%
    Reading programs and manuals      |          16%
    Job Communication                     |          32%
    Others (including Personal)            |          39%


    So, the goal of the process should not be to reduce the effort of design and coding but to reduce the cost of testing and maintenance.


  • Defect Removal and Prevention: Errors can occur at any stage of the development cycle. However, the cost of correcting the errors of different phases is not the same and depends on when the error is detected and corrected. If the error were corrected after coding, both the design and code would have to be changed, thereby increasing the cost of correction. So, one can deduce that errors should be detected in the same phase itself in which it has originated, and not wait until testing.

  • Process Improvement: A process is not a static entity. As the cost and quality of the software are dependent on the software process, it should be improved to satisfy goals such as quality improvement and cost reduction. The process must learn from the previous experiences. Each project done using the existing process must feed information back to the process itself, which can then use this information for self-improvement.


Software as a Product

The goal of any engineering activity is to build something- a product. The civil engineer builds a dam, the aerospace engineer makes a plane, and the electrical engineer makes a circuit. The product of software engineering is a 'software system'. It is not as tangible as the other products, but it is a product nonetheless. It serves a function.

Software unlike other products is not a physical entity. One cannot touch or feel it to get an idea about its quality. Software is a logical entity, and therefore, it is different from other engineered products. To gain an understanding of the software, let us examine the characteristics of software that make it different from other things that human beings build.

  • Software is developed or engineered, it is not manufactured:
    The software does not automatically roll out of an assembly line. There exist several tools for automating the process, especially for the generation of code; but the development depends on the individual skills and creative abilities of developers. This ability is difficult to specify, difficult to quantify, and even more difficult to standardize.

    In most engineering disciplines, the manufacturing process is considered carefully, because it determines the final cost of the product. Also, the process has to be managed closely so that defects are not introduced. The same considerations apply to computer hardware products For software, on the other hand, manufacturing is a trivial process of duplication. The software production process deals with design and implementation, rather than manufacturing.

  • Software is malleable:
    The characteristic that sets software apart from other engineering products is that software is malleable. The product itself can be modified (as opposed to its design) rather easily. This makes it quite different from other products such as cars and ovens.

    The malleability of software is often misused. While it is certainly possible to modify a plane or a bridge to satisfy some new needs to make it support more traffic this is not easy to implement. This modification is not taken lightly and it is not directly attempted on the product itself; the design is modified and the impact of change is verified extensively. Software engineers are also often asked to make modifications in their systems due to the malleability property. In practice, it is not easy.

    The code may be changed easily, but meeting the need for which the change was intended is not necessarily done so easily. One should indeed treat software similar to other engineering products in this regard: a software change must be viewed as a change in design rather than in code, which is just an instance of the product.

    The property of malleability of software can be used to advantage - provided it is done with a lot of discipline; this is where procedures and quality standards for making modifications are important.


  • The software does not 'wear out':
    Software does not enjoy physical wear and tear like tangible gadgets, collectively with machinery or apparel, making it wonderful. Unlike traditional devices that degrade over the years with use, software program programs stay unaffected with the aid of the use of continuous operation. Its sturdiness isn't constrained by way of mechanical additives, permitting it to feature indefinitely while properly maintained. This characteristic stands in stark evaluation of the finite lifespan of physical entities, illustrating the specific resilience of software in the virtual realm. As a result, the sturdiness of software programs is limitless, providing a perpetual and enduring presence inside the technological landscape.

  • Most software is custom-built, rather than assembled from existing components:
    In manufacturing engineered products, a design is first made identifying the various components that go into each product. These are then put together as per the original design. This approach affords an enormous amount of flexibility. Any number of people can work independently to produce different components so that the manufacture of one assembly can be entirely independent of another.

    Now, if the organization wants to increase production quantities or decrease the production cycle time, it can easily subcontract some of the jobs. The final product merely involves putting together several independently manufactured components. For example, for building hardware, the digital components are assembled to achieve proper functioning. These digital components can be ordered 'off the shelf'.

    Till now, software engineers do not have this luxury. Software can be ordered off the shelf, but as a complete unit, not as a software component that can be assembled into software programs. Fortunately, this situation is changing rapidly. The widespread use of object-oriented technology has resulted in the creation of software engineering components.

    Though the scenario is changing this is only the beginning of this concept. This concept is usually known as 'software reusability'.

Types of Software

Software can be classified into two categories:

  • Application software
  • System software

1. Application Software

Application software (also known as 'apps') is designed to allow the user of the system to complete a specific task or set of tasks. They include programs such as Web browsers, office software, games, and so on.

Application software can be packaged software (copyrighted software that meets the needs of a variety of users), custom software (tailor-made software developed at a user's request), freeware (copyrighted software provided at no cost), public-domain software (software donated for public use with no copyright restrictions), or shareware (copyrighted software distributed free for a trial period).

2. System Software

system software

System software sits directly on top of the computer's hardware components. It includes the range of software you would install to your system that enables it to function. This includes the operating system, drivers for hardware devices, linkers, and debuggers.

Operating System is a type of software that can be used for managing computer resources. It serves as the interface between a user, the application software, and the computer's hardware

Utility software is also a type of system software designed to help analyze, configure, optimize, or maintain a computer. Utility software includes anti-virus software, firewalls, disk defragmenters, and so on which helps to maintain and protect the computer system but does not directly interface with the hardware.


Software software development in agile introduction to software what is software need for software development of software software as a process software as a product software does not wear out types of software what is application software what is system

advertisement