Software engineering, craft or an engineering discipline?
Software development and design is part art and part science, it can be understood as a systematic approach to the analysis, design, assessment, implementation, test, maintenance and reengineerig of software, that is, the application of engineering to software. In the Software engineering approach, several models for the software life cycle are defined, and many methodologies for the definition and assessment of the different phases of a life-cycle model
History of Software Engineering
The term Software Engineering became known after a conference in 1968, when the difficulties and pitfalls of designing complex systems were frankly discussed. A search for solutions began. It concentrated on better methodologies and tools. The most prominent were programming languages reflecting the procedural, modular, and then object-oriented styles. Software engineering is intimately tied to their emergence and improvement. Also of significance were efforts of systematizing, even automating program documentation and testing. Ultimately, analytic verification and correctness proofs were supposed to replace testing. More recently, the rapid growth of computing power made it possible to apply computing to ever more complicated tasks. This trend dramatically increased the demands on software engineers. Programs and systems became complex and almost impossible to fully understand. The sinking cost and the abundance of computing resources inevitably reduced the care for good design (Wirth, N, 2008).
Ethics in software engineering
Software engineers shall commit themselves to making the analysis, specification, design, development, testing and maintenance of software a beneficial and respected profession. In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight Principles:
SDLC is a process followed for a software project, within a software organization. It consists of a detailed plan describing how to develop, maintain, replace and
Verification and validation is the generic name given to checking processes which ensure that the software conforms to its specification and meets the needs of the customer.The system should be verified and validated at each stage of the software development process using documents produced in earlier stages. Verification and validation thus starts with requirements reviews and continues through design and code reviews to product testing.Verification and validation are sometimes confused, but they are different activities (SQA, n.d.).
The difference between the two can be summarised as follows:
Validation: Are we building the right product?
Verification: Are we building the product right?
The process of evaluating work-products (not the actual final product) of a development phase to determine whether they meet the specified requirements for that phase.
The process of evaluating software during or at the end of the development process to determine whether it satisfies specified business requirements.
To ensure that the product is being built according to the requirements and design specifications. In other words, to ensure that work products meet their specified requirements.
To ensure that the product actually meets the user’s needs, and that the specifications were correct in the first place. In other words, to demonstrate that the product fulfills its intended use when placed in its intended environment.
Are we building the product right?
Are we building the right product?
Plans, Requirement Specs, Design Specs, Code, Test Cases
The actual product/software.
Every testing execution should follow some sequence and V Model is the perfect way to perform the testing approaches. In V Model there are some steps or sequences specified which should be followed during performing test approach. Once one step completes we should
User Interface Design focuses on anticipating what users might need to do and ensuring that the interface has elements that are easy to access, understand, and use to facilitate those actions. UI brings together concepts from interaction design, visual design, and information architecture (usability.gov, n.d.).
A brief history:
Keep it simple, Simple UI design means that anyone can have access to very sophisticated applications. When applications are well designed, there is no price for access. You may have to pay for the application, but you don’t have to spend time learning how to use it. Google has given everyone access to unbelievable amounts of information, Amazon to an amazing number of products, and Facebook to virtually everyone on the Internet (Green, 2015). This idea of simplicity as a selling point clashes with the old thinking of constantly adding new features to your product in order to make it more appealing to your customers.
What about the process?
What is the diference of UX and UI? Well UX Design refers to the term User Experience Design, while UI Design stands for User Interface Design. Both elements are crucial to a product and work closely together. But despite their professional relationship, the roles themselves are quite different, referring to very different parts of the process and the design discipline. Where UX Design is a more analytical and technical field, UI Design is closer to what we refer to as graphic design, though the responsibilities are somewhat more complex (Lamprecht, 2016).
Software maintenance is defined as the process of modifying a software system or component after delivery to correct faults, improve performance or other attributes, or adapt to a changed environment (NCSU, n.d.)
Reasons of doing it? Well, software is a model of reality and reality changes. If software is found to be useful, satisfied users want to extend the functionality of the system. Software is much cheaper to change than hardware. As a result, changes are made in software wherever possible. Successful software survives well beyond the lifetime of the hardware for which it was written. Software need to be modified to run on new hardware and operating system.
There are some types of maintenance based on their characteristics:
Corrective Maintenance – This includes modifications and updates done in order to correct or fix problems, which are either discovered by user or concluded by user error reports.
Adaptive Maintenance – This includes modifications applied to keep the software product up-to date and tuned to the ever changing world of technology and business environment.
Perfective Maintenance – This includes updates done in order to keep the software usable over long period of time. It includes new features, new user requirements for refining the software and improve its reliability and performance.
Preventive Maintenance – It aims to attend problems, which are not significant at this moment but may cause serious issues in future.
Developers love building new things. The excitement, however, seems to wane once the project is done and out in the wild. Fighting the urge to move on to the Next Great Thing, this talk cover aspects of maintaining a project. Starting with the initial project setup, then moving into the issues surrounding ongoing work, refactoring, balancing feature requests and keeping clean,
Open source refers to any program whose source code is made available for use or modification as users or other developers see fit. Open source software is usually developed as a public collaboration and made freely available (Rouse, 2009).
The principles of these idea are written in “The Open Source Definition”, which is a document published by the Open Source Initiative, to determine whether a software license can be labeled with the open-source certification mark. The definition was based on the Debian Free Software Guidelines, written and adapted primarily by Bruce Perens with input from Eric S. Raymond and others (Wikipedia, n.d.).
Linux is the best-known and most-used open source operating system. As an operating system, Linux is software that sits underneath all of the other software on a computer, receiving requests from those programs and relaying these requests to the computer’s hardware (opensource.com, n.d.).
The Linux Foundation
OpenSource.com (n.d.). What is Linux. opensource.com. Retrieved from: https://opensource.com/resources/what-is-linux
Rouse, M. (May 2009). Open Source. Tech Target. Retrieved from: http://searchenterpriselinux.techtarget.com/definition/open-source
Wikipedia (n.d.). The Open Source Definition. Wikipedia. Retrieved from: https://en.wikipedia.org/wiki/The_Open_Source_Definition
Software testing is a process of rating properties of a computer system /program to decide whether it meets the specified requirements and produces the desired results. In process, you identify bugs in software product/project (Guru99, 2014).
You might want to think about some types of software testing:
Static testing can find bugs without executing code! It’s done during verification process. Documents and source code are reviewed. All this in terms of walkthrough, inspection, etc.
Dynamic testing includes actual execution of the code. It’s done during validation process. All this in terms of unit testing, integration, system testing, etc.
With countless types of software testing, it can be daunting to figure out what you should focus on and when.
Types of Software Testing (Singh, 2011).
Guru99. (2014). Software Testing As a Career – Complete Guide. Guru99. Retrieved from: http://www.guru99.com/software-testing-career-complete-guide.html
Singh, R. (3 June 2011). Types of Software Testing. Optimus Information. Retrieved from: http://www.optimusinfo.com/types-of-software-testing/
Named after their inventor Adelson, Velski & Landis, AVL trees are height balancing binary search tree. AVL tree checks the height of the left and the right sub-trees and assures that the difference is not more than 1. This difference is called the Balance Factor (Tutorialspoint, n.d.).
To balance itself, an AVL tree may perform the following four kinds of rotations −
The first two rotations are single rotations and the next two rotations are double rotations. To have an unbalanced tree, we at least need a tree of height 2. With this simple tree, let’s understand them one by one.
Tutorialspoint. (n.d.). Data Structure and Algorithms – AVL Trees. Tutorialspoint. Retrieved from: https://www.tutorialspoint.com/data_structures_algorithms/avl_tree_algorithm.htm
The GIF was invented in 1989. And since its beginning, the GIF has been used to make money. At first, GIFs were sold as placeholders for the web of the ’90s and early 2000s. But after web design became informed by professional standards, gifs lost their role as placeholders. Eventually they became tools of expression, turning snippets of video from popular culture into bite size communication devices. Today, a few big tech companies are trying to capitalize on this new use of GIFs, partnering with brands who want their content to be used as communication (VOX, 2016).
Stands for “Graphics Interchange Format.” GIF is an image file format commonly used for images on the web and sprites in software programs. Unlike the JPEG image format, GIFs uses lossless compression that does not degrade the quality of the image. However, GIFs store image data using indexed color, meaning a standard GIF image can include a maximum of 256 colors (Rouse, 2006).
The multiple images within a single GIF file are displayed in succession to create an animated clip or a short movie. By default, animated GIFs display the sequence of images only once, stopping when the last image or frame is displayed, although it can also loop endlessly or stop after a few sequences (William 2016).
Design patterns are optimized, reusable solutions to the programming problems that we encounter every day. A design pattern is not a class or a library that we can simply plug into our system; it’s much more than that. It is a template that has to be implemented in the correct situation (Bautista, 2010).
The Gang of Four are the authors of the book, “Design Patterns: Elements of Reusable Object-Oriented Software”. This important book describes various development techniques and pitfalls in addition to providing 23 object-oriented programming design patterns (Carr, 2009).
Gof design patterns (Vaka, 2013).
When To Use Software Design Patterns (Hegoda, 2013).
One of the hardest question is which software design pattern to be applied when. Usually there isn’t a pattern to figure out which design pattern should be used. It comes through the understanding & experience of using design patterns correctly (Hegoda, 2013).
Design patterns are related to object-oriented programming, in this video Derek Banas makes a great tutorial that includes the topics:
Carr, R. (22 August 2009). Gang of Four Design Patterns. Black Wasp. Retrieved from: http://www.blackwasp.co.uk/gofpatterns.aspx
Bautista, K. (7 July 2010). A Beginner’s Guide to Design Patterns. Envatotuts+. Retrieved from: https://code.tutsplus.com/articles/a-beginners-guide-to-design-patterns–net-12752
Hegoda, D. (6 October 2013). Why? When to? Software Design Patterns. dasonhegoda.com. Retrieved from: http://dasunhegoda.com/software-design-patterns/158/
Vaka, S. (16 January 2013). Gof design patterns. Slideshare. Retrieved from: http://www.slideshare.net/wwwvaka/gof-design-patterns-16016273
Implementation is the carrying out, execution, or practice of a plan, a method, or any design, idea, model, specification, standard or policy for doing something. As such, implementation is the action that must follow any preliminary thinking in order for something to actually happen (Rouse, 2015).
There challenges that are faced by the development team while implementing the software can be:
Code-reuse – Programming interfaces of present-day languages are very sophisticated and are equipped huge library functions. Still, to bring the cost down of end product, the organization management prefers to re-use the code, which was created earlier for some other software (Khule, n.d.).
Version Management – Every time a new software is issued to the customer, developers have to maintain version and configuration related documentation. This documentation needs to be highly accurate and available on time (Khule, n.d.).
Target-Host – The software program, which is being developed in the organization, needs to be designed for host machines at the customers end (Khule, n.d.).
What tools I should care about? The next image is an example of the documentation of the tools need it in an IT Startup in Peru
Software support tools used by the VSE at the end of the implementation of ISO/IEC 29110 (http://bit.ly/2fr52G7).