Course Review

This is my last post for this course, so I’m going to write a review of it, what I liked and disliked, and things that may help Ken to improve his classes as a teacher.

For starter, it was the first time I experienced this type of learning methodology, I think it was called flip-learning; in my opinion, is like a self study course where the student has total responsibility for his own learning. I really liked specially because all the topics were theoretical and you didn’t have to learn any kind of formulas, you just needed to understand the topics with your own words and to know what they were about, and thanks to the post we had to do, it helped us to express our knowledge with our own words.

What it helped the most was all the technological tools that Ken presented to us, I regret not taking notes of them at the start of the course, those will not appear helpful but you don’t know when you will need it. Any way, I took notes when the second partial started and now I ave a small list of things that may help me in the future.

Something that I dislike about the course was that sometimes it was boring, I don’t have any ideas of how to improve this, maybe it was boring because I didn’t pay attention correctly or because that particular class lacked of something. Sorry if this comment doesn’t help to improve the class.

But what I really liked was that Ken got us access to communicate with other people that have experience in software engineer, something that no teacher that I ever had, had done before.

Thank you Ken for being our teacher for this course, and I will place here a

Continue reading "Course Review"

Do not try extreme programming at home

Extreme programming or XP was created by Kent Beck in 1996 during his work on the Chrysler Comprehensive Compensation System (C3) payroll project. His is a software development methodology bases from the agile method, which means that it has principles from the agile like working in iterations, frequent releases from short development cycles to the customer.

One important element of extreme programming is the teamwork, where an agile technique called pair programming is used, which consists in two programmers working together in one workplace; one as the driver, who writes the code, and the other as the observer, who review each line of code written, then those programmer switch places.

Other element is that extreme programming doesn’t deliver what the customer probably wants, it only focuses on delivering the software you need, as you need it.

3820093421_1ca26a5cf0_z
flickr photo by TimOve https://flickr.com/photos/timove/3820093421 shared under a Creative Commons (BY) license

Why is it extreme?

Is not because you are risking your life or something like in extreme sports, it means that XP ignores other practices and only works on thing that matters. For example, the Big Design Up Front, which consist on creating big detailed design of methods of software, is unnecessary in XP.

What are the things that matters in this methodology?

Software is too damned hard to spend time on things that don’t matter.

From here

The important things are Listening, you have to learn what the problem is in the first place; Testing, you have to know when you are done; Coding, the code is what make software and Designing, you have to know how the client want the program to be structured.

 Reference

http://c2.com/cgi/wiki?ExtremeProgramming

http://www.extremeprogramming.org/


Software Verification and Validation

Verification and validation are terms that are used in software testing to check that everything is all right with the project. The definitions are very similar and are easy to confuse, especially because those happens in the process of software testing.

Software verification refers to the process of determining whether or not the product of a given phase of a software development process fulfill the requirements established during the previous phase.

From here

In other words, software verification evaluates each phase of the software to determine if the software is being programed correctly in a way in which each requirement is being fulfilled from the specific phase. Another way, and more easy, to understand the definition is to ask this question: “Are we building the product right?”. With this we can say that verification is to check that the software can meet the requirements form the user.

flickr photo by Peter Morville https://flickr.com/photos/morville/3220969358 shared under a Creative Commons (BY) license
flickr photo by Peter Morville https://flickr.com/photos/morville/3220969358 shared under a Creative Commons (BY) license

For the definition of software validation from here we have:

Software validation refers to the process of evaluating software at the end of its development to insure that is free from failures and complies with it requirements.

This means that software validation determines if the software have the user requirements and that can be useful, because it can have all what the user wants but it can have an incorrect behavior, this is what “free from failures” of the definition refers. Validation also have a question to answer that can make the definition easier to understand which is: “Are we building the right product?”.

Is possible for a software to pass the software verification but it fails at the validation. This happens when the product is built with the right specification form the customer but it doesn’t

Continue reading "Software Verification and Validation"

User Interface Design

3013865652_b3ea69377d_o
flickr photo by jeferonix https://flickr.com/photos/jeffreywarren/3013865652 shared under a Creative Commons (BY-SA) license

Everyone have navigated on a website, in the menu of an application or in the menu of the video game like the settings, and had positive thoughts about it, for example: “it very easy to use this app”, “I found really fast the setting I was looking for”, “The use of this app almost feels like something natural”. But there are also negative that frustrate us because we can’t do what we want with the application, for example: “I don’t understand how to use this app”, “I got lost in the navigation menu”, “I can’t find the setting I changed early”, etc.

The reaction or the experience of the user when using software doesn’t only depend on the functionality and the aesthetically design, what more influences the user to feel comfortable or not is the user interface.

