Chapter 2 - Software Processes
Chapter 25 - Configuration management
# Quiz
A software process model (sometimes called a Software Development Life Cycle or SDLC model) is a simplified representation of a software process.
Which of these are general process models for software engineering?
Which one of these is NOT one of the four basic process activities
What does V&V standfor when it comes to Software Validation
Change is inevitable in all large software projects.
What is the final state of process prototyping?
Version control (VC) systems identify, store, and control access to the different versions of components.
What are the two types of modern version control system?
System-building tools and version control tools must not be part of the System Building process.
SaaS stands for Software as a System.
# Exercise
Suggest the most appropriate generic software process model that might be used as a basis for managing the development of the following systems. Explain your answer according to the type of system being developed:
- A system to control anti lock braking in a car
This system is related to driving safety and requires a lot of preliminary analysis to ensure stable and feasible functions. Therefore, a plan-driven development method is required, and the waterfall model is the most appropriate method to use.
- A virtual reality system to support software maintenance
This system requires a large number of user interface components, and the requirements of the system change with increasing usage. An agile process can be used, and incremental development with some UI prototypes is probably the most appropriate model.
- A university accounting system that replaces an existing system
The requirements of this system are well known and will be used in an environment where it is used in conjunction with many other systems. So a reuse-based approach might work here.
- An interactive travel planning system that helps users plan journeys with the lowest environmental impact
This system has a complex user interface and must be stable and reliable. Incremental development methods are the most appropriate because system requirements change as real user experience of the system is gained.
- A system to control anti lock braking in a car
Incremental software development could be very effectively used for customers who do not have a clear idea about the systems needed for their operations. Discuss
In an incremental model, software is built and tested incrementally. This means adding features after each test until the final product is delivered to a satisfied customer. It combines the features of the waterfall model and the prototype model.
Incremental development is actually the best approach for customers who don't have clear system requirements to begin with, as they can see features developed early in the development cycle, review and suggest further changes. Interacting with initial prototypes or increments can give them an idea of where the system is headed.
With proper communication, planning, modeling, construction and development strategies, this model will work for clients who do not have a clear concept of the systems they need to operate.
Explain why software testing should always be an incremental, staged activity. Are programmers the best people to test the programs that they have developed?
Testing is the process of checking each program to ensure that each program is working properly. This is a progressive phased activity because:
- Divide the complete program into several small modules, and check each module individually. Then, collectively unit test all programs.
- After the program is tested in groups and the entire system is tested, use the CASE tool to test for syntax errors.
- The app is released in beta and checked by end users.
Programmers are not the best people to test their own programs. The reasons are as follows:
- Programmers have the skills to develop programs, but they don't necessarily have the best skills to test and develop programs.
- It is difficult to find bugs and problems in self-developed programs. Therefore, testing should be performed by professional testers and end users so that all possible bugs can be easily found.
Suggest why it is important to make a distinction between developing the user requirements and developing system requirements in the requirements engineering process.
User requirements and system requirements are included in the requirements specification, and there is a fundamental difference between user and system requirements, which means that they should be considered separately.
User requirements are abstract statements designed to describe the functionality and characteristics of a system from the user's point of view, and the user must understand these requirements. They should be expressed in natural language and may not be expressed in great detail to allow for some implementation flexibility. Those involved in the process must be able to understand the user's environment and application area.
System requirements are much more detailed than user requirements and are intended to be precise specifications of the system, possibly part of the system contract. They can also be used when development is outsourced and the development team needs a complete specification of what should be developed. System requirements are formulated after user requirements are determined. The development of system requirements is important from the beginning to the end of a project, and programmers must have the knowledge and skills to write program applications.Suggest five possible problems that could arise if a company does not develop effective configuration management policies and processes
Configuration management (CM) is a system engineering process for establishing and maintaining consistency of a product's performance, functionality, and physical attributes with its requirements, design, and operational information throughout its life cycle.
Problems that can arise if a company does not have an effective configuration management strategy:
- The wrong version of the system may be delivered to the customer or forget where the software source code for a particular version of the system or component is stored
- New versions of software systems cannot be efficiently created as they change. Developers cannot track changes to software.
- Controlling the cost and effort involved in changing the system is difficult.
- Protecting the investment in the software and the ability to replicate the build or continue developing the project with the correct components is difficult if someone leaves the company.
- Ineffective quality management processes, as configuration management may be viewed as part of a more general quality management process.
Imagine a situation where two developers are simultaneously modifying three different software components. What difficulties might arise when they try to merge the changes they have made?
Changes to the program by different programmers can conflict. For example, there may be dependencies between changed components, and changes by different developers are incompatible to some extent. Especially if you don't do any logging after the change, it will make the problem worse when another developer changes it again.
With reference to system building, explain why you may sometimes have to maintain obsolete computers on which large software systems were developed.
If the software used to build the system (compiler, linker, etc.) is not suitable for newer hardware, you may have to maintain an outdated computer. This may be the case because the compiler vendor has gone out of business and no one else supports their system. The compiler may not work on newer systems as the generated code may be different. This also occurs when programs are developed in programming languages that are no longer in use - maintaining outdated hardware to run a compiler can be cheaper than buying a new compiler for occasional use