You are on page 1of 14

Name (print) __________Cody Dill________________________

Directions:
 You may use the textbook and internet as resources for this exam.
 But do NOT get help from anyone, except, you may discuss a question with
your instructor.
 Do not give help to any student in this course.
 Sign the honesty statement below.
 For the short essay questions, please write in complete sentences and well
written paragraphs.
 This exam is worth 150 points, about 15% of your course grade.

This exam is entirely my own work and I did not get help from or give help to
any other person.

____________________________________
Sign your name
Question 1:

a. What are the primary differences between Waterfall and Agile Processes?

The waterfall process is based upon a strict plan that companies contain a hierarchical

structure follow. The process starts off with the business communicating with the customer

regarding their project and creating documentation for the features they would like. Once the

business and customer have agreed on the project the team goes to work, and the customer

doesn’t get any more input from this moment on. The next step would be the company starting to

develop the application making sure it has all the customers’ requirements. After this is

completed the testing stage happens to verify every component is working correctly. When

everything has been verified of functionality the project then gets passed off to the customer

since it is complete. The customer doesn’t get a say while the project is being developed. If there

was anything they wanted to add or remove, then they would have to create another project with

the company. This could lead to many problems since there is no communication besides the

initial conversation in the beginning. The agile process is better developed to include the

customer in on the project. They have the ability to track the progress and communicate with the

developers to see if there is something that needs to be added or removed. This method is ideal

because the customer will be able to see the project from start to finish and be able to make

changes along the way. There will be no surprised at the end or disappoint from the customer

side since they have watched the project develop.

b. What is your definition of high quality in a software project?

Developing a software project that is high quality would require communication between the

customer and developers. The customer should either be able to view the progress of the project
or be updated by the team frequently in case anything needs to change on the customers' end.

While communication with the customer is important communication within the developing

team is as important. Roles need to be assigned in the team to reduce any cross developing and

wasting time. Once an understanding as to who will be creating which piece of the project then it

should flow well. Once the project is completed it would result in the customer being content

with the product that they paid for and likely return for future projects.

c. Both processes have as their goal to build high-quality software. What steps in Waterfall

contribute to quality?

The Waterfall process shows the ability to produce high-quality software in the beginning

processes. When the company is communicating with the customer documentation is started

regarding the requirements and functionality. From that point on the customer and company have

come to an agreement as to what the end result will be. Therefore, there will be no surprises

when the project has been completed. The documentation of the project is one of the key factors

that goes into high-quality software. Once the development stages are completed the testing

stages would be the second most important part of high-quality software. Being able to guarantee

that all functionality agreed upon works without any problems shows that the company is

developing commercial grade software.

d. What steps does one do in Agile that contribute to quality?

The Agile process flows better with how technology has evolved today because customers

always want to be in the loop. They want to have the functionality to make changes at a second

notice and being able to see the progress. Thus, the agile method contributes to quality by always
being in communication with the customer. There will be no surprises when the application has

been completed because the customer would be able to see it being developed.

e. Do you think quality of an Agile project and Waterfall project can be the same? Or is one

process better than the other regarding quality? [support your view point either with personal

experience or quotes from textbook.]

I would say the quality of the Agile project and Waterfall project can develop the same

project, but the customer may not be as satisfied with the end result. Having the ability to

communicate with the developers as they are creating the application is a plus because plans

change all the time. If a customer has to lock in with their project at the beginning but wants

additional features or a different design, then the Waterfall method would fail. Since they work

off of the documentation that the client has provided, they wouldn’t know of these changes.

Thus, resulting in an unhappy customer with the end result. When I worked as a desktop support

technician it was my job to develop guides or scripts to aid with hardware/software changes.

During the process of developing guides, I would communicate with my supervisor to see what

instructions were required. After coming to an understanding there was a hand full of users that I

would have review the guides before sending them out. Based upon their thought’s changes

would be made to make sure there weren’t any steps skipped. This process would go on a few

iterations until it was perfect. There would be no assumption on the user side because it would be

in-depth enough to show any issues that might be displayed. Since there was communication in

the development of the guide this falls under the Waterfall process. Another situation where I ran

into the Waterfall method was when I created scripts to add drivers for printers and scanners. I

wanted to the process to run a smooth as possible and leave the end user to no guessing when

running the script. A small group of users was assigned as the test unit for the development of
this script. I would work on it a few days out of the week and then meet with the group to show

the progress of the functionality. From that point, they would give me input based upon the text

lines that were present and the terminology. After it was complete the end users were content

with the functionality and it ran without any issues.

Question 2:

a. What do you have to do differently in this situation compared to a situation of developing a

new application from scratch?

When developing a new application, a general understanding of which members will create

certain features in a project is decided. However, when a legacy application is developed, and the

original team is no longer available this will cause a delay. Since the new team has no idea of the

