Can We Write Good Quality Software Faster?

Codes on screen
(photo by kakaopor)

Steve from Ardalis.com wrote an interesting article that discuss about the internal and external software quality. He defines external quality as the software’s presentation and behavior from a user or customer’s perspective, such as, bugs, UI, input validations, etc. While internal quality refers to to how the software was constructed, and how easy it might be to maintain or extend.

So, external quality is the quality that can be appreciated by everyone, while internal quality is the code beauty that can only be appreciated by developers, and here we focus on the latter.

He proceeds to discuss that virtually all of the software codes created today is of relatively poor internal quality, and this is largely due to the capabilities of the developers in the development team, unappreciation to code quality, and lack of time to write good quality code. Continue reading “Can We Write Good Quality Software Faster?”

Recovery Testing: The Neglected Child of QA!

Failure… the word that sounds bad, everyone hates it. Don’t bother to say the whole word, even the first letter has a negative meaning in a gradebook.

We’re so afraid of failure, we always try to avoid it, even up to the point that we fool ourselves saying that our system will never fail.

But let’s just face the fact, everything that can fail will fail at some point of time, says Murphy’s law.

This is where Recovery Testing comes to play, we need to test our system how it handles failure (and it should be better than how some us, humans, do).

Let’s see what do we need to know to do recovery testing. Continue reading “Recovery Testing: The Neglected Child of QA!”

Performance Testing: Definitions, Tools, and Challenges

speedometer picture
(photo by Sardinelly)

Testing whether the system can do the expected functions specified in the requirements is one thing, there other thing is to test how well the system is doing it.

It doesn’t make sense if a system can perfectly do its functions, but only when one person is using it and as soon as the second user is logged in, the system stops. Or in case of a single-user desktop application, the application works fine processing ten items, but crashes when processing 100 items.

So the topic for this blog post is quality of service testing, also called non-functional requirement testing, and in particular we’ll take a look at the performance, load, and stress testing. Continue reading “Performance Testing: Definitions, Tools, and Challenges”

Software Testing: Standards, Certifications, and Resources


Software Testing – UTest Promotional Video

Not long ago I thought software testing is simple. Write good unit tests, make sure we catch the normal case, extreme case, and null case for some methods. Job done!

However, as the complexity of software increases, a better and better software test process must be made to ensure that the solution meets the requirements. This is even more true in the case of critical systems such as those in use in medical, financial, and defense systems.

In this blog post, I write some of the standards, certifications, and online resources in the field of software testing. Continue reading “Software Testing: Standards, Certifications, and Resources”

What do we mean by “Software Quality”?

Cathedral of the Madelaine - indoor
Cathedral of Madelaine – Salt Lake City, Utah

(continuation from ‘How can we define “quality”?’ blog post)

So, then it follows that “Software Quality” is the trait or character of a software that is subjective to different person or group of people.

That is why it’s very important for a software project to have a requirement specification that everyone in the development team is clear of (though not necessarily agreed of) so that there will be less (it’s unavoidable) confusion along the software development lifecycle.

Because different group of people will always different understanding of what the same software should have.

The end users usually prefer good user interface, ease of use, less number of steps in a process, and fast response. The stakeholders usually prefer fast software delivery, cheap software cost, and zero faults. The developers usually prefer good software practice implementation, decoupled system, and simple requirements.

Quickly looking at these differences, we can see that they can conflict with each other, and thus a balance must be made between them.

Windows from business perspective is a very successful product, thus it can also be said that it has a very high economic quality, disregarding what the computer geeks (me included) may say about it’s stability quality.

In reality, we cannot satisfy everyone, and in fact, trying to satisfy everyone is a recipe for a disaster.

Thus, I think it’s always good to identify who are the target of the software first, see what are the requirements that need to be prioritized, and satisfy these requirements.

Since software, being “soft”, have the advantage to be modified as the priority of the requirements change, this also means that a high quality software doesn’t always guaranteed to have the same high quality in the subsequent release, and also the opposite.

How can we define “quality”?

Mormon Temple
The Mormon Temple – Salt Lake City, Utah

Before looking at the dictionary proper definition of “quality”, let me try to answer it naively. So, according to djitz (that’s me):

Quality is a trait of an object that is subjective to different person.

For more formal definition, you can follow this link to Merriam-Webster definition of “quality”.

The first part of my definition doesn’t seem to be that much different from the dictionary definition, however I think the “subjectivity” part is important.

Because quality, just as it’s cousin, beauty, is in the eye (and mind) of the beholder.

There’s always different groups that side to certain products, just take a look at iOS vs Android, Windows vs Mac (or Windows vs Linux), Canon vs Nikon, the list can go on and on..

What causes this division? Obviously because different group of people prefer different quality from certain products.

The division doesn’t always come in two major groups, it can come in more distributed manner. Just take a look at the product reviews in Amazon.com. Although the peer reviews are helpful in determining a quality of the product, in most cases it can also confuses people. It’s not unusual to see a five star rated product review followed by a one star rated one.

So, just to sum it up, quality is people’s relative perception of an object.

Data Mining Notes – Artificial Neural Network (ANN)

Algorithm outline:
——————–
(from video)

  1. Start with neural network (single or multiple layer).
  2. Present the training sample, compute the activation values of all the units until we compute the activation values of output layer units.
  3. Compare the output that we computed with the training sample output to compute the error.
  4. Having computed the error, our objective is to re-adjust the weight so the error decreases so that our computed values is closer to the real values.
  5. Done with one training sample, we’ll continue with the next training sample.
  6. Use learning rate to choose slow or fast learning. Slow learning is better in general, because of gradient descent.
  7. Continue with this learning until ideally we reach state where the weight doesn’t change too much.
  8. Freeze the weight, and we have learn the function.

Backpropagation

  1. Compute the error of the output layers, and then aproportion that error to the hidden layers.
  2. Having the error of the hidden layer, use two layer learning algorithms to readjust the weights (weight adjustment formula). Multi-layer neural networks work better than single layer. Continue reading “Data Mining Notes – Artificial Neural Network (ANN)”

Managing Software Development Course Notes and Outline

Course term: Spring 2012
Website: Official course website.
Course Professor: Prof. Ken Backlawski
Textbook: Object-Oriented Software Engineering Using UML, Patterns, and Java (3rd Edition)

Continue reading “Managing Software Development Course Notes and Outline”

Data Mining Techniques Class Notes and Outline

data mining class outline image
Course term: Spring 2012 – Northeastern University
Website: course official website.
Course Professor:Professor Mirek Riedewald
Textbook: Data Mining: Concepts and Techniques, Third Edition (The Morgan Kaufmann Series in Data Management Systems)

Some of the outline item will have a separate detailed post.
Continue reading “Data Mining Techniques Class Notes and Outline”