What is software design?

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 usually involves problem solving and planning a software solution. This includes both a low-level component and algorithm design and a high-level, architecture design.

Usage

It may be reviewed or presented to allow constraints, specifications and even requirements to be adjusted prior to computer programming. It is possible to design software in the process of programming, without a plan or requirement analysis, but for more complex projects this would not be considered feasible. A separate design prior to programming allows for multidisciplinary designers and Subject Matter Experts (SMEs) to collaborate with highly skilled programmers for software that is both useful and technically sound.

Reference:

https://en.wikipedia.org/wiki/Software_design#Modeling_language

flickr photo by qthomasbower https://flickr.com/photos/qthomasbower/2694697816 shared under a Creative Commons (BY-SA) license


Software 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.

Importance:

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.

Goals:

The architecture should:

  • Expose the structure of the system but hide the implementation details.
  • Realize all of the use cases and scenarios.
  • Try to address the requirements of various stakeholders.
  • Handle both functional and quality requirements.

 

Reference:

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


Software design pattern

It is:

  • A General repeatable solution to a commonly occurring problem in software design.
  • A description or template for how to solve a problem that can be used in many different situations.

It is not:

  • A finished design that can be transformed directly into code.

Uses of Design Patterns

Design patterns can speed up the development process by providing tested, proven development paradigms. Effective software design requires considering issues that may not become visible until later in the implementation.

Creational design patterns

These design patterns are all about class instantiation. This pattern can be further divided into class-creation patterns and object-creational patterns.
Structural design patterns

These design patterns are all about Class and Object composition. Structural class-creation patterns use inheritance to compose interfaces. Structural object-patterns define ways to compose objects to obtain new functionality

Behavioral design patterns

These design patterns are all about Class’s objects communication. Behavioral patterns are those patterns that are most specifically concerned with communication between objects.

 

Reference:

https://sourcemaking.com/design_patterns

flickr photo by Mathias Appel https://flickr.com/photos/mathiasappel/9035208079 shared under a Creative Commons (CC0) license


Unified Modeling Language (UML)

Unified Modeling language (UML) is a standardized modeling language enabling developers to specify, visualize, construct and document artifacts of a software system. UML is an important aspect involved in object-oriented software development. It uses graphic notation to create visual models of software systems.

A fully executable UML can be deployed to multiple platforms using different technologies and can be used with all processes throughout the software development cycle.

In addition, it supports high level development concepts such as frameworks, patterns and collaborations. UML includes a collection of elements such as:

  • Programming Language Statements
  • Actors: specify a role played by a user or any other system interacting with the subject.
  • Activities: These are tasks, which must take place in order to fulfill an operation contract. They are represented in activity diagrams.
  • Business Process: includes a collection of tasks producing a specific service for customers and is visualized with a flowchart as a sequence of activities.
  • Logical and Reusable Software Components

modeloertarea

UML diagrams represent static and dynamic views of a system model.

uml1 uml2

 

A wide variety of UML modeling tools are available to simplify the modeling process, including IBM Rational Rose, Rational Rhapsody, MagicDraw UML, StarUML, ArgoUML, Umbrello, BOUML, PowerDesigner and Dia.

 

References:

https://www.techopedia.com/definition/3243/unified-modeling-language-uml

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


Requirements Elicitation and Specification

Requirements elicitation is the practice of collecting the requirements of a system from users, customers and other stakeholders.

Requirements elicitation is non-trivial because you can never be sure you get all requirements from the user and customer by just asking them what the system should do OR NOT do.

Requirements elicitation practices include:

  • Interviews
  • Questionnaires
  • User observation
  • Workshops
  • Brainstorming
  • Use cases
  • Role playing
  • Prototyping

Requirements elicitation is a part of the requirements engineering process, usually followed by analysis and specification of the requirements.

 

References:

https://en.wikipedia.org/wiki/Requirements_elicitation

flickr photo by Laurithacrys https://flickr.com/photos/laurithacrys/5857146856 shared under a Creative Commons (BY) license


Functional vs Non Functional Requirements

If there is any one thing any project must have in order not to be doomed to failure, is a collection of both the functional and non-functional requirements. Any project’s requirements need to be well thought out, balanced and clearly understood.

A functional requirement is that it essentially specifies something the system should do.

Typically, functional requirements will specify a behavior or function, for example:
“Display the name, total size, available space and format of a flash drive connected to the USB port.

A functional requirement for a milk carton would be “ability to contain fluid without leaking”
A functional requirement for a milk carton would be “ability to contain fluid without leaking”

Non-functional requirement essentially specifies how the system should behave. It also specify the system’s ‘quality characteristics’ or ‘quality attributes’.

A non-functional requirement for a hard hat might be “must not break under pressure of less than 10,000 PSI”
A non-functional requirement for a hard hat might be “must not break under pressure of less than 10,000 PSI”

Non-functional requirements cover all the remaining requirements which are not covered by the functional requirements.

