Verification and Validation

After a long journey, we are at a step in SDLC where we have implemented what we think will solve the initial problem of match the initial requirements. After being done coding, it is very possible that the system has some mistakes and releasing it as is would end in a very bad disaster.That’s why Verification and Validation are parts of SDLC.

As a whole, verification and validation refer to making sure the project does what it’s required to do. Still, there are differences between the terms.

Verification focuses on the project as it evolves in development. According to SoftwareTestingFundamentals, it happens at every phase of the project to ensure you are going in the right direction. The main goal of verification is to make the product meet the requirements. This means we are dealing with the direction the projects is taking.

On the other hand, validation focuses on the code and making sure it works. Testing is the most obvious and important way to validate. At this step you want to ensure the software is ready to be used by its intended users without problems.

The order of both can be altered but verification usually comes first.


User Interface Design

User Interfaces, or UIs, are what the user utilizes to interact with a piece of software, it often is graphical and displayed in a screen, but it can also be hardware, like a controller. They are the most important part of the software for end users.

For a UI to be useful and likeable by the user or customer, it must be easy to use, must attract the attention, easy and intuitive to use, consistent and responsive. There are two main user interface categories: Command-line interface and graphical interfaces.

Command-line interface (CLI)

It is the most basic interface and consists only of text characters on lines. The first computers used CLIs to interact not particularly for the ease-of-use, but for the minimal resources consumed by it and the simpleness that it has. The main input method for the CLI is the keyboard.
Advanced users often prefer command lines to execute some tasks, as a graphical interface would be too bulky and impractical.
Embedded and remote systems often use CLIs because of the low data rates that they produce and the fact that they can be channeled through a variety of protocols, from serial to over-the-internet SSH connections.

Source
Graphical User Interface

GUIs are what most common users today know to interact with a computer, they are graphical frameworks to interact with a program often in more simple and intuitive ways than CLIs, the disadvantage of graphical interfaces is that they consume more resources, and often require a graphics processor to generate what is on screen. The main input methods for GUIs are mouse and keyboard.

They are often comprised of "windows" that represent a particular instance of a program that is executing, they provide buttons, sliders and tabs that make navigation a breeze, and change and adapt in order to
Continue reading "User Interface Design"

User Interface Design

User Interfaces, or UIs, are what the user utilizes to interact with a piece of software, it often is graphical and displayed in a screen, but it can also be hardware, like a controller. They are the most important part of the software for end users.

For a UI to be useful and likeable by the user or customer, it must be easy to use, must attract the attention, easy and intuitive to use, consistent and responsive. There are two main user interface categories: Command-line interface and graphical interfaces.

Command-line interface (CLI)

It is the most basic interface and consists only of text characters on lines. The first computers used CLIs to interact not particularly for the ease-of-use, but for the minimal resources consumed by it and the simpleness that it has. The main input method for the CLI is the keyboard.
Advanced users often prefer command lines to execute some tasks, as a graphical interface would be too bulky and impractical.
Embedded and remote systems often use CLIs because of the low data rates that they produce and the fact that they can be channeled through a variety of protocols, from serial to over-the-internet SSH connections.

Source
Graphical User Interface

GUIs are what most common users today know to interact with a computer, they are graphical frameworks to interact with a program often in more simple and intuitive ways than CLIs, the disadvantage of graphical interfaces is that they consume more resources, and often require a graphics processor to generate what is on screen. The main input methods for GUIs are mouse and keyboard.

They are often comprised of "windows" that represent a particular instance of a program that is executing, they provide buttons, sliders and tabs that make navigation a breeze, and change and adapt in order to
Continue reading "User Interface Design"

Composition

One of the topics from the semester that I understood the least was software design patterns. At the time, they seemed very abstract and I didn’t go in depth enough to understand any one of them. Since I haven’t worked on any big projects, most of the benefits that are mentioned do not apply to me, yet.

I got interested on the topic after watching the following youtube video by funfunfunction. It goes over what Composition is and its advantages:

