software enggineering Unit1
software enggineering Unit1
The main goal of Software Engineering is to develop software applications for improving
quality, budget, and time efficiency.
1. Functionality
The functionality of software refers to its ability to perform and function according to design
specifications. In simple terms, software systems should function correctly, i.e. perform all the functions
for which they are designed.
The functions refer to the features that the end user, as well as the business, expect as basic facilities from
the system. All these functions must be integrated into the system. Many software applications out there
are designed for simplicity, but ultimately, the purpose of the software is to provide its users with the
desired functionality. In order to look like the best software product, it must have a clear appearance,
components, and functions. However, there are also those products out there that can provide a great deal
of value for your money.
2. Usability (User-friendly)
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. Navigating the software is extremely important since it
helps determine the journey the user takes within the software. This is imperative to ensure visitors
remain on your website and have a positive experience, which leads to an increase in sales and brand
loyalty.
An important indicator of a good piece of software is its user interface, i.e., the smooth flow of its design.
A product with a great UI (User Interface) design is more likely to get noticed than one without. If a
software program isn’t user-friendly, users may have trouble navigating the software and using some of
its features. Software should require less time or effort to learn. Ideally, software should be easy to use
even by people with no IT experience.
3. Efficiency
Essentially, it 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. For a software project to succeed, efficiency is crucial. In addition to meeting the
needs for which the software was made, it must also provide excellent features designed to assist users in
completing their tasks faster. Software should make efficient use of storage space and execute commands
according to timing requirements.
In order to be efficient, software must offer users proper value in terms of their time and cash. The market
is filled with products that cater to various industries, but only a handful of products are efficient enough
to benefit individuals and businesses. The medical billing software that Open Practice Solutions provides,
for instance, makes billing processes much more efficient for clients than those offered by other
companies.
4. Flexibility
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.
It is essential to keep up with rapidly changing markets, technologies, and customer needs. In software
development, change is inevitable; it can arise during the development process itself or as the result of
future requirements. Flexibility is therefore highly valued. Consequently, any software product must be
scalable, flexible, and easily adaptable to future technology. When designing or building a software
product, be sure to plan for these changes that are inevitably going to occur. Loose coupling of
components is the key to creating highly flexible systems.
5. Reliability
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 (provide desired functionality) under specified conditions for a specified period of time.
Generally speaking, software reliability is measured as the availability of the software. The value should
not be less than 99%. In reliability testing, the goal is not perfection, but achieving a level of reliability
that is acceptable before a software product is released to customers. MTTF, MTTR, MTBR, etc., are
some reliability metrics that can be used to quantify the reliability of a software product.
It is regarded as one of the most important quality aspects of software quality, along with functionality,
efficiency, maintainability, etc. Since software tends to be complex, it is hard to achieve software
reliability.
6. Maintainability
Maintainability refers to how easily you can repair, improve and comprehend software code. In some
ways, maintaining is similar to being flexible. Maintainability deals with the modification of errors and
minor alterations to software code, while flexibility focuses on major functional extensions. It also
involves maintaining the services and functionality of the software.
Most of the time, developers are not the ones who maintain the software. Therefore, good documentation
is crucial, which includes code documentation, interface definitions, etc. The maintainability of software
products is affected by the quality of the documentation. Typically, more than half of development
budgets are spent on software maintenance. Maintenance should therefore be integrated into the
development lifecycle for effective software maintenance.
7. Portability
Software portability is a critical factor that cannot be ignored. Portability refers to the ability to use
software in different environments. This is the ease with which software can be ported from one platform
to another without (or with minimal) changes, while obtaining similar results. As simple as it may sound,
it refers to the ability of software to work on different hardware platforms without any (or little)
modifications needed.
Furthermore, you should be aware that porting software to a new environment is comparatively cheaper
than developing an equivalent application from scratch. There can be no doubt that portability is a crucial
aspect of reducing development costs.
8. Integrity
There are multiple interpretations of software integrity. Some people tend to associate integrity with
security, believing it is resistant to hacks and privacy violations. To others, high integrity means that the
software cannot be modified without authorization.
Integrity is key for demonstrating the safety, security, and maintainability of your software. In addition,
software that needs to be compliant with industry regulations and coding standards requires high code
integrity. Achieving software integrity can be difficult. Yet, with the right practices to improve safety,
security, and maintainability, the challenge can be easily overcome. In these days of increased security
threats, all software must include this factor.
The goal of a software process model is to provide guidance for controlling and coordinating the tasks to
achieve the end product and objectives as effectively as possible.
There are many kinds of process models for meeting different requirements. We refer to these as SDLC
models (Software Development Life Cycle models). The most popular and important SDLC models are
as follows:
Waterfall model
V model
Incremental model
RAD model
Agile model
Iterative model
Prototype model
Spiral model
Choosing the right software process model for your project can be difficult. If you know your
requirements well, it will be easier to select a model that best matches your needs. You need to keep the
following factors in mind when selecting your software process model:
Project requirements
Before you choose a model, take some time to go through the project requirements and clarify them
alongside your organization’s or team’s expectations. Will the user need to specify requirements in detail
after each iterative session? Will the requirements change during the development process?
Project size
Consider the size of the project you will be working on. Larger projects mean bigger teams, so you’ll
need more extensive and elaborate project management plans.
Project complexity
Complex projects may not have clear requirements. The requirements may change often, and the cost of
delay is high. Ask yourself if the project requires constant monitoring or feedback from the client.
Cost of delay
Is the project highly time-bound with a huge cost of delay, or are the timelines flexible?
Customer involvement
Do you need to consult the customers during the process? Does the user need to participate in all phases?
This involves the developers’ knowledge and experience with the project domain, software tools,
language, and methods needed for development.
Project resources
This involves the amount and availability of funds, staff, and other resources.
A, B, and C are modules of Software Products that are incrementally developed and delivered.
1. Requirement Gathering:- In this step, the development team must gather the requirements, by
interaction with the customer. development team should plan the time and effort needed to build the
project. Based on this information you can evaluate technical and economical feasibility.
2. Design the Requirements:- In this step, the development team will use user-flow-diagram or high-
level UML diagrams to show the working of the new features and show how they will apply to the
existing software. Wireframing and designing user interfaces are done in this phase.
3. Construction / Iteration:- In this step, development team members start working on their project,
which aims to deploy a working product.
4. Testing / Quality Assurance:- Testing involves Unit Testing, Integration Testing, and System
Testing. A brief introduction of these three tests is as follows:
Unit Testing:- Unit testing is the process of checking small pieces of code to ensure that the
individual parts of a program work properly on their own. Unit testing is used to test individual
blocks (units) of code.
Integration Testing:- Integration testing is used to identify and resolve any issues that may
arise when different units of the software are combined.
System Testing:- Goal is to ensure that the software meets the requirements of the users and
that it works correctly in all possible scenarios.
5. Deployment:- In this step, the development team will deploy the working project to end users.
6. Feedback:- This is the last step of the Agile Model. In this, the team receives feedback about the
product and works on correcting bugs based on feedback provided by the customer.