In the dynamic realm of Software Engineering, efficient and effective project management stands as a cornerstone for successful software development. This unit delves into the multifaceted domain of Software Project Management, exploring key elements that form the management spectrum—encompassing the intricate interplay between people, products, processes, and projects. From the pivotal aspects of cost estimation, project scheduling, and staffing to the meticulous considerations of software configuration management, quality assurance, and risk management, the course offers a comprehensive examination of the managerial responsibilities inherent in guiding software development endeavors. Furthermore, the exploration extends to Computer-Aided Software Engineering (CASE), shedding light on its broad scope, integral role in the software life cycle, and diverse applications in areas such as documentation, project management, internal interface, reverse software engineering, and the architecture of the CASE environment. Aspiring software engineers will gain a profound understanding of the pivotal role played by management in navigating the intricate landscape of software development, ensuring successful project outcomes in a rapidly evolving technological landscape.
Effective software project management encompasses four critical components known as the Four Ps: People, Product, Process, and Project. Addressing these elements is vital in software project planning and product development. Let's delve into each of the 4 Ps in software project planning:
People are at the core of software engineering, and recognizing the human factor is vital for project management success. The People Capability Maturity Model (People-CMM) defines key practice areas, including staffing, communication, work environment, performance management, training, compensation, competency analysis, career development, team culture development, and others. Roles in software project planning may include project manager, team leaders, stakeholders, analysts, and other IT professionals, requiring adept management skills.
Establishing product objectives and scope, considering alternative solutions, and identifying technical and management constraints are crucial steps before project planning. Objectives define the overall goals for the product, while scope identifies the primary data, functions, and behaviors of the product. Collaboration among software developers and stakeholders is essential in this phase to ensure a comprehensive understanding of the product's objectives and scope.
The software process serves as the framework for development, encompassing a small number of framework activities applicable to all software projects. These activities include documentation, implementation, deployment, and interaction phases. Each step in the process contributes to a well-organized and structured approach to software development, ensuring the quality and reliability of the final product.
Project planning is an indispensable phase for managing the complexities of software development. Project managers play a critical role in guiding team members, ensuring alignment with project goals, addressing issues, monitoring costs and budgets, and maintaining adherence to deadlines. The success of the project hinges on effective project management, emphasizing collaboration, adaptability, and meticulous planning.
Cost estimation is a crucial aspect of software project management that involves predicting the resources and financial investment required for the successful completion of a software development project. It aims to provide accurate and reliable forecasts, enabling project managers and stakeholders to make informed decisions about budgeting, scheduling, and resource allocation. Various techniques, both empirical and heuristic, are employed to estimate costs, each with its strengths and limitations. Empirical techniques, such as expert judgement and Delphi estimation, leverage the insights of experienced professionals. On the other hand, heuristic techniques like COCOMO (Constructive COst estimation MOdel) use systematic models to refine estimates based on project characteristics. Effective cost estimation contributes to better project planning, risk management, and overall project success.
Empirical estimation techniques are user-friendly and provide reasonably accurate estimates.
Empirical estimation techniques often involve analyzing data from previous projects that are similar in nature to the one being estimated. This can include factors such as the size of the project, complexity, team expertise, and other relevant variables.
Two
widely
used techniques include:
In this technique, an expert analyzes the problem thoroughly and makes educated guesses about the problem size. The expert estimates costs for different components (modules or subsystems) and combines them for an overall estimate. However, this method has shortcomings such as susceptibility to human errors, individual bias, potential oversight of factors, and the lack of relevant experience or knowledge by the expert.
Delphi estimation involves a team of experts and a coordinator. Each estimator receives a copy of the software requirements specification (SRS) document and a form for recording cost estimates. Estimators anonymously submit their individual estimates to the coordinator, who compiles a summary of responses. This summary is shared with the estimators, and the process is iterated for several rounds. The purpose is to prevent undue influence and bias. While time-consuming, Delphi estimation overcomes significant shortcomings of the expert judgement technique.
Constructive COst estimation MOdel (COCOMO), proposed by Boehm, outlines a three-stage process for project estimation, refining the initial estimate to a more accurate one. COCOMO employs both single and multivariable estimation models at different stages:
Initial estimates are made in this stage, considering factors such as application program understanding, team size, and experience.
This stage refines the estimate further, accounting for a mix of experienced and inexperienced staff with potentially limited experience.
The final stage involves a comprehensive estimation process, especially suitable for projects strongly coupled to hardware or subject to strict operational regulations.
Boehm classifies software development projects into three categories:
Characterized by a well-understood application program, a small development team, and experienced team members.
Consists of a mixture of experienced and inexperienced staff, with team members having limited experience.
Applicable to projects strongly coupled to hardware or subject to strict operational procedures, with team members potentially having limited experience.
The basic COCOMO model provides an approximate estimate of project parameters, aiding in effective project planning. The estimation model is expressed by the following formulas:
Effort = a1 × (KLOC)^a2 PM
Tdev = b1 × (Effort)^b2 Months
Where:
- KLOC: Size of the software product in Kilo Lines of Code.
- a1, a2, b1, b2: Constants for each category of software products.
- Tdev: Estimated time to develop the software in months.
- Effort: Total effort required to develop the software product, expressed in person months
(PMs).
Effort is represented by the area under the person-month curve, as illustrated in the figure:
It's important to note that an effort of 100 PM doesn't imply 100 persons working for 1 month or 1 person working for 100 months. Instead, it denotes the area under the person-month curve.
Every line of source text is considered as one LOC (Line of Code), regardless of the actual number of instructions on that line. For estimating development effort based on code size, the formulas for the three classes of software products are:
Estimation of development time for each class follows these formulas:
As an example, if the size of an organic type software product is estimated to be 32,000 lines of source code and the average salary of software engineers is Rs. 15,000/- per month, the effort required to develop the software product and the nominal development time can be calculated using the basic COCOMO estimation formula for organic software:
Effort = 2.4 × (32)^1.05 = 91 PM
Nominal development time = 2.5 × (91)^0.38 = 14 months
Cost required to develop the product = 14 × 15,000 = Rs. 210,000/-
The project manager plays a crucial role in ensuring the timely completion of tasks and implementing corrective actions whenever there is a risk of schedule deviation. To effectively schedule project activities, a software project manager follows these steps:
The initial step involves identifying all activities necessary for project completion, with a deep understanding of project details aiding in this process. Activities are then broken down into logical subactivities, with the smallest units called tasks, assigned to different developers.
Once activities are broken down, determining task dependencies is crucial. Dependencies dictate the order in which tasks are carried out. If Task A relies on the results of Task B, Task A must be scheduled after Task B, and A is considered dependent on B.
An activity network visually represents project activities, their estimated durations, and interdependencies. Two equivalent representations are in use:
CPM and PERT, developed in the late 1950s, are operation research techniques. The Critical Path is a sequence of dependent tasks that must be performed in order, taking the longest time to complete.
Staffing plays a critical role in the success of software projects. The composition of a project team, particularly the selection of team members, has a profound impact on the overall productivity and outcome of the project. Project managers are tasked with the responsibility of choosing individuals with the right skills, knowledge, and qualities to ensure effective collaboration and successful project delivery.
Selecting the right team members with the requisite skills and qualities is fundamental to the success of software projects. Effective collaboration among skilled individuals can significantly enhance productivity and contribute to the timely and successful completion of projects.
Software configuration management (SCM) is crucial for maintaining the state of project deliverables throughout the software life cycle. It involves controlling and tracking changes to software artifacts, ensuring the integrity of the software configuration and facilitating the development process.
Configuration Identification Details:
Configuration Control Details:
Software quality assurance (SQA) is a comprehensive approach that encompasses various processes and tasks to ensure the quality of software development. It includes quality assurance planning, oversight, record-keeping, analysis, reporting, and adherence to standards.
Software quality assurance involves tasks, goals, and metrics related to both software engineers and the SQA group responsible for quality assurance planning. Modern SQA is data-driven, emphasizing solid technical methods, technical reviews, and well-planned software testing.
Specific SQA activities are performed to achieve pragmatic goals:
Every project faces numerous risks, and effective risk management is crucial for ensuring the success of a project. The project manager needs to identify potential risks and formulate plans to address them.
Risk management approaches can be broadly classified into reactive and proactive approaches.
Reactive approaches take action only after an unfavorable event occurs, focusing on preventing future occurrences of similar events.
Proactive approaches aim to identify possible risks early in the project. Actions are taken to eliminate or reduce the risks, and plans are made to mitigate their impact if unavoidable.
Early identification of risks is crucial for effective risk management. Risks are categorized into project risks, technical risks, and business risks.
Risk assessment involves rating each risk based on its likelihood of occurrence and the consequence of associated problems. Prioritization is done using the formula: p = r × s (where p is the priority, r is the probability, and s is the severity).
Three main strategies for risk mitigation are:
Barry Boehm identified the top 10 risks in a project and suggested counter measures:
The project manager plays a crucial role in the success of any software development project. The key responsibilities include:
Computer-Aided Software Engineering (CASE) tools provide automated support for various activities in software engineering. The scope of CASE tools is broad, encompassing a range of tasks associated with software development.
Key Definitions:
"A CASE tool is a form of automated support for software engineering."
"A CASE tool can mean any tool used to automate some activity associated with software development."
Several CASE tools are available, serving both phase-related tasks such as specification, structured analysis, design, coding, testing, etc., and non-phase activities like project management and configuration management.
The primary objectives of using CASE tools are:
CASE tools play a crucial role in various phases of the Software Development Life Cycle (SDLC). The following highlights some of the key support areas provided by CASE tools:
Prototyping is essential for understanding the requirements of complex software products. An effective prototyping CASE tool should include the following features:
A CASE tool should support one or more structured analysis and design techniques, providing features such as:
During the code generation phase, a CASE tool is expected to:
The CASE tool for test case generation should feature:
The documentation process is a crucial aspect of software development, encompassing the creation and organization of deliverable documents that provide a comprehensive understanding of the project. An effective CASE tool supporting documentation should enable graphical organization, seamless incorporation of text and diagrams, integration with desktop publishing packages, and the ability to export content to standard forms. This ensures clarity and accessibility in conveying project details and facilitates collaboration among team members and stakeholders.
The architecture of a modern CASE (Computer-Aided Software Engineering) environment plays a pivotal role in facilitating the software development process. The entire system is designed to enhance collaboration, streamline tasks, and improve the overall efficiency of the development lifecycle. A fundamental component of this architecture is the user interface, providing a unified and consistent framework. This ensures seamless interaction between users and the diverse array of tools integrated into the environment. The Object Management System and Repository form the backbone, translating logical entities like specifications and designs into a cohesive structure within the storage management system, known as the repository.
The architecture of a modern CASE environment is illustrated in the figure below:
Different CASE tools represent the software product through entities such as specifications, designs, text data, project plans, etc. The object management system maps these logical entities into the underlying storage management system, known as the repository.