User Interface (UI) Design focuses on anticipating what users might need to do and ensuring that the interface has elements that are easy to access, understand, and use to facilitate those actions.

                                                                        From usability

This means that user interface design is about thinking like a common user instead of an experience programmer that already knows what the software does. It can also be interpreted as molding the functionality of the software so it could be used more “naturally”, in other words, that you can use the software like if it where something of common sense.

There many elements, principles and other concepts in user interface design that explaining all of them will make this post very huge, so I will share this page to find more info about it.

 

References:

https://www.usability.gov/what-and-why/user-interface-design.html

http://bokardo.com/principles-of-user-interface-design/


Software Maintenace

Maintenance is a well-known concept, the general idea is to prevent things to stop doing what is supposed to do; this can be applied to everything, for example, we usually have the car to have maintenance so we can prevent future problems that will be more expensive than the maintenance.

In software there is no difference, every program needs maintenance to prevent future problems, even if software is not a physical thing, is also a product that has a functionality, and because of that, is vulnerable to suffer malfunction with the time.

Software maintenance is defined as the process of modifying a software system or component after delivery to correct faults, improve performance or other attributes, or adapt to a changed environment.

            From here.

flickr photo by osde8info https://flickr.com/photos/osde-info/4849284182 shared under a Creative Commons (BY-SA) license
flickr photo by osde8info https://flickr.com/photos/osde-info/4849284182 shared under a Creative Commons (BY-SA) license

As the previous quote suggest, maintenance corrects faults, improve performance, adapt and prevents problems; this means that there four types of maintenance: the corrective, the adaptive, the perfective and the preventive.

The corrective seeks for malfunctions and problems in the system, then it modifies it to solve problems and bugs; the adaptive applies modification to keep the product up to date to the ever changing world of technology and business environment; the perfective is to improve performance and to keep the software usable over a long period of time, as well as adding more functional requirements and new features; and the preventive aims to attend insignificant problems that may cause serious problems in the future.

Software maintenance is the last step of the software life-cycle; from here you may be wondering why is a cycle? why the gathering is required again? This is because in maintenance you are looking for new problems and new requirements that then, you will have to design,

Continue reading "Software Maintenace"

Free software?

Imagine that you want to buy a gamer computer, so you go to an electronic store and after reviewing all your options, you choose one of medium quality. Then you go to your home to test your new computer. After playing some games you realize that for a certain game, you need more “power”, so in you open the CPU to inspect what can you do to improve it, and then you add more RAM memory, maybe you buy a better GPU, etc. In the end, you improved a product because you were able to do so and the parts of the computer was open to the user.

Now imagine that what you bought was a computer program and you were able to improve or customize the software. That is an open source software.

Open Source software is software that can be freely accessed, used, changed, and shared (in modified or unmodified form) by anyone

From opensource.org

If you have an open source software, it means that you can view and freely modify the source code, something that you cannot do in other software that does not have this attribute. Something notable is that if you want to develop a program, by having it with open source you can get help form many people interested in you project, not only can help you with some bugs but also they can give ideas of how to implement something new or even provide you with possible code that can implement that thing. In a book called the Cathedral and the Bazaar ( you can check my post that talks about it ) it talks about experience and learning the author got when working with an open source software.

You don’t need to be a specialist in software to have its benefits,

flickr photo by jalbertbowdenii https://flickr.com/photos/jalbertbowdenii/5682524083 shared under a Creative Commons (BY) license
Continue reading "Free software?"

Software Implementation

wordle-2

Software implementation, ring any bells? It sounds like software deployment, one phase of software life-cycle, but the meaning is different. Software deployment and implementation are confused often because the meanings are similar when you think about having the user to use your software, for example, the argument of “people implementing your software for their use” is different than software implementation, but because of that, it can be confused with software deployment.

The difference is that software deployment refers to all activities that make your software available for the user while software implementation refers to the activities that are made before deploying your software such as design, coding, testing, etc., in other words, the design step to the testing step form the software life-cycle and other activities.

In an information technology (IT) context, software or hardware implementation encompasses all the post-sale processes involved in something operating properly in its environment, including analyzing requirements, installation, configuration, customization, running, testing, systems integration, user training, delivery and making necessary changes.

Retrieved from here

Not having a well-structured or an accurate plan in software implementation may result to a total failure in the software project, this is because many departments are involved and one misunderstanding or the use of an inappropriate development method can lead many problems.

To prevent many of those problems, is necessary the use of tools that can help to the software implementation; one example is software documentation, that is used to provide information about the software process. I will list and explain a little about common tools:

  • CASE tools: One example us the UML, where you can see the connection between classes in a software.
  • Compilers, Interpreters and Run-times: Program languages with their respective compilers.
  • Visual editors: Provide an easier way to design GUI
  • Database Management Systems (DBMS)
  • Testing
    Continue reading "Software Implementation"

