Turn Desktop View Off
by Dinesh Thakur

Bottom-Up Design: Any design method in which the most primitive operations are specified first and the combined later into progressively larger units until the whole problem can be solved: the converse of TOP-DOWN DESIGN. For example, a communications program might be built by first writing a routine to fetch a single byte from the communications port and working up from that.

 
by Dinesh Thakur

Before starting a software project, it is essential to determine the tasks to be performed and properly manage allocation of tasks among individuals involved in the software development. Hence, planning is important as it results in effective software development.

 
by Dinesh Thakur

Proper project management is essential for the successful completion of a software project and the person who is responsible for it is called project manager. To do his job effectively, the project manager must have certain set of skills. This section discusses both the job responsibilities of project manager and the skills required by him.

 
by Dinesh Thakur

Implementing and executing software metrics is a cumbersome task as it is difficult to manage the technical and human aspects of the software measurement. Also, there exist many issues which prevent the successful implementation and execution of software metrics. These issues are listed below.

 
by Dinesh Thakur

Lines of code and functional point metrics can be used for estimating object-oriented software projects. However, these metrics are not appropriate in the case of incremental software development as they do not provide adequate details for effort and schedule estimation. Thus, for object-oriented projects, different sets of metrics have been proposed. These are listed below.

 
by Dinesh Thakur

The aim of the software developer is to develop high-quality software within a specified time and budget. To achieve this, software should be developed according to the functional and performance requirements, document development standards, and characteristics expected from professionally developed software. Note that private metrics are collected by software engineers and then assimilated to achieve project-level measures. The main aim at the project level is to measure both the errors and defects. These measures are used to derive metrics, which provide an insight into the efficacy of both individual and group software quality assurance and software control activities.

 
by Dinesh Thakur

Measurement is done by metrics. Three parameters are measured: process measurement through process metrics, product measurement through product metrics, and project measurement through project metrics.

 
by Dinesh Thakur

An effective software metrics helps software engineers to identify shortcomings in the software development life cycle so that the software can be developed as per the user requirements, within estimated schedule and cost, with required quality level, and so on. To develop effective software metrics, the following steps are used.

 
by Dinesh Thakur

Once measures are collected they are converted into metrics for use. IEEE defines metric as 'a quantitative measure of the degree to which a system, component, or process possesses a given attribute.' The goal of software metrics is to identify and control essential parameters that affect software development. Other objectives of using software metrics are listed below.

 
by Dinesh Thakur

To assess the quality of the engineered product or system and to better understand the models that are created, some measures are used. These measures are collected throughout the software development life cycle with an intention to improve the software process on a continuous basis. Measurement helps in estimation, quality control, productivity assessment and project control throughout a software project. Also, measurement is used by software engineers to gain insight into the design and development of the work products. In addition, measurement assists in strategic decision-making as a project proceeds.

 
by Dinesh Thakur

In today's world, change is an ongoing process and Information Technology (IT) has contributed to changes in every aspect of life (such as business and education). This is due to the emerging technologies. Nowadays, the business environment needs to use the new technologies available in order to be successful and compete with similar organizations in the market. To incorporate new technology into business activities, Technology Change Management (TCM) is used. TCM is a process of identifying, selecting, and evaluating new technologies (such as tools, methods, and processes) to incorporate the most effective technology in a software system.

 
by Dinesh Thakur

Software maintenance involves modifying the existing software system and recording all the modifications made to it. For this, various maintenance tools are used. One of the commonly used maintenance tool is text editor. This tool creates a copy of the documentation or the code. The key feature of this tool is that it provides a medium to roll back (when required) from the current version of a file to the previous one. Several other tools used in software maintenance are listed in Table.

 
by Dinesh Thakur

To perform software maintenance effectively, various techniques are used. These include software configuration management, impact analysis, and software rejuvenation, all of which help in maintaining a system and thus, improve the quality of the existing system.

 
by Dinesh Thakur

Studies suggest that the software maintenance process begins without proper knowledge of the software system. This occurs because the software maintenance team is unaware of the requirements and design documentation. Also, traditional models fail to capture the evolutionary nature of the software. To overcome these problems, software maintenance models have been proposed, which include quick fix model, iterative enhancement model, and reuse-oriented model.

 
by Dinesh Thakur

Changes are implemented in the software system by following a software maintenance process, which is known as Software Maintenance Life Cycle (SMLC).This life cycle comprises seven phases, namely, problem identification, analysis, design, implementation, system testing, acceptance testing, and delivery phase.

 
by Dinesh Thakur

