Chapter 7 - Design, Implementation
Chapter 8 - Software Testing

# Quiz

  1. Software design and implementation is the stage in the software engineering process at which an executable software system is developed.

  2. A design pattern is a way of reusing abstract knowledge about a problem and its solution

  3. An IDE is the executable after you finish writing and then compiling your program.

  4. Open Source Development means that the code that makes up the software is not avaliable for everyone to see.

  5. The Linux Operating system is open source.

  6. Program testing shows that a program works as intended and is used to discover defects before it is put into use.

  7. Unit testing is the process of testing all software components at once.

  8. Unit testing should be automated whenever possible.

  9. In test driven development, tests are written after the code itself has been written to make sure it works as intended.

  10. Testing can only show the presence of errors in a program. It cannot demonstrate that there are no remaining faults.

# Exercise

  1. Develop the design of the weather station to show the interaction between the data collection subsystem and the instruments that collect weather data. Use sequence diagrams to show this interaction.

    This diagram shows the sequence of interactions that occur when an external system requests aggregated data from a weather station. Sequence diagrams are to be read from top to bottom.

    1. The SatComms object receives a request from the weather information system to collect a weather report from a weather station. It acknowledges receipt of the request. A linear arrow on a send message indicates that the external system is not waiting for a reply, but can continue with other processing.
    2. The SatComms object sends messages over a satellite link to the WeatherStation object to create a summary of the collected weather data. Again, the linear arrows here indicate that the SatComms object does not have to suspend itself waiting for a reply.
    3. The WeatherStation object sends a message to the Commslink object to summarize the weather data. In this case, the triangular arrow indicates that an instance of the WeatherStation object class needs to wait for a reply.
    4. The Commslink object calls the summary method of the WeatherData object and waits for a reply.
    5. The weather data summary is calculated and returned to the WeatherStation object through the Commslink object.
    6. The WeatherStation object then calls the SatComms object to transmit the aggregated data to the weather information system through the satellite communication system.

    SatComms and WeatherStation objects can be implemented as concurrent processes whose execution can be suspended and resumed. An instance of the SatComms object listens for messages from external systems, decodes those messages, and initiates weather station operations.

  2. Draw a sequence diagram showing the interactions of objects in a group diary system when a group of people are arranging a meeting.

    A group diary and time management system is intended to support the timetabling of meetings and appointments across a group of co-workers. When an appointment is to be made that involves several people, the system finds a common slot in each of their diaries and arranges the appointment for that time. If no common slots are available, it interacts with the user to rearrange his or her diary to make room for the appointment.

    Assumes there are 3 participants in the meeting, one of whom is the meeting organizer. The organizer suggests a ‘window’ in which the meeting should take place and the participants involved. The group diary communicates with the diaries of the participants, in turn, modifying the window accordingly as their availability is known. So, if the organizer suggests a window of 18th-19th June, the group diary consults the organizer’s diary (D1) and finds availability on these days. D2 is then contacted with that availability, not the original window. If there are no mutually available dates in the window, the system reports this to the organizer. Otherwise, a date is selected, entered in all diaries, and confirmed to the organizer.

  3. When code is integrated into a larger system, problems may surface. Explain how configuration management can be useful when handling such problems.

    Configuration management is essential when a team of people are cooperating to develop software. Because it is the process of managing changes to evolving software system, Main aim of configuration management is to support the system integration process so that all developers can access the project code and documents in a controlled way, find out what changes have been made, and compile and link components to create a system. It follows some of activities like Version management, System integration and Problem tracking.
    EX: When something goes wrong with a new version of a system, it may be able to go back to a working version of the system or component.
    Explanation: If a new version of software is created, there is a significant change in functionality, technology, or the hardware is runs on, etc. On the other hand a new revision of software refers to minor bug fix in that software.

  4. Testing is meant to show that a program does what it is intended to do. Why may testers not always know what a program is intended for?

    Choosing not inform the software tester about the use cases of your software might prove to be a beneficial testing strategy. It allows the tester to approach the testing with an open mind, and interact with the software in the same manner your intended end-users will.

    Software Testing requires a fresh perspective.

    A neutral person who behaves as close to the end-user as possible is needed to perform a thorough Behavioral, Specification-Based, and Input-Output Testing.

    When the requirements of a product are not specified properly to accommodate for special cases or, for example, it may contain omissions, testers may observe a behavior of a product and not be able to know whether it conforms to requirements or not.

  5. Some people argue that developers should not be involved in testing their own code but that all testing should be the responsibility of a separate team. Give arguments for and against testing by the developers themselves.

    Pro for Inside Team: The team understands the problems that their program is tackling, and thus understands the problems that it might run into. They can write tests that accurately reflect the programs' future challenges. An outsider team may try to verify the code, without fully understanding the initial problem.

    Con for Inside Team: Depending on the team, and often pressured by time, they could write test units that insufficiently test the quality of the code, or are unable to think of challenges to their code beyond the solution that they've already tested.