Simply put, composition is making new types by having an instance of another type for its functionality. It’s different from inheritance in that you have, no are, another object.

What made this video specially relevant for me was that in POO (OOP class), we learned about inheritance as one of the main benefits of OOP. Inheritance to me was one of the better ways to achieve code reuse and I thought it made a lot of sense when talking  about OOP. Since taking that class I very often try to make inheritance work with my (school) projects.

Learning that one of the main concepts I had learned in POO was considered bad led me to understanding a one of the main differences in coding for homework and coding as a job: Planning. Ken has even mentioned this in class but now I’m able to relate it to myself. After watching the video, I felt like my way coding to date had been wrong, but I slowly came to understand how planning affected the situation heavily. In the video’s example, not knowing the future was the main reason why inheritance didn’t work. When I’m doing homework, Inheritance works perfectly because there are no users and I know how the code will work before I start. That situation just doesn’t happen in the real

Continue reading "Composition"

TC1019 Aug-Dec 2016 Review

First of all, lemme say THANK YOU Ken, for being such an awesome teacher. You are being innovative and have done what no other in Tec. 

My first class with Ken was Fundamentals of Programming almost three years ago, he always had these flipped learning ideas and education methods, but he adhered more to the standard teaching model that we are all used to. There were "normal" classes, "normal" exams and "normal" evaluations; maybe because of the nature of that course (?).

This semester, Ken has gone full #FlippedLearning, and I like it. Twitter is a very good idea for students to be connected and being able to simply "tweet" a new blog post (made when and were students are most comfortable) is very cool. Using a private hosting for the course rather than boring, old blackboard is nice, as more interactive features can be enabled, I like to see how classmates' posts begin to show up in the dashboard. Also, promoting new ways of communication such as Slack is very useful, now I see it everywhere, it happens like the Baader-Meinhof Phenomenon.

As a teacher, or rather, enabler for education, Ken is always trying to help his students succeed and everyone should at least once have a one-on-one talk to absorb personally the knowledge he has to offer. He is very acquainted with software and the industry standards.

Lastly, the course contents have served me as general culture, and are actually useful now that I started working. Had it not been for what I learned here, I would be lost when they mentioned the words "agile development", "scrum" or "stand-up meeting".

Thank you Ken and continue what you're doing :)

TC1019 Aug-Dec 2016 Review

First of all, lemme say THANK YOU Ken, for being such an awesome teacher. You are being innovative and have done what no other in Tec. 

My first class with Ken was Fundamentals of Programming almost three years ago, he always had these flipped learning ideas and education methods, but he adhered more to the standard teaching model that we are all used to. There were "normal" classes, "normal" exams and "normal" evaluations; maybe because of the nature of that course (?).

This semester, Ken has gone full #FlippedLearning, and I like it. Twitter is a very good idea for students to be connected and being able to simply "tweet" a new blog post (made when and were students are most comfortable) is very cool. Using a private hosting for the course rather than boring, old blackboard is nice, as more interactive features can be enabled, I like to see how classmates' posts begin to show up in the dashboard. Also, promoting new ways of communication such as Slack is very useful, now I see it everywhere, it happens like the Baader-Meinhof Phenomenon.

As a teacher, or rather, enabler for education, Ken is always trying to help his students succeed and everyone should at least once have a one-on-one talk to absorb personally the knowledge he has to offer. He is very acquainted with software and the industry standards.

Lastly, the course contents have served me as general culture, and are actually useful now that I started working. Had it not been for what I learned here, I would be lost when they mentioned the words "agile development", "scrum" or "stand-up meeting".

Thank you Ken and continue what you're doing :)

Software Design Patterns

Software Design Patterns are commonly used on object-oriented software development, they are previously defined methods to design and code programs, used commonly by experts and corporations that benefit from structured and unified ways to develop and execute. They serve as a common framework for developers and promote good coding practices.

Source


