knowt ap exam guide logo

Software engineering 

Software Engineering Tutorial

CMP 233 –SOFTWARE ENGINEERING (2 UNITS) Introduction to Software Engineering: Software Design Process; Project Planning, Requirement Engineering, System Models; Process Models: DFDS, State-transition, State charts, UML, Data models; ER models, Object oriented modelling using UML, Software verification and validation, software testing. Process Improvement: Software Re-engineering Configuration Management; Formal Specification, Software Cost- Estimation, Software Architecture, Software Patterns, Software Reuse and Open-Source Development. What is Software Engineering (SE)? Different definitions have been given to SE. Among them are:

  1. Software engineering is the systematic application of engineering approaches to the development of software.

  2. The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.

  3. Software engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and work efficiently on real machines.” Software engineering is a branch of engineering that is concerned with development of software product using well-defined scientific principles, methods and procedures. Its main goal is to develop systematic models and reliable techniques for producing high quality software on time and within budget, and these concerns extend all the way from theory and principles to daily practice. Drawing on computing as one of its foundations, software engineering seeks to develop and use systematic models and reliable techniques to produce high-quality software. These concerns extend from theory and principles to the development practices that are most visible to those outside the discipline. It is unlikely that every software engineer will have deep expertise in all aspects of computing, but a general understanding and expertise in computing are a necessity since software engineering is an engineering discipline with foundations in computer science. Software engineering maintains a stronger association with computer science than may be the case for some other engineering fields The outcome of software engineering is an efficient and reliable software product. Note, Software is more than just a program code. A program is an executable code, which serves some computational purpose. Software is considered to be collection of executable programming code, associated libraries and documentations. Software, when made for a specific requirement is called software product. Engineering on the other hand, is all about developing products, using a set of well-defined, scientific principles and methods. Summarily, Software Engineering is a collection of techniques, methodologies and tools that help with the production of a high-quality software system (product) with a given budget before a given deadline, while change occurs. In short, Software engineering is a branch of computer science, which uses well-defined engineering concepts required to produce efficient, durable, scalable, in budget, and on-time software products.

Software Evolution The process of developing a software product using software engineering principles and methods is referred to as Software Evolution. This includes the initial development of software and its maintenance and updates, till desired software product is developed, which satisfies the expected requirements. Evolution starts from the requirement gathering process. After which developers create a prototype of the intended software and show it to the users to get their feedback at the early stage of the software product development. The users suggest changes, on which several consecutive updates and maintenance keep on changing too. This process changes to the original software, till the desired software is accomplished. Even after the user has the desired software in hand, the advancing technology and the changing requirements force the software product to change accordingly. Re-creating software from scratch and to go one-on-one with the requirement is not feasible. The only feasible and economical solution is to update the existing software so that it matches the latest requirements.

Need of Software Engineering The need of software engineering arises because of higher rate of change in user requirements and environment on which the software is working. Following are some of the needs stated:

  1. Large software - It is easier to build a wall than a house or building, likewise, as the size of the software becomes large, engineering has to step to give it a scientific process.

  2. Scalability- If the software process were not based on scientific and engineering concepts, it would be easier to re-create new software than to scale an existing one.

  3. Cost- As hardware industry has shown its skills and huge manufacturing has lower down the price of computer and electronic hardware. But, cost of the software remains high if proper process is not adapted.

  4. Dynamic Nature- Always growing and adapting nature of the software hugely depends upon the environment in which the user works. If the nature of software is always changing, new enhancements need to be done in the existing one. This is where the software engineering plays a good role. Quality Management- Better process of software development provides better and quality software product.

Sub-disciplines of Software engineering Software engineering can be divided into ten sub-disciplines. They are as follows: Software requirements: The elicitation, analysis, specification, and validation of requirements for software. a. Requirements Engineering: Which include feasibility study, gathering and analysis of requirements, software requirement specification (SRS) and requirement review and validation b. Software Design consists of the steps a programmer should do before they start coding the program in a specific language. It is usually done with Computer-Aided Software Engineering (CASE) tools and use standards for the format, such as the Unified Modelling Language (UML). c. Software programming: It is construction of software through the use of programming languages. d. Software testing: Software Testing is an empirical investigation conducted to provide stakeholders with information about the quality of the product or service under test. e. Software maintenance: This deals with enhancements of Software systems to solve the problems they may have risen after being used for a long time after they are first completed. f. Software configuration management: is the task of tracking and controlling changes in the software. Configuration management practices include revision control and the establishment of baselines. g. Software engineering management: The management of software systems borrows heavily from project management. h. Software quality Control: The totality of functionality and features of a software product that bear on its ability to satisfy stated or implied needs.

Characteristics of Good Software A software product can be judged by what it offers and how well it can be used. This software must satisfy on the following grounds: • Operational • Transitional • Maintenance Operational This tells us how well the software works in operations. It can be measured on: • Functionality • Dependability • Usability • Budget (must be economical) • Efficiency • Correctness • Security

Transitional This aspect is important when the software is moved from one platform to another: • Portability • Interoperability • Reusability • Adaptability Maintenance This aspect briefs about how well the software has the capabilities to maintain itself in the ever-changing environment: • Modularity • Maintainability • Flexibility • Scalability

