Sunday, December 5, 2021

Incremental Model

 

Software Engineering /Characteristics of Software Engineering:


Software Engineering is about teams and it is about quality. The problems to solve are so complex or large, that a single developer cannot solve them anymore. Software engineering is also about communication on a team and with internal and external stakeholders. Teams do not consist only of developers, but also of quality assurance testers, systems architects, system/platform engineers, customers, project managers and other stakeholders.

Implementation is no longer just writing code, but it is also following guidelines, writing documentation and also writing unit tests. But unit tests alone are not enough. The different pieces have to fit together. And we have to be able to spot problematic areas using metrics and improve the quality in those areas. The code should follow certain standards to make it easier for a team to work together. Once we are finished coding, that does not mean that we are finished with the project: for large projects maintaining software and other maintenance can keep many people busy for a long time.

Since there are so many factors influencing the success or failure of a project, the book covers project management skills. Software projects can be so large that we have to do careful planning. We walk through the factors that cause a project to fail and the success factors. Last but not least, a good software engineer, like any engineer, needs tools, and in this book we cover good tools for everyday use on large, and small, projects.



Software Engineering :

Software is defined as a collection of programs, documentation and operating procedures. The Institute of Electrical and Electronic Engineers (IEEE) defines software as a 'collection of computer programs, procedures, rules and associated documentation and data.' It possesses no mass, no volume, and no color, which makes it a non-degradable entity over a long period. Software does not wear out or get tired.

Software controls, integrates, and manages the hardware components of a computer system. It also instructs the computer what needs to be done to perform a specific task and how it is to be done. For example, software instructs the hardware how to print a document, take input from the user, and display the output.

Computer works only in response to instructions provided externally. Usually, the instructions to perform some intended tasks are organized into a program using a programming language like C, C++, Java, etc., and submitted to computer. Computer interprets and executes these instructions and provides response to the user accordingly. A set of programs intended to provide users with a set of interrelated functionalities is known as a software package. For example, an accounting software package such as Tally provides users the functionality to perform accounting-related activities.



Software Characteristics:

Different individuals judge software on different basis. This is because they are involved with the software in different ways. For example, users want the software to perform according to their requirements. Similarly, developers involved in designing, coding, and maintenance of the software evaluate the software by looking at its internal characteristics, before delivering it to the user. Software characteristics are classified into six major components.

•           Functionality:  Refers to the degree of performance of the software against its intended purpose.

•           Reliability: Refers to the ability of the software to provide desired functionality under the given conditions.

•           Usability: Refers to the extent to which the software can be used with ease.

•           Efficiency: Refers to the ability of the software to use system resources in the most effective and efficient manner.

•           Maintainability: Refers to the ease with which the modifications can be made in a software system to extend its functionality, improve its performance, or correct errors.

•           Portability: Refers to the ease with which software developers can transfer software from one platform to another, without (or with minimum) changes. In simple terms, it refers to the ability of software to function properly on different hardware and software platforms without making any changes in it.

In addition to the above mentioned characteristics, robustness and integrity are also important. Robustness refers to the degree to which the software can keep on functioning in spite of being provided with invalid data while integrity refers to the degree to which unauthorized access to the software or data can be prevented.

 

 

 


Classification of Software:

 

Software can be applied in countless fields such as business, education, social sector, and other fields. It is designed to suit some specific goals such as data processing, information sharing, communication, and so on. It is classified according to the range of potential of applications. These classifications are listed below.

 

•           System software

This class of software manages and controls the internal operations of a computer system. It is a group of programs, which is responsible for using computer resources efficiently and effectively. For example, an operating system is a system software, which controls the hardware, manages memory and multitasking functions, and acts as an interface between application programs and the computer.

 

•           Real-time software

This class of software observes, analyzes, and controls real world events as they occur. Generally, a real-time system guarantees a response to an external event within a specified period of time. An example of real-time software is the software used for weather forecasting that collects and processes parameters like temperature and humidity from the external environment to forecast the weather. Most of the defense organizations all over the world use real-time software to control their military hardware.

 

•           Business software

This class of software is widely used in areas where management and control of financial activities is of utmost importance. The fundamental component of a business system comprises payroll, inventory, and accounting software that permit the user to access relevant data from the database. These activities are usually performed with the help of specialized business software that facilitates efficient framework in business operations and in management decisions.

 