They were not developed intentionally, they were instead created by trial and error and the prevalent ones are the ones that, by natural selection, were proven to be the best ones.
The Gang of Four, are the ones that wrote a book and set the SDP principles down, the book is called "Design Patterns - Elements of Reusable Object-Oriented Software". The two main principles are:

  • Program to an interface, not an implementation: Basically programming the classes in order for them to be implementable by other software, resuable and act as pieces of a bigger puzzle.
  • Favor composition over inheritance: Classes should implement other classes to complete their functionality, rather than inheriting from them.
There are a lot of desing patterns and not one is always the "correct" one, nonetheless, four main pattern types are defined:
  • Creational: Create objects on the go as they are being used.
  • Structural: The composition of objects is of most importance, mix and match to obtain new functionality.
  • Behavioral: Communication between objects is prioritized.
  • J2EE: Presentation layer.

Source: https://www.tutorialspoint.com/design_pattern/design_pattern_overview.htm

Software Design Patterns

Software Design Patterns are commonly used on object-oriented software development, they are previously defined methods to design and code programs, used commonly by experts and corporations that benefit from structured and unified ways to develop and execute. They serve as a common framework for developers and promote good coding practices.

Source


They were not developed intentionally, they were instead created by trial and error and the prevalent ones are the ones that, by natural selection, were proven to be the best ones.
The Gang of Four, are the ones that wrote a book and set the SDP principles down, the book is called "Design Patterns - Elements of Reusable Object-Oriented Software". The two main principles are:

  • Program to an interface, not an implementation: Basically programming the classes in order for them to be implementable by other software, resuable and act as pieces of a bigger puzzle.
  • Favor composition over inheritance: Classes should implement other classes to complete their functionality, rather than inheriting from them.
There are a lot of desing patterns and not one is always the "correct" one, nonetheless, four main pattern types are defined:
  • Creational: Create objects on the go as they are being used.
  • Structural: The composition of objects is of most importance, mix and match to obtain new functionality.
  • Behavioral: Communication between objects is prioritized.
  • J2EE: Presentation layer.

Source: https://www.tutorialspoint.com/design_pattern/design_pattern_overview.htm

Software Design & Software Architecture

These two parts are essential to software-making, they are sequential steps that ensure a program meets the specifications needed and solves a particular problem, let's start with Architecture.


Source

Software architecture deals with the abstraction part of design, it analyzes the problem and sets a methodolgy to solve it, commonly using blocks. The software architect must be very acquainted with the challenge that he is facing, along with the technologies that can be used to solve it. Nonetheless, the SA doesn't do coding, he gives the product owner a thorough analysis and the underlying structure of the program that must be made, including a design blueprint and the attributes and connections of each part that has to be implemented later.

Software Architecture is, in essence, delivering a structured solution to a problem.

Software Design, on the other hand, deals with the technical details of the implementation of the system. They take into account the environment, adapting the development process to it, incluiding software and hardware constraints. They design and guide the coding process, including testing and debugging, in order for the process to be orderly and ensure success.

Software Design creates the functional part of the archutecture plan.

Software Design & Software Architecture

These two parts are essential to software-making, they are sequential steps that ensure a program meets the specifications needed and solves a particular problem, let's start with Architecture.


Source

Software architecture deals with the abstraction part of design, it analyzes the problem and sets a methodolgy to solve it, commonly using blocks. The software architect must be very acquainted with the challenge that he is facing, along with the technologies that can be used to solve it. Nonetheless, the SA doesn't do coding, he gives the product owner a thorough analysis and the underlying structure of the program that must be made, including a design blueprint and the attributes and connections of each part that has to be implemented later.

Software Architecture is, in essence, delivering a structured solution to a problem.

Software Design, on the other hand, deals with the technical details of the implementation of the system. They take into account the environment, adapting the development process to it, incluiding software and hardware constraints. They design and guide the coding process, including testing and debugging, in order for the process to be orderly and ensure success.

Software Design creates the functional part of the archutecture plan.