Which of the following should drive the entire system building effort?

Software testing arrived alongside the development of software, which had its beginnings just after the second world war. Computer scientist Tom Kilburn is credited with writing the first piece of software, which debuted on June 21, 1948, at the University of Manchester in England. It performed mathematical calculations using machine code instructions.

Debugging was the main testing method at the time and remained so for the next two decades. By the 1980s, development teams looked beyond isolating and fixing software bugs to testing applications in real-world settings. It set the stage for a broader view of testing, which encompassed a quality assurance process that was part of the software development life cycle.

“In the 1990s, there was a transition from testing to a more comprehensive process called quality assurance, which covers the entire software development cycle and affects the processes of planning, design, creation and execution of test cases, support for existing test cases and test environments,” says Alexander Yaroshko in his post on the uTest developer site.

“Testing had reached a qualitatively new level, which led to the further development of methodologies, the emergence of powerful tools for managing the testing process and test automation tools.” 1

Continuous testing

Software testing has traditionally been separated from the rest of development. It is often conducted later in the software development life cycle after the product build or execution stage. A tester may only have a small window to test the code – sometimes just before the application goes to market. If defects are found, there may be little time for recoding or retesting. It is not uncommon to release software on time, but with bugs and fixes needed. Or a testing team may fix errors but miss a release date.

Doing test activities earlier in the cycle helps keep the testing effort at the forefront rather than as an afterthought to development. Earlier software tests also mean that defects are less expensive to resolve.

Many development teams now use a methodology known as continuous testing. It is part of a DevOps approach – where development and operations collaborate over the entire product life cycle. The aim is to accelerate software delivery while balancing cost, quality and risk. With this testing technique, teams don’t need to wait for the software to be built before testing starts. They can run tests much earlier in the cycle to discover defects sooner, when they are easier to fix.

DevOps is an evolving philosophy and framework that encourages faster, better application development and faster release of new or revised software features or products to customers.

The practice of DevOps encourages smoother, continuous communication, collaboration, integration, visibility, and transparency between application development teams (Dev) and their IT operations team (Ops) counterparts.

This closer relationship between “Dev” and “Ops” permeates every phase of the DevOps lifecycle: from initial software planning to code, build, test, and release phases and on to deployment, operations, and ongoing monitoring. This relationship propels a continuous customer feedback loop of further improvement, development, testing, and deployment. One result of these efforts can be the more rapid, continual release of necessary feature changes or additions.

Some people group DevOps goals into four categories: culture, automation, measurement, and sharing (CAMS), and DevOps tools can aid in these areas. These tools can make development and operations workflows more streamlined and collaborative, automating previously time-consuming, manual, or static tasks involved in integration, development, testing, deployment, or monitoring.

Why DevOps matters

Along with its efforts to break down barriers to communication and collaboration between development and IT operations teams, a core value of DevOps is customer satisfaction and the faster delivery of value. DevOps is also designed to propel business innovation and the drive for continuous process improvement.

The practice of DevOps encourages faster, better, more secure delivery of business value to an organization’s end customers. This value might take the form of more frequent product releases, features, or updates. It can involve how quickly a product release or new feature gets into customers’ hands—all with the proper levels of quality and security. Or, it might focus on how quickly an issue or bug is identified, and then resolved and re-released.

Underlying infrastructure also supports DevOps with seamless performance, availability, and reliability of software as it is first developed and tested then released into production.

DevOps methods

There are a few common DevOps methods that organizations can use to speed and improve development and product releases. They take the form of software development methodologies and practices. Among the most popular ones are Scrum, Kanban, and Agile:

  • Scrum. Scrum defines how members of a team should work together to accelerate development and QA projects. Scrum practices include key workflows and specific terminology (sprints, time boxes, daily scrum [meeting]), and designated roles (Scrum Master, product owner).
  • Kanban. Kanban originated from efficiencies gained on the Toyota factory floor. Kanban prescribes that the state of software project work in progress (WIP) be tracked on a Kanban board.
  • Agile. Earlier agile software development methods continue to heavily influence DevOps practices and tools. Many DevOps methods, including Scrum and Kanban, incorporate elements of agile programming. Some agile practices are associated with greater responsiveness to changing needs and requirements, documenting requirements as user stories, performing daily standups, and incorporating continuous customer feedback. Agile also prescribes shorter software development lifecycles instead of lengthy, traditional “waterfall” development methods.

DevOps toolchain

Followers of DevOps practices often use certain DevOps-friendly tools as part of their DevOps “toolchain.” The goal of these tools is to further streamline, shorten, and automate the various stages of the software delivery workflow (or “pipeline”). Many such tools also promote core DevOps tenets of automation, collaboration, and integration between development and operations teams. The following shows a sample of tools used at various DevOps lifecycle stages.

  • Plan. This phase helps define business value and requirements. Sample tools include Jira or Git to help track known issues and perform project management.
  • Code. This phase involves software design and the creation of software code. Sample tools include GitHub, GitLab, Bitbucket, or Stash.
  • Build. In this phase, you manage software builds and versions, and use automated tools to help compile and package code for future release to production. You use source code repositories or package repositories that also “package” infrastructure needed for product release. Sample tools include Docker, Ansible, Puppet, Chef, Gradle, Maven, or JFrog Artifactory.
  • Test. This phase involves continuous testing (manual or automated) to ensure optimal code quality. Sample tools include JUnit, Codeception, Selenium, Vagrant, TestNG, or BlazeMeter.
  • Deploy. This phase can include tools that help manage, coordinate, schedule, and automate product releases into production. Sample tools include Puppet, Chef, Ansible, Jenkins, Kubernetes, OpenShift, OpenStack, Docker, or Jira.
  • Operate. This phase manages software during production. Sample tools include Ansible, Puppet, PowerShell, Chef, Salt, or Otter.
  • Monitor. This phase involves identifying and collecting information about issues from a specific software release in production. Sample tools include New Relic, Datadog, Grafana, Wireshark, Splunk, Nagios, or Slack.

