Monday, September 30, 2013
Interim between Deliverable 1 and 2
This weekend I was personally in Atlanta for Anime Week Atlanta, a trip which I'd been planning for roughly a year. As such, I wasn't able to do much on terms of our team project - though I did keep loose track of what was going on. Most of my work for the class this weekend was invested in studying for the test on Tuesday. However, I did note that my group has been working on getting the new project up, compiling, and running. We were debating switching depending on several factors, so they were testing whether the candidate we voted to be the new one was viable to replace the one that we previously got to compile.
Tuesday, September 24, 2013
Thoughts on Chapter 15
Chapter 15 mentions that critical systems require advanced testing due to the costs of failure and validation of dependability attributes (you may have to prove that you tested it and it works). Personally I find these two things to be thoughts that haunt me as I develop regardless, and couldn't imagine releasing a critical system without rigorous testing. Rockets shouldn't fail in launch or orbit due to a simple, basic test that was never run due to laziness or oversight.
Static analysis comes across as the basic overlooking and viewing that happens as you write the code, as well as the simple code checkers and peer review. A necessary first step, one that covers a lot of basic and disastrous conditions but still overall not too complicated.
Reliability testing is something that's important as it seems like it can uncover some real problems going on under the hood. Things go wrong for a reason - if the reliability of your system is really low - a simple change or stomping of a subtle bug may really improve it and lead to a better user experience.
Security testing is definitely more important now than ever before. Though I'm not experienced at all in the area of security, I recognize it's importance and I'm interested in it. I'm personally up in the air which is more important to me personally - reliability or security. On one hand having a reliable system that's vulnerable means that those who get unauthorized access have correct in formation - on the other if a system is unreliable, can it really be secured if the security is part of the same design?
Process assurance seems to reaffirm something that we've been taught in general in life - products made of better materials generally make better products.
Static analysis comes across as the basic overlooking and viewing that happens as you write the code, as well as the simple code checkers and peer review. A necessary first step, one that covers a lot of basic and disastrous conditions but still overall not too complicated.
Reliability testing is something that's important as it seems like it can uncover some real problems going on under the hood. Things go wrong for a reason - if the reliability of your system is really low - a simple change or stomping of a subtle bug may really improve it and lead to a better user experience.
Security testing is definitely more important now than ever before. Though I'm not experienced at all in the area of security, I recognize it's importance and I'm interested in it. I'm personally up in the air which is more important to me personally - reliability or security. On one hand having a reliable system that's vulnerable means that those who get unauthorized access have correct in formation - on the other if a system is unreliable, can it really be secured if the security is part of the same design?
Process assurance seems to reaffirm something that we've been taught in general in life - products made of better materials generally make better products.
Monday, September 23, 2013
Deliverable 1 Personal Experience Report
Our team ran into many problems in getting the code to download and compile. None of us had previous experience with bazaar, which was used as version control, and most of us hadn't done Mavis before to compile information. Our first meeting was wrestling with that alone, however we only had 3 members for the first meeting. Our second meeting everyone was in attendance and we got it working relatively quickly. The source code took 15 minutes to compile, which was quicker than expected, but still gave us an idea that this was a bigger project than anything we've dealt with before. My laptop seems to have a problem running the distributions of Linux I've tried to use on virtual box, and having Windows 8 makes it more difficult to set it up to dual boot. This means I haven't been able to do anything other than look up information and process it while others have the code on their computers. I still have Ubuntu on my desktop though, so I'll still be able to do so from my own home. We previously didn't realize that we would be selecting a module as opposed to doing the whole thing, as the website didn't give us the impression that it was separated quite as such. We selected the web commons module to work with, as it had previous tests, which all worked properly. It seems like the tests use Junit, and while none of us are intimately familiar with it, we understand it's rather easy to deal with.
Tuesday, September 17, 2013
Reading Reflection on First Testing Reading
I think it's rather sad that more programmers don't like testing and test designing. While I don't feel
especially thrilled about learning about test design per say, I do
like running tests on things to make sure they work – whether they
be things that I'm going to be graded on or things that I'm giving
others to use. Not only do I want the grade and I want others that receive my help to agree that I helped, but I have a sense of pride
when I work hard on a program. Testing is vital this to make sure
that it meets requirements – and who doesn't get a ping of pride
when a test, especially a rigorous one, is passed by one's creation?
I don't feel guilty when I test and make sure my creation works. I
don't feel guilty because I know I may have messed up – I know I'm
not perfect, and scoff at those who think they are.
I was intrigued by the notion of using
testing to prevent bugs, not just to catch them. It seemed foreign at
first, but after a thought this seems to be tied closely to
test-driven testing, and not so unfamiliar.
I enjoy how he broke down the "phases
of thinking" on testing. The fact that it's impossible to test
to show that software works is an important thing to remember and
should be stressed more. Similarly phase two's objective of "show
the software doesn't work" is also an infinite war between
testers and coders, though at least it gets us farther than just
trying to prove that it does work. Phase three – to reach a certain
degree of quality – is probably as far as most companies go. I
somehow doubt that most companies try to get their testers to do
further research into testing as a discipline – they probably just
test their things, assuming they having any dedicated testers at all.
Though I didn't particularly enjoy
re-reading, say, the definitions of an ORACLE, it's good to know that
things that I've been taught are also mentioned and important in real
applications.
Sunday, September 15, 2013
Reflections on First Team Meeting
Our team assembled at the agreed upon place at the correct time without incident. We quickly got to work and agreed upon trying to find projects made in languages with which we were all familiar. Given that we had all used Java before, and all but one person had used Python, we looked for projects that were in Java, and had Python projects as a not too bad backup. We quickly discovered quite a few projects were no longer active, and that some of the links were dead. We also endeavored to find a project that wasn't too difficult, yet wasn't too boring - we weren't looking for the simplest things possible. We eventually all-together found 3 projects that were in Java, not too difficult or easy, and still had some level of support by other users. We all agreed on three differing projects, all of which were discovered by differing members - it was good to see that my team-mates didn't select the first three that met all of our criteria, but ones that they wanted to do out of a pool of acceptable ones. Overall there were no problems and the meeting was quick, it certainly seems like we're all capable of communicating and I look forward to the rest of our project going as smoothly (hopefully).
Tuesday, September 10, 2013
Homework 9 – Software Engineering – CSCI 362-001
I suppose previously I hadn't
considered the four areas of “The Programming Systems Product”,
aka the program, Programming Product, Programming System, and
Programming Systems Product. I'd always been aware that when someone
was toting about having made some amazing program that's cheaper and
works better than those that are commercially available that it was
probably missing a great deal of something – though I hadn't really
considered that maybe it was a different type of product all
together.
I agree that turning non-tactile
thoughts into real results is something that is is one of the most
enjoyable things about programming. I also agree that there are quite
a few things that seem to make it frustrating – always working for
others, always being outdated, spending large amounts of time finding
bugs. I also find that optimism in our craft is...silly. It would
seem to me that you want to be cautious about what you guarantee and
you want to be 100% sure you can give what you promise – if you're
an optimist or take their approach, you seem to be shooting yourself
in the foot in that regard. Especially in something where you have to
test repeatably to see how often it's reliable – why would you
assume something is fixed or done before you've tried again?
I think overseers of software
development projects don't always understand what is going on to make
their project happen. Needless to say it's rather agreeable to me
that any month and any man are interchangeable. Not only is each
person different, each month a different length with different
variables, but the problems and progress that needs to be made is
different at each different point in time.
Communication seems to be one of the
biggest reasons for software failure – though this book gets into
some detail about why communication isn't just “easy”. It also
goes into why adding people to a failing project is a bad idea –
not all problems can be solved with more people, and if communication
is already bad, more people are only going to make it worse since far
more has to be done to keep more people up to date.
I'm not sure how most schedules for
software projects usually are planned, but lots of testing time seems
important. It seems most failures are because of poor design and not
enough testing – it seems logical that these areas are given the
most manpower when planning allocation.
Better, smarter, smaller teams being
preferred over larger more mediocre teams is also something that
seems like common sense and has been something taught to us over and
over. More people means seaming together more partitions, more
training, less responsibility and more effort in communication. While
it's true this means really large systems won't be completed in time
for them to be used or useful, I imagine there are a lot more smaller
projects being designed and developed than extremely large ones.
Mill's way of splitting up work and
getting a project done sounds like it's...very neat. Neat in a sense
of organization and responsibility, which I enjoy. That being said,
this team, especially with the “surgeon”, sounds very risky –
consequences could be severe if he was to quit or leave. I'm not sure
how more business manages are willing to risk in regards to this –
it's very much like putting all your eggs in one basket.
Thursday, September 5, 2013
Homework 8 – Software Engineering – CSCI 362-001
At the moment, I think programming and
software engineering are headed in a direction where they will "take
what they can get" in terms of advancing their field. While
everyone seems to agree that some degree of automation to the process
would be greatly beneficial, it doesn't seem like this is about to
pop up. On the other hand, small features help a little bit and come
up every once in awhile, but aren't the "one big thing"
that really propells either field forward. As a result, I don't see
everyone necessarily "dog piling" on one particular grand
idea that will revoluntionize everything – everyone is simply
trying to improve.
I think that as the age draws near
where anything and everything from lights, doors, locks, appliances
and the like all have embedded systems, that some rough form of
"accepted default plan" will emerge for the software to run
certain systems. For instance, it's possible "pool lights"
will have a very loose minimal content package that will provide a
bare minimum of functions to be implemented. I imagine similar things
for revolving doors, the gates on the subway, etc, to prepare for a
time where everything has a computer in it, but still needs to be
specialized to some degree. That there is some rough base to start
off of ensures that no "basic" feature is simply forgotten
– it is omitted by choice. They could imply a methodology of design
or just a really basic shell of code that is easily modified.
As for the programming environment
shown off in Future of Programming,
I'm unsure. While convienience is something that comes to mind,
security seems to be a big issue. A college student doing homework
with a group may really find this useful – especially in regards to
installing software he'll only use for one class – but big
corporations getting into this seems unlikely. The very notion and
basic idea of this project means that your data is in the hands of
someone else – and if you're making something big and secret for
you're company, the kind of people with access to this system would
be the kind of people who could make something out of any information
gleaned. They also mentioned that you could ssh into other servers
you own from the command prompt in the software. If this feature is
utilized often, then they have data to access other data that isn't
even on their servers.
While it does some have nice features
that let you put all of your code into "scope" – zooming
features, tracing, etc, I somehow doubt these will "revolutionize"
much of anything in programming. In addition, these features are
something that is doubtful to remain exclusive to their system for
long. And while the program may work on their systems, the programs
must still be taken off and compiled in order to be tested to run on
other target machines. How will the servers stand up to heavy load,
either by a multitude of testers or a manageable number with huge
projects? Will it simply slow, or will data be destroyed?
I think that their project definitely
has a place – somewhere. I doubt it's in the hands of every
programmer though. The video supplied was released on June 29, 2012.
Over a year has passed and before now I'd never heard of it – if
this was going to be the next big thing now, I would imagine I'd at
least heard a whimper by now.
Tuesday, September 3, 2013
Homework 7 – Software Engineering – CSCI 362-001
I'd heard previously about the 7 +- 2
rule. I heard that it meant someone could only do around 7 things at
once – though I wasn't told this was between 2-3 bits of
information. It certainly seems interesting that short term memory
isn't based on bits but by chunks – certainly encouraging people to
specialize instead of being a jack of all trades.
In regards to failures in cloud
computing, I suppose I previously always defined “uptime” as time
that the service is available and working correctly – though I
suppose this time frame may differ depending on the software. I think
the distinction between accessibility and availability is an
important one. Having a feature that presents a users with a
descriptive screen of what's going on when the service is not
available can be critical to keeping users content, happy, and
informed.
Degradation instead of failure is a
wonderful idea. Nothing is perfect and everything will fail
eventually – it's better to plan for these events. This also helps
encourage a healthier state of mind and development practices – to
not assume you're design is perfect. I've always felt that redundancy
of middle-tier equipment has had an edge over singular high-tier
equipment – it's less presumptuous and gives multiple failure
points. The points on being able to detect failures was basic but
important.
The point on making sure a “re-try”
is included in exception handling seems obvious but probably often
forgotten and critical. I hadn't previously thought of all the uses
of request-buffering though – I'll certainly try to remember it for
later projects.
Capacity buffering seems like a basic
good design, and dynamic resource accessing seems like a good idea if
even for security reasons. Automating responses to failures as much
as possible seems like a normal step as well – as does seeking out
problems and solutions which may pertain to your system.
After reading the title of the paper
on tire's and mandatory wireless service, I'm immediately concerned.
I don't particularly desire for my car to be communicating with
anything else other than me physically – that way I'm more secure
from being remotely screwed with. It seems rather obvious that a
particular network can be tracked with some work – while not a
particular concern for me at the moment – could easily be for
others. Another rather disgusting feature is the mandatory
requirement for it as opposed to letting it be voluntary.
I'm not sure if I should be proud or
concerned that some of the experiments done concerning privacy were
done somewhere I drive regularly. While I wasn't shocked to learned
that the range of picking up packets was large, and that it was not
difficult to force trigger and capture it – I was concerned. There
seems to be very little to no security on the system as well –
which is even more concerning. The later experiment that forced
warning lights to go off brought everything into perspective – you
could force someone to stop in order to render them more vulnerable.
Homework 6 – Software Engineering – CSCI 362-001
4.5– Using the technique suggested
here, where natural language descriptions are presented in a standard
format, write plausible user requirements for the following
functions:
An unattended petrol (gas) pump
system that includes a credit card reader. The customer swipes the
card through the reader then specifies the amount of fuel required.
The fuel is delivered and the customer’s account debited.
The petrol pump system shall dispense
the amount of fuel specified after ensuring that the bank has
approved the withdrawal.
The cash-dispensing function in a
bank ATM.
The ATM shall dispense the amount of
cash specified after ensuring that the bank has approved the
withdrawal.
The spelling-check and correcting
function in a word processor.
The spell-check function should
underline all words it does not recognize and allow users to right
click and view spelling suggestions.
4.6 – Suggest how an engineer
responsible for drawing up a system requirements specification might
keep track of the relationships between functional and non-functional
requirements.
Functional requirements used to
enforce non-functional requirements could be recorded and tracked by
having a diagram with functional requirements connected to
non-functional requirements by lines.
4.7– Using your knowledge of how an
ATM is used, develop a set of use cases that could serve as a basis
for understanding the requirements for an ATM system.
Withdrawing money allows one user to
withdraw money from their account. The user inserts their debit card,
verifies their identity via PIN, and specifies how much money they
would like to withdraw. The system deducts that amount from their
account if the machine has enough to dispense, and does so. The
transaction would close and the card would be returned.
Depositing money allows one user to
deposit money into their account. The user inserts their debit card,
verifies their identity via PIN, and specifies an amount to deposit.
They then select what form the amount will be deposited be – cash
or check. The check or cash would then be collected and verified as
being the correct amount and legal, and the transaction would close.
The card would be returned.
Subscribe to:
Posts (Atom)