•           Engineering and scientific software

This class of software has emerged as a powerful tool in the research and development of next generation technology. Applications such as the study of celestial bodies, under-surface activities, and programming of an orbital path for space shuttles are heavily dependent on engineering and scientific software. This software is designed to perform precise calculations on complex numerical data that are obtained during real time environment.

 

 

•           Artificial intelligence (AI) software

 

This class of software is used where the problem-solving technique is non-algorithmic in nature. The solutions of such problems are generally non-agreeable to computation or straightforward analysis. Instead, these problems require specific problem-solving strategies that include expert system, pattern recognition, and game-playing techniques. In addition, they involve different kinds of search techniques which include the use of heuristics. The role of artificial intelligence software is to add certain degrees of intelligence to the mechanical hardware in order to get the desired work done in an agile manner.

 

•           Web-based software

This class of software acts as an interface between the user and the Internet. Data on the Internet is in the form of text, audio, or video format, linked with hyperlinks. Web browser is a software that retrieves web pages from the Internet. The software incorporates executable instructions written in special scripting languages such as CGI or ASP. Apart from providing navigation on the Web, this software also supports additional features that are useful while surfing the Internet.

 

•           Personal computer (PC) software

This class of software is used for both official and personal use. The personal computer software market has grown over in the last two decades from normal text editor to word processor and from simple paintbrush to advanced image-editing software. This software is used predominantly in almost every field, whether it is database management system, financial accounting package, or multimedia-based software. It has emerged as a versatile tool for routine applications.

Software Engineering is about teams and it is about quality. The problems to solve are so complex or large, that a single developer cannot solve them anymore. Software engineering is also about communication on a team and with internal and external stakeholders. Teams do not consist only of developers, but also of quality assurance testers, systems architects, system/platform engineers, customers, project managers and other stakeholders.

Implementation is no longer just writing code, but it is also following guidelines, writing documentation and also writing unit tests. But unit tests alone are not enough. The different pieces have to fit together. And we have to be able to spot problematic areas using metrics and improve the quality in those areas. The code should follow certain standards to make it easier for a team to work together. Once we are finished coding, that does not mean that we are finished with the project: for large projects maintaining software and other maintenance can keep many people busy for a long time.


 

 

Abstract:

 We present a general model and conceptual framework for specifying architectures for incremental processing in dialogue systems, in particular with respect to the topology of the network of modules that make up the system, the way information flows through this network, how information increments are ‘packaged’, and how these increments are processed by the modules. This model enables the precise specification of incremental systems and hence facilitates detailed comparisons between systems, as well as giving guidance on designing new systems

 

 

 

 

 

 

 

 Introduction of incremental model:

Incremental model in software engineering is a one which combines the elements of waterfall model in an iterative manner. It delivers a series of releases called increments which provide progressively more functionality for the client as each increment is delivered.

In the incremental model of software engineering, waterfall model is repeatedly applied in each increment. The incremental model applies linear sequences in a required pattern as calendar time passes. Each linear sequence produces an increment in the work.

Diagram Of Incremental Model



 

As from the diagram, you can see that there are 5 phases (tasks) which are carried out in each increment. If you want to see what activity is carried out in each phase, then check out this post: Phases of waterfall model as the phases are same?

The first increment is often a core product where the necessary requirements are addressed, and the extra features are added in the next increments. The core product is used and evaluated by the client. Once the customer assesses the core product, there is plan development for the next increment. Thus in every increment, the needs of the client are kept in mind, and more features and functions are added, and the core product is updated. This process continues till the complete product is produced.


The increments earlier to the main increment are called as “stripped down” versions of the final product. These increases form a base for customer evaluation. On this basis, the client can suggest new requirements if required.

If there are less number of employees to work on the project Incremental development model is very useful to complete the project before the deadline. In a project, early increments can be done with less number of people. In case if the core product is well-defined and understood more employees could be added if needed in the future increments.

One of the benefits of the Incremental process model is that it can be planned to manage technical risks.

Let’s now see the advantages and disadvantages of the incremental model.







Application of Incremental Model :

 

·                     Any difficulty in design, coding and testing a modification should signal the need for redesign or re-coding.

·                     Modifications should fit easily into isolated and easy-to-find modules. If they do not, some redesign is possibly needed.