DevOps practices

DevOps practices reflect the idea of continuous improvement and automation. Many practices focus on one or more development cycle phases. These practices include:

  • Continuous development. This practice spans the planning and coding phases of the DevOps lifecycle. Version-control mechanisms might be involved.
  • Continuous testing. This practice incorporates automated, prescheduled, continued code tests as application code is being written or updated. Such tests can speed the delivery of code to production.
  • Continuous integration (CI). This practice brings configuration management (CM) tools together with other test and development tools to track how much of the code being developed is ready for production. It involves rapid feedback between testing and development to quickly identify and resolve code issues.
  • Continuous delivery. This practice automates the delivery of code changes, after testing, to a preproduction or staging environment. An staff member might then decide to promote such code changes into production.
  • Continuous deployment (CD). Similar to continuous delivery, this practice automates the release of new or changed code into production. A company doing continuous deployment might release code or feature changes several times per day. The use of container technologies, such as Docker and Kubernetes, can enable continuous deployment by helping to maintain consistency of the code across different deployment platforms and environments.
  • Continuous monitoring. This practice involves ongoing monitoring of both the code in operation and the underlying infrastructure that supports it. A feedback loop that reports on bugs or issues then makes its way back to development.
  • Infrastructure as code. This practice can be used during various DevOps phases to automate the provisioning of infrastructure required for a software release. Developers add infrastructure “code” from within their existing development tools. For example, developers might create a storage volume on demand from Docker, Kubernetes, or OpenShift. This practice also allows operations teams to monitor environment configurations, track changes, and simplify the rollback of configurations.

Benefits of DevOps

DevOps proponents describe several business and technical benefits, many of which can result in happier customers. Some benefits of DevOps include:

  • Faster, better product delivery
  • Faster issue resolution and reduced complexity
  • Greater scalability and availability
  • More stable operating environments
  • Better resource utilization
  • Greater automation
  • Greater visibility into system outcomes
  • Greater innovation

History of DevOps

Many DevOps methods for streamlining software development and deployment have an early basis in agile software development and lean programming. But DevOps originally evolved from several grassroots movements to harmonize the activities of developers and their operations team counterparts.

The early 2000s saw the need to maintain availability of popular websites such as Google and Flickr against massive hits. This need led to the use of software reliability engineers (SREs)—operations people working closely with developers to ensure that the sites would keep running after code was released into production.

In 2009, Flickr engineers John Allspaw and Paul Hammond presented their own DevOps-like methodology at a conference. Their presentation was entitled “10+ Deploys per Day: Dev and Ops Cooperation at Flickr.” The same year, Patrick Debois organized the first “DevOps Day” in Belgium. A #DevOps hashtag was also incorporated and gained momentum as more DevOps Days were held around the world.

Over the coming years, industry and open-source tools and frameworks were developed and proposed to further the goals of DevOps.

NetApp and DevOps

NetApp helps promote better business outcomes with DevOps: Operations teams deliver automated infrastructure with less engineering, and developers create in reliable and predictable environments with less friction. With NetApp® technology, you can confidently deliver the services and capabilities your organization needs to maximize developer productivity in both on-premises and cloud environments.

NetApp makes it easy for developers, testing, QA, and operations teams to consume infrastructure resources (such as persistent storage volumes) as code, all from within familiar tools in the DevOps pipeline. Examples include NetApp storage APIs and IAC integrations with tools such as Puppet, Ansible, Docker, Kubernetes, and OpenShift.

But NetApp doesn’t just make it easy for developers to consume storage as code. NetApp technology also allows operations to confidently provision and deliver resources to development and testing personnel. Developers and testers can then accelerate coding and test cycles by self-provisioning fast, time-saving storage features, such as snapshots or clones. With these features, copies of real-time production data or code sets can be provisioned as code in mere seconds or minutes to speed development and QA workflow. Learn more about why NetApp is made for DevOps.

Why NetApp is made for DevOps

NetApp commitment to the community extends into thePub. This developer community encourages collaboration, shares tips and tricks, and debates ideas around the latest DevOps practices and protocols.

What are the first three steps in BPM?

A) 1. identifying processes for change, 2. analyzing existing processes, 3. designing the new process.

What are the four kinds of structural organizational change enabled by It?

Figure 14-3 shows four kinds of structural organizational change that are enabled by information technology: (1) automation, (2) rationalization, (3) reengineering, and (4) paradigm shifts. Each carries different rewards and risks.

What is the primary tool for representing a system's component processes and the flow of data between them?

The primary tool for representing a system's component processes and the flow of data between them is the data flow diagram (DFD).

What is the most significant barrier to successful?

18 Common Barriers to Success You Need To Overcome.
Not enough time..
Lack of recognition..
Burnout..
Poor communication skills..
Lack of managerial involvement..
Lack of growth opportunities..
Perfectionism..
Unavailability of resources and opportunities..