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.
A software development model is then created. Analysis and Design are very crucial in the whole development cycle. Any glitch in the design phase could be very expensive to solve in the later stage of software development. Much care is taken during this phase. The logical system of the product is developed in this phase.
Major Design Considerations
There are many aspects to consider in the design of a piece of software. The importance of each should reflect the goals the software is trying to achieve. Some of these aspects are:
- Extensibility – New capabilities can be added to the software without major changes
to the underlying architecture.
- Reliability – The software is able to perform a required function understated
conditions for a specified period of time.
- Fault – tolerance – The software is resistant to and able to recover from component
- Robustness – The software is able to operate under stress or tolerate unpredictable
or invalid input. For example, it can be designed with resilience to low memory conditions.
- Security – The software is able to withstand hostile acts and influences.
- Maintainability – The software can be restored to a specified condition within a specified period of time. For example, anti-virus software may include the ability to boost periodically receive virus definition updates in order to maintain the software ‘ s effectiveness.
- Compatibility – The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward compatible with an older version of itself.
- Reusability – The modular components designed should capture the essence of the
functionality expected out of them and no more or less. This single-minded purpose renders the components reusable wherever there are similar needs in other designs.
- Modularity – The resulting software comprises well – defined, independent
components. That leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows the division of work in a software development project.
A software designer or architect may identify a design problem, which has been solved by others before. A template or pattern describing a solution to a common problem is known as a design pattern. The reuse of such patterns can speed up the software development process, having been tested and proved in the past.
Design methodologies aim to provide a template process or a framework for the actual design of a system. They aim to simplify the actual process of designing a and aim to enforce some standard design principles, which improve the quality of design.
One of the earlier design methodologies is the Responsibility Driven Design (RDD). It forms the basis of the URDAD, the Use Case Responsibility – Driven Analysis and Design method which aims to generate a technology-neutral design which is then mapped onto one ‘ s choice of implementation architecture and technologies.
Software design documentation may be reviewed or presented to allow constraints, specifications, and even requirements to be adjusted prior to programming. Redesign may occur after review of a programmed simulation or prototype. It is possible to design software in the process of programming, without a plan or requirement analysis, but for more complex projects this would not be considered a professional approach. A separate design prior to programming allows for multidisciplinary designers and Subject Matter Experts (SMEs) to collaborate with highly skilled programmers for software that is both useful and technically sound.
The design must be translated into a machine-readable form. The code generation step performs this task. If the design is performed in a detailed manner, code generation can be accomplished without much complication.
Programming tools like compilers, interpreters, debuggers, etc. are used to generate the code. Different high-level programming languages like C, C + +, Pascal, and Java are used for coding. With respect to the type of application, the right programming language is chosen.
In communications, a code is a rule for converting a piece of information into another form or representation, not necessarily of the same type. In communications and information processing, encoding is the process by which information from a source is converted into symbols to be communicated. Decoding is the reverse process, converting these code symbols back into information understandable by a receiver.
Computer programming (often shortened to programming or coding) is the process of writing, testing, debugging/ troubleshooting, and maintaining the source code of computer programs. This source code is written in a programming language. The code may be a modification of an existing source or something completely new. The purpose of programming is to create a program that exhibits a certain desired behavior (customization). The process of writing source codes requires expertise in many different subjects, including knowledge of the application domain, specialized algorithms an formal logic.
Software testing is the process used to assess the quality of computer software. Software testing is an empirical technical investigation conducted to provide stakeholders with information about the quality of the product or service under test, with respect to the context in which it is intended to operate. This includes, but is not limited to, the process of executing a program or application with the intent of finding software bugs.
Quality is not absolute. It is value to some person. With that in mind, testing can never completely establish the correctness of arbitrary computer software; testing furnishes a criticism or comparison that compares the state and behavior of the product against a specification.
As per IEEE “Testing is the process of exercising or evaluating a system or system component by manual or automated means to verify that it satisfies specified requirements”.
There could any definition of software testing but essentially they all mean- “Does the
software behave as specified? “
How the error occurs?
The software faults occur through the following way-
A programmer makes an error (mistake), which results in a defect (fault, bug) in the software source code. If this defect is executed, in certain situations the system will produce wrong results, causing a failure, not all defects will necessarily result in failures. For example, defects in dead code will never result in failures. A defect can turn into a failure when the environment is changed. Examples of these changes in the environment include the software being run on a new hardware platform, alterations in source data or interacting with different software.
Role of SQA
Software testing may be viewed as an important part of the software quality assurance (SQA) process. In SQA, software process specialists and auditors take a broader view of software and its development. They test and change the software engineering process itself to reduce the number of faults that end up in defect rate. What constitutes an acceptable defect rate depends on the nature of the software.
An arcade area video game designed to simulate flying an airplane would presumably have a higher tolerance for defects than software used to control an actual airline. Similar to medical science, an operation simulation may have higher a higher tolerance for defects than software used to do an actual human operation or diagnostics.
Although, there are close links with SQA testing departments often exist independently and there may be no SQA areas in some companies.
Read more here about on Software Testing.
Release & Maintenance
Release and Maintenance activity involves the followings:
- File conversion
- System testing
- System changeover
- New system becomes operational
- Staff training
- Corrective maintenance
- Perceptive maintenance nom
- Adaptive maintenance
Common challenges in software development:
If requirements are not clear, incomplete, too general, or not testable, there will be problems.
If too much of work is crammed in too little time, problems are inevitable.
No one will know whether or not the program is any good until the customer complains or systems crash.
Requests to pile on new features after development is underway, extremely common.
If developers do not know what ‘ s needed or custom erroneous expectations, problems are guaranteed.