There are four types of maintenance, namely, corrective, adaptive, perfective, and preventive. Corrective maintenance is concerned with fixing errors that are observed when the software is in use. Adaptive maintenance is concerned with the change in the software that takes place to make the software adaptable to new environment such as to run the software on a new operating system. Perfective maintenance is concerned with the change in the software that occurs while adding new functionalities in the software. Preventive maintenance involves implementing changes to prevent the occurrence of errors. The distribution of types of maintenance by type and by percentage of time consumed.



 
by Dinesh Thakur

Over a period of time, the developed software system may need modifications according to the changing user requirements. Such being the case, maintenance becomes essential. The software maintenance process comprises a set of software engineering activities that occur after the software has been delivered to the user.

 
by Dinesh Thakur

On successful culmination of software testing, debugging is performed. Debugging is defined as a process of analyzing and removing the error. It is considered necessary in most of the newly developed software or hardware and in commercial products/ personal application programs. For complex products, debugging is done at all the levels of the testing.

 
by Dinesh Thakur

Software testing can be performed either manually or using automated testing tools. In manual testing, test cases are generated, the software is executed, and the result produced is documented manually. Hence, manual testing is considered to be costly and time-consuming. To reduce the time and cost, automated testing is used. There are many testing tools available that are useful in several places while testing software product. These tools can be categorized as static testing and dynamic testing tools.

 
by Dinesh Thakur

The shift from traditional to object-oriented environment involves looking at and reconsidering old strategies and methods for testing the software. The traditional programming consists of procedures operating on data, while the object-oriented paradigm focuses on objects that are instances of classes. In object-oriented (OO) paradigm, software engineers identify and specify the objects and services provided by each object. In addition, interaction of any two objects and constraints on each identified object are also determined. The main advantages of OO paradigm include increased reusability, reliability, interoperability, and extendibility.

 
by Dinesh Thakur

Once the software is developed it should be tested in a proper manner before the system is delivered to the user. For this, two techniques that provide systematic guidance for designing tests are used. These techniques are discussed here.

 
by Dinesh Thakur

The software is tested at different levels. Initially, the individual units are tested arid once they are tested, they are integrated and checked for interfaces established between them. After this, the entire software is tested to ensure that the output produced is according to user requirements. There are four levels of software testing, namely, unit testing, integration testing, system testing, and acceptance testing.

 
by Dinesh Thakur

To perform testing in a planned and systematic manner, software testing strategy is developed. A testing strategy is used to identify the levels of testing which are to be applied along with the methods, techniques, and tools to be used during testing. This strategy also decides test cases, test specifications, test case decisions, and puts them together for execution.

Developing a test strategy, which efficiently meets the requirements of an organization, is critical to the success of software development in that organization. Therefore, a software testing strategy should contain complete information about the procedure to perform testing and the purpose and requirements of testing.

The choice of software testing strategy is highly dependent on the nature of the developed software. For example, if the software is highly data intensive then a strategy that checks structures and values properly to ensure that all inputs given to the software are correct and complete should be developed. Similarly, if it is transaction intensive then the strategy should be such that it is able to check the flow of all the transactions. The design and architecture of the software are also useful in choosing testing strategy. A number of software testing strategies are developed in the testing process. All these strategies provide the tester a template, which is used for testing. Generally, all testing strategies have following characteristics.

  1. Testing proceeds in an outward manner. It starts from testing the individual units, progresses to integrating these units, and finally, moves to system testing.
  2. Testing techniques used during different phases of software development are different.
  3. Testing is conducted by the software developer and by an ITG.
  4. Testing and debugging should not be used synonymously. However, any testing strategy must accommodate debugging with itself.

Types of Software Testing Strategies

There are different types of software testing strategies, which are selected by the testers depending upon the nature and size of the software. The commonly used software testing strategies are listed below.

                     Types of Software Testing Strategy

  1. Analytic testing strategy: This uses formal and informal techniques to access and prioritize risks that arise during software testing. It takes a complete overview of requirements, design, and implementation of objects to determine the motive of testing. In addition, it gathers complete information about the software, targets to be achieved, and the data required for testing the software.
  2. Model-based testing strategy: This strategy tests the functionality of the software according to the real world scenario (like software functioning in an organization). It recognizes the domain of data and selects suitable test cases according to the probability of errors in that domain.
  3. Methodical testing strategy: It tests the functions and status of software according to the checklist, which is based on user requirements. This strategy is also used to test the functionality, reliability, usability, and performance of the software.
  4. Process-oriented testing strategy: It tests the software according to already existing standards such as the IEEE standards. In addition, it checks the functionality of the software by using automated testing tools.
  5. Dynamic testing strategy: This tests the software after having a collective decision of the testing team. Along with testing, this strategy provides information about the software such as test cases used for testing the errors present in it.
  6. Philosophical testing strategy: It tests the software assuming that any component of the software can stop functioning anytime. It takes help from software developers, users and systems analysts to test the software.

