Design it like one of your french modules

550x-draw-me-like-one-of-your-french

Software design is the first step in SDLC (Software Design Life Cycle), which moves the concentration from problem domain to solution domain. It is the process of defining the overall structure and interaction of code so that it will satisfy the user’s requirements using modularization, a technique to divide a software system into multiple discrete and independent modules capable of carrying out tasks independently.

The design should include the hardware, databases, APIs and third party frameworks the software will use or interact with.

Architectural -identifies the software as a system with many components interacting with each other.

High-level  – how the system & its components can be implemented in forms of modules.

Detailed –  towards modules and their implementations.

The output of software design process is design documentation, pseudo codes, detailed logic diagrams, process diagrams, and detailed description of all functional or non-functional requirements.

The next phase, which is the implementation of software, depends on all outputs mentioned above.

RESOURCES: TutorialsPoint


All you need is requirements

6471739593_8ec4276428_b
via Flickr

Requirements, requirements, requirements, requirements, requirements, requirements

There’s nothing you can do that can’t be done.
Nothing you can elicit that can’t be elicited.
Nothing you can say, but you can specify
How to play the game
It’s easy.

Every engineering system must be specified, based on user requirements. Elicitation is the practice of collecting this requirements.

Requirements need to be explicitly stated and documented for system implementation, they are the descriptions of the system services that the customer requires from it and constraints under which it operates. Software Requirement Specification or SRS is a document created after the requirements are collected and defines how the intended software will interact with hardware, external interfaces, speed of operation, response time of system, portability of software across various platforms, maintainability, speed of recovery after crashing, Security, Quality, Limitations etc.

There are two types: user requirements and system requirements; they can also be either functional, involving the interaction between a system and its environment, or nonfunctional, which involves the restriction on the system that limits our choices for constructing a solution.

RESOURCES: Carleton


When life closes a door, it opens a source

 

window-with-clouds-background_1160-173
Designed by FreePik

 

Some software has source code that only the person, team, or organization who created it—and maintains exclusive control over it—can modify. People call this kind of software “proprietary” or “closed source” software. Only the original authors of proprietary software can legally copy, inspect, and alter that software.

Open source software is different. Its authors make its source code available to others who would like to view that code, copy it, learn from it, alter it, or share it.  Open source technology and open source thinking both benefit programmers and non-programmers.

People prefer open source software to proprietary software for a number of reasons, including:

Control.  They can examine the code to make sure it’s not doing anything they don’t want it to do, and they can change parts of it they don’t like.

Training. Students can easily study it as they learn to make better software. Students can also share their work with others, inviting comment and critique, as they develop their skills.

Security. Because so many programmers can work on a piece of open source software without asking for permission from original authors, they can fix, update, and upgrade open source software more quickly than they can proprietary software.

Stability.  Because programmers publicly distribute the source code for open source software, it won’t disappear if their original creators stop working on them.

Open source can not only be a way to develop and license computer software, but also an attitude. Approaching all aspects of life “the open source way” means expressing a willingness to share, collaborating with others in ways that are transparent, embracing failure as a means of improving, and expecting—even encouraging—everyone else to do the same.

RESOURCES: OpenSource.com


It is fun to stay at the UML

photo1017089474950178736
Dafne Medina, Santiago Kelley & Juan Pablo Ramirez

UML is a standard language for specifying, visualizing, constructing, and documenting the artifacts of software systems. It was created by Object Management Group and UML 1.0 specification draft which was proposed to the OMG in January 1997.

They are standardized diagram types to help you describe and visually map a software system’s design and structure. UML makes it possible to model just about any kind of application, both specifically and independently of a target platform, as it provides elements and components to support the requirement of complex systems, following the object oriented concepts and methodology.

Different diagrams are used for different type of UML modeling. There are three important type of UML modeling: Structural, Behavioral and Architectural.

Structural modeling captures the static features of a system and represents the framework for the system, but it never describes the dynamic behavior of the system.

car_diagram
via GalleryHip

Behavioral model describes the interaction in the system. It represents the interaction among the structural diagrams and shows the dynamic nature of the system.

article-2679990-1f5e589700000578-709_634x333
via DailyMail

Architectural model represents the overall framework of the system. It contains both structural and behavioral elements of the system. Architectural model can be defined as the blueprint of the entire system. Package diagram comes under architectural modeling.

engine-01
via AnimaGraffs

RESOURCES: TutorialsPoint