Difference: non-functional requirements describe how the system works, while functional requirements describe what the system should do.

 

References:

http://reqtest.com/requirements-blog/functional-vs-non-functional-requirements/

http://www.studying-in-canada.org/wp-content/uploads/2014/08/Studying-Canada-Admission-Requirements-700×420.jpgl

 

 


APIs

Application program interface (API) is a set of routines, protocols, and tools for building software applications. good API makes it easier to develop a program by providing all the building blocks. A programmer then puts the blocks together.

With APIs we can connect to the WinAPI, the DBMS or with Jabber/XMPP.  We can also use existing code in another software. In this way, we reuse code that is already proved and well used. There are many different types of APIs for operating systems, applications or websites.

API Examples

1.Google Maps API: Google Maps APIs lets developers embed Google Maps on webpages using a JavaScript or Flash interface.

2087059942_326ec23b28_m

2. YouTube APIs: YouTube API: Google’s APIs lets developers integrate YouTube videos and functionality into websites or applications.

6269571360_1271796275_m

3. Flickr API: The Flickr API is used by developers to access the Flick photo sharing community data.

136007521_3149705f2e_m

4. Twitter APIs: The REST API allows developers to access core Twitter data and the Search API provides methods for developers to interact with Twitter Search and trends data.

9775119174_461386fac4_m

5.  Windows APIs sets: When you copy and paste text from one application to another, it is the API that allows that to work.

In conclusion, APIs simplify everything by limiting outside program access to a specific set of features. APIs define how a program will interact with the rest of the software world—saving time and resources.

 

References:

http://www.webopedia.com/TERM/A/API.html

http://101.apievangelist.com/


Waterfall Method

The Waterfall Model was first Process Model to be introduced. Each phase must be completed before the next phase can begin and there is no overlapping in the phases.

The sequential phases in Waterfall model are:

  • Requirement Gathering and analysis:All possible requirements of the system to be developed are captured in this phase and documented in a requirement specification doc.
  • System Design:It helps in specifying hardware and system requirements and also helps in defining overall system architecture.
  • Implementation:With inputs from system design, the system is first developed in units.
  • Integration and Testing:All the units developed in the implementation phase are integrated into a system after testing of each unit.
  • Deployment of system: The product is deployed in the customer environment or released into the market.
  • Maintenance:Maintenance is done to deliver these changes in the customer environment.

Image:

flickr photo by MightyBoyBrian https://flickr.com/photos/mightyboybrian/7005401381 shared under a Creative Commons (BY-NC) license

Reference:

http://www.tutorialspoint.com/sdlc/sdlc_waterfall_model.htm

 

 


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. The most popular agile methodologies include Extreme Programming (XP), Scrum, Crystal, Dynamic Systems Development Method (DSDM), Lean Development, and Feature-Driven Development (FDD).

While each of the agile methodologies is unique, they all share a common vision. They all fundamentally incorporate iteration and the continuous feedback that it provides to successively refine and deliver a software system. They all involve continuous planning, continuous testing and continuous integration. They are all lightweight and inherently adaptable. The most important thing about agile methods is that they all focus on empowering people to collaborate and make decisions together quickly and effectively.

agile101-software-dev-300x200 (1)

A little bit of agile background

The term “Agile” was applied in early 2001 when 17 software development practitioners gathered in Utah to discuss their shared ideas and various approaches to software development. The Agile Alliance was formed shortly after this gathering to encourage practitioners to further explore and share ideas and experiences.

References:

https://www.versionone.com/agile-101/

https://www.agilealliance.org/agile101/what-is-agile/

Images:

https://www.versionone.com/wp-content/uploads/2015/06/agile101-software-dev-300×200.gif

https://openwebinars.net/media/featured_images/metodologia-agile.png


Software Development Processes

Software Development Processes

Software development processes describe phases of the software cycle and the order in which those phases are executed. It is important to have some steps that guide us in every software development.

There are the phases in every Software development processes:

1) Requirement gathering and analysis:  Business requirements are gathered in this phase. Meetings with managers, stake holders and users are held in order to determine the requirements.  After requirement gathering these are analyzed for their validity and the possibility of incorporating them in the system.

2)  Design:  The system and software design is prepared from the requirement specifications.

3)  Implementation / Coding:  On receiving system design documents, the work is divided in modules/units and actual coding is started.

4)  Testing:  After the code is developed it is tested against the requirements to make sure that the product is actually solving the needs addressed and gathered during the requirements phase.

5)  Deployment: After successful testing the product is delivered / deployed to the customer for their use.

6) Maintenance: Is the process where the care is taken for the developed product.

software_del_lifecycle

References:

http://es.slideshare.net/RiantSoft123/6-basic-steps-of-software-development-process

http://istqbexamcertification.com/what-are-the-software-development-life-cycle-sdlc-phases/

Images: http://www.rnc-inc.com/software/images/software_del_lifecycle.jpg

https://www.synapseindia.com/UserFiles/6-steps-to-succsess(1).jpg