A testing strategy should be developed with the intent to provide the most effective and efficient way of testing the software. While developing a testing strategy, some questions arise such as: when and what type of testing is to be done? What are the objectives of testing? Who is responsible for performing testing? What outputs are produced as a result of testing? The inputs that should be available while developing a testing strategy are listed below.

  1. Type of development project
  2. Complete information about the hardware and software components that are required to develop the software
  3. Risks involved
  4. Description of the resources that are required for testing
  5. Description of all testing methods that are required to test various phases of SDLC
  6. Details of all the attributes that the software is unable to provide. For example, software cannot describe its own limitations.

The output produced by the software testing strategy includes a detailed document, which indicates the entire test plan including all test cases used during the testing phase. A testing strategy also specifies a list of testing issues that need to be resolved.

An efficient software testing strategy includes two types of tests, namely, low-level tests and high-level tests. Low-level tests ensure correct implementation of small part of the source code and high-level tests ensure that major software functions are validated according to user requirements. A testing strategy sets certain milestones for the software such as final date for completion of testing and the date of delivering the software. These milestones are important when there is limited time to meet the deadline.

In spite of these advantages, there are certain issues that need to be addressed for successful implementation of software testing strategy. These issues are discussed here.

  1. In addition to detecting errors, a good testing strategy should also assess portability and usability of the software.
  2. It should use quantifiable manner to specify software requirements such as outputs expected from software, test effectiveness, and mean time to failure which should be clearly stated in the test plan.
  3. It should improve testing method continuously to make it more effective.
  4. Test plans that support rapid cycle testing should be developed. The feedback from rapid cycle testing can be used to control the corresponding strategies.
  5. It should develop robust software, which is able to test itself using debugging techniques.
  6. It should conduct formal technical reviews to evaluate the test cases and test strategy. The formal technical reviews can detect errors and inconsistencies present in the testing process.


 
by Dinesh Thakur

A test case provides the description of inputs and their expected outputs to observe whether the software or a part of the software is working correctly. IEEE defines test case as 'a set of input values, execution preconditions, expected results and execution post conditions, developed for a particular objective or test condition such as to exercise a particular program path or to verify compliance with a specific requirement.' Generally, a test case is associated with details like identifier, name, purpose, required inputs, test conditions, and expected outputs.

 
by Dinesh Thakur

A test plan describes how testing would be accomplished. It is a document that specifies the purpose, scope, and method of software testing. It determines the testing tasks and the persons involved in executing those tasks, test items, and the features to be tested. It also describes the environment for testing and the test design and measurement techniques to be used. Note that a properly defined test plan is an agreement between testers and users describing the role of testing in software.

 
by Dinesh Thakur

After the implementation phase, the testing phase begins. Testing of software is critical, since testing determines the correctness, completeness and quality of the software being developed. Its main objective is to detect errors in the software.

 
by Dinesh Thakur

Code documentation is a manual-cum-guide that helps in understanding and correctly utilizing the software code. The coding standards and naming conventions written in a commonly spoken language in code documentation provide enhanced clarity for the designer. Moreover, they act as a guide for the software maintenance team (this team focuses on maintaining software by improving and enhancing the software after it has been delivered to the end user) while the software maintenance process is carried out. In this way, code documentation facilitates code reusability.

 
by Dinesh Thakur

While writing software code, several coding tools are used along with the programming language to simplify the tasks of writing the software code. Note that coding tools vary from one programming language to another as they are developed according to a particular programming language. However, sometimes a single coding tool can be used in more than one programming language. Generally, coding tools comprises text editors, supporting tools for a specific programming language, and the framework required to run the software code. Some of the commonly used coding tools are listed in Table.

 
by Dinesh Thakur

Code verification is the process used for checking the software code for errors introduced in the coding phase. The objective of code verification process is to check the software code in all aspects. This process includes checking the consistency of user requirements with the design phase. Note that code verification process does not concentrate on proving the correctness of programs. Instead, it verifies whether the software code has been translated according to the requirements of the user.

 
by Dinesh Thakur

