Software Requirements

As in every task or homework, and even a hobby, there are requirements to follow. However, in software development, we have two main type of requirements: functional and non-functional. The concept is defined within itself, but instead of going meta, I’ll explain it for you.

Functional requirements are requests for specific functions or features, and non-functional requirements are additional characteristics for the software such as added security, efficiency and some other features that might be useful.

If you still have questions, do not hesitate on watching this cool video from Udacity tutors.


Waterfall Development

Just as ASD (Agile Software Development), the waterfall model for software development gets the job done. The question is: How?  Unlike ASD development, this methodology is sequential, you can’t skip one step just like that, you’ll need thousands of reasons to do it. Waterfalls always flow from top to bottom, and it is the same way in the technical concept.  There are five main stages in the waterfall methodology:plainicon-com-45868-512px

  • Requirements
  • Design
  • Implementation
  • Verification
  • Maintenance

As you can see, the stages are basically the same as in ASD. But the difference is that it is sequential. In this context, sequential means much more than just a structure. It paves the way of the development. I consider this methodology to be excessively sequential. When an stage is over or completed, once you step on the next phase, you never go back. That means that in order to step into the design phase, the project requirements must be heavily specified, because as I said, there is no turning back.

There are a few situations in which is better to use Waterfall methodology, according to Base36 Inc., these are the top three situations:

1. When there is a clear picture of what the final product should be.

2. When clients won’t have the ability to change the scope of the project once it has begun.

3. When definition, not speed, is key to success.

Credits to: PlainIcon.com and WallPaperSafari.com


Software Development Processes

A software development process or life cycle is a structure imposed on the development of a software product. There are several models for such processes, each one of them describing an approach to a variety of tasks or activities that take place during the development process. There are different points of view depending on the customer’s and project needs.

For example, the Capability Maturity Model, is focused on how mature the software is. Then there is the agile development process, which I described here. Another one is called the waterfall process, which you can read in here, too.

There are tons of SDPs that you can use in order to successfully complete a project. You can choose between them by establishing priorities depending not only on your customer, but also taking into account you and your team’s working style.


SCM- Where ?

Since the beginning of the SCM concept, the storage for this has been always registered. For example, in the early software history, the records were written in punch cards or magnetic tape. Nowadays, and since the exponential growth of cloud services, revision history, teamwork, and process management is available to almost anyone and anywhere.

In the case of revision history and progress tracking, powerful tools such as GitHub which is mainly powered by Git, a version control system. Several powerful tools for different purposes make up an environment of SCM.

You can keep reading on Diego Gracia’s blog.


Agile Software Development

Agile Software Development is an umbrella term for a set of methods and practices based on the values and principles expressed in the Agile Manifesto.
Solutions evolve through collaboration between self-organizing, cross-functional teams utilizing the appropriate practices for their context.

  • The satisfaction of the customer must be guaranteed throughout all the development process.
  • Change is a key of the ASD, developers must be capable of changing and adapting to the customer’s needs.
  • Deliver new releases frequently.
  • A friendly environment must be present between business people and the devteam.
  • Promote motivation among all individuals involved.
  • In order to be efficient, the communication must be face-to-face.
  • Progress is measured by stable and working releases.
  • There must be sustainable development by keeping a constant pace between sponsors, developers and users.
  • There is constant attention to provide technical excellence.
  • Keep things simple.Period.
  • The devteam must be sustainable and self-organizing.
  • Everyone involved learns from their mistakes and move on.

As everything in this world, ASD was criticised. There was an anti-agile movement called the Dark Manifesto for ASD. You can read it here.

It was also heavily criticised by Aaron Gray because of the working environment of ASD, in this critic, the author establishes that people is not always willing to work, or the team might not be so motivated to work in a team, and rather prefer to work alone.  The biggest argument is that programming or coding is not measurable, because of the environment uncertainty.

Written by Miguel Cabral and Juan Pablo Ramírez

 

 

 


The Software Lifecycle

As everything in this planet, software also has a certain lifecycle. It is commonly composed of five main stages. Each of the stages has an specific purpose. There are several diagrams of the software lifecycle, most of them have more than five stages. But the way they are categorized, results in the five main categories. Which are the following:

  • Analysis of requirements:
    • This phase involves the relation between the development team and the customer. During this phase the project team builds a quick draft according to the customers’ needs.
  • Design
    • During this stage of the cycle, the project team is in charge of establishing requirements, protocols and more technical stuff. It also involves the planning of the following stages troughout a timeline based on customers’ requirement.
  • Implementation
    • This is where most of the projects takes place. Troughout this stage, the software is being built and, sometimes, shown to the customers in order to show progress and also to check that everything is in order.
  • Testing
    • When implementation is finished, tests must be held in order to check that it complies with every initial requirement. During these period, there are two main testing stages, alpha and beta testing.
      During alpha testing, the software is only deployed locally with the dev-team. Once the software finishes with the alpha testing, it proceeds to beta testing. The latter involves a public distribution of the software, during these tests, the release is much more stable, but it is intended to obtain more feedback about bugs, and overall performance.
  • Evolution
    • In this last stage, the software is updated with new features or bug removals. This evolution must be in accordance the different growing requirements of the customer.

