What is Software Engineering?
Computer software has become a driving force in today world. It is the core engine that drives business decision – making. It serves as the basis for modern scientific investigation and engineering problem-solving. It is a key factor that differentiates modern products and services. It is embedded in systems of all kinds like
- Transportation (App-based, inhouse transportation systems, online booking centers )
- Medical (App-based)
- Telecommunications (App-based, automatic billing etc)
- Military(intelligence gathering, decision making, simulations etc)
- Industrial processes(ERP systems, demand-supply chain, SCM, feedback etc)
- Entertainment(App-based, on-demand, ticket reservation system )
- Office products
The list is almost endless. Software is virtually inescapable in the modern world. It affects nearly every aspect of our lives and has become pervasive in our commerce, our culture, and our everyday activities.
The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software is called software engineering.The term software engineering was popularized by F. L. Bauer during the NATO Software Engineering Conference in 1968.
It encompasses techniques and procedures, often regulated by a software development process, with the purpose of improving the reliability and maintainability of software systems.
The discipline of software engineering includes knowledge, tools, and methods for software
requirements, software design, software construction, software testing, and software maintenance tasks.
Software engineering is related to the disciplines of computer science, computer
engineering, management, mathematics, project management, quality management, software ergonomics, and systems engineering.
Software Life Cycle Development Stages(SDLC)
A software development life cycle is the process followed by the team when developing software systems, from the initial stage of requirement gathering, all the way through to maintenance and support of the system.
SDLC is also known as software systems development or application development. An SDLC should result in a high-quality system that meets or exceeds customer expectations, within the agreed time and cost estimates. The software should work effectively and efficiently in the current and planned platforms. The software should also be cost-effective to enhance its infrastructure and is cheap to maintain.
SDLC is a systematic approach to problem-solving and is composed of several phases, each comprised of multiple steps. All software development must go through the stages listed below:
- Business Requirements Gathering
- Feasibility Analysis
- Functional Requirements Gathering and Analysis
- Release & Maintenance
Lets us see each of these steps one by one
Business Requirements Gathering
Every Software development project should start with this stage where the customer’s expectations for which the software to be developed are gathered. These are the initial requirements. The Stakeholders or the Customers/ Clients are interviewed for gathering the information at the initial level, which would include the following questions.
- What are the Business Vision, Strategy, Objectives, goals and key success factors to be achieved by the software being developed?
- What are the key business issues and their impact?
- What are the current problems or triggering an opportunity to design the software?
- Is the idea responsiveness to market or market need or need of hours?
- What is the key information to make business decisions?
- What is the missing information impacting the decision?
- What is the range of analytic capability required for this development?
- Is there any financial impact – budgetary constraints?
Based on the business need and technology aspect, the experts analyze the feasibility of designing the software. There can be multiple rounds of meetings to decide on the feasibility.
Functional Requirements Gathering and Analysis
Once the feasibility analysis is done, the process moves forward to gather the actual functional requirements. The experts may ask several questions to gather in-depth ideas.
- For web-based application, is there any need for session maintenance in terms of database or memory?
- What is the Session time out period? The life cycle of session data?
- What is the Browser compatibility of the application? IE, Netscape, Chrome etc? Which
NFRs(Non Functional Requirements)
User Interface/ Sessions related questions:
- The number of users accessing the system per day, peak hours, off-peak hours. Or any other such requirements?
- The number of users accessing the system for specific transactional information on per day, peak hours, off-peak hours?
- Number of transactions, simultaneous transactions, type of transactions, size of each transaction?
External Interface related queries:
- How many external interfaces have been identified for the system?
- For each of the external interfaces have the interface declarations been decided upon?
Database related queries:
- What are the entities or data items that you use? (The forms, documents etc are a good source of data)
- How are these entities related to each other?
- What is the precedence/ logical flow of such a relationship?
- What other communication modes do you use?
- What master data is to be stored?
- Where is this data generated? Is it manually entered, or does it come from an
external system or is it a result of an activity or is it a temporary data?
- Is the source of all data known and understood?
- What is the expected size of the database?
- What is the rate at which the data grows?
- History data of how many years have to be stored?
Internationalization related queries:
- Does the application need to deal with multiple currencies?
- What kind of functionality is required to deal with multiple currencies?
- Does the application need support for multiple languages?
- What kind of support is required? i. e. is it for the entire application or limited to certain modules of the application.
- What are the languages it should support?
Software design is a process of problem-solving and planning for a software solution. After the purpose and specifications of software are determined, software developers will design or employ designers to develop a plan for a solution. It includes low – level component and view. algorithm implementation issues as well as the architectural view.
In this phase, the software development process, the software ‘ s overall structure, and its nuances are defined. In terms of the client/ server technology, the number of tiers needed for the package architecture, the database design, the data structure design, etc, are all defined in this phase.