Programming refers to the method of creating a sequence of instructions to enable the computer to perform a task. It is done by developing logic and then writing instructions in a programming language. A program can be written using various programming practices available. A programming practice refers to the way of writing a program and is used along with coding style guidelines. Some of the commonly used programming practices include top-down programming, bottom-up programming, structured programming, and information hiding.



 
by Dinesh Thakur

This methodology refers to a set of well-documented procedures and guidelines used in the analysis, design, and implementation of programs. Coding methodology includes a diagrammatic notation for documenting the results of the procedure. It also includes an objective set (ideally quantified) of criteria for determining whether the results of the procedure are of the desired quality. The steps to use coding' methodology are listed below.

 
by Dinesh Thakur

Writing an efficient software code requires a thorough knowledge of programming. This knowledge can be implemented by following a coding style which comprises several guidelines that help in writing the software code efficiently and with minimum errors. These guidelines, known as coding guidelines, are used to implement individual programming language constructs, comments, formatting, and so on. These guidelines, if followed, help in preventing errors, controlling the complexity of the program, and increasing the readability and understandability of the program.

 
by Dinesh Thakur

The code written for software should be according to the requirements of the users. A program is said to be good if the software code is flawless or contains minimum errors. For the effective performance of the software, some particular features are required in almost all languages that are used to write the software code. These features are listed below.

 
by Dinesh Thakur

IEEE defines software design documentation as 'a description of software created to facilitate analysis, planning, implementation, and decision-making. This design description is -used as a medium for communicating software design information and can be considered as a blueprint or model of the system.



 
by Dinesh Thakur

Software design reviews are a systematic, comprehensive, and well-documented inspection of design that aims to check whether the specified design requirements are adequate and the design meets all the specified requirements. In addition, they also help in identifying the problems (if any) in the design process. IEEE defines software design review as 'a formal meeting at which a system's preliminary or detailed design is presented to the user, customer, or other interested parties for comment and approval.' These reviews are held at the end of the design phase to resolve issues (if any) related to software design decisions, that is, architectural design and detailed design (component-level and interface design) of the entire software or a part of it (such as a database).

 
by Dinesh Thakur

As soon as the first iteration of architectural design is complete, component-level design takes place. The objective of this design is to transform the design model into functional software. To achieve this objective, the component-level design represents -the internal data structures and processing details of all the software components (defined during architectural design) at an abstraction level, closer to the actual code. In addition, it specifies an interface that may be used to access the functionality of all the software components.

 
by Dinesh Thakur

Requirements of the software should be transformed into an architecture that describes the software's top-level structure and identifies its components. This is accomplished through architectural design (also called system design), which acts as a preliminary 'blueprint' from which software can be developed. IEEE defines architectural design as 'the process of defining a collection of hardware and software components and their interfaces to establish the framework for the development of a computer system.' This framework is established by examining the software requirements document and designing a model for providing implementation details. These details are used to specify the components of the system along with their inputs, outputs, functions, and the interaction between them. An architectural design performs the following functions.



 
by Dinesh Thakur

Data design is the first design activity, which results in less complex, modular and efficient program structure. The information domain model developed during analysis phase is transformed into data structures needed for implementing the software. The data objects, attributes, and relationships depicted in entity relationship diagrams and the information stored in data dictionary provide a base for data design activity. During the data design process, data types are specified along with the integrity rules required for the data. For specifying and designing efficient data structures, some principles should be followed. These principles are listed below.



 
by Dinesh Thakur

Once the requirements document for the software to be developed is available, the software design phase begins. While the requirement specification activity deals entirely with the problem domain, design is the first phase of transforming the problem into a solution. In the design phase, the customer and business requirements and technical considerations all come together to formulate a product or a system.

 
by Dinesh Thakur

Several tools are used in the organizations to define and document requirements. These tools differ from each other in their features, capabilities, and goals. These distinct characteristics provide a foundation to select and customize tools for different software projects. Some of the commonly used requirements tools are listed in Table.

 
by Dinesh Thakur

Once a system has been deployed, new requirements inevitably emerge. It is difficult for the users to anticipate the effect of these new requirements (if a new system is developed for these requirements) on the organization. Thus, to understand and control changes to system requirements, requirements management is performed.

 
by Dinesh Thakur

