EXPERIMENT-1
Aim: - Overview of Software Engineering
Introduction: -
What is Software Engineering?
The application of a systematic, disciplined, quantifiable approach to the development, operation,
and maintenance of software; that is, the application of engineering to software. It is the
establishment and use of sound engineering principles in order to obtain economic software thatis
reliable and works efficiently on real machines. It is an engineering branch associated with
analyzing user requirements, design, development, testing, and maintenance of software products.
Principles of Software Engineering
The principles of software engineering are: -
One of the basic software Engineering principles is Better Requirement analysis which gives a
clear vision of the project. At last, a good understanding of user requirements provides value to
its users by delivering a good software product that meets users’ requirements.
All designs and implementations should be as simple as possible mean the KISS (Keep it
Simple, Stupid) principle should be followed. It makes code so simple as a result debugging
and further maintenance become simple.
Maintaining the vision of the project is the most important thing throughout complete
development process for the success of a software project. A clear vision of the project leads to
the development of the project in the right way.
Software projects include a number of functionalities, all functionalities should be developed
in a modular approach so that development will be faster and easier. This modularity makes
functions or system components independent.
Another specialization of the principle of separation of concerns is Abstraction for suppressing
complex things and delivering simplicity to the customer/user means it gives what the actual
user needs and hides unnecessary things.
Think then Act is a must-required principle for software engineering means before starting
developing functionality first it requires to think about application architecture, as good
planning on the flow of project development produces better results.
Sometimes developer adds up all functionalities together but later find no use of that. So,
following the Never add extra principle is important as it implements what actually needed and
later implements what are required which saves effort and time.
When other developers work with another’s code they should not be surprised and should not
waste their time in getting code. So, providing better documentation at required steps is a good
way of developing software projects.
Law of Demeter should be followed as it makes classes independent on their functionalities and
reduces connections and inter dependability between classes which is called coupling.
Principle of Consistency is important in coding style and designing GUI (Graphical User
Interface) as consistent coding style gives an easier reading of code and consistency in GUI
makes user learning easier in dealing with interface and in using the software.
Performing continuous validation helps in checking software system meets requirement
specifications and fulfils its intended purpose which helps in better software quality control.
Scalability in Software Engineering should be maintained to grow and manage increased
demand for software applications.
Characteristics of Software Engineering
The characteristics of software engineering are: -
The functionality of software refers to its ability to perform and function according to design
specification.
The user-friendliness of the software is characterized by its ease of use. In other words, learning
how to use the software should require less effort or time.
Efficiency refers to the software’s ability to utilize human and system resources such as time,
effort, CPU, memory, computation power, network bandwidth, files, databases, etc., as
effectively and efficiently as possible.
Software Flexibility refers to the ability of the software solution to adapt to potential or future
changes in its requirements. When evaluating the flexibility of software, look at how simple it
is to add, modify, or remove features without interfering with the current operation.
The reliability of a software product describes the likelihood it will operate without failure over
a specified period of time under certain conditions. It determines the ability of software to
maintain its level of performance under specified conditions.
Maintainability refers to how easily you can repair, improve and comprehend software code.
Apart from it the characteristics that differ from hardware are as follows:
Software is developed or engineered; it is not manufactured in the classical sense.
The software doesn’t “wear out”.
The software continues to be custom-built.
Components of Software Engineering
The components of software engineering are: -
Program - A computer program is a list of instructions that tell a computer what to do.
Documentation - Source information about the product contained in design documents, detailed
code comments, etc.
Operating Procedures - Set of step-by-step instructions compiled by an organization to help
workers carry out complex routine operations.
Applications of Software Engineering
Following are the applications of software engineering: -
System software - a collection of programs written to service other programs. Some system
software (e.g., compilers, editors, and file management utilities) processes complex, but
determinate, information structures.
Application software - stand-alone programs that solve a specific business need. Applications
in this area process business or technical data in a way that facilitates business operations or
management.
Engineering/scientific software - has been characterized by “number crunching” algorithms.
Applications range from astronomy to volcanology, from automotive stress analysis to space
shuttle orbital dynamics, and from molecular biology to automated manufacturing.
Embedded software - resides within a product or system and is used to implement and control
features and functions for the end user and for the system itself.
Web applications - called “Web Apps,” this network-centric software category spans a wide
array of applications. In their simplest form, Web Apps can be little more than a set of linked
hypertext files that present information using text and limited graphics.
Artificial intelligence software - makes use of non-numerical algorithms to solve complex
problems that are not amenable to computation or straightforward analysis. Applications within
this area include robotics, expert systems, pattern recognition etc.
Product-line software - designed to provide a specific capability for use by many different
customers. Product-line software can focus on a limited and esoteric marketplace (e.g.,
inventory control products).
Tools to design SRS – Software Requirement Specification
Following are the tools used to design SRS: -
Jira - Although Jira is primarily a product management tool, it also includes requirements
management. Mostly used by Agile teams, Jira helps configure your requirements, facilitates
test case traceability process, and allows for collaboration with sharing, watching, and
commenting features.
Perforce Helix RM - A stand-alone module in Perforce’s Application Lifecycle Management
suite, Helix RM is a useful tool for large, distributed teams. Its key features are requirements
traceability, graphical tools, scalability, real-time collaboration features, impact analysis tools,
and test case management, file history graphs, and even a time-lapse tool to visualize an item’s
progress over time. Helix RM integrates well with Jira, various Microsoft products, Slack,
Eclipse, GitHub, Go2Group, Rational DOORS, and OpsHub. The tool has quite a steep learning
curve, so it’s accompanied by video tutorials, training, and a knowledge base.
Pearls - Once you’ve defined your use cases, actors, conditions, and flows, Pearls allows you
to generate a requirements specification document with a single click. The tool has strong team
collaboration features like comments and notifications about member activity, features for
defining project goals, and managing stakeholders.
Reqchecker - It’s a simple tool for checking requirements coverage. Often used as an added
level of assurance, Reqchecker’s traceability analysis makes sure requirements and tests are
covered. Importing Word, pdf, Excel, PowerPoint, or XML files into Reqchecker, you can turn
them into requirements.
Rational Rose - Rational Rose is an object-oriented Unified Modeling Language (UML)
software design tool intended for visual modeling and component construction of enterprise-
level software applications. Rational Rose documents the diagram as it is being constructed and
then generates code in the designer's choice of DDL.