·                     Modifications to tables should be especially easy to make. If any table modification is not quickly and easily done, redesign is indicated.

·                     Modifications should become easier to make as the iterations progress. If they are not, there is a basic problem such as a design flaw or a proliferation of patches.

·                     Patches should normally be allowed to exist for only one or two iterations. Patches may be necessary to avoid redesigning during an implementation phase.

·                     The existing implementation should be analyzed frequently to determine how well it measures up to project goals.

·                     Program analysis facilities should be used whenever available to aid in the analysis of partial implementations.

·                     User reaction should be solicited and analyzed for indications of deficiencies in the current implementation.

 



Characteristics of Incremental Model:

·                     System is broken down into many mini development projects.

·                     Partial systems are built to produce the final system.

·                     First tackled highest priority requirements.

·                     The requirement of a portion is frozen once the incremented portion is developed.



Advantages Of Incremental Model:

·                     Initial product delivery is faster.

·                     Lower initial delivery cost.

·                     Core product is developed first i.e. main functionality is added in the first increment.

·                     After each iteration, regression testing should be conducted. During this testing, faulty elements of the software can be quickly identified because few changes are made within any single iteration.

·                     It is generally easier to test and debug than other methods of software development because relatively smaller changes are made during each iteration. This allows for more targeted and rigorous testing of each element within the overall product.

·                     With each release a new feature is added to the product.

·                     Customer can respond to feature and review the product.

·                     Risk of changing requirement is reduced

·                     Work load is less.

 

Disadvantages of Incremental Model:

·                     Requires good analysis.

·                     Resulting cost may exceed the cost of the organization.

·                     Each phase of an iteration is rigid and do not overlap each other.

·                     As additional functionality is added to the product, problems may arise related to system architecture which was not evident in earlier prototypes.


 Scope:

·                     This model can be used when the requirements of the complete system are clearly defined and understood.

·                     Major requirements must be defined; however, some details can evolve with time.

·                     There is a need to get a product to the market early.

·                     A new technology is being used

·                     Resources with needed skill set are not available

·                     There are some high risk features and goals.

  

 Conclusion:

Thank you for joining me in the final segment in the Iterative and Incremental series.  During yesterday’s segment, I discussed Iteration Planning, and specifically how I planned my daily exercise (iteration) each morning by assessing multiple factors, while following my overall Implementation plan.

As I mentioned in yesterday’s blog, regardless of the type of exercise or how many increment sets I decide to complete each day, I apply the 6 minute interval sets and a time box approach.  When the 6 minutes are up, I stop the interval, even if I have more to give, saving the extra energy to apply to my next interval set.  

Time boxes are used to manage iterations.  Once the pre-determined iteration duration is reached – whether it is 2 weeks or 6 weeks or somewhere in between-- the iteration is complete.  Iteration group items (requirements) not fully addressed, in relation to the iteration goal, are addressed in the next iteration.  This approach helps eliminate the “rolling deadline” and better allows the project manager to assess the project progress earlier and more frequently than in traditional approaches.

Not only do smaller, more frequent milestones allow project managers to better assess potential schedule risks and slips, but process improvement is encouraged.  Even in my simple example, I learned, after a few interval sets, not to sprint uphill!  Now I plan my route more efficiently to ensure that I sprint on a level surface to reduce of the risk of not completing my increment. 

Project managers have often told me that they used an iterative and incremental approach long before OUM.   An effective project manager naturally organizes project work consistent with this principle, but a key benefit of OUM is that it formalizes this approach so it happens by design rather than by chance.   

I hope this series has encouraged you to think about additional ways you can incorporate the iterative and incremental principle into your daily and project life.  I further hope that you will share your thoughts and experiences with the rest of us.

 


References :

Ø    www.google.co.in

Ø    Pressman, Roger (2010). Software Engineering: A Practitioner's Approach. Boston: McGraw

Ø    Kim, Gene (22 January 2013). "DevOps distilled, Part 1: The three underlying principles" .

Ø    www.softdevteam.com/ Incremental- lifecycle.asp

Ø    What is Incremental model - advantages, disadvantages and when to use it

Ø     Methodology:: Development Methods

 

 

 

 

 




No comments:

Post a Comment

Incremental Model

  Software Engineering /Characteristics of Software Engineering : Software Engineering  is about teams and it is about quality. The proble...