Part1 Discussion Questions:
Software development methodologies
Windows 7
When deploying windows 7 for the computers in the company, a study was first commissioned so as to ascertain the viability of the project. Depending on the hardware configuration of the system, deploying windows 7 on a system that has been using vista should not be a major hurdle. Upgrading is one of the most convenient ways of setting up windows 7 on the new computers in the company since it keeps the files intact, settings and the programs initially used by windows vista are also kept in place. In cases whereby windows vista cannot be upgraded to windows 7, the user can in turn choose to use the option of custom installation in order to deploy windows 7 on the systems. However, when using the custom installation option, the windows files will not be reserved. We used a prototype which involved taking one computer and making it act as the prototype or pivot computer. We first tried to use the waterfall methodology but this had more problems than the benefits that we were likely to get from the whole process. The waterfall methodology involves making deductions and predictions on the system that is being designed. It can only work well in situations when everything goes on as planned. This can only be effective in small projects. However, when working on complex projects, this methodology cannot produce desirable results. We therefore resorted to the prototype methodology that would address most of the problems that were presented in the waterfall methodology. This methodology therefore involves having a system that is a replica of the system to be developed. The system can then be tested and verified before the final product is designed. This helps in saving costs since fewer resources are used when implementing a prototype. This methodology also allows for the exploration of different routes and helps in deciding on the best route to be followed. However, this methodology also has its hurdles that may prohibit its usage. Creating the final product may on the other hand be more difficult as compared to creating a prototype. Another problem that may be experienced when using a prototype is that when customers try a working prototype, there can be a lot of pressure to just use the prototype and not develop the complete product.
______________________________________________________________________________
Part2 Discussion Questions:
Lists and queues
A list is a data structure that allows the insertion and deletion of items at any point in the sequence. This type of data structure is very essential in the operating system especially when one wants to access information at any point of the queue. It is commonly used in the random access memory (RAM), whereby data/information can be accessed at any point in the sequence. Information retrieval and addition doesn’t have to go through some predefined mode. This method is usually very first.
A queue on the other hand allows for the insertion of items at one end and retrieval at the other end of the sequence. The queue uses the first in first out mode of operation. Elements are added at the head and then removed at the tail of the sequence. Queues are very simple and are used with very many simulation application events. In programming it is used in devices like printers whereby printing jobs have to stay in queue waiting for the execution of the first printing jobs to be sent to the printer.
The use of lists and queues are more efficient as opposed to the use of the arrays. However, in an operating system, the use of lists is more desirable since it offers a provision of adding or retrieving items from the lists at any given time. Items are assigned different priority level and then executed depending on the priority level of the given item. This allows for faster execution and also ensures that no item with a high priority level is left unattended to in the list.
______________________________________________________________________________
Part 3 answers these questions:
i. Give an example of how efforts in the development of software can pay dividends later in software maintenance.
When a good modular design is used in the software development, then it can later on pay dividends later on in the software maintenance. This is because the modular design will only focus on the pertinent sections of the software. Using local variables on the other hand will help in reducing the side effects and hence reduce the chances of carrying out corrections.
ii. Explain how the lack of metrics for measuring certain software properties affects the software engineering discipline.
Software metrics are very essential in the software engineering discipline. However, most of the software engineering practices that are observed in the industry lack the software metrics planning part. The metrics are essential in planning and gauging the productivity of the individuals and the productivity of different phases of the software development lifecycle. Lack of metrics for measuring certain properties of the software, often results into severe productivity and quality issues with the software being designed/ implemented. Lack of the metrics may also lead into poor planning for the software that can eventually lead to inadequate allocation of resources at different levels of the software development. This can then lead to poor software development or incomplete software. It is therefore very necessary to have metrics for measuring different aspects of the software during the development phases and implementation stages. This will ensure sufficient allocation of resources at different levels and in the long run lead to quality software being developed.
iii. How does software engineering differ from other, more traditional fields of engineering such as electrical and mechanical engineering?
Engineering in general is the act of using scientific and mathematical values in evaluating the problems and their solutions through the application of common sense. Engineers can be observed as problem solvers who look for faster and better quality methods of finding solutions to problems. Engineering can also be considered as a conduit between mathematics and the technology that is needed for mankind. Engineering therefore depends on the mathematical concepts and its main aim is to seek solutions to problems. The traditional engineering disciplines rely greatly on the incessant basements rather than the mathematical basements. Software engineering on the other hand appears to be applying the mathematical and technical computer science ideologies to the improvement and maintenance of the software and other information systems.
iv. What is the difference between coupling and cohesion? Which should be minimized and which should be maximized?
Cohesion generally describes how focused a given piece of software can be. When one describes a system a highly cohesive, this implies that all the procedures in the given module work together towards achieving a specified goal. Cohesion is therefore considered a good thing as it creates software components and relates them to function as one unit. It should therefore be maximized in any given piece of software. Coupling on the other hand describes how much a given piece of software relies on other modules. Coupling is considered a bad thing as it results into a system relying on other modules for its functionality. It should therefore be minimized.
v. Suppose a homogeneous array with 6 rows and 8 columns is stored in row major order starting at address 20 (base ten). If each entry in the array requires only one memory cell, what is the address of the entry in the third row and fourth column? What if each entry requires two memory cells?
In the event that you will be adding one cell per entry, the following applies:
If it’s 2 cells per entry,
vi. What complications are imposed if one tries to implement a dynamic list using a traditional homogeneous array?
If one implements a dynamic list using a traditional homogeneous array, the list will be disturbed and therefore a deletion and insertion will be required in order for a new element to be added.
vii. Describe a method for storing three-dimensional homogeneous arrays. What addressing formula would be used to locate the entry in the ith plane, jth row, and the kth column?
The three homogenous arrays can be embodied as single dimension of tables. Each of the tables will have rows and columns which are known as Page. Take a table for instance, the elements in the table/page can be represented as; a[x][y][z]. a represents an element in the xth Page while the x,y,and z are columns in the page. When storing these in the memory, it will be represented as a sequence of memory locations. For instance if an array index starts from (0,0,0), the first element of the array will be stored at location M and the address of a[i][j][k] will be (i-1) U2U3 + (j-1) U3+ (k-1), whereby U2 and U3 are the dimensions of the table.
In order to store the three dimensional homogenous arrays, place each of the two dimensional planes consecutively in the memory. The addressing formula would therefore become,
x + r × c × (i - 1) + c × (j - 1) + (k - 1) with x as the starting address.
viii. Describe a data structure suitable for representing a board configuration during a chess game.
When representing a board configuration during a chess game, it is necessary to itemize the categories with powers of two and then label one distinct structure as shown below:
struct id {
category cat;
}
The distinct structure can then be used to hold a name and all the categories that fit in the structure.
References
Dan Conde 2002. Software Product Management: Managing Software Development from Idea to Product to Marketing to Sales.
Edward Hasted. 2005. Software That Sells : A Practical Guide to Developing and Marketing Your Software Project.
John W. Horch 2005. "Two Orientations On How To Work With Objects." In: IEEE Software. vol. 12, no. 2, pp. 117–118, Mar., 1995.
Luke Hohmann 2003. Beyond Software Architecture: Creating and Sustaining Winning Solutions.