functionality of the software, they would have to start from line one and figure out how it works.

This would take a significate amount of time to see how the original team developed the

application. Also, if the original team didn’t add comments in their work as they progressed then

documentation would need to be created. The amount of time allocated for the project would

have to be significantly longer than starting a new application. However, once the team figured

out the flow of the application the process would continue as normal. The testing period would

likely take more time than normal to debug the new features.

b. Describe the software engineering process you would use for this situation.

Since the project is legacy software the Waterfall method would be the best solution to

perform upgrades. The team that is performing the upgrade to the software should see if there is

any documentation that the original team created. If there isn’t then the next step would be to

review the code and see if comments were created to grasp the concept the original team had.
Once that phase is complete the documentation process would begin to aid future upgrades of the

legacy software. Then the team would analyze the models, schema and business rules from the

old application and see if updates are needed to move forward. When that is completed, they

would move on the design of the new software architecture and review the new features that

need to be developed. After the design flows well the coding portion of the project would

initialize, and roles would be assigned. Once the features have been added and the core has been

upgraded the testing stage would occur. Since the application is old the new features and old

features need to be tested to see if there is a point of failure. If there is then it will need to be

fixed before calling the project complete. After all, the components have been tested and the

project is working without any issues then it is time to perform the installation process. When

users are using the new application support will need to be provided and maintenance will have

to be provided as well.

Question 3:

a. Why are smaller values considered better?

The software metrics Cyclomatic complexity and ABC score the functionality of the program.

The score for cyclomatic complexity is based upon the edges, nodes, connected components in a

program. Whereas the ABC score is the assignments, branches and conditional statements that

sum up a number. The target score for the cyclomatic complexity matrix is less than ten methods

but the ABC score is targeted at less than twenty methods. Therefore, it is considered better to

achieve a lower value to have efficient code. For the cyclomatic complexity metric, it is best to

keep the score below ten because it is the number of test cases that are needed to succeed in one

hundred percent branch coverage. If the number is higher than what it is targeted, then it shows

that it will be difficult to understand due to the number of unique paths. Another issue that could
be presented in having a high number would be creating test cases for the application. Therefore,

if the number is kept at the target then it will be easier to follow the code and create test cases to

determine the functionality. As for the ABC, score is it best to hit the target number or be less

because it allows the concept to a grasped easily. It also reduces unnecessary statements within a

section of code to help eliminate slower run times in programs.

b. How are these metrics used in software development and testing?

The ABC and Cyclomatic complexity metrics are used to determine how well the code was

developed. If the number is at the target value, then another programmer should be able to open

the code and continue adding to it without any problems since the algorithm would be easy to

follow. Whereas if the metrics are higher than the target then it is time to go back to the drawing

board and develop a more functional algorithm. The ABC score shows the assignment, branch,

and conditions in the applications and can give a developer an understanding of how complex the

application is. The cyclomatic complexity metrics are similar in the sense that it is displaying all

the unique paths the users have developed. Based upon the value it can determine how difficult it

can be to create test cases and understand how the application flows.

Question 4:

a. How would use facilities of GitHUB (and specifically GitHUB branches) to do remote code

reviews?

The functionality that GitHub presents is quite amazing because it allows people to work on a

project regardless of where they are located. The leader of the project has the right to assign

developers a slice of the project and track their progress. Only once they have completed the task

they are able to upload it which gives the leader a chance to review their changes. If the changes
they made going to crash other functions, then it can be declined and sent back to the user with a

note. This allows the senior member or leader of the project the ability to review new code that

has been developed to see how well it corresponds with the application.

b. Should all members of the team be required to review new code, or should it be optional?

All members of a team should be required to review new code because if one member was

assigned the role to review code and then they left the process would have to start all over again.

If each member of the team reviewed the code, then they would all have an understanding as to

what the application does and how the algorithm works. If it was optional there would be fewer

members of the team that would understand how the application functions and how to add

additional features.

c. Should only the programmers with the most experience on the project be required to do code

review?

The programmer with the most experience should do the required code review, but after they

have completed the review, they should show fellow programmers. This would allow

programmers with not as much experience an understanding as to what they should be looking

for. That way if something were to happen to the most experienced programmer then the rest of

the team would understand the concept. There should always be cross training on all aspects of a

project if one member doesn’t anything a concept or function then they should be training. This

brings together a strong team that will be able to complete any project that comes their way.

d. What would you think of a code review that was done by three programmers all of whom had

just joined the team in the last six months?


Depending on the amount of experience each member has before joining the team their review

might be adequate. However, if the project they are reviewing is for a client then a senior

member of the developing team should be a part of the review. The only reason a senior member

should be included is if there is certain information about the client that only a senior member

would know. Therefore, if there was a feature that was requested that the new members didn’t

know about, they wouldn’t know what the look for. They would mostly be looking for

