Meeting Charleston
Today, I attended the Alumni Symposium. During freshman year, one of my classes had encouraged attendance to the (then in-person) symposium, but I was unable...
Context: According to Chapter 7, Design and Implementation, the wilderness weather station system is a station deployed in a remote area. It records local weather information and periodically transfers this to a weather information system using a satellite link.
Scenario: Alex is a local weatherman in small-town North Dakota. Although his hometown is small, it’s surrounded by even more remote communities that use the wilderness weather system to transmit weather data to aggregators and reporters. Alex is putting together a weekly report in which he includes the forecast for not only his town but also the surrounding areas. His hometown’s data automatically syncs to a weather information system. However, in order to manage all of the up-to-date weather data he needs this report in one place, so he puts in a request to the satellite (SatComms) of the wilderness weather system for data from Area1. The satellite then reports the weather to the weather station and once a summary is retrieved, it’s aggregated into the requested report and returned to the weather information system/database. With the data from the remote areas now synced to the general weather information system, Alex can effectively plan for his presentation by creating graphics and charts and analyzing the data. He repeats this process for Area2 and Area3 through separate requests to the satellite. After each request has been completed, the system records that the data has been sent so that it doesn’t not resend data unncessarily.
I do not think that this is an ethical system. The scenario implies a lack of planning by the testing team to create a comprehensive test-suite within the budget. Particularly because this is a system that will be delivered to an external customer, it’s crucial that testing within the budget is maximized. I think it’s important here to distinguish between the case that the system was tested until the budget ran out according to plan and the case that the system was tested until the budget ran out without covering all of the planned (comprehensive) test cases. If this testing strategy resulted in major holes in testing, it would certainly not be an ethical use of the client’s money. For example, say features were tested separately and sequentially so that testing the last few features was cut out with the budget loss. In such a case, it would be more ethical to test each feature to a lesser degree. If it isn’t possible to test every feature sufficiently within the budget, this should be communicated to the customer as early as possible to make a plan and prioritize which potential issues to investigate.
“Testing and debugging” - this phrase is often thrown around within the computer science/software engineering world. Although testing and debugging are bucketed together, in reality, they are two distinct processes. This week’s readings, Chapter 8 (Software Testing) and a separate chapter centered around testing cleared up a lot of the confusion I had about this distinction by examining it in detail. The chapters focus on several topics related to the nature of testing and debugging.
To summarize the difference: Testing is the process of surfacing bugs. Debugging depends on testing and encompasses the more laborious process of correcting bugs found through it. These two processes taken together consume “at least half of the labor expended to produce a working program” (outside reading pg. 1). The goal of testing is not to show that there are no errors - this is nearly impossible to do, particularly in a large program. Rather it’s to surface as many errors as possible so that they can be rectified and the final product is as error-free as possible. The outside reading explains that this very fact leads many software engineers to dread the testing process; it feels like an admission that they’ve created an imperfect program. It feels defeating that more than half the time spent on the product is spent testing it. After all, if they’d done everything right, they could be assured there would not be any bugs, right? Although it feels this way, it simply is not practical to create a bug-free program, nor is it safe to assume a program is bug-free because all of the right precautions have been taken. As a programmer, it’s your responsibility to assume the worst of, not give the benefit of the doubt to, your work.
The importance of taking on a different role as the programmer and the tester really struck me throughout these readings. It makes so much sense - it’s really difficult to construct tests to find holes in your work when you’ve proudly constructed that work with the goal of preventing holes. I love the way the author of the outside reading puts this: “you must be a constructive schizophrenic.” This is all about being two different people when you program versus when you test. The tester in you needs to be “suspicious, uncompromising, hostile, and compulsively obsessed with destroying, utterly destroying, the programmer’s software.” I can imagine that’s not an easy suit to put on, but I suppose you’d have to do so with the goal of your final project being as sounds as possible.
That brings me to my final point to reflect on which ties to testing with such rage - “complete” testing. Both readings touch on unit testing versus component testing versus system testing. While unit testing should always be 100% complete, larger systems may be approved with as little as 50% or so completeness in the other testing types. The higher up the ladder you go, the more difficult - and eventually, impossible - it becomes to cover all of the bases and prove that no bugs exist. The objective is instead to create a “suitably convincing demonstration” of correctness. This takes a bit of the pressure off and allows companies to stay within their budget. Particularly in a non-safety-critical program, I would imagine that any existing bugs that aren’t detrimental could be discovered and mended throughout the life of the program.
Today, I attended the Alumni Symposium. During freshman year, one of my classes had encouraged attendance to the (then in-person) symposium, but I was unable...
The journey does not end after a software project has gone live. This week’s reading was “Continuing the Journey” - Chapter 9 of Client-Centered Software Dev...
“Databases reside at the heart of most software applications” (SD Chapter 6, pg 168). This week’s readings cover Chapter 6 of our textbook, Client-Centered S...
This week’s reading (Chapter 5 of Client-Centered Software Development) covers domain classes and unit/system testing. According to the text, “domain classes...
Proper documentation for both internal and external users of a software application is crucial to its sustained success after deployment. This week, we read ...
This week, we read “From STUPID to Solid Code!” by William Durand. This article is packed with high-level do’s and dont’s of programming. The “dont’s” are co...
This week, our class chose and reflected on articles from Software, Computer, or CoACM magazines. While perusing software magazines (finding good ones was an...
6.4. Exercise - Find the Oldest Bug Find the oldest bug that’s still open in your chosen project. Write a blog entry describing the problem, with a theory ab...
This week, our assignment was to explore http://opensource.com/, reading at least two medium-length articles from the site and blogging about what we learned...
This class, CSCI 462, is centered around contributing to an open-source software project through bug fixes, documentation fixes, and other improvements. Befo...
Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.
24.6 Explain why program inspections are an effective technique for discovering errors in a program. What types of error are unlikely to be discovered throug...
I feel like our team made great progress on the most recent deliverable (deliverable 4)! We met via Zoom more often than we did between any other two variabl...
23.6 Figure 23.14 shows the task durations for software project activities. Assume that a serious, unanticipated setback occurs, and instead of taking 10 day...
21.4 Explain why an object-oriented approach to software development may not be suitable for real-time systems.
This is my first reflection on our team’s testing project. I think this will be a helpful exercise as we move into the final stages of building our testing f...
20.10 You work for a software company that has developed a system that provides information about consumers and that is used within a SoS by a number of othe...
19.3 Why is it impossible to infer the emergent properties of a complex system from the properties of the system components? In the words of Ian Sommerville,...
18.4 Define an interface specification for the Currency Converter and Check Credit Ratings services shown in Figure 18.7.
17.10 Your company wishes to move from using desktop applications to accessing the same functionality remotely as services. Identify three risks that might a...
16.9 Design the interfaces of components that might be used in a system for an emergency control room. You should design interfaces for a call-logging compon...
9.8 Briefly describe the three main types of software maintenance. Why is it sometimes difficult to distinguish between them? Fault repairs to fix bugs and v...
15.10 The reuse of software raises a number of copyright and intellectual property issues. If a customer pays the software contractor to develop a system, wh...
8.7: Write a scenario that could be used to help design tests for the wilderness weather station system. Context: According to Chapter 7, Design and Implemen...
Mythical Man-Month - Does adding more labor to a project linearly reduce the time to completion? Or does it do the opposite, particularly to an already late ...
5.3: You have been asked to develop a system that will help with planning large-scale events and parties such as weddings, graduation celebrations, and birth...
2.1 Suggest the most appropriate generic software process model that might be used as a basis for managing the development of the following systems. Explain ...
4.5: Using the technique suggested here, where natural language descriptions are presented in a standard format, write plausible user requirements for the fo...
Our readings this week began with a focus on several software engineering failures which resulted in devastating incidents such as plane crashes (Space Craft...
11.4: What is the common characteristic of all architectural styles that are geared to supporting software fault tolerance? Architectural styles geared to su...
The Complexity of Software and Its Evolution Software is, by definition, complex. Frederick P. Brooks, in his article “Essence and Accidents of Software Engi...
1.3: What are the four important attributes that all professional software should possess? Suggest four other attributes that may sometimes be significant.
Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.