The development of software begins once the requirements document is 'ready'. One of the objectives of this document is to check whether the delivered software system is acceptable. For this, it is necessary to ensure that the requirements specification contains no errors and that it specifies the user's requirements correctly. Also, errors present in the SRS will adversely affect the cost if they are detected later in the development process or when the software is delivered to the user. Hence, it is desirable to detect errors in the requirements before the design and development of the software begins. To check all the issues related to requirements, requirements validation is performed.

 
by Dinesh Thakur

The output of the requirements phase of the software development process is Software Requirements Specification (SRS) (also known as requirements document). This document lays a foundation for software engineering activities and is created when entire requirements are elicited and analyzed. SRS is a formal document, which acts as a representation of software that enables the users to review whether it (SRS) is according to their requirements. In addition, it includes user requirements for a system as well as detailed specifications of the system requirements.

 
by Dinesh Thakur

It has been observed that the software engineer 'reuses' certain functions, classes, and/ or behavior across all the projects, which mayor may not form a part of the specific application domain. For example, features and functions described by a user interface are almost common, regardless of the application domain chosen. Analysis patterns refer to classes, functions, and other features that can be reused when developing applications within a specific application domain. The objectives of analysis patterns are listed below.

 
by Dinesh Thakur

IEEE defines requirements analysis as (1) the process of studying user needs to arrive at a definition of a system, hardware or software requirements. (2) The process of studying and refining system, hardware or software requirements.' Requirements analysis helps to understand, interpret, classify, and organize the software requirements in order to assess the feasibility, completeness, and consistency of the requirements. Various other tasks performed using requirements analysis are listed below.

 
by Dinesh Thakur

Requirements elicitation (also known as requirements capture and requirements acquisition) is a process of collecting information about software requirementsfrom different individuals such as users and other stakeholders. Stakeholders areindividuals who are affected by the system, directly or indirectly. They includeproject mangers, marketing personnel, consultants, software engineers,maintenance engineers, and the user.



 
by Dinesh Thakur

Feasibility is defined as the practical extent to which a project can be performed successfully. To evaluate feasibility, a feasibility study is performed, which determines whether the solution considered to accomplish the requirements is practical and workable in the software. Information such as resource availability, cost estimation for software development, benefits of the software to the organization after it is developed and cost to be incurred on its maintenance are considered during the feasibility study. The objective of the feasibility study is to establish the reasons for developing the software that is acceptable to users, adaptable to change and conformable to established standards. Various other objectives of feasibility study are listed below.

 
by Dinesh Thakur

In the software development process, requirement phase is the first software engineering activity. This phase is a user-dominated phase and translates the ideas or views into a requirements document. Note that defining and documenting the user requirements in a concise and unambiguous manner is the first major step to achieve a high-quality product.

 
by Dinesh Thakur

Quantitative Process Management (QPM) aims to control the process performance (the actual output accomplished by following the software process) of the software project quantitatively. The quantitative process management establishes goals for the performance of the project's software process. It involves measuring the performance of software process, analyzing these measurements, and making adjustments in maintaining the performance of the process. After the performance of the process is stable and within acceptable limits, the software process of the project and the associated measurements are established as a baseline. This results in controlling the performance of the software process quantitatively. The goals of quantitative process management are listed below.

 
by Dinesh Thakur

Changes in the process are unavoidable and should be made to improve the productivity and quality of the process. These changes can be applied by using Process Change Management (PCM), which is a technique to improve the software processes in the organization. Thus, this technique helps in increasing productivity and quality by improving software processes for the developing software.

 
by Dinesh Thakur

The Organization Process Focus (OPF) is responsible for establishing software process activities and improving these activities with process capability specified by the organization. This involves understanding software processes of projects and coordinating activities to assess, develop, maintain, and improve those processes. The organization provides resources for coordinating and maintaining software processes for existing and future projects. The activities for such purposes are carried out by SEPG. This group is responsible for developing and maintaining standard software processes and process assets in the organization. SEPG also coordinates process activities with the software projects. The goals of the organization process focus are listed below.

 
by Dinesh Thakur

Organization Process Definition (OPD) is responsible for developing and maintaining a usable set of software process assets. The objective is to develop and maintain a standard software process for the organization. The organization process assets improve process performance across different projects and provide a basis for long term benefits to the organization. Various assets of the organization software process are listed below.

 
by Dinesh Thakur

The software process model framework is specific to the project. Thus, it is essential to select the software process model according to the software which is to be developed. The software project is considered efficient if the process model is selected according to the requirements. It is also essential to consider time and cost while choosing a process model as cost and/ or time constraints play an important role in software development. The basic characteristics required to select the process model are project type and associated risks, requirements of the project, and the users.

 
by Dinesh Thakur