Software engineering 

Software Engineering Tutorial

CMP 233 –SOFTWARE ENGINEERING (2 UNITS) Introduction to Software Engineering: Software Design Process; Project Planning, Requirement Engineering, System Models; Process Models: DFDS, State-transition, State charts, UML, Data models; ER models, Object oriented modelling using UML, Software verification and validation, software testing. Process Improvement: Software Re-engineering Configuration Management; Formal Specification, Software Cost- Estimation, Software Architecture, Software Patterns, Software Reuse and Open-Source Development. What is Software Engineering (SE)? Different definitions have been given to SE. Among them are:

  1. Software engineering is the systematic application of engineering approaches to the development of software.

  2. The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.

  3. Software engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and work efficiently on real machines.” Software engineering is a branch of engineering that is concerned with development of software product using well-defined scientific principles, methods and procedures. Its main goal is to develop systematic models and reliable techniques for producing high quality software on time and within budget, and these concerns extend all the way from theory and principles to daily practice. Drawing on computing as one of its foundations, software engineering seeks to develop and use systematic models and reliable techniques to produce high-quality software. These concerns extend from theory and principles to the development practices that are most visible to those outside the discipline. It is unlikely that every software engineer will have deep expertise in all aspects of computing, but a general understanding and expertise in computing are a necessity since software engineering is an engineering discipline with foundations in computer science. Software engineering maintains a stronger association with computer science than may be the case for some other engineering fields The outcome of software engineering is an efficient and reliable software product. Note, Software is more than just a program code. A program is an executable code, which serves some computational purpose. Software is considered to be collection of executable programming code, associated libraries and documentations. Software, when made for a specific requirement is called software product. Engineering on the other hand, is all about developing products, using a set of well-defined, scientific principles and methods. Summarily, Software Engineering is a collection of techniques, methodologies and tools that help with the production of a high-quality software system (product) with a given budget before a given deadline, while change occurs. In short, Software engineering is a branch of computer science, which uses well-defined engineering concepts required to produce efficient, durable, scalable, in budget, and on-time software products.

Software Evolution The process of developing a software product using software engineering principles and methods is referred to as Software Evolution. This includes the initial development of software and its maintenance and updates, till desired software product is developed, which satisfies the expected requirements. Evolution starts from the requirement gathering process. After which developers create a prototype of the intended software and show it to the users to get their feedback at the early stage of the software product development. The users suggest changes, on which several consecutive updates and maintenance keep on changing too. This process changes to the original software, till the desired software is accomplished. Even after the user has the desired software in hand, the advancing technology and the changing requirements force the software product to change accordingly. Re-creating software from scratch and to go one-on-one with the requirement is not feasible. The only feasible and economical solution is to update the existing software so that it matches the latest requirements.

Need of Software Engineering The need of software engineering arises because of higher rate of change in user requirements and environment on which the software is working. Following are some of the needs stated:

  1. Large software - It is easier to build a wall than a house or building, likewise, as the size of the software becomes large, engineering has to step to give it a scientific process.

  2. Scalability- If the software process were not based on scientific and engineering concepts, it would be easier to re-create new software than to scale an existing one.

  3. Cost- As hardware industry has shown its skills and huge manufacturing has lower down the price of computer and electronic hardware. But, cost of the software remains high if proper process is not adapted.

  4. Dynamic Nature- Always growing and adapting nature of the software hugely depends upon the environment in which the user works. If the nature of software is always changing, new enhancements need to be done in the existing one. This is where the software engineering plays a good role. Quality Management- Better process of software development provides better and quality software product.

Sub-disciplines of Software engineering Software engineering can be divided into ten sub-disciplines. They are as follows: Software requirements: The elicitation, analysis, specification, and validation of requirements for software. a. Requirements Engineering: Which include feasibility study, gathering and analysis of requirements, software requirement specification (SRS) and requirement review and validation b. Software Design consists of the steps a programmer should do before they start coding the program in a specific language. It is usually done with Computer-Aided Software Engineering (CASE) tools and use standards for the format, such as the Unified Modelling Language (UML). c. Software programming: It is construction of software through the use of programming languages. d. Software testing: Software Testing is an empirical investigation conducted to provide stakeholders with information about the quality of the product or service under test. e. Software maintenance: This deals with enhancements of Software systems to solve the problems they may have risen after being used for a long time after they are first completed. f. Software configuration management: is the task of tracking and controlling changes in the software. Configuration management practices include revision control and the establishment of baselines. g. Software engineering management: The management of software systems borrows heavily from project management. h. Software quality Control: The totality of functionality and features of a software product that bear on its ability to satisfy stated or implied needs.

Characteristics of Good Software A software product can be judged by what it offers and how well it can be used. This software must satisfy on the following grounds: • Operational • Transitional • Maintenance Operational This tells us how well the software works in operations. It can be measured on: • Functionality • Dependability • Usability • Budget (must be economical) • Efficiency • Correctness • Security

Transitional This aspect is important when the software is moved from one platform to another: • Portability • Interoperability • Reusability • Adaptability Maintenance This aspect briefs about how well the software has the capabilities to maintain itself in the ever-changing environment: • Modularity • Maintainability • Flexibility • Scalability