Tuesday, November 15, 2016

HW22: Chapter 17


(17.10) Your company wishes to move from using desktop applications to accessing the same functionally remotely as services. Identify three risks that might arise and suggest how risks may be reduced.

This type of switchover models a client-server type of architecture which requires client-side functionality and server interaction. The type of risks with this type of architecture include server overload,  control of data transfer rates/speeds,  and server failure resulting in data loss. To reduce the risk of server overload, web technologies such as AJAX and HTML5 can be implemented. They provide better efficiency when it comes to webpage presentation and local computation.  To aid in data transfer rates and speeds, data can be compressed then transferred. This reduces the size of the file and may reduce the load on the network.  To prevent a situation where there is a complete data loss due to a server malfunction, the company can regularly schedule data backups to external sources other than on the hosted server. 

Wednesday, November 2, 2016

HW21: Chapter 20

(20.10)  Discuss the ethics of  changing the system interfaces without notice to coerce users into paying higher charges.  Consider this question from the point of view of the company's employees, customers, and shareholders.

Changing a system interface without notice to coerce its users into paying higher chargers is unethical and violates the basic principles of the ACM. Namely, it violates the Judgment, Profession, and Client and Employer principles. Together they emphasize that professionals of the field should act in a manner that promotes the reputation and integrity of the industry and produce products that are in the best interest of client.  The idea coercing a client for the gain of profit can be detrimental to the reputation of the industry. It can lead to mistrust with the public and most importantly result in unwanted legal attention and repercussions.  

Thursday, October 27, 2016

HW20: Chapter 19

(19.3) Why is it impossible to infer the emergent properties of a complex system from the properties of its components? 

A system, especially one that is complex, is composed of many intricate parts known as components, that can be composed of trivial properties on broad level. But its specific purpose as an complete unit is non-trival from a birds-eye perspective. It is equivalent to disassembling a machine designed for a specific purpose down to its nuts, bolts, and screws (and whatever is leftover), then asking someone what is the purpose of those screws. The person can identify the nuts, screws, and other individual items (which we will call properties of the components), and infer its purpose,  but in no sense will that person be able to determine what the overall functionality of the parts as a complete unit. 

Monday, October 24, 2016

HW19: Team Progress I

     Our team was working on an open source project based on the popular Pokemon game. The app itself allows users to generate the location and the duration of Pokemon in areas that they designated. The users would see the spawn locations on a map where they could further specify other credentials such the type of Pokemon they wish to generate on the map. After a few days of work and many dependencies and file configurations later we were able get the app to successively run. The next task was to identify test cases and test them within a driver. While working on this phase we noticed that the base of our project had been pulled from public use. After researching the issue we found that the developers had blocked scanning apps such as the PokemonGo Map from accessing its servers thus rendering the app useable. We are now searching for another open source project,  one that will not be at risk of being banned or blocked.

Wednesday, October 12, 2016

HW18: Chapter 18

(18.4) Define an interface specification for the Currency Converter and Check credit rating services shown in Figure 18.7.



HW17: Chapter 16

(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 component that records calls made, and a vehicle discovery component that, given a post code (zip code) and an incident type, finds the nearest suitable vehicle to be dispatched to the incident.

Sunday, October 2, 2016

HW16: Chapter 9

(9.8) Briefly describe the three main types of software maintenance. Why is it sometimes difficult to distinguish between them?

Fault repairs are the result of coding and or design errors. This type of maintenance corrects  bugs and vulnerabilities in different components of a program.

Environmental adaptation is a type of maintenance needed when components of the a programs support system is modified. These support components are those such as the operating system and system hardware.

Functional addition is the type of maintenance that adds new features to a system in order to support new requirements and buisness needs. 

The three types of software maintenance are fault repairs, environmental adaptation, and functionality addition. It is difficult to distinguish between them because interpretation into what one of the types encompasses can overlap and be integrated into one of the other two maintenance types when functionality is added. 

(9.10) Do software engineers have a professional responsibility to develop code that can be easily maintained even if their employer does not explicitly request it? 

Maintainability refers to the specifications that increase readability, availability, and reliability. Designing maintainable software with readable code is an ethical responsibility for programmers that must be upheld because it can negatively affect readability and reliability. Software engineering as an industry is progressively growing and being incorporated into critical systems that society has become reliant on. Writing readable code in these type systems (critical systems) greatly aid in availability and reliability. Having readable code aids in easier troubleshooting and code updates. If a fault presents itself during runtime of program, and its code is unreadable, programmers may struggle to correct bug in a timely manner, thus decreasing the systems availability. Also if code is hard to decompose, its statements can be misinterpreted, so when code is updated  it may have unwanted side affects in other areas in the program.