The formal methods model is concerned with the application of a mathematical technique to design and implement the software. This model lays the foundation for developing a complex system and supporting the program development. The formal methods used during the development process provide a mechanism for eliminating problems, which are difficult to overcome using other software process models. The software engineer creates formal specifications for this model. These methods minimize specification errors and this result in fewer errors when the user begins using the system.

 
by Dinesh Thakur

In the build and fix model (also referred to as an ad hoc model), the software is developed without any specification or design. An initial product is built, which is then repeatedly modified until it (software) satisfies the user. That is, the software is developed and delivered to the user. The user checks whether the desired functions 'are present. If not, then the software is changed according to the needs by adding, modifying or deleting functions. This process goes on until the user feels that the software can be used productively. However, the lack of design requirements and repeated modifications result in loss of acceptability of software. Thus, software engineers are strongly discouraged from using this development approach.

 
by Dinesh Thakur

The V model is useful in every phase of the software development life cycle. This model determines the complex relationship between each phase of the software development and ensures that each phase of software development is associated with testing. Various functions performed by V model are listed below.

 
by Dinesh Thakur

The rapid application development model emphasizes on delivering projects in small pieces. If the project is large, it is divided into a series of smaller projects. Each of these smaller projects is planned and delivered individually. Thus, with a series of smaller projects, the final project is delivered quickly and in a less structured manner. The major characteristic of the RAD model is that it focuses on the reuse of code, processes, templates, and tools.

 
by Dinesh Thakur

In time boxing model, development is done iteratively as in the iterative enhancement model. However, in time boxing model, each iteration is done in a timebox of fixed duration. The functionality to be developed is adjusted to fit the duration of the timebox. Moreover, each timebox is divided into a sequence of fixed stages where each stage performs a clearly defined task (analysis, implementation, and deploy) that can be done independently. This model also requires that the time duration of each stage is approximately equal so that pipelining concept is employed to have the reduction in development time and product releases.

 
by Dinesh Thakur

The incremental model (also known as iterative enhancement model) comprises the features of waterfall model in an iterative manner. The waterfall model performs each phase for developing complete software whereas the incremental model has phases similar to the linear sequential model arid has an iterative nature of prototyping. During the implementation phase, the project is divided into small subsets known as increments that are implemented individually. This model comprises several phases where each phase produces an increment. These increments are identified in the beginning of the development process and the entire process from requirements gathering to delivery of the product is carried out for each increment.

 
by Dinesh Thakur

A process model can be defined as a strategy (also known as software engineering paradigm), comprising process, methods, and tools layers as well as the generalphases for developing the software. It provides a basisfor controlling various activities required to develop and maintain the software. Inaddition, it helps the software development team in facilitating and understandingthe activities involved in the project.

 
by Dinesh Thakur

The existence of software process does not guarantee the timely delivery of the software and its ability to meet the user's expectations. The process needs to be assessed in order to ensure that it meets a set of basic process criteria, which is essential for implementing the principles of software engineering in an efficient manner. The process is assessed to evaluate methods, tools, and practices, which are used to develop and test the software. The aim of process assessment is to identify the areas for improvement and suggest a plan for making that improvement. The main focus areas of process assessment are listed below.

 
by Dinesh Thakur

To accomplish a set of tasks, it is important to go through a sequence of predictable steps. This sequence of steps refers to a road map, which helps in developing a timely, high quality, and highly efficient product or system. Road map, commonly referred to as software process, comprises activities, constraints, and resources that are used to produce an intended system. Software process helps to maintain a level of consistency and quality in products or services that are produced by different people.

 
by Dinesh Thakur

Software engineering employs a well defined and systematic approach to develop software. This approach is considered to be the most effective way of producing high-quality software. However, despite this systematic approach in software development, there are still some serious challenges faced by software engineering. Some of these challenges are listed below.

 
by Dinesh Thakur

Software engineering discipline is the result of advancement in the field of technology. In this section, we will discuss various innovations and technologies that led to the emergence of software engineering discipline.

 
by Dinesh Thakur

Software engineering shares common interest with other engineering disciplines. Like other engineering domains where a given problem (for example, building a bridge) can be solved by following a series of interrelated steps, the software development process also comprises a number of steps or phases. The main objective of software engineering is to develop methods for large systems, which help developers obtaining high-quality software in minimum time and at low cost. Therefore, it is essential to perform software development in phases. This phased development of software is often referred to as the software development life cycle (SDLC) or software life cycle.

 
by Dinesh Thakur

