Open source software

Open-source software (OSS) is computer software with its source code made available with a license in which the copyright holder provides the rights to study, change, and distribute the software to anyone and for any purpose.Open-source software may be developed in a collaborative public manner. Open-source software is the most prominent example of open-source development.

and example of this is Linux.

Software design patterns

 

software engineering, a software design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code. It is a description or template for how to solve a problem that can be used in many different situations. Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system.

What is software design?

Software design is the way the software is going to interact with the users and the way it is going to display your idea.

 

«Software design is the process by which an agent creates a specification of a software artifact, intended to accomplish goals, using a set of primitive components and subject to constraints.Software design may refer to either «all the activity involved in conceptualizing, framing, implementing, commissioning, and ultimately modifying complex systems» or «the activity following requirements specification and before programming»

Functional and non functional requirements

First we need to define each one:

An example of a functional requirement would be:

  • A system must send an email whenever a certain condition is met (e.g. an order is placed, a customer signs up, etc).

A related non-functional requirement for the system may be:

  • Emails should be sent with a latency of no greater than 12 hours from such an activity.

 

now we talk about the diferences between them:

In other words, a functional requirement will describe a particular behaviour of function of the system when certain conditions are met, for example: Send email when a new customer signs up” or “Open a new account”.

A functional requirement for an everyday object like a cup would be: ability to contain tea or coffee without leaking”.

Typical functional requirements include:

  • Business Rules
  • Transaction corrections, adjustments and cancellations
  • Administrative functions
  • Authentication
  • Authorization levels
  • Audit Tracking
  • External Interfaces
  • Certification Requirements
  • Reporting Requirements
  • Historical Data
  • Legal or Regulatory Requirements

 

In other words, a non-functional requirement will describe how a system should behave and what limits there are on its functionality.

Non-functional requirements generally specify the systems quality attributes or characteristics, for example: Modified data in a database should be updated for all users accessing it within 2 seconds.

A non-functional requirement for the cup mentioned previously would be: contain hot liquid without heating up to more than 45 °C”.

Typical non-functional requirements include:

  • Performance for example: response time, throughput, utilization, static volumetric
  • Scalability
  • Capacity
  • Availability
  • Reliability
  • Recoverability
  • Maintainability
  • Serviceability
  • Security
  • Regulatory
  • Manageability
  • Environmental
  • Data Integrity
  • Usability
  • Interoperability

Software Development Processes

this is a process to select and star to creat a software, this is very important because its the way we star to build up and to define what to do.

«In software engineering, a software development methodology (also known as a system development methodology, software development life cycle, software development process, software process) is a splitting of software development work into distinct phases (or stages) containing activities with the intent of better planning and management. It is often considered a subset of the systems development life cycle. The methodology may include the pre-definition of specific deliverables and artifacts that are created and completed by a project team to develop or maintain an application.»

Ethics in software engineering

This are the Ethics and a small explanation of what we can undestand of them.

1. PUBLIC – Software engineers shall act consistently with the public interest and shall be accsessible for all the persons and how they can interact.

2. CLIENT AND EMPLOYER – Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest.

3. PRODUCT – Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.

4. JUDGMENT – Software engineers shall maintain integrity and independence in their professional judgment.

5. MANAGEMENT – Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.

6. PROFESSION – Software engineers shall advance the integrity and reputation of the profession consistent with the public interest.

7. COLLEAGUES – Software engineers shall be fair to and supportive of their colleagues.

8. SELF – Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.

these are the more ethics and the way to work in this area

What is software engineering?

Software engineering is the application of engineering to the design, development, implementation, testing and maintenance of software in a systematic method.

The software engineering is an art.

«Art is a diverse range of human activities in creating visual, auditory or performing artifacts (artworks), expressing the author’s imaginative or technical skill, intended to be appreciated for their beauty or emotional power. In their most general form these activities include the production of works of art, the criticism of art, the study of the history of art, and the aesthetic dissemination of art.»

 

So we can assume say that is an art because we create a way to interact with people and generate feelings.

 

Unified Modeling Language

diagrama.pngThe Unified Modeling Language (UML) is a general-purpose, developmental, modeling language in the field of software engineering, that is intended to provide a standard way to visualize the design of a system.

UML was originally motivated by the desire to standardize the disparate notational systems and approaches to software design developed by Grady Booch, Ivar Jacobson and James Rumbaugh at Rational Software in 1994–95, with further development led by them through 1996.

In 1997 UML was adopted as a standard by the Object Management Group (OMG), and has been managed by this organization ever since. In 2005 UML was also published by the International Organization for Standardization (ISO) as an approved ISO standard. Since then it has been periodically revised to cover the latest revision of UML.

Though well-known and widely used in education and academic papers, as of 2013 UML is little-used in industry, and most such use is informal and ad hoc.

What is software architecture?

example:

 

Architecture.jpgSoftware application architecture is the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability. It involves a series of decisions based on a wide range of factors, and each of these decisions can have considerable impact on the quality, performance, maintainability, and overall success of the application.

Like any other complex structure, software must be built on a solid foundation. Failing to consider key scenarios, failing to design for common problems, or failing to appreciate the long term consequences of key decisions can put your application at risk. Modern tools and platforms help to simplify the task of building applications, but they do not replace the need to design your application carefully, based on your specific scenarios and requirements. The risks exposed by poor architecture include software that is unstable, is unable to support existing or future business requirements, or is difficult to deploy or manage in a production environment.

Software life-cycle

It describes the development of software, from the beginning to end. Its purpose is to define the intermediate phases in order to validate the application development. Thus, to ensure that the software meets the requirements for the implementation and verification of development procedures: it ensures that the methods used are appropriate.

This programs are implemented due to the fact that it is very expensive to fix an error that are identified in the late implementation phase. The software life-cycle helps to identify the errors as soon as possible; this helps the developers, so they can focus on quality of the software.