JUnit

Testing is the process of checking the functionality of an application to ensure it runs as per requirements. JUnit is a java library for unit testing, which comes into picture at the developers’ level; it is the testing of single entity (class or method) and can be done in two ways − manual testing and automated testing.

JUnit promotes the idea of “first testing then coding”, which emphasizes on setting up the test data for a piece of code that can be tested first and then implemented. This approach is like “test a little, code a little, test a little, code a little.” It increases the productivity of the programmer and the stability of program code, which in turn reduces the stress on the programmer and the time spent on debugging.

A Unit Test Case is a part of code, which ensures that another part of code (method) works as expected. To achieve the desired results quickly, a test framework is required and JUnit is perfect for that.

A formal written unit test case is characterized by a known input and an expected output, which is worked out before the test is executed. The known input should test a precondition and the expected output should test a post-condition.

There must be at least two unit test cases for each requirement − one positive test and one negative test. If a requirement has sub-requirements, each sub-requirement must have at least two test cases as positive and negative.

RESOURCES:

TutorialsPoint


The Functional and Non-functional iceberg

For the success of a project, it’s requirements need to be well thought out, balanced and clearly understood. This understanding involves the comprehension of the differences between functional and non-functional requirements.

Functional requirements specify a vehaviour or function of the system.

Some of the more 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

 

Non-functional requirements describe how the system works and should behave.

Some typical non-functional requirements are:

  • Performance – for example Response Time, Throughput, Utilization, Static Volumetric
  • Scalability
  • Capacity
  • Availability
  • Reliability
  • Recoverability
  • Maintainability
  • Serviceability
  • Security
  • Regulatory
  • Manageability
  • Environmental
  • Data Integrity
  • Usability
  • Interoperability

iceberg-poster-300x200


Method came in like a Waterfall

Is a linear sequential Life Cycle Model, in which each phase is completed in order, there is no overlapping, and at the end of each a review is done.

The process consists of stateting requirements, analyze them, designing a solution or approach, architect a software framework for that solution, develop code, test, deploy, and maintaining.

This kind of method allows departmentalization and is very helpful for small projects without uncertain requirements.

RESOURCES:

TutorialsPoint

imagen1
Image from HubSpot

The stairway to Software Development Process

imagen1
Based on Led Zeppelin’s Stairway to Heaven


A structure imposed on the development of a software product that consists of splitting the work into different phases of activities for better planning and management.

They are composed of many activities, mainly:

Requirement analysis –  of a desired software product.

Specification – is the task of precisely describing the software to be written.

Software Architecture – refers to an abstract representation of that system.

Implementation – reducing a design to code.

Testing – of parts of software.

Documentation – of the internal design of software for future maintenance and enhancement.

Training & Support – so te software can be put to use efficiently.

Maintenance – and enhance of software to cope with newly discovered problems or requirements.


SCM Software Configuration Management

What?

SCM is a software engineering discipline consisting of standard processes and techniques often used by organizations to manage the changes introduced to its software products. SCM helps to eliminate the confusion often caused by miscommunication among team members. The SCM system controls the basic components such as software objects, program code, test data, test output, design documents, and user manuals.

Who?

The Software Engineering Institute (SEI) advocated a standard definition for CM oriented to software, broadening the definition of the Institute of Electrical and Electronics Engineers (IEEE) and the guidelines of the International Organization for Standardization (ISO).

Why?

Is software engineering practices associated with software configuration management offer a number of opportunities to address requirements found International  Standard, ISO 9001. From management perspective, the principles and practices of  CM represent an accepted and understood foundation for improving the efficiency and of these process. (Configuration Management and ISO 9000, Bamford, William).

Where?

Configuration Management originated in the United States Department of Defense in the 1950s as a technical management discipline for hardware material items and it is now a standard practice in virtually every industry. The CM process became its own technical discipline sometime in the late 1960s when the DoD developed a series of military

When?

The need for formalizing and taking SCM seriously, arose when rightly named “Software Crisis” was identified back in late 70s and early 80s. Only after the 80’s the SCM was allowed to grow as an autonomous entity from traditional CM.

How?

The first SCM systems of early 80s were developed in house and their primary focus was on file control. Most of them were built as a set of Unix scripts over RCS (a simple version control tool) and Make (for derived object control).

Metadata?

Metadata is structured information that describes, explains, locates,

Continue reading "SCM Software Configuration Management"