Over the last 50 years there has been revolutionary advancement in the field of technology, leading to improvements in hardware performance and profound changes in computing architectures. This advancement has led to the production of complex computer-based systems that are capable of providing information in a wide variety of formats. The increase in computer power has made unrealistic computer applications a feasible proposition, marking the genesis of an era where software products are far more complex as compared to their predecessors. By using software engineering practices, these complex systems can be developed in a systematic and efficient manner.



 
by Dinesh Thakur

In the late 1960s, it became clear that the development of software is different from manufacturing other products. This is because employing more manpower (programmers) later in the software development does not always help speed up the development process. Instead, sometimes it may have negative impacts like delay in achieving the scheduled targets, degradation of software quality, etc. Though software has been an important element of many systems since a long time, developing software within a certain schedule and maintaining its quality is still difficult.

 
by Dinesh Thakur

The development of software requires dedication and understanding on the developers' part. Many software problems arise due to myths that are formed during the initial stages of software development. Unlike ancient folklore that often provides valuable lessons, software myths propagate false beliefs and confusion in the minds of management, users and developers.

 
by Dinesh Thakur

In earlier times, software was simple in nature and hence, software development was a simple activity. However, as technology improved, software became more complex and software projects grew larger. Software development now necessitated the presence of a team, which could prepare detailed plans and designs, carry out testing, develop intuitive user interfaces, and integrate all these activities into a system. This new approach led to the emergence of a discipline known as software engineering.

 
by Dinesh Thakur

Over the last 50 years there has been revolutionary advancement in the field of technology, leading to improvements in hardware performance and profound changes in computing architectures. This advancement has led to the production of complex computer-based systems that are capable of providing information in a wide variety of formats. The increase in computer power has made unrealistic computer applications a feasible proposition, marking the genesis of an era where software products are far more complex as compared to their predecessors. By using software engineering practices, these complex systems can be developed in a systematic and efficient manner.



 
by Dinesh Thakur

A basic issue in software project management is whether the process or the project is the essential feature managed. In process-oriented management the management of the small tasks in the software life cycle is emphasized.

 
by Dinesh Thakur

A software process as mentioned earlier, specifies a method of development software. A software project, on the other hand is a development project in which a software process is used. And software products are the outcomes of a software project.

 
by Dinesh Thakur

In the 1980s; Boehm introduced a process model known as the spiral model. The spiral model comprises activities organized in a spiral, and has many cycles. This model combines the features of the prototyping model and waterfall model and is advantageous for large, complex, and expensive projects. It determines requirements problems in developing the prototypes. In addition, it guides and measures the need of risk management in each cycle of the spiral model. IEEE defines the spiral model as 'a model of the software development process in which the constituent activities, typical requirements analysis, preliminary and detailed· design, coding, integration, and testing, are performed iteratively until the software is complete.

 
by Dinesh Thakur

Omission: - is a common error in requirements. In this type of error, some user requirements are simply not included in the SRS The omitted requirement may be related to the behavior of the system, its performance, constraints or any other factor.

 
by Dinesh Thakur

Software is expensive: Over the past decades, with the advancement of technology, the cost of hardware has consistently decreased. On the other hand, the cost of software is increasing. As a result, the hardware/software ratio for a computer system has shown a reversal from the early years.



 
by Dinesh Thakur

Software engineering is the systematic approach to the development, operation, maintenance, and retirement of software. There are few fundamental problems that software engineering faces.

 
by Dinesh Thakur

Proper management is an integral part of software development. A large software development project involves many people working for a long period of time. We have seen that a development process typically partitions the problem of developing software into a set of phases.

 
by Dinesh Thakur

A development process consists of various phases, each phase ending with a defined output. The phases are performed in an order specified by the process model being followed. The main reason for having a phased process is that it breaks the problem of developing software into successfully performing a set of phase, each handling a different concern of software development.

 
by Dinesh Thakur

1.  Development time problem:


Some large systems take so long to develop that the technology (computer, software, hardware components) changes between the time the system is first conceptualized and the time it is ready for delivery to the user.



 
by Dinesh Thakur

The process that deals with the technical and management issues of software development is called a software process. A software development project must have at least development activities and project management activities. The fundamental objectives of a process are the same as that of software engineering (after all, the process is the main vehicle of satisfying the software engineering objectives), viz. optimality and scalability.

 
by Dinesh Thakur

