Software Case Tools Overview
Software Case Tools Overview
Software Case Tools Overview
Central Repository - CASE tools require a central repository, which can serve as a source of
common, integrated and consistent information. Central repository is a central place of storage
where product specifications, requirement documents, related reports and diagrams, other useful
information regarding management is stored. Central repository also serves as data dictionary.
Upper Case Tools - Upper CASE tools are used in planning, analysis and design stages of
SDLC.
Lower Case Tools - Lower CASE tools are used in implementation, testing and maintenance.
Integrated Case Tools - Integrated CASE tools are helpful in all the stages of SDLC, from
Requirement gathering to Testing and documentation.
CASE tools can be grouped together if they have similar functionality, process activities and capability
of getting integrated with other tools.
CASE tools help in this by automatic tracking, version management and release management. For
example, Fossil, Git, Accu REV.
Change Control Tools
These tools are considered as a part of configuration management tools. They deal with changes made to
the software after its baseline is fixed or when the software is first released. CASE tools automate
change tracking, file management, code management and more. It also helps in enforcing change policy
of the organization.
Programming Tools
These tools consist of programming environments like IDE (Integrated Development Environment), inbuilt modules library and simulation tools. These tools provide comprehensive aid in building software
product and include features for simulation and testing. For example, Cscope to search code in C,
Eclipse.
Prototyping Tools
Software prototype is simulated version of the intended software product. Prototype provides initial look
and feel of the product and simulates few aspect of actual product.
Prototyping CASE tools essentially come with graphical libraries. They can create hardware independent
user interfaces and design. These tools help us to build rapid prototypes based on existing information.
In addition, they provide simulation of software prototype. For example, Serena prototype composer,
Mockup Builder.
Web Development Tools
These tools assist in designing web pages with all allied elements like forms, text, script, graphic and so
on. Web tools also provide live preview of what is being developed and how will it look after
completion. For example, Fontello, Adobe Edge Inspect, Foundation 3, Brackets.
Quality Assurance Tools
Quality assurance in a software organization is monitoring the engineering process and methods adopted
to develop the software product in order to ensure conformance of quality as per organization standards.
QA tools consist of configuration and change control tools and software testing tools. For example,
SoapTest, AppsWatch, JMeter.
Maintenance Tools
Software maintenance includes modifications in the software product after it is delivered. Automatic
logging and error reporting techniques, automatic error ticket generation and root cause Analysis are few
CASE tools, which help software organization in maintenance phase of SDLC. For example, Bugzilla
for defect tracking, HP Quality Center.
2. Software Requirements
The software requirements are description of features and functionalities of the target system.
Requirements convey the expectations of users from the software product. The requirements can be
obvious or hidden, known or unknown, expected or unexpected from clients point of view.
Requirement Engineering
The process to gather the software requirements from client, analyze and document them is known as
requirement engineering.
The goal of requirement engineering is to develop and maintain sophisticated and descriptive System
Requirements Specification document.
Requirement Engineering Process
It is a four step process, which includes
Feasibility Study
Requirement Gathering
organization, cost constraints and as per values and objectives of the organization. It explores technical
aspects of the project and product such as usability, maintainability, productivity and integration ability.
The output of this phase should be a feasibility study report that should contain adequate comments and
recommendations for management about whether or not the project should be undertaken.
Requirement Gathering
If the feasibility report is positive towards undertaking the project, next phase starts with gathering
requirements from the user. Analysts and engineers communicate with the client and end-users to know
their ideas on what the software should provide and which features they want the software to include.
Software Requirement Specification
SRS is a document created by system analyst after the requirements are collected from various
stakeholders.
SRS defines how the intended software will interact with hardware, external interfaces, speed of
operation, response time of system, portability of software across various platforms, maintainability,
speed of recovery after crashing, Security, Quality, Limitations etc.
The requirements received from client are written in natural language. It is the responsibility of system
analyst to document the requirements in technical language so that they can be comprehended and useful
by the software development team.
SRS should come up with following features:
Technical requirements are expressed in structured language, which is used inside the
organization.
Requirements gathering - The developers discuss with the client and end users and know their
expectations from the software.
Organizing Requirements - The developers prioritize and arrange the requirements in order of
importance, urgency and convenience.
Negotiation & discussion - If requirements are ambiguous or there are some conflicts in
requirements of various stakeholders, if they are, it is then negotiated and discussed with
stakeholders. Requirements may then be prioritized and reasonably compromised.
The requirements come from various stakeholders. To remove the ambiguity and conflicts, they
are discussed for clarity and correctness. Unrealistic requirements are compromised reasonably.
Documentation - All formal & informal, functional and non-functional requirements are
documented and made available for next phase processing.
Requirement Elicitation Techniques
Requirements Elicitation is the process to find out the requirements for an intended software system by
communicating with client, end users, system users and others who have a stake in the software system
development.
There are various ways to discover requirements
Interviews
Interviews are strong medium to collect requirements. Organization may conduct several types of
interviews such as:
Structured (closed) interviews, where every single information to gather is decided in advance,
they follow pattern and matter of discussion firmly.
Non-structured (open) interviews, where information to gather is not decided in advance, more
flexible and less biased.
Oral interviews
Written interviews
One-to-one interviews which are held between two persons across the table.
Group interviews which are held between groups of participants. They help to uncover any
missing requirement as numerous people are involved.
Surveys
Organization may conduct surveys among various stakeholders by querying about their expectation and
requirements from the upcoming system.
Questionnaires
A document with pre-defined set of objective questions and respective options is handed over to all
stakeholders to answer, which are collected and compiled.
A shortcoming of this technique is, if an option for some issue is not mentioned in the questionnaire, the
issue might be left unattended.
Task analysis
Team of engineers and developers may analyze the operation for which the new system is required. If the
client already has some software to perform certain operation, it is studied and requirements of proposed
system are collected.
Domain Analysis
Every software falls into some domain category. The expert people in the domain can be a great help to
analyze general and specific requirements.
Brainstorming
An informal debate is held among various stakeholders and all their inputs are recorded for further
requirements analysis.
Prototyping
Prototyping is building user interface without adding detail functionality for user to interpret the features
of intended software product. It helps giving better idea of requirements. If there is no software installed
at clients end for developers reference and the client is not aware of its own requirements, the
developer creates a prototype based on initially mentioned requirements. The prototype is shown to the
client and the feedback is noted. The client feedback serves as an input for requirement gathering.
Observation
Teams of experts visit the clients organization or workplace. They observe the actual working of the
existing installed systems. They observe the workflow at clients end and how execution problems are
dealt. The team itself draws some conclusions which aid to form requirements expected from the
software.
Software Requirements Characteristics
Gathering software requirements is the foundation of the entire software development project. Hence
they must be clear, correct and well-defined.
Clear
Correct
Consistent
Coherent
Comprehensible
Modifiable
Verifiable
Prioritized
Unambiguous
Traceable
Credible source
Software Requirements
We should try to understand what sort of requirements may arise in the requirement elicitation phase and
what kinds of requirements are expected from the software system.
Broadly software requirements should be categorized in two categories:
Functional Requirements
Requirements, which are related to functional aspect of software fall into this category.
They define functions and functionality within and from the software system.
EXAMPLES Search option given to user to search from various invoices.
Users can be divided into groups and groups can be given separate rights.
Security
Logging
Storage
Configuration
Performance
Cost
Interoperability
Flexibility
Disaster recovery
Accessibility
Could have : Software can still properly function with these requirements.
While developing software, Must have must be implemented, Should have is a matter of debate with
stakeholders and negation, whereas could have and wish list can be kept for software updates.
User Interface requirements
UI is an important part of any software or hardware or hybrid system. Software is widely accepted if it is
easy to operate
quick in response
User acceptance majorly depends upon how user can use the software. UI is the only way for users to
perceive the system. A well performing software system must also be equipped with attractive, clear,
consistent and responsive user interface. Otherwise the functionalities of software system can not be
used in convenient way. A system is said be good if it provides means to use it efficiently. User interface
requirements are briefly mentioned below
Content presentation
Easy Navigation
Simple interface
Responsive
Consistent UI elements
Feedback mechanism
Default settings
Purposeful layout
Validation of requirement
Size Metrics - LOC (Lines of Code), mostly calculated in thousands of delivered source code
lines, denoted as KLOC.
Function Point Count is measure of the functionality provided by the software. Function Point
count defines the size of functional aspect of software.
Complexity Metrics - McCabes Cyclomatic complexity quantifies the upper bound of the
number of independent paths in a program, which is perceived as complexity of the program or
its modules. It is represented in terms of graph theory concepts by using control flow graph.
Quality Metrics - Defects, their types and causes, consequence, intensity of severity and their
implications define the quality of product.
The number of defects found in development process and number of defects reported by the
client after the product is installed or delivered at client-end, define quality of product.
Process Metrics - In various phases of SDLC, the methods and tools used, the company
standards and the performance of development are software process metrics.
Resource Metrics - Effort, time and various resources used, represents metrics for resource
measurement.
Market Conditions - Policies, which changes over the time, such as taxation and newly
introduced constraints like, how to maintain bookkeeping, may trigger need for modification.
Client Requirements - Over the time, customer may ask for new features or functions in the
software.
Host Modifications - If any of the hardware and/or platform (such as operating system) of the
target host changes, software changes are needed to keep adaptability.
Organization Changes - If there is any business level change at client end, such as reduction of
organization strength, acquiring another company, organization venturing into new business,
need to modify in the original software may arise.
Types of maintenance
In a software lifetime, type of maintenance may vary based on its nature. It may be just a routine
maintenance tasks as some bug discovered by some user or it may be a large event in itself based on
maintenance size or nature. Following are some types of maintenance based on their characteristics:
Corrective Maintenance - This includes modifications and updating done in order to correct or
fix problems, which are either discovered by user or concluded by user error reports.
Adaptive Maintenance - This includes modifications and updating applied to keep the software
product up-to date and tuned to the ever changing world of technology and business
environment.
Perfective Maintenance - This includes modifications and updates done in order to keep the
software usable over long period of time. It includes new features, new user requirements for
refining the software and improve its reliability and performance.
Preventive Maintenance - This includes modifications and updating to prevent future problems
of the software. It aims to attend problems, which are not significant at this moment but may
cause serious issues in future.
Cost of Maintenance
Reports suggest that the cost of maintenance is high. A study on estimating software maintenance found
that the cost of maintenance is as high as 67% of the cost of entire software process cycle.
On an average, the cost of software maintenance is more than 50% of all SDLC phases. There are
various factors, which trigger maintenance cost go high, such as:
Real-world factors affecting Maintenance Cost
The standard age of any software is considered up to 10 to 15 years.
Older softwares, which were meant to work on slow machines with less memory and storage
capacity cannot keep themselves challenging against newly coming enhanced softwares on
modern hardware.
Most maintenance engineers are newbie and use trial and error method to rectify problem.
Often, changes made can easily hurt the original structure of the software, making it hard for any
subsequent changes.
Changes are often left undocumented which may cause more conflicts in future.
Software-end factors affecting Maintenance Cost
Structure of Software Program
Programming Language
IEEE provides a framework for sequential maintenance process activities. It can be used in iterative
manner and can be extended so that customized items and processes can be included.
Analysis - The modification is analyzed for its impact on the system including safety and
security implications. If probable impact is severe, alternative solution is looked for. A set of
required modifications is then materialized into requirement specifications. The cost of
modification/maintenance is analyzed and estimation is concluded.
Design - New modules, which need to be replaced or modified, are designed against requirement
specifications set in the previous stage. Test cases are created for validation and verification.
Implementation - The new modules are coded with the help of structured design created in the
design step.Every programmer is expected to do unit testing in parallel.
System Testing - Integration testing is done among newly created modules. Integration testing is
also carried out between new modules and the system. Finally the system is tested as a whole,
following regressive testing procedures.
Acceptance Testing - After testing the system internally, it is tested for acceptance with the help
of users. If at this state, user complaints some issues they are addressed or noted to address in
next iteration.
Delivery - After acceptance test, the system is deployed all over the organization either by small
update package or fresh installation of the system. The final testing takes place at client end after
the software is delivered.
Training facility is provided if required, in addition to the hard copy of user manual.
Software Re-engineering
When we need to update the software to keep it to the current market, without impacting its
functionality, it is called software re-engineering. It is a thorough process where the design of software is
changed and programs are re-written.
Legacy software cannot keep tuning with the latest technology available in the market. As the hardware
become obsolete, updating of software becomes a headache. Even if software grows old with time, its
functionality does not.
For example, initially Unix was developed in assembly language. When language C came into existence,
Unix was re-engineered in C, because working in assembly language was difficult.
Other than this, sometimes programmers notice that few parts of software need more maintenance than
others and they also need re-engineering.
Re-Engineering Process
Decide what to re-engineer. Is it whole software or a part of it?
Perform Reverse Engineering, in order to obtain specifications of existing software.
Restructure Program if required. For example, changing function-oriented programs into
object-oriented programs.
Program Restructuring
It is a process to re-structure and re-construct the existing software. It is all about re-arranging the source
code, either in same programming language or from one programming language to a different one.
Restructuring can have either source code-restructuring and data-restructuring or both.
Re-structuring does not impact the functionality of the software but enhance reliability and
maintainability. Program components, which cause errors very frequently can be changed, or updated
with re-structuring.
The dependability of software on obsolete hardware platform can be removed via re-structuring.
Forward Engineering
Forward engineering is a process of obtaining desired software from the specifications in hand which
were brought down by means of reverse engineering. It assumes that there was some software
engineering already done in the past.
Forward engineering is same as software engineering process with only one difference it is carried out
always after reverse engineering.
Component reusability
A component is a part of software program code, which executes an independent task in the system. It
can be a small module or sub-system itself.
Example
The login procedures used on the web can be considered as components, printing system in software can
be seen as a component of the software.
Components have high cohesion of functionality and lower rate of coupling, i.e. they work
independently and can perform tasks without depending on other modules.
In OOP, the objects are designed are very specific to their concern and have fewer chances to be used in
some other software.
In modular programming, the modules are coded to perform specific tasks which can be used across
number of other software programs.
There is a whole new vertical, which is based on re-use of software component, and is known as
Component Based Software Engineering (CBSE).
Reuse Process
Two kinds of method can be adopted: either by keeping requirements same and adjusting components or
by keeping components same and modifying requirements.
Design - This is also a standard SDLC process step, where requirements are defined in terms of
software parlance. Basic architecture of system as a whole and its sub-systems are created.
Specify Components - By studying the software design, the designers segregate the entire
system into smaller components or sub-systems. One complete software design turns into a
collection of a huge set of components working together.
Incorporate Components - All matched components are packed together to shape them as
complete software.