functionality and completeness.

Question 5:

a. Define in your own words the terms BDD, TDD, and UML scenarios. In what ways are the

concepts similar and in what ways are they different?

The Test-Driven Development or TDD for short is the process of writing and running test

cases for an application. This allows for test-coverage that prefers to test that are run

automatically, therefore, the higher the number the better. TDD also reduces the likelihood of

bugs being present in that program. The process is straight forward by initially creating a test

case that may or may not fail and then slowly adding additional cases. This will help the creator

get a better understanding of what the application is capable of and how it can be improved. The

Behavior-Driven Development or BDD for short is the process of writing great tests. BBD

usually works together with TDD. A key factor of BDD is the implementation detail in the unit

tests. BDD addresses a common problem with poor unit tests that can rely heavily on how the

tested function is implemented. The solution for BDD is that it shouldn’t be a test based upon

implementation but behavior instead. The Unified Modeling Language or UML for short is the

process of displaying a model of object-oriented software design. It is used greatly in displaying


and developing the schema of a database. The concepts of TDD, BDD, and UML are similar

because they are all involved in test cases and displaying data.

Question 6:

a. What does the term “Software as a Service” mean?

The term Software as a Service or SaaS for short is a method of software delivery and

licensing. It allows users to access software online via a subscription rather than it being bought

and installed on an individual computer. Adobe offers SaaS for its consumers that allows them

access to their applications if they pay a subscription fee. This gives its users the right to

download the software on any computer and use its functionality as long as their credentials are

cached. There are many other companies that offer this service because it is convenient and

allows the company a steady flow of income. It also gives its users the functionality of using

their service on any platform that has the application installed. Another software company that

offers the same service is Dropbox. They allow their users the storage ability to keep their files

secure and being able to access the files on any device.

b. How is this different from just plain “Software”?

The different between SaaS and software is installed on a computer whereas SaaS can be used

without installing any application to the PC. Thus, making it functional in the sense that it can be

used on any platform. The software is applications that are installed onto a PC in order for its

functionality to be used. For example, Microsoft sells its product office that has to be installed on

a computer in order to be used. However, recently Microsoft has offered their cloud-based

service which allows users who bought their product the functionality of using their services on

the web. Another example of plain software is blizzard. They are a company that offers users
games to play but they have to download their product in order to play it. The product is able to

be played on different platforms, but it has to be installed before it can be played.

Short Answer Questions

1. A rails route contains the statement


get ‘xyz/new’ => ‘abc#create’
a. what is the file name of the controller class that will called?

abc
b. what method must the controller class define?
The function xyz.

c. what is the name of the view template that will format the output of this
request and what directory will rails expect the view template to be in?

layouts
projectname/app/views/layouts

2. An application html page has the source


<html>
<body>
<form action="/profile/10" method="post">
<label>First name</label><br/>
<input type="text" name="n1" value="first" /><br/>
<label>Last name</label><br/>
<input type="text" name="na" value="last" /><br/>
<label>Age</label>
<input type="number" name="n3" /><br/>
<input type="submit" name="Submit"/>
</form>
</body>
</html>

a. What ruby statements would be used in the controller method to get the
input values entered by user?

Def create
@user = user.new(user_params)
@user.save
Redirect_to @user
Private user_params
Params.require(:user).permit(:n1, :na, :n3)
b. What code would you write to determine whether the user entered any
value for age?

I would check to see if the value is empty or not. If it was empty, I would
send a message to the user. Otherwise I would check to see if the value
entered is a number and if it wasn’t to inform the user to enter a number.
Course feedback. This part of the exam does not count toward your score. It is
optional. But your feedback will help me to improve the course.

1. Are you satisfied with the help available in the course? Are the online office
hours convenient for you? Do you get timely responses to your online
questions from the TA and/or instructor? What changes (if any) would you
like to see?

2. Rate the following topics and resources as helpful or not in your learning.

Helpful Not Did not


Helpful read or
watch

Textbook X

Assignment 1 on ruby programming X

Assignment 2 on rails programming X

Instructor videos on rails programming X


(week2)

Instructor videos on requirements and X


testing (week 3)

Pivotal tracker videos (week 3) X

GitHub video (week 4) X

Screen casts from the textbook X


3. Are the assignments and project directions clear?

I would say the instructions for the assignments need a little work to understand
the concept. I would recommend creating a lab or two to assist with the
development of assignment 1 and 2.

4. Any other comments or suggestions about the course so far?


It has been difficult learning a new language and trying to develop a project.
It would have been nice to continue with a language that was already taught
in pervious courses to assure smooth sailing with the project.

5. What other resources have you found and used that were helpful in your
learning ruby and rails programming?
a. I have found a lot of posts on stack overflow that have helped with
certain concepts or ideas that I wasn’t sure how to create in ruby.

You might also like