Thursday, September 29, 2016

HW15: Chapter 15


(15.10). The rights to intellectual property is a key factor that drives the software industry. When software companies and developers sustainability is reliant upon growth and innovation, having rights to their code becomes a delimiting factor. This is why it is crucial that a company or developer outline specifically either through copyright laws, patents or contracts between them and the client, what themselves or the client rights are in regards to any product, service, or code provided. By doing so eradicates a decent percentage of questions and concerns about who or how ones product can be used. Proceeding in this manner allows for clear definition of how the product, service or code can be monetized and outline any matters regarding capitalization. This is the most ethical approach to intellectual and copyright issues because it provides a detailed agreement between both parties. It also provides security incase of breach of contract. Altogether, by legally stipulating applicability  for services, products or code is the most responsible course of action that both parties can take to minimize the violation of ethical issues as it relates to software use and reuse. 

Tuesday, September 27, 2016

HW14: Testing Reflections

     Regardless of skill level, a programmers goal is to write bug-less code on the first attempt. Is this possible… more than likely not. One may argue that more seasoned programmers should eventually master such a skill, but realistically, even the best programers will have 1 - 3 bugs per 100 lines of code. This statistic emphasis why testing is the most important part of coding. 
Validation drives reliability, and the best way to achieve reliability is via testing. Unreliable code is useless and costly, so it is best to eradicate them. Although this is not completely possible we can take measures to drastically decrease the amount faults found in a program. We first start identifying the true purpose of testing. Testing is not a procedure to conclude that a program works, it can only concretely shows us that a program does not work. The laws of probability show us that as testing increases, the probability of finding faults increases. Hence, more testing decreases the chances of showing that a program works.Thus, the purpose of testing has to objectives:

1). to achieve an acceptable a level of reliability.
2). to show that a program has faults. 

We then debunk the fallacy that testing and debugging are interchangeable roles.  As mentioned previously, the purpose of testing is show reliability and that a program has faults. However, the purpose of debugging to correct bugs that caused a faults in the program. 
Last, but not least, we organize how we build test cases and ensure that test cases are testing the specified requirements of the system. It is best to implement test cases in a layered form composed of Unit, Component and Integration test layers. Unit testing is the process of testing small chunks of code at a time. This allows for functional specifications to be tested. Component testing is the testing of one or more aggregated units with subroutines. This shows if the implemented structure does not match the intended design structure. Integration testing is the process of identifying if faults arise from aggregation of components into larger components. System testing is the process of identifying faults that arise from interactions between all the layers of the system. This also includes testing to ensure non-functional requirements are satisfied.

HW13: Chapter 8



(8.7):  The ReportTesting system sends a report request to the WeatherStation every hour. The WeatherStation acknowledges the request and sends returns the report to The ReportTesting system. The ReportTesting system sends the report to the DataAnalyzer. The DataAnalyzer separates ground and air data into a ground report and air report. The ground report contains the maximum, minimum and average ground temperatures along with a time-stamp. The air report contains the maximum, minimum and average are temperatures along with a time-stamp. The Comparator sends a report requests to SatComms. SatComms sends the report the to the Comparator (the Comparator has a SatComms have identical reports). The DataAnalyzer sends the ground report to GroundAnalyzer and sends the air report to the AirAnalyzer. The DataAnalyzer, AirAnalyzer,and Comparator reports are sent to the BoolReport. The BoolReport compares the maximum, minimum and average ground temperatures in ground report to the Comparator report. The BoolReport report is compares the time-stamp and maximum, minimum and average air temperatures in the air report to the time-stamp and maximum, minimum and average air temperatures in ground report Comparator report. If any time-stamp or temperature from the ground and air report do not match the corresponding values in the Comparator report , the BoolReports sends a Fail message to the ReportTesting system, else it sends True.


(8.10): Testing a system until the budget is exceeded is a poor practice. This approach cannot promise a reliable system because there may not be a dedicated plan to ensure that requirements of the system are adequately tested. This is not an ethical approach to designing a system because it shorts the customer. Upon delivery the system, it still may have unidentified security vulnerabilities as well as missing requirements that cause the system to fail in a non-graceful manner.