The software engineering deals with three basic types of entities – processes, project, and products. A software process is a method of developing software. A software project is a development project in which a software process is used. And software products are the outcomes of a software project.

 
by Dinesh Thakur

A development process model specifies some activities that, according to the model, should be performed, and the order in which they should be performed. As stated earlier, for cost, quality, and project management reasons, development processes are generally phased.

 
by Dinesh Thakur

The prototyping model is applied when detailed information related to input and output requirements of the system is not available. In this model, it is assumed that all the requirements may not be known at the start of the development of the system. It is usually used when a system does not exist or in case of a large and complex system where there is no manual process to determine the requirements. This model allows the users to interact and experiment with a working model of the system known as prototype. The prototype gives the user an actual feel of the system.



 
by Dinesh Thakur

The activities in the management process for a project can be grouped broadly into three phases.

 
by Dinesh Thakur

For effective project monitoring, the information coming from the development process to the management process should be objective and quantitative data about the project. Software matrices are quantifiable measures that could be used to measure different characteristics of a software system or the software development process.



 
by Dinesh Thakur

Throughout development, software consists of a collection of items (such as programs, data and documents) that can easily be changed. During software development, the design, code, and even requirements are often changed, and the changes occur at any time during the development. This easily changeable nature of software and the fact that changes often take place require that changes be done in a controlled manner.

 
by Dinesh Thakur

Developing methods that can produce high-quality software is another fundamental goal of software engineering. We can view quality of a software product as having three dimensions:

 
by Dinesh Thakur

It is believed that only by improving the process can be quality & productivity be improved. Process improvement required understanding the current process & its deficiencies & then taking actions to remove the deficiencies. This is possible only if the current process is under statistical control.

 
by Dinesh Thakur

Software requirement specification (SRS) is a document that completely describes what the proposed software should do without describing how software will do it. The basic goal of the requirement phase is to produce the SRS, Which describes the complete behavior of the proposed software. SRS is also helping the clients to understand their own needs.

 
by Dinesh Thakur

Completeness of specifications is difficult to achieve and even more difficult to verify. Having guidelines about what different things an SRS should specify will help in completely specifying the requirements. Here we describe some of the system properties than an SRS should specify.

 
by Dinesh Thakur

Pure object-oriented development requires that object-oriented techniques be used during the analysis, design, and implementation of the system. Various methods have been proposed for OOA and OOD, many of which propose a combined analysis and design technique.

 
by Dinesh Thakur

The structured analysis technique uses function-based decomposition while modeling the problem. It focuses on the functions performed in the problem domain and the data consumed and produced by these functions.

 
by Dinesh Thakur

The development of software starts with the requirements document, which is also used to determine eventually whether or not the delivered software system is acceptable. It is therefore important that the requirement specification contains no error and specifies the client's requirement correctly.

 
by Dinesh Thakur

Because requirements specification are formally in people 's minds, requirements validation must necessarily involve the clients and the user. Requirement reviews, in which the SRS is carefully reviewed by a group of people including representative of the clients and the users, are the most common methods of validation.

 
by Dinesh Thakur

Requirement reviews remain the most commonly used and viable means for requirement validation. However, there are other approaches that may be applicable for some system or parts of system or system that have been specified formally.

 
by Dinesh Thakur

Function points are one of the most widely used measures of software size. The basis of function points is that the "functionality " of the system that is; what the system performs, is the measure of the system size. In function points, the system functionally is calculated in terms of the number of function it implements, the number of inputs, the number of output etc.

 
by Dinesh Thakur

When tasks are defined and schedules are estimated, the planning effort has sufficient information to begin staffing plans and organizing a team into units to address the development problem. The comprehensive staffing plan identifies the required skills and schedules the right people to be brought onto the project at appropriate times and released from the project when their tasks are complete.



 
by Dinesh Thakur

Termination analysis is performed when the development process is over. The basic reason for performing termination analysis is to provide information about the development process. Remember that a project is an instantiation of the process.



 
by Dinesh Thakur

Design Reviews: The purpose of design reviews is to ensure that the design satisfies the requirements and is of “good quality.” If errors are made during the design process, they will ultimately reflect themselves in the code and the final system. Detecting errors in design is the aim of design reviews.

 
by Dinesh Thakur

Any cost estimation model can be viewed as a function that outputs the cost estimate. The basic idea of having a model or procedure for cost estimation is that it reduces the problem of estimation of determining the value of he “key parameters” that characterize the project, based on which the cost can be estimated.

 

Page 1 of 2