It is really important that these five steps are repeated the way a cycle does. Every evolution or a new

sdlc-gone-wrong
Continue reading "The Software Lifecycle"

Software Engineering Code of Ethics

Julia

The industry of Software Engineering is getting bigger and bigger each day, all around the world programmers are getting filled of new ideas and attempt to give something innovative to people. With such a large community  like this, keeping a good relationship between coders and society is really important. So, we all agree that it wasn’t a bad idea (actually, it was pretty good) to create a Code of Ethics for software engineers.

ja

The Code of Ethics was developed by the ACM and the Computer Society with the purpose of instructing programmers about what the society expects from them. But if we’re going to talk about ethics, first we must know the definition on ethics, right? Well, ethics is “an area of study that deals with ideas about what is good and bad behavior”.

We believe that every mature person has an idea of what’s good and bad; so why do we need our…

View original post 387 more words


History of Software Engineering

The term of SE was firstly mentioned during the NATO conference on software. It was on 1968 where they first mentioned it. During that conference, a discussion aroused about the procedures of SE. But this was only the concept, throughout the following decades, companies started to innovate in SE. They started producing new and more powerful tools for Software Engineers to use. These were not only new programming languages, but also more and more fields of action.

Since then, lots of companies have been created just for the sole purpose of helping and supporting Software Engineering. One of them is the Software Engineering Institute, which was created on 1984.

carnegie_mellon_software_engineering_institute
Carnegie Mellon SEI by Chameleon131 CC GNU

 

It is focused on R&D and it is working along U.S. Government to deliver high quality products for U.S. Department of Defense, civilian government, and industry organizations.

 

This is just one of many organisations that work just for keeping this world running with the current pace that we live in.

 

 


Discussion about Software Engineering

 

So, what is software engineering ?

In accordance to our discussion group, we’ve agreed upon a single concept for software engineering. Software engineering is way much more than applying the principles of engineering to the software development field, it also involves coding, but again this is just the tip of the iceberg. “True software engineering has a well-articulated life cycle.”

software-engineering-internship-4-1024x682
Fotografía obtenida de: http://blog.aftercollege.com/wp-content/uploads/2015/12/software-engineering-internship-4-1024×682.jpg

Also, software engineers are involved in design and development of software. That includes operating systems, and every type of software. SE involves five main steps:

  1.  Analysis of project requirements
  2. Draft and design of the implementation
  3. Implementation
  4. Testing
  5. Delivery and Evaluation

And, as stated before, SE is not only about coding, is about making a piece of software efficient and reliable in every possible way.

 

20160816_093331

Floreth González
Germán Treviño
Carlos Pedraza Vázquez
Juan Pablo Ramírez Guerra


TIL about Software Engineering

Today I’ve dedicated some time to research, but more important, learn, about software engineering. According to ACM, software engineering (SE) is about developing reliable and efficient pieces of software and always taking into account requirements from the customers.

Software engineering (SE) is concerned with developing and maintaining software systems that behave reliably and efficiently, are affordable to develop and maintain, and satisfy all the requirements that customers have defined for them.


As almost everyone in this course, I just googled for software engineering. In the results, I was amazed when I stumbled upon a WikiHow page with the title How to Become a Software Engineer: 12 Steps (with Pictures) . At this moment I thought: are there steps to follow, in order to be someone ? 

I think the only steps you can take in order to be a SE are the ones you set for yourself; but then they won’t be steps, they would be goals. After that, I was thinking about what you really need in order to be a SE. Currently, there is a huge debate whether SE is a craft or an engineering discipline. I think it is some sort of both because you first need the artisan stuff: dedication, passion, and even some sort of devotion and technique. And that’s where the engineering discipline takes place. You need to learn stuff and even more important learn how to apply all of that knowledge in order to build and develop reliable and efficient pieces of software.

After all, for me, it is a combination between art, and science. Art or crafting, as you all might think, is subjective. Science, in the other hand, is not. So, in my opinion:

SE is a way to leave an artistic signature in something as cool as software.