WHAT IS SOFTWARE? Software is a set of instructions, data or programs used to operate computers and execute specific tasks. It is the opposite of hardware, which describes the physical aspects of a computer. Software is a generic term used to refer to applications, scripts and programs that run on a device. It can be thought of as the variable part of a computer, while hardware is the invariable part. The two main categories of software are application software and system software. An application is software that fulfills a specific need or performs tasks. System software is designed to run a computer's hardware and provides a platform for applications to run on top of. Other types of software include programming software, which provides the programming tools software developers need; Middleware, which sits between system software and applications; and Driver software, which operates computer devices and peripherals. Examples and types of software Among the various categories of software, the most common types include the following: Application software. The most common type of software, application software is a computer software package that performs a specific function for a user, or in some cases, for another application. An application can be self-contained, or it can be a group of programs that run the application for the user. Examples of modern applications include office suites, graphics software, databases and database management programs, web browsers, word processors, software development tools, image editors and communication platforms. System software. These software programs are designed to run a computer's application programs and hardware. System software coordinates the activities and functions of the hardware and software. In addition, it controls the operations of the computer hardware and provides an environment or platform for all the other types of software to work in. The OS is the best example of system software; it manages all the other computer programs. Other examples of system software include the firmware, computer language translators and system utilities. Driver software. Also known as device drivers, this software is often considered a type of system software. Device drivers control the devices and peripherals connected to a computer, enabling them to perform their specific tasks. Every device that is connected to a computer needs at least one device driver to function. Examples include software that comes with any nonstandard hardware, including special game controllers, as well as the software that enables standard hardware, such as USB storage devices, keyboards, headphones and printers. Middleware. The term middleware describes software that mediates between application and system software or between two different kinds of application software. For example, middleware enables Microsoft Windows to talk to Excel and Word. It is also used to send a remote work request from an application in a computer that has one kind of OS, to an application in a computer with a different OS. It also enables newer applications to work with legacy ones. Programming software. Computer programmers use programming software to write code. Programming software and programming tools enable developers to develop, write, test and debug other software programs. Examples of programming software include assemblers, compilers, debuggers and interpreters. SOFTWARE AS A PRODUCT: Software Products are nothing but software systems delivered to the customer with the documentation that describes how to install and use the system. In certain cases, software products may be part of system products where hardware, as well as software, is delivered to a customer. Software products are produced with the help of the software process. The software process is a way in which we produce software. Types of software products: Software products fall into two broad categories: 1. Generic products: Generic products are stand-alone systems that are developed by a production unit and sold on the open market to any customer who is able to buy them. 2. Customized Products: Customized products are the systems that are commissioned by a particular customer. Some contractor develops the software for that customer. SOFTWARE CRISIS It is a term used in computer science for the difficulty of writing useful and efficient computer programs in the required time. The software crisis was due to using the same workforce, same methods, same tools even though rapidly increasing in software demand, the complexity of software, and software challenges. With the increase in the complexity of software, many software problems arise because existing methods were insufficient. If we will use the same workforce, same methods, and same tools after the fast increase in software demand, software complexity, and software challenges, then there arise some problems like software budget problems, software efficiency problems, software quality problems, software managing and delivering problem, etc. This condition is called a software crisis. Causes of Software Crisis: The cost of owning and maintaining software was as expensive as developing the software At that time Projects were running over-time At that time Software was very inefficient The quality of the software was low quality Software often did not meet user requirements The average software project overshoots its schedule by half At that time Software was never delivered Non-optimal resource utilization. Difficult to alter, debug, and enhance. The software complexity is harder to change. Which factors are contributing to the software crisis? Poor project management. Lack of adequate training in software engineering. Less skilled project members. Low productivity improvements. Why do we need the engineering process? The process allows for applied science, mathematics and engineering sciences to be used to achieve a high level of optimization to meet the requirements of an objective. The steps include problem solving processes such as, for example, determining your objectives and constraints, prototyping, testing and evaluation. What is Software Engineering? The term software and engineering. engineering is the product of two words, software, The software is a collection of integrated programs and Software subsists of carefully-organized instructions and code written by developers on any of various particular computer languages. Computer programs and related documentation such as requirements, design models and user manuals. Engineering is the application of scientific and practical knowledge to invent, design, build, maintain, and improve frameworks, processes, etc. Software Engineering is an engineering branch related to the evolution of software product. Software engineering is an Umbrella activity that includes People, Process, Methods, Technology and tools together towards developing software products. Software is a paradigm, where all activities are carried away in engineered way to produce software products. Essential characteristics of Well-Engineered Software Product: A well-engineered characteristics: software product should possess the following essential User Friendly: The software products should behave the users as desired. Efficiency: The software should not make wasteful use of system resources such as memory and processor cycles. Maintainability: It should be possible to evolve the software to meet the changing requirements of customers. Dependability: It is the flexibility of the software that ought to not cause any physical or economic injury within the event of system failure. It includes a range of characteristics such as reliability, security, and safety. In time: Software should be developed well in time. Within Budget: The software development costs should not overrun and it should be within the budgetary limit. Functionality: The software system should exhibit the proper functionality, i.e. it should perform all the functions it is supposed to perform. Adaptability: The software system should have the ability to get adapted to a reasonable extent with the changing requirements. More cause for adopting Software Engineering: Software Engineering is required due to the following reasons: o To manage Large software o For more Scalability o Cost Management o To manage the dynamic nature of software o For better quality Management The necessity of software engineering appears because of a higher rate of progress in user requirements and the environment on which the program is working. o Huge Programming: It is simpler to manufacture a wall than to a house or building, similarly, as the measure of programming become extensive engineering has to step to give it a scientific process. o Adaptability: If the software procedure were not based on scientific and engineering ideas, it would be simpler to re-create new software than to scale an existing one. o Cost: As the hardware industry has demonstrated its skills and huge manufacturing has let down the cost of computer and electronic hardware. But the cost of programming remains high if the proper process is not adapted. o Dynamic Nature: The continually growing and adapting nature of programming hugely depends upon the environment in which the client works. If the quality of the software is continually changing, new upgrades need to be done in the existing one. o Quality Management: Better procedure of software development provides a better and quality software product. Difference between Software Engineering process and Conventional Engineering Process 1. Software Engineering Process : It is a engineering process which is mainly related to computers and programming and developing different kinds of applications through the use of information technology. 2. Conventional Engineering Process: It is a engineering process which is highly based on empirical knowledge and is about building cars, machines and hardware. S. No. Software Engineering Process Conventional Engineering Process 1. Software Engineering Process is a process which majorly involves computer science, information technology and discrete mathematics. Conventional Engineering Process is a process which majorly involves science, mathematics and empirical knowledge. 2. It is mainly related with computers, programming and writing codes for building applications. It is about building cars, hardware, buildings etc. 3. In Software Engineering Process construction and development cost is low. In Conventional Engineering Process construction and development cost is high. 4. It can involve the application of new and untested elements in software projects. It usually applies only known and tested principles to meet product requirements. machines, S. No. Software Engineering Process Conventional Engineering Process 5. In Software Engineering Process, most development effort goes into building new designs and features. In Conventional Engineering Process, most development efforts are required to change old designs. 6. It majorly emphasize on quality. It majorly emphasize on mass production. 7. Product development develops intangible products (software) Product development develops products (e.g. bridges, buildings) 8. Design requirements may change throughout development process. Design Requirements are typically welldefined upfront 9. Testing is an integral part of the development process. Testing occurs completion. 10. Prototyping is common and helps to refine requirements. Prototyping is less common due to cost and time 11. Maintenance and updates are necessary to keep software relevant. Maintenance reactive. 12. Software development often involves complex logic and algorithms. Conventional engineering may have more complex physical properties to deal with. 13. Software development often follows established standards and frameworks. Conventional engineering may have wellestablished regulations and standards. 14. Software development is typically less expensive to start, but costs may increase with maintenance and updates. Conventional engineering may be more expensive to start due to materials and construction, but may have lower maintenance costs. mainly after tangible product is typically scheduled or S. No. Software Engineering Process Agile methodologies are commonly used in software development. 15. Conventional Engineering Process Conventional engineering may use more traditional project management approaches. Software Complexity: Software is an intangible product, which is notoriously difficult to measure. However, one aspect of software which can be easily quantified is its complexity. It is a way to describe a specific set of characteristics of a code. It is a natural byproduct of the functional complexity that the code is attempting to enable. Complexity reflects the number of entities that comprise the software, and the number of interactions between them. The higher the complexity, the more difficult it is to read the code and maintain it and the higher the likelihood of faults and defects. Dealing with Software Complexity: Two ways to deal with complexity of a software product are; 1. Abstraction: Abstraction is about making a program that represents the real world, but is not identical to the real world. Abstraction is all about choosing which are the important details to include, and which we can safely leave out. Including too many details makes a program too complex and may make the end user experience overwhelming. Leaving out important details will make a final program ineffective or inaccurate. It refers to the construction of a simpler version of a problem by ignoring the details. The principle of constructing an abstraction is popularly known as modelling. The advantages of abstracting a problem are: Simplification of a problem by focusing on only one aspect of the problem while omitting all other aspects. When using the principle of abstraction to understand a complex problem, we focus our attention on only one or two specific aspects of the problem and ignore the rest. Whenever we omit some details of a problem to construct an abstraction, we construct a model of the problem. In everyday life, we use the principle of abstraction frequently to understand a problem or to assess a situation. 2. Decomposition: Decomposition is about breaking a problem down into smaller parts which are more manageable. It’s something we do all the time - taking a large project and turning it into a to-do list of small, manageable items. If a problem is decomposed properly it will mean that each component can be tackled independently of the others - you can work on them on their own, without needing to know what is happening within another module. Ideally, each part should also be of a similar level of complexity or detail. The advantages of decomposing a problem are: The different modules can be worked on by different people, or teams, at the same time, which will increase productivity A small module is easier to think about and solve than a large problem It may be possible to process modules in parallel to each other, allowing for faster processing of the problem as a whole. Software Development Life Cycle (SDLC): A software development life cycle model (also called process model) is a descriptive and diagrammatic representation of the software life cycle. A life cycle model represents all the activities required to make a software product transit through its life cycle phases. It also captures the order in which these activities are to be undertaken. In other words, a life cycle model maps the different activities performed on a software product from its inception to retirement. “It can also be defined as a framework that describes the activities performed at each stage of a software development project” ISO/IEC 12207 is an international standard for software life-cycle processes. It aims to be the standard that defines all the tasks required for developing and maintaining software. SDLC is a process followed for a software project, within a software organization. It consists of a detailed plan describing how to develop, maintain, replace and alter or enhance specific software. The life cycle defines a methodology for improving the quality of software and the overall development process. SDLC includes a set of distinct phases in a cyclic fashion; such as planning, defining, designing, building, testing and deployment Phase Activities: 1. Planning: It includes identifying user requirements and is performed by the senior members of the team with inputs from the customer, the sales department, market surveys and domain experts in the industry. This information is then used to plan the basic project approach and to conduct product feasibility study in the economical, operational and technical areas. 2. Defining: Once the requirement analysis is done the next step is to clearly define and document the product requirements and get them approved from the customer or the market analysts. This is done through an SRS (Software Requirement Specification) document which consists of all the product requirements to be designed and developed during the project life cycle. 3. Designing: SRS is the reference for product architects to come out with the best architecture for the product to be developed. Based on the requirements specified in SRS, usually more than one design approach for the product architecture is proposed and documented in a DDS Design Document Specification. This DDS is reviewed by all the important stakeholders and based on various parameters as risk assessment, product robustness, design modularity, budget and time constraints, the best design approach is selected for the product. A design approach clearly defines all the architectural modules of the product along with its communication and data flow representation with the external and third party modules (if any). The internal design of all the modules of the proposed architecture should be clearly defined with the minutest of the details in DDS. 4. Building or Developing the Product In this stage of SDLC the actual development starts and the product is built. The programming code is generated as per DDS during this stage. If the design is performed in a detailed and organized manner, code generation can be accomplished without much hassle. Developers must follow the coding guidelines defined by their organization and programming tools like compilers, interpreters, debuggers, etc. are used to generate the code. Different high level programming languages such as C, C++, Pascal, Java and PHP are used for coding. The programming language is chosen with respect to the type of software being developed. 5. Testing the Product This stage is usually a subset of all the stages as in the modern SDLC models, the testing activities are mostly involved in all the stages of SDLC. It includes modular or unit testing and is followed by integration testing However, this stage refers to the testing only stage of the product where product defects are reported, tracked, fixed and retested, until the product reaches the quality standards defined in the SRS. 6. Deployment at the user site and Maintenance with Review Once the product is tested and ready to be deployed it is released formally for the user. Sometimes product deployment happens in stages as per the business strategy of that organization. The product may first be released in a limited segment and tested in the real business environment. Then based on the feedback, the product may be released as it is or with suggested enhancements by the user. After the product is released, its maintenance is done for the existing customer base. If any modification due to the change in taste of the user or market can be taken again as new requirements for which the SDLC will be followed again (Phase 1 starts)….That continues in a cycle.