Task 1: Dependable and Secure Computing
Since a software design is a meaningful representation of something that is to be built 1, it will have a definite impact on software design. The paper will make the process of Software Design more systematic, as it tries to define various terminologies used in software development. Terms such as Dependability, Security, Maintenance, Failures, Errors, Faults have been beautifully classified in further sub-categories and given an intellectual nomenclature such that any type of circumstance, be it an error, failure, etc. can be appropriately accommodated in a particular bracket defined by the authors. During the initial problem analysis 2 of a software design process, an extensive coverage on all the vulnerabilities, faults, etc. might be required; and consulting the given paper for any suitable taxonomies might be very handy.
Following is my interpretation of problems and their possible mitigations:
1. The paper refers to various previous publications since 1980 that have tried to define the fundamental concepts and terminologies of software design. Although various new concepts were introduced in further publications, there was no standalone reference material comprising all possible taxonomies required for a software design. Also, various terminologies severely required expansions. Possible mitigations were:
a. Clarification of the relationship between dependability and security and individual definitions of both.
b. In-depth discussion of faults, which may include malicious as well as non-malicious, and most importantly,
c. Creating a research publication that expands, refines and simplifies all previous publications which is also self-contained.
2. As mentioned, this paper proceeds the works of J.C. Laprie in his 1995 publication 3, almost after a time span of ten years. It’s a salient fact that over the course of time, new technologies are introduced and consequently, there will be all new types of errors, vulnerabilities, or faults, one that has never been thought of, and thus is not included in any previous publications. Possible mitigations are:
a. Formation of a Group or Committee that keeps track of all the new taxonomies that are supposed to be added in any future publications.
b. Iteration (or renewal) of the publication after an appropriately decided span of time, for example, 15 years.
c. Noting down any possible enhancement that may be needed in the current publication, as done by the current authors in section 1.1.
3. The security of a system largely depends upon it’s Availability, Confidentiality and Integrity, however, the concepts of Integrity and Confidentiality are not discussed in depth in this paper. Possible mitigations are:
a. Further research is required in these two topics so that it can possibly be included in the next iteration.
b. Newly published papers 4 5 can be referred which for further enlightenment.
c. Other improvements, such as expanding the research of security, analyzing issues of trust and the allied topic of risk management, and searching for unified measures of dependability and security can also be contemplated.
Task 2: Software Rejuvenation
The software ageing phenomenon is the accumulation of errors (memory leaks, in our case) occurring in long-running applications that lead to progressive resource exhaustion and performance degradation. Finally, this may lead to a crash of the software system. Triggering a specific action such as (generally, but not limited to) restarting the software might result in resetting the error accumulation such that the software runs flawlessly again can be termed as Software Rejuvenation. Software Ageing and Rejuvenation is a relatively new field and has started gaining attention after 2006. The oldest IEEE publication on the above topic could only be traced back to 2008 6 7. Software Rejuvenation might be needed because of various factors which may lead to software ageing, some of which are:
· Executing several processes concurrently (which is inevitable in the world, as we know it) that leads to resources being exhausted quickly.
· Applications made by different establishments using exclusive resources, when they might be performing similar operations, etc.
1. The first and extremely common problem that many of us might have faced is with the Windows or Android operating systems (might be the same for Mac as well as Linux systems) where the system’s response time is significantly increased after a few years of usage. This generally occurs because of resource exhaustion, as numerous un-needed process takes up the space in the random-access memory, thus preventing useful process use the RAM. As a result, the hard-disk is used as an auxiliary RAM which slows up the entire system.
A quick workaround is to reboot the system, which might be a temporary fix, nevertheless, a complete re-install of the operating system is usually required in these cases to make sure everything is running smoothly and is back to normal.
2. Another problem that I experienced was while I was writing a recursive code in java for calculating the connected components or finding a post-order traversal sequence of a depth first search binary tree. I encountered a Stack Overflow Error 8 whenever the recursive call did not have a proper terminating condition, or the input tree given to the program would be exponentially huge. The former, I assume is a case of ‘Memory Leak’ as the loop keeps running, thereby allocating memory spaces to bits that will never be used, and the latter is a case of ‘Resource Exhaustion’, as the input size is more than what the system could handle.
These problems were easily fixed by me after the terminating conditions were properly defined, and when the binary tree given as the input to the program was not enormous.