Software Architecture

Software architecture is the final phase of design of the software life cycle, is kind of weird because once you have a design, (read Software design), is natural to think that the next step is coding, but in software life-cycle, software architecture is needed after software design and before coding.

From this page Software Architecture…

defines a structured solution to meet all the technical and operational requirements, while optimizing the common quality attributes like performance and security.

Software Architecture in Practice (2nd edition), Bass, Clements, and Kazman from Microsoft says this about software architecture:

The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them. Architecture is concerned with the public side of interfaces; private details of elements—details having to do solely with internal implementation—are not architectural.

8060238470_be19d490ae_z
flickr photo by RHiNO NEAL https://flickr.com/photos/rhinoneal/8060238470 shared under a Creative Commons (BY-NC-ND) license

In other words, Software Architecture provides the relation between all the components, elements and requirements of a system as well as how they are related. It also involves a series of decision that have impact on quality, performance and maintainability.

I imagine the software design like a small model of a building, in software it can be represented in many ways, for example in the UML; and software architecture like the blueprints of a building, which will be difficult to relate it with software development. Both of them are inside the design step of software life-cycle and very important because they are like the pillars of the software, if they are not well structured the application will fall apart.

References:

https://www.tutorialspoint.com/software_architecture_design/introduction.htm

https://msdn.microsoft.com/en-us/library/ee658098.aspx

 


Thoughts about the Cathedral and the Bazaar

2853034905_749efbc6c3_o
flickr photo by kayadams.com https://flickr.com/photos/kayadams/2853034905 shared under a Creative Commons (BY) license

The Cathedral and the Bazaar is a book, written by Eric S. Raymond, about two different styles of development: the “cathedral” model and the “bazaar” model; and also about all the lessons he learned when working with an open source software while testing the theories of software engineer suggested by the history of Linux.

From my own perspective, the cathedral and the bazaar development models are pretty much like the waterfall and agile development process respectively, because the cathedral is like trying to successfully finish all the steps in a process, and the bazaar is like working with almost everyone and releasing software fast in short time periods. Actually, I think that the waterfall and the agile development process came from the concept of the cathedral and the bazaar model.

4581631602_11e5c60911_o
flickr photo by kamshots https://flickr.com/photos/kamshots/4581631602 shared under a Creative Commons (BY) license

Here are all the 19 lessons from Eric Raymond, most of them are easier to understand by just reading the sentence, but for other you need to read about what he was talking about to understand it.

  1. Every good work of software starts by scratching a developer’s personal itch.
  2. Good programmers know what to write. Great ones know what to rewrite (and reuse).
  3. “Plan to throw one away; you will, anyhow.” (Fred Brooks, The Mythical Man-Month, Chapter 11)
  4. If you have the right attitude, interesting problems will find you.
  5. When you lose interest in a program, your last duty to it is to hand it off to a competent successor.
  6. Treating your users as co-developers is your least-hassle route to rapid code improvement and effective debugging.
  7. Release early. Release often. And listen to your customers
  8. Given a large enough beta-tester and co-developer
    Continue reading "Thoughts about the Cathedral and the Bazaar"

Software Testing

Software testing is actually something that we have always done since we learned how to program, we have used it homework and projects from program classes, for example, in fundamentals of programing and POO. The purpose of testing is to verify that your program o software is doing or it does exactly what is intended to do and also to look for bugs that happens on particular cases.

flickr photo by justinsomnia https://flickr.com/photos/justinsomnia/2730404049 shared under a Creative Commons (BY) license
flickr photo by justinsomnia https://flickr.com/photos/justinsomnia/2730404049 shared under a Creative Commons (BY) license

Testing can be classified in two types, static and dynamic. Static is the examination of the program’s code, is somewhat implicit because text editors automatically check the source code and the syntax, so the program is not needed to me running for this kind of testing. On the contrary, dynamic testing involves the examination of the software when is running, and is used to verify that works according to the functional requirements.

What is more interesting are the different type of testing that can be used in software; there many of them so I will only write about some of them.

A common testing method is the box approach, which are the white box testing and the black box testing. The black box testing where testers are not required to know about the code, they only focuses on analyzing the relation between inputs and outputs on a running software. In white box testing, testers are required to have knowledge about the code and the internal working of the system and they focus on testing individual methods, statements, functions, etc.

For more information about more types of testing, you can check this page.

There exists tools that helps you with testing, specially when you are using an IDE because all of them have the tool named debug, which run your

Continue reading "Software Testing"