Basic of Software Engineering
@. The Institute of Electrical and Electronic Engineers or IEEE:
Software is a collection of computer programs, procedures, rules, associated documentation, and data.
@. 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 does not wear out:
Different things like clothes, ornaments do wear out after some time.
But, software once created never wears out.
It can be used for as long as needed and in case of need for any updating, required changes can be made in the same software and then it can be used further with updated features.
@. Software is not manufactured:
Software is not manufactured but is developed.
So, it does not require any raw material for its development.
@. Work of software:
Software controls, integrates, and manages the hardware components of a computer system.
It also instructs the computer what needs to be done to perform a specific task and how it is to be done.
Such as: Software instructs the hardware how to print a document, take input from the user, and display the output.
@. Software Characteristics:
Software characteristics are classified into nine major issues.
#. Efficiency:
The software is produced in the expected time and within the limits of the available resources.
#. Reliability:
This is the ability of the software to provide the desired functionalities under every condition.
This means that our software should work properly in each condition.
#. Usability:
The usability of the software is the simplicity of the software in terms of the user.
The easier the software is to use for the user, the more is the usability of the software as more number of people will now be able to use it and also due to the ease will use it more willingly.
#. Flexibility:
Every software is flexible.
What this means is that we can make necessary changes in our software in the future according to the need of that time and then can use the same software then also.
#. Portability:
Portability of the software means that we can transfer our software from one platform to another that too with ease.
Due to this, the sharing of the software among the developers and other members can be done flexibly.
#. Reusability:
As the software never wears out, neither does its components, i.e. code segments.
So, if any particular segment of code is required in some other software, we can reuse the existing code form the software in which it is already present. This reduced our work and also saves time and money.
#. Maintainability
Every software is maintainable.
This means that if any errors or bugs appear in the software, then they can be fixed.
#. Interoperability:
The software system can interact properly with other systems.
This can apply to software on a single, stand-alone computer or to software that is used on a network.
#. Correctness:
The program produces the correct output.
@. Types of Software Products:
Software engineers are concerned with developing software products, that is, software that can be sold to a customer.
There are two kinds of software product:
@.Different the Generic products and customize products:
No | Generic Products | No | Customize Products |
01 | Product developers own the specification.
|
01 | Customers own the specification and it also controlled by the customer. |
02 | Developer can be able to change the specification
|
02 | Customer is also involved; therefore, for changing the specification, both customer and the developer must make discussion for the implementation. |
03 | Developer can be able to change the specification due to some other external change.
|
03 | The customer and the developer will involve in the business process changes and they will implement if both are satisfied |
04 | Generic product user cannot control the evolution of the product. User can get application immediately. | 04 | The application will take some year for the process of development and it is not available immediately. |
05 | Such as: Microsoft Word, Microsoft power point, Microsoft Excel | 05 | Such as: Embedded control systems, air traffic control software, traffic monitoring systems. |
@. Generic software product:
Generic software is a ready-to-use solution that may be customized to fit the needs of a wide range of customers.
In generic software product development, the specification is owned by the product developer.
Example: Microsoft Word, Microsoft power point, Microsoft Excel.
@. Customized software product:
Software products were developed as per the requirements of a specific customer.
An example of this could be a software product developed for an internal team at an organization.
Examples – embedded control systems, air traffic control software, traffic monitoring systems.
@. Software Failure:
There are a variety of causes for software failures but the most common are:
- Lack of user participation
- Changing requirements
- Inability to handle the project’s complexity
- Failure to use software engineering methods
- Inaccurate estimates of needed resources
- Badly defined system requirements
- Lack of resources
- Unmanaged risks
- Poor communication among customers, developers, and users
- Use of immature technology
- Poor Project Management
- Lack of Stakeholder involvement
@. Software Product and Software Process:
Software Product:
In the context of software engineering, a product is any software created in response to a client’s request.
In other terms, a product is the outcome of a planned and managed software project.
The Software Product may not contain details about the software process, but the software process has every detail about the final product from the very initial phase itself that how the software would be like.
@.Different the Software products and Software Process:
No | Software Products | No | Software Process |
01 | The final software that is delivered to the customer is called the software product. | 01 | The software process is the entire way in which we produce the software. |
02 | It is the outcome of the entire software development process. | 02 | Where customers and engineers define the software that is to be produced and the constraints on its operation. |
03 | It may include source code, data, user guides, reference manuals, installation manuals, specification documentation, other documentation, etc.
|
03 | It is the entire journey from the idea of the Software to the final release of it.
|
04 | The software product does not have any information regarding the software process, like how it was scheduled, how many people worked on it, how the work was divided, etc.
|
04 | Software validation: where the software is checked to ensure that it is what the customer requires. |
05 | It only consists of the final application that fulfills the user’s requirements.
|
05 | Software evolution: where the software is modified to reflect changing customer and market requirements.
|
@. Components of Product:
The best software products begin with an excellent value proposition, and they must be carefully designed and extensively tested to ensure that value is delivered to the end user.
A software product’s components include:
- Product Design: It is the visual aesthetic and interactive interface in which users may interact with the product.
- Functionality and Features: When people utilize a software product, they interact with it through functionality.
- Content: The data or details contained in a software product are referred to as its content.
@. Software Process:
The software process is the entire way in which we produce the software.
It is the entire journey from the idea of the Software to the final release of it.
It includes all the activities that are performed to the form the final Software product, like the requirement analysis, designing of the software, coding, testing, documentation, Maintenance, etc.
@. Activities of Software Process:
There are various activities of the software process.
- Software Specification: It describes the software’s main features and the constraints surrounding them.
- Design and Implementation: During this step, the software is designed and programmed.
- Verification and Validation: The developed and programmed software should ensure that it meets the needed criteria and the needs of the client.
- Software Evolution: Software should be modified over time to ensure that it meets the needs of the client and the market.
@. What is Software Engineering?
Software engineering is an engineering discipline that is concerned with all aspects of software production from the early stages to user end.
Software Engineering is the application of a system, disciplined, and cost-effective technique which is an engineering approach for the development, operation, and maintenance.
Software engineering is “a systematic approach to the analysis, design, assessment, implementation, test, maintenance and reengineering of software, that is, the application of engineering to software.
It involves applying engineering principles and methods to development in order to create efficient, robust, and high-quality system that meets the needs of users and businesses.
As a note, software engineering is not only limited to creating new products.
Existing software products need maintenance. Software maintenance is also a part of software engineering.
Software engineering is not just programming.
The keyword here is engineering.
Engineering always connotes two things: designing a product in detail and a methodical approach to carrying out the design and production so that the product is produced with the desired qualities and a large number of people can use it.
@. There are several tasks that are part of every software engineering project:
- Analysis of the problem
- Determination of requirements
- Design of the software
- Coding of the software solution
- Testing and integration of the code
- Installation and delivery of the software
- Documentation
- Maintenance
- Quality assurance
- Training
- Resource estimation
- Project management
@. Why Software Engineering?
Software engineering is extremely important for:
@. Reduction of Development Costs:
Software engineering helps reduce the cost of development by reusing the existing code, using better tools, and following sound software engineering practices.
@. Reduction of Development Time:
There are some software products and services available in the markets that provide the needed functionality immediately;
Thus, the project team can avoid writing fresh source codes altogether to achieve the same functionality.
The end result is that the productivity of the project team continues to improve, which allows the faster development of software products.
@. Increasing the Quality:
Quality is the single most important ingredient in making any product successful.
Software engineering plays an important role in building quality software products.
By using better software engineering methodologies and software engineering tools, it is possible to build better-quality software products.
@. Challenges in Software Engineering:
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.
#. The challenge in software engineering is to deliver high-quality software on time and on budget to customers.
Software quality needs to be properly planned to enable the project to deliver a quality product.
The effect of software failure may be large costs to correct the software, loss of credibility of the company or even loss of life.
#. The accurate estimation of project cost, effort and schedule is a challenge in software engineering.
Therefore, project managers need to determine how good their estimation process actually is and to make appropriate improvements.
#. Risk management is an important part of project management, and the objective is to identify potential risks early and throughout the project and to manage them appropriately.
The probability of each risk occurring and its impact is determined, and the risks are managed during project execution.
#. The methods used to develop small or medium-scale projects are not suitable when it comes to the development of large-scale or complex systems.
#. Changes in software development are unavoidable.
In today’s world, changes occur rapidly and accommodating these changes to develop complete software is one of the major challenges faced by the software engineers.
#. Sometimes, changes are incorporated in documents without following any standard procedure.
Thus, verification of all such changes often becomes difficult.
@.
The key challenges facing software engineering is coping with increasing diversity, demands for reduced delivery times and developing trustworthy software.
Software Application Domains:
Today, seven broad categories of computer software present continuing challenges for software engineers:
@. System software:
System Software is necessary to manage computer resources and support the execution of application programs.
Such as: operating systems, compilers, editors and drivers, etc.
@. Business Application software:
This category of software is used to support business applications and is the most widely used category of software.
Examples are software for inventory management, accounts, banking, hospitals, schools, stock markets, etc.
@. Engineering/scientific software:
Scientific and engineering software satisfies the needs of a scientific or engineering user to perform enterprise-specific tasks.
Such software is written for specific applications using principles, techniques, and formulae particular to that field.
Examples are software like MATLAB, AUTOCAD, PSPICE, ORCAD, etc.
@. Embedded software:
This type of software is embedded into the hardware normally in the Read-Only Memory (ROM) as a part of a large system and is used to support certain functionality under the control conditions.
Examples are software used in instrumentation and control applications like washing machines, satellites, microwaves, etc.
@. Product-line software:
Composed of reusable components and designed to provide specific capabilities for use by many different customers.
It may focus on a limited and esoteric marketplace (e.g., inventory control products) or attempt to address the mass consumer market.
@. Web/Mobile applications:
This network-centric software category spans a wide array of applications and encompasses browser-based apps, cloud computing, service-based computing, and software that resides on mobile devices.
@. Artificial intelligence software:
Such as: expert systems, decision support systems, pattern recognition software, artificial neural networks, etc. come under this category.
They involve complex problems which are not affected by complex computations using non- numerical algorithms.
@. Utility Software:
The programs coming under this category perform specific tasks and are different from other software in terms of size, cost, and complexity.
Such as: anti-virus software, voice recognition software, compression programs, etc.
@. Reservation Software:
A Reservation Software is primarily used to store and retrieve information and perform transactions related to air travel, car rental, hotels, or other activities.
@. Software Engineering vs Computer Science:
The primary difference is that computer science was originally a sub-branch of mathematics.
Computer science deals with the basic structure of a computer and is more theoretical.
It’s emphasis on math and science.
Software engineering is a field concerned with the application of engineering processes to the creation, design, and maintenance of software for a variety of different purposes.
One should choose Computer Science if he wants to get into a specialized field in CS like artificial intelligence, machine learning, security, or graphics.
On the other hand, one should choose Software Engineering. if he wants to learn the overall life cycle of how specific software is built and maintained.
@. Software Engineering vs. Software Development:
#. An engineer designs and plans applying the principles of engineering to software development.
Always aware of the “big picture”, with talents in many areas.
An engineer’s core focus lies with architecture.
A developer executes. Without the need for the “big picture”, their talents often focused on a single area.
#. A software engineer is responsible for making system design and prototyping.
So the software developer is mainly focused on developing code and testing; these are part of software development cycle.
Software developer is responsible for coding.
#. Anyone can be a software developer.
If you know a small amount of programming concept then you have the foundation to become Software Developer.
They write code without any performance and scalability analysis.
But, a systematic education and training are required to become a software engineer.
@. Does All Software Require Software Engineering?
Not all software requires software engineering.
Simplistic games or programs that are used by consumers may not need engineering, depending on the risks associated with them.
Almost all companies do require software engineering because of the high-risk information that they store and security risks that they pose.
@. Best software engineering techniques and methods:
A software product can be developed using any of the popular software engineering methodologies (or models or approaches).
At one extreme, the entire product is developed under one project using a big project planning model.
At the other extreme, you can develop the product incrementally. Which model should be used for software development for a specific project boil down to the preference of the sponsors or clients of the project?
If the clients prefer to have a product with minimal (or essential) features at the beginning and launch it into the market and, on the basis of the market response, continue adding additional features later on, then the incremental model is preferred.
A software product can be incrementally built using any of the many popular agile methodologies such as eXtreme Programming, Scrum, and Rational Unified Process (used by Eclipse platforms).
On the other hand, if the clients want the entire product to be delivered in one shot, then the big project planning model is preferred, better known as the Waterfall model.
So, there are many factors that need to be considered in deciding which model is best suited for a given project.
@. Software making:
While all software projects have to be professionally managed and developed, different techniques are appropriate for different types of system.
Such as: games should always be developed using a series of prototypes whereas safety critical control systems require a complete and analyzable specification to be developed.
You can’t, therefore, say that one method is better than another.
@. What differences has the Internet made to software engineering?
The rise of the Internet led to very rapid growth in the demand for international information display/e-mail systems on the World Wide Web.
The growth of browser usage, running on the HTML language, changed the way in which information-display and retrieval was organized.
Not only has the Internet led to the development of massive, highly distributed, service-based systems.
It has also supported the creation of an “app” industry for mobile devices which has changed the economics of software.
@. Software Engineering Ethics:
Software products can be misused to harm people.
For example: malware can be created to steal money from bank accounts of other people.
Similarly, viruses can be created to infect the computer systems of other people.
Thus, a software engineer needs to abide by a code of ethics to shy away from such activities.
It is quite possible to create powerful software systems that can harm a large number of people.
All software engineers should abide by a code of ethics to work for the betterment of humanity and not to harm others.
@. Software Engineering Code of Ethics
Principles of the Software Engineering Code of Ethics and Professional Practice:
In 1999, the Institute for Electrical and Electronics Engineers, Inc. (IEEE) and the Association for Computing Machinery, Inc (ACM) published
a code of eight Principles related to the behavior of and decisions made by professional software engineers, including practitioners, educators, managers, supervisors and policy makers, as well as trainees and students of the profession.
In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight Principles based on IEEE/ACM Code of Ethics:
#. PUBLIC:
The software engineer must act in accordance with the interests of the public and not his.
#. CLIENT AND EMPLOYER:
The software engineer must create or administer software that does not pose any danger to the safety and health of the hazards.
He must always be trusted to his client and employer.
#. PRODUCT:
Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.
#. JUDGMENT:
Software engineers shall maintain integrity and independence in their professional judgment.
#. MANAGEMENT:
When a software engineer gets to a leading position, he must support all team members to meet their goals with fairness and justice.
#. PROFESSION:
The software engineer must act with integrity and professionalism always having the safety and welfare of the customer always prioritized.
#. COLLEAGUES:
Software engineers shall be fair to and supportive of their colleagues.
#.SELF:
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
@. Some Careers in Software Engineering:
Software engineering provides several careers to pursue.
A person having skills and interest in finding defects or shortcomings in software products can pursue a career in software testing.
Anyone who enjoys programming can become a software developer and write source code.
A person good in designing and architecture can become a software designer or architect.
A person who likes the task of collection and classification of information can become a business or technical analyst.
If a person likes discovering new things or analyzing how things work, he or she can pursue a research career.
There are teaching careers for those who wish to educate others.
A person who has gained experience in more than one area of software engineering can become a software project manager.
People with different skills can also be useful because different projects need different skill sets.
The list of careers provided here is not exhaustive.
New careers are emerging as software engineering technology emerges.
Still, there are some additional roles required for software projects.
Because of the increased use of web-based software products, web designers are needed on such projects.
Web designers have specialized skills for creating the user interface for web-based software products. Database administrators are needed to manage the databases.
@. Technical IT skills:
A software engineering degree sets you up with technical IT skills that can be used in various IT and web-based careers from applications developer to web designer
Job options
Jobs directly related to your Software Engineering degree include: Jobs where your degree would be useful include:
- Applications developer
- Cyber security analyst
- Game developer
- IT consultant
- Web developer
- Web designer
- Software designer
- Software architect
- Software engineer
- Software project manager
- Embedded Software Engineer
- Multimedia programmer
- Software tester
- Mobile Software Engineer
- Modeling Specialist
- Teacher
- Research and Development Consultant
- Database administrator
- Forensic computer analyst
- IT technical support officer
- Communications Specialist
- Systems analyst
- Brand Strategist
@. The History of Software Engineering
Software engineering has evolved steadily from its founding days in the 1940s until today in the 2023s.
Applications have evolved continuously.
The ongoing goal to improve technologies and practices, seeks to improve the productivity of practitioners and the quality of applications to users.
@. 1945 to 1965: The Origins:
The term software engineering first was used in the late 1950s and early 1960s.
The NATO Science Committee sponsored two conferences on software engineering in 1968 and 1969, which gave the field its initial boost.
Many believe these conferences marked the official start of the profession.
Role of women: In the 1940s, 1950s, and 1960s, software was often written by women.
Men often filled the highest prestige hardware engineering roles.
Grace Hopper and many other unsung women filled many programming jobs during the first several decades of software engineering.
1965 to 1985: The Software Crisis:
Software engineering was spurred by the so-called software crisis of the 1960s, 1970s and 1980s, which identified many of the problems of software development. Many software projects ran over budget and schedule. Some projects caused property damage. A few projects caused loss of life.
1985 to Present: No Silver Bullet:
For decades, solving the software crisis was paramount to researchers. Seemingly, they trumpeted every new technology and practice from the 1970s to the 1990s as a silver bullet to solve the software crisis.
Different tools, discipline, formal methods, process, and professionalism were touted as silver bullets.
Structured programming, object-oriented programming, CASE tools, Ada, documentation, standards, UML, and different models.
Such as: CMM, code of ethics, licenses and professionalism were touted as silver bullets.
1990-1999: The Internet:
The rise of the Internet led to very rapid growth in the demand for international information display/e-mail systems on the World Wide Web. The growth of browser usage, running on the HTML language, changed the way in which information-display and retrieval was organized.
2000-Present: Lightweight Methodologies.
With the expanding demand for software in many smaller organizations, the need for inexpensive software solutions led to the growth of simpler, faster methodologies that developed running software, from requirements to deployment, quicker & easier.
The use of rapid- prototyping evolved to entire lightweight methodologies. Such as: Extreme Programming (XP), which attempted to simplify many areas of software engineering, including requirements gathering and reliability testing for the growing, vast number of small software systems.
Early 2000s: Use of integrated development environments becomes more common. Use of stand- a
Early 2000s: Use of integrated development environments becomes more common. Use of stand- alone CASE tools declines.
Use of the UML becomes widespread.
Increasing use of scripting languages such as Python and PERL for software development.
C# developed as a competitor to Java.
Agile methods proposed and many companies experiment with these approaches.
2010: Emergence of web-based systems and software as a service.
Services become the dominant approach to reuse and agile methods emerge into the mainstream. Agile approaches
Evolve to cope with larger system development.
An app industry emerges to develop software for increasingly capable mobile devices. Government and enterprise systems continue to grow in size.
@. Some myths and realities of Software:
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.
Managers, who own software development responsibility, are often under strain and pressure to maintain a software budget, time constraints, improved quality, and many other considerations. Common management myths are listed below.
Management Myths:
#. Myth:
If the project is behind schedule, increasing the number of programmers can reduce the time gap.
#. Reality:
Adding more people to a development team won’t necessarily speed up the delivery, rather it can slow it down even more.
New workers take longer to learn about the project as compared to those already working on the project.
#. Myth:
Using the latest, cutting-edge tools or technology guarantees better results then the quality of the software produced by the company will also be great.
#. Reality:
It is not true because the quality of the software depends moreover on its developers and the techniques and logic used to build it.
Although the infrastructure and quality of computers and tools is a factor on which the quality of the software depends, it cannot be completely determined by these factors.
#. Myth:
If the project is outsourced to a third party, the management can relax and let the other firm develop software for them.
#. Reality:
If an organization does not understand how to manage and control software projects internally, it will invariably struggle when it outsources software projects.
@. Customer myths:
#. Myth:
Brief requirement stated in the initial process is enough to start development; detailed requirements can be added at the later stages.
#. Reality:
Starting development with incomplete and ambiguous requirements often leads to software failure.
Instead, a complete and formal description of requirements is essential before starting development.
#. Myth:
Project requirements continually change, but change can be easily accommodated because software is flexible.
#. Reality:
Adding requirements at a later stage often requires repeating the entire development process.
Change, when requested after software is in production, can be much more expensive than the same change requested earlier.
This is because incorporating changes later may require redesigning and extra resources
#. Myth:
Software with more features is better software.
#. Reality:
It is a complete myth. Efficient and useful features in the software make it better from others.
@. Developer Myths:
#. Myth:
The success of a software project depends on the quality of the product produced.
#. Reality:
The quality of programs is not the only factor that makes the project successful instead the documentation and software configuration also play a crucial role.
#. Myth:
Software engineering requires unnecessary documentation, which slows down the project.
#. Reality:
Software engineering is about creating quality at every level of the software project.
Proper documentation enhances quality which results in reducing the amount of rework.
#. Myth:
Software quality can be assessed only after the program is executed.
#. Reality:
The quality of software can be measured during any phase of development process by applying some quality assurance mechanism. One such mechanism is formal technical review that can be effectively used during each phase of development to uncover certain errors.
#. Myth:
Once the software is created, the job is completed.
#. Reality:
This is the biggest myth of all. Software always requires maintenance throughout its lifetime until it gets retired.
There’s always something to fix, change, or improve.
Leave a Reply