Unit 6
Formal Methods Recent Trends in Software Engineering
Software configuration management (SCM) is an umbrella activity that is applied throughout the software process, because change can occur at any time.
SCM activities are developed to
● Identify change,
● Control change,
● Ensure that change is being properly implemented, and
● Report changes to others who may have an interest.
It is important to make a clear distinction between software support and software configuration management. Support is a set of software engineering activities that occur after software has been delivered to the customer and put into operation. Software configuration management is a set of tracking and control activities that begin when a software engineering project begins and terminate only when the software is taken out of operation.
A primary goal of software engineering is to improve the ease with which changes can be accommodated and reduce the amount of effort expended when changes must be made.
The output of the software process is information that may be divided into three broad categories:
● Computer programs (both source level and executable forms);
● Documents that describe the computer programs (targeted at both technical practitioners and users), and
● Data (contained within the program or external to it).
The items that comprise all information produced as part of the software process are collectively called a software configuration.
As the software process progresses, the number of software configuration items (SCIs) grows rapidly. A System Specification spawns a Software Project Plan and Software Requirements Specification (as well as hardware related documents). These in turn spawn other documents to create a hierarchy of information.
If each SCI simply spawned other SCIs, little confusion would result. Unfortunately, another variable enters the process—change. Change may occur at any time, for any reason. In fact, the First Law of System Engineering states: “No matter where you are in the system life cycle, the system will change, and the desire to change it will persist throughout the life cycle.”
Key takeaways
- Software configuration management is a set of activities that have been developed to manage change throughout the life cycle of computer software.
- The number of software configuration items (SCIs) grows rapidly.
- Software configuration management is a set of activities that have been developed to manage change throughout the life cycle of computer software
Risk analysis and management are a series of steps that help a software team to understand and manage uncertainty. Many problems can plague a software project.
A risk is a potential problem—it might happen, it might not.
In software engineering, Risk management is a technique or mechanism that is carried out during the development process to define, handle and monitor threats that have formed before and throughout the development process.
Risk management involves all activities pertaining to identification, analyzing and
Making provision for predictable and unpredictable risks in the project. Risk may
Include the following:
● Experienced staff leaving the project and new staff coming in.
● Change in organizational management.
● Requirement change or misinterpreting requirement.
● Under-estimation of required time and resources.
● Technological changes, environmental changes, business competition.
Fig 1: risk management activity
Risk Management Process
There are following activities involved in risk management process:
● Identification - Make note of all possible risks, which may occur in the project.
● Categorize - Categorize known risks into high, medium and low risk intensity
As per their possible impact on the project.
● Manage - Analyze the probability of occurrence of risks at various phases.
Make a plan to avoid or face risks. Attempt to minimize their side-effects.
● Monitor - Closely monitor the potential risks and their early symptoms. Also
Monitor the effects of steps taken to mitigate or avoid them.
Key takeaways
- Risk management is a technique or mechanism that is carried out during the development process to define, handle and monitor threats that have formed before and throughout the development process.
- A risk is a potential problem—it might happen, it might not.
For software developers, patterns appear to demonstrate where the sector is headed. New technology, methods of growth and consumer desires may be key indicators of where the development skills should be based. A smart way to future-proof your software development skills is to remain on top of emerging technology developments, ensuring that your skills do not age as poorly as a Korn CD.
Some evolving trends are here:
1: Artificial Intelligence (AI)
It's a buzzword that gets tossed around a lot, but it's not because it's being overhyped by artificial intelligence (AI), it's because modern technology is finally strong enough to make AI instruments a fact. Organizations depend on AI to radically change their businesses, whether by deep learning, machine learning or wider, artificially intelligent applications.
2: Cross-Platform Development Tools
Developing apps in the past also meant opting to start with a single platform, such as iOS or Android. Software developers could create another version for a different platform after creating the initial app for one platform, forcing them to commit resources to porting code between each operating system.
3: Blockchain
One of the new technological advancements is Blockchain, and software developers are seeking fresh and creative ways to apply it. For developers looking to build decentralized and safe open-source solutions, Blockchain-based apps known as dApps, short for distributed apps, are emerging as a common choice.
4: IoT
All around us, the Internet of Things (IoT) has finally begun to appear. From Bluetooth trackers to smart microwaves, internet-connected gadgets are no longer limited to computers and mobile phones. More devices will take advantage of improved wireless bandwidth and power efficiency as innovations such as 5G start to roll out, bringing new and exciting possibilities for the future of IoT to life.
5: Continuous Delivery and Deployment
In modern software growth, continuous delivery and continuous deployment have emerged as two of the most prominent trends. In shorter cycles of feature creation, bug fixing and experimentation, both methods generate software, with the goal of releasing software as soon as possible.
6: Progressive Web Apps
By providing app-like experiences in the browser, the advent of progressive web apps seeks the sweet spot between efficiency and availability. In a solution that makes it easy to build powerful web-based tools that can run on any platform, Progressive web apps bundle new web technologies.
7: Low-Code Development
The low-code development trend in the software industry changes the equation by making it easy to code applications using graphical user interfaces instead of complicated programming languages. Instead of having to hand-code every piece of an application, low-code development platforms also have drag-and-drop interfaces to help visualize applications without needing programmers to get down in the weed
The fast-paced and creative area is software engineering. Over the last few years, the ever-growing demand from industries and customers has reshaped the software development industry. For software developers, it is important to keep current with new changes and trends. Here are the current software engineering trends.
1. Future of software engineering
The future of software engineering is complicated, but fields that are good bets for the future of software engineering are emerging. For software engineers, there are a wide range of career opportunities and specializations. Not only can one of the new tech giants join the fledgling software engineering, but they are also likely to shift.
2. Cloud computing
The biggest and fastest-growing factor of software engineering is cloud computing. Over the last few years, Amazon Web Services (AWS) has dominated the list of top cloud computing platforms. During the next few years, this change is unlikely to change. Google is also promoting its cloud platform among developers strongly.
3. Containerization
At the moment, these are the hot patterns and will only go from strength to strength in the coming years. It refers to regular software units that bundle the code and all its dependencies if you are unaware of what the trend is about. Over the last few years, containerization has seen massive growth.
4. Python will dominate the demand
Python is the most common programming language for data science, machine learning, data mining, data processing, etc. One of the top three programming languages used by developers, Python frequently types. Demand in 2020 has doubled from 5 percent to 10%. Experts advise you to learn and add Python to your skill set.
Key takeaways
- For software developers, it is important to keep current with new changes and trends.
- Over the last few years, the ever-growing demand from industries and customers has reshaped the software development industry.
The success of a software development project depends on the committed specialists' individual abilities, as well as how effectively they complement and work with each other. Collaboration itself also rolls inside collaboration tools at the same time. Not only does the latter decide how cooperation flows, but it can also become a versatile business process.
Five basic criteria for collaborative software development tools:
The role of collaboration tools is important in the process of software development. But there's also a certain chance. For instance, if a team member does not fulfil the criteria of the project, he or she can be replaced easily with no project effect.
Make sure they meet the following criteria when selecting tools:
1. Cover different collaboration scenarios: The organization should allow quality cooperation between all the stakeholders to ensure quality software development services.
2. Structure collaboration: As collaboration becomes huge, structuring it and making it suitable for further reuse is crucial.
3. Meet collaboration habits of different users: In general, software developers are introverts and are not involved in conversation, while company analysts can be very chatty. So, suggest introducing a tool that will help the followers of collaboration and will not bother closed-off workers, as well as keep them tuned into the project.
4. Enable external users to participate: When customers actively engage in the software development process, they should also have collaboration tools available.
5. Integrate with other solutions: If a collaboration method is combined with other business processes (a CRM, ERP or project management system), you can handle a project with all the client knowledge and prior contact experience in mind.
Software products are costly therefore a software project manager always looks for ways for cutting development cost. A feasible way to reduce development cost is to reuse parts from pre developed software. Reuse also leads to higher quality of the developed products.
In a software development following items can be reused effectively-
- Requirement & specification
- Design
- Source code
- Test cases
- Knowledge.
Basic issues in any Reuse program
In implementing any Reuse program, there arise some basic issues. Some of them are as follows-
● Component Creation: - For this, the reusable components have to be first recognized. Selection should be such that the component should have potential for reuse. Domain analysis can be used to create reusable components.
● Component indexing and storing: - Indexing means classifying the reusable components so that they can be easily reached for reuse. For easy access, when the number of components becomes large, components can be stored in a Relational Data base management system (RDBMS) or an object-oriented data base system (ODBMS).
● Component searching: - The programmers have to search for components which match their requirements from the database. For effective searching, the programmers require a proper method to describe the components.
● Component understanding: - A proper and complete understanding of component is required to decide whether it can be reused or not. For that the components should be properly documented.
● Component adaptation: - Sometimes, the component may weed adaptation before they can be reused, since they may not exactly fit with the requirements.
● Repository maintenance: - Continuous maintenance for repository should be done. Maintenance here means new components have to be entered, faulty components have to be tracked and after the emergence of new applications, old applications should be removed.
Key takeaways
- A feasible way to reduce development cost is to reuse parts from pre developed software.
- Reuse also leads to higher quality of the developed products.
Test Driven Development (TDD) is an approach to software development that creates test cases to define and verify what the code can do. Simply put, test cases are first created and checked for each feature, and if the test fails, the new code is written to pass the test and make the code easy and bug-free.
Test-Driven Architecture begins with the design and development of tests for any small application feature. TDD instructs developers to write new code only if they have failed an automated evaluation. This prevents code replication. Test-driven production is the complete form of TDD.
Test-Driven Development Process:
● Add a Test
● Run all tests and see if the new one fails
● Write some code
● Run tests and Refactor code
● Repeat
Benefits of TDD:
● Much less debug times
● Code proven to meet requirements
● Tests become Safety Net
● Near zero defects
● Shorter development cycles
Fig 2: TDD cycle
TDD cycle defines
- Write a test
- Make it run.
- Change the code to make it right i.e. Refactor.
- Repeat process.
Key takeaways
- TDD instructs developers to write new code only if they have failed an automated evaluation.
- This prevents code replication.
Major challenges in software development:
❖ Rapid technology advancement
For the IT industry, any technological development is a blessing. At the same time, however, technology developing at a phenomenal pace leads to an added demand for software development practitioners to take advantage of these upcoming software product development technology developments to gain a cutting edge over rivals and stand out on the market.
❖ Increasing customer demands
In general, software projects are conceptual and seek to design and build software products that satisfy varied customer requirements. Developers must clearly understand the fundamental business concept and add in the necessary features to meet the increasing consumer demands in order to develop even the simplest application or product.
❖ Time limitations
A time-game is the development of software. Developers function under stressed conditions and strive under tight and scarce deadlines to complete project specifications. This is especially a challenge when operating in different time zones with international customers. Time constraints also limit development team efficiencies and eventually contribute to mediocre quality software products.
❖ Limited infrastructure/resources
A lack of capital or IT infrastructure to conduct projects effectively is another obstacle faced by most software development businesses. This could mean a lack of software development resources for high performance, strong computing platforms, inadequate architectures for data storage or improper networks and communication.
❖ Conflicts with software testing teams
Interpersonal disputes between software development and testing teams eventually arise in a classic software development project. Several factors lead to such disputes, such as working under high performance pressure, different personalities, disparity in job responsibilities, and the completely opposite essence of growth and testing.
Key takeaways
- Teams in software engineering face diverse challenges in various fields and market landscapes.
- The production of software is an important part of the industry and is directly affected by many factors, including growing uncertainties, market dynamics, evolving trends in technology and increasing challenges in the development of software.
CASE stands for Engineering with Computer Assisted Applications. This implies, with the assistance of various automated development tools, designing and managing software projects.
CASE instruments may assist engineers with the work of evaluating, designing, coding and checking. Software engineering is hard work and there are major benefits to instruments that minimize the effort needed to create a work product or achieve a milestone.
6.9.1 Taxonomy
● Tools for business process engineering - represent business data objects, their relationships and the flow of data objects between business areas of the organization.
● Process modelling and management software - represent process key elements and provide links to other tools that help specified process activities.
● Tools for project preparation - used for cost and commitment assessment and planning of projects
● Risk analysis tools - help project managers develop risk tables by offering thorough guidance on risk recognition and analysis
● Requirements Tracing tools - provide a structured database-like approach to the tracking status of requirements starting with specifications
● documentation tools - provide opportunities for increased efficiency by reducing the amount of time necessary for the development of work products
● Prototyping tools - enable rapid definition of screen layouts, data design, and report generation
● System software tools - software for the network system, object management facilities, support for distributed components, and communications software
● Quality assurance tools-metrics tools that inspect source code to assess compliance with language requirements or tools that extract metrics to project the quality of software being produced.
6.9.2 Tool-Kits
The CASE tools are a series of application software programs that are used to automate SDLC operations. Software project managers, analysts and engineers use CASE tools for software system creation.
Numerous CASE methods are available to automate different phases of the life cycle of software development, such as analytical tools, design tools, project management tools, database management tools, documentation tools, to name a few.
Using CASE tools speeds up project development to achieve the desired outcome and helps to find vulnerabilities before progressing to the next step of software development.
Fig 3: tools, workbenches and environment
6.9.3 Workbenches
Workbenches encourage process stages or operations such as specification, design, etc. Typically, they consist of a collection of instruments with a greater or lesser degree of integration.
Workbenches combine two or more CASE instruments and support particular tasks in the software process. They thus accomplish:
● A consistent and homogeneous interface (presentation integration).
● Seamless incorporation of instruments and chains of tools (control and data integration).
The Visual Basic programming environment from Microsoft is an example workbench. It includes several tools for development: a GUI creator, a smart code editor, a debugger, etc.
Many industrial CASE items have appeared to be workbenches that have incorporated two or more instruments seamlessly. Workbenches may also be categorized in the same way as instruments; as focusing on research, development, verification, etc., as well as focusing on upper case, lower case or processes such as configuration management that span the entire life cycle.
6.9.4 Environments
The world repository is “anything or person thought of as a center of accumulation as storage”. During the early history of software development, the repository was indent a person – the programmer who had to remember the location of all information relevant to software project, who had to recall information that was never writing down and reconstructs information that had been lost. Sadly, using a person as “the center for accumulation and storage”, does not work very well.
Today, the repository is a database that acts as the center for both accumulation and storage of software engineering information. The role of the person (the software engineer) is to interact with the repository using CASE tools that are integrated with it. The repository holds the complete information needed to create, modify, and evolve a software system from project initiation and planning to code generation and maintenance. In this book a number of different terms have been used to refer to the storage place for software engineering information: CASE database, project database, Integrated Project Support Environment (IPSE) database, requirement dictionary (a limited database), and repository. Although there are subtle differences between some of these terms, all refer to the center for accumulation and storage.
For years, common development repositories have been used to create information systems independent of CASE. Above figure reflect the common components of a comprehensive CASE repository. The application development environment is one in which either information specialists or end users use CASE tools, high level languages and other tools to develop new applications. The production environment is one in which these same people use application to build databases, keep the data current and extract data from databases.
Fig 4: a CASE environment
The data dictionary is computer software tools used to manage and control access to the information repository. It provides facilities for recording, storing and processing descriptions of an organization’s significant data and data processing resources. Data dictionary features within a CASE repository are especially valuable for the system analyst when cross referencing data items. Cross referencing enables one description of a data item to be stored and accessed by all individuals (system analyst and end users) so that a single definition for data item is established and used. Such a description helps to avoid data duplication and makes system development and maintenance more efficient.
6.9.5 Components of CASE
Based on their use at a specific SDLC stage, CASE tools can be broadly divided into the following parts:
❏ Central Repository - A central repository is required for CASE tools and can serve as a source of common, integrated and consistent information. The central repository is a central storage location where product specifications, requirement records, related reports and diagrams are stored, as well as other valuable management material. The central repository also acts as a data dictionary.
Fig 5: case tools
❏ Upper Case Tools - In the preparation, study and design phases of SDLC, the Upper-CASE instruments are used.
❏ Lower Case Tools - In deployment, monitoring and maintenance, Lower CASE tools are used.
❏ Integrated Case Tools - In all the phases of SDLC, from the selection of specifications to testing and documentation, integrated CASE resources are beneficial.
Key takeaways
- CASE stands for Engineering with Computer Assisted Applications
- If they have common capabilities, workflow operations, and the potential to be combined with other tools, CASE tools can be grouped together.
- Using CASE tools speeds up project development to achieve the desired outcome and helps to find vulnerabilities before progressing to the next step of software development.
- Workbenches encourage process stages or operations such as specification, design, etc.
❏ Upper Case Tools - In the preparation, study and design phases of SDLC, the Upper-CASE instruments are used.
❏ Lower Case Tools - In deployment, monitoring and maintenance, Lower CASE tools are used.
❏ Integrated Case Tools - In all the phases of SDLC, from the selection of specifications to testing and documentation, integrated CASE resources are beneficial.
Agile tools are project management tools, including Scrum, Kanban, Scrumban or other agile hybrid approaches, designed to support agile methodology. The literal definition of 'agile' is described in the dictionary as the ability "to move quickly and easily or to think quickly and intelligently." So, in terms of delineating some kind of versatile approach or operation, we may intentionally add this phrase.
Agile is' a software development project management approach that characterizes the entire long job structure to be divided comprehensively into many smaller tasks and allocated to those tasks with quick and gradual work phases, known as sprints.'
The key benefit of agile methodology is that the software product is delivered on schedule and on a budget, as well as continuous improvement and flexible reactions to inevitable changes.
Essential features of Agile tools
Before choosing any comprehensive agile tool, it is important to analyse business requirements and methodology. In conjunction with their business intent, the following features of agile tools can assist the project manager and team members to choose the right one.
● Team Collaboration and Communication – The agile tool promotes teamwork between team members and communication.
● Data Storage – An agile tool offers a single database to store content that allows cross-project reporting and review to be done.
● Reporting and Analytics – The agile instruments help to assess results and can report on potential business progress on the basis of their project manager.
Various tools:
Jira
One of the most well-known and established products used by many businesses around the world is Jira. On the basis of demand, it is extremely widespread and customizable. It has a customizable Scrum Board that can be used with the aid of a burnout map, sprint report, velocity chart, epic report, cumulative flow diagram, etc. to analyse all the activities in the sprint and also display the exact picture of the sprint.
It uses JQLL to have custom filters (Jira Query Language). Furthermore, with minimal effort, versatile Kanban boards achieve the full performance.
Jira, a customizable platform for project management, is also not without flaws. The main flaw is the dynamic nature of its use. It needs developers just to set up and takes a long time to learn its purpose properly. Jira, on the other hand, is a very expensive method for project management and even a small team is expected to spend a thousand dollars just to purchase it.
Kanban
Kanban is a common framework used for the implementation of agile development of software. Communication of capacity and total openness of work takes real time. In a Kanban board, the work objects are visually depicted, allowing team members to see at any time the state of any piece of work.
Board
The Kanban board is an agile project management tool that designs the visualized work required, restricts work-in-progress and maximizes flow (or efficiency). It uses cards, columns, and continuous enhancement to assist technology and service teams to do the correct amount of work to get it done.
Element of Kanban board:
The Kanban board is split into five separate components by an individual named David Anderson.
There are Visual signs, columns, work-in-progress thresholds, a commitment point, and a delivery point.
- Visual signals: A visual card is the Kanban board (stickies, tickets, or otherwise). Team Kanban write their projects and work items on cards, usually each card per member. For agile teams, each card could be encapsulated into a single storey for users. When the board is done, this visual team allows team members and stock members to easily grasp what the team is doing.
2. Columns: The column reflects the unique tasks that together compose a "workflow" The card flows until its completion via a workflow. As "To Do," "In Progress," "Complete," or much more complex, the workflow can be a simple one.
3. Work in progress(wip) limits: The maximum number of cards that can be in one column are the work in progress caps. At every given moment, this is. It offers a warning signal that you have done too much work.
4. Commitment point: Kanban teams still maintain a board backlog. This is where the clients and team members bring forward suggestions for projects that can be taken up by the team. When they are ready, the team members pick up plans. The point of commitment is a movement in which the team takes up the concept and work begins on the project.
5. Delivery point: It is the end point of the workflow of a Kanban team. For each squad, the distribution point is often when the goods and services are turned over to the client.
Key takeaways
- Agile tools are project management tools, including Scrum, Kanban, Scrumban or other agile hybrid approaches, designed to support agile methodology.
- Before choosing any comprehensive agile tool, it is important to analyze business requirements and methodology.
- One of the most well-known and established products used by many businesses around the world is Jira.
- Kanban is a common framework used for the implementation of agile development of software.
References
- Roger Pressman, “Software Engineering: A Practitioner’s Approach”, McGraw Hill, ISBN 0-07-337597-7
- Ian Sommerville, “Software Engineering”, Addison and Wesley, ISBN 0-13-7035152
- Joseph Phillips, “IT Project Management-On Track From start to Finish”, Tata McGraw-Hill, ISBN13:978-0-07106727-0, ISBN-10:0-07-106727-2
- Pankaj Jalote, “Software Engineering: A Precise Approach”, Wiley India, ISBN: 9788-1265-2311-5
- Marchewka, “Information Technology Project Management”, Willey India, ISBN: 9788-1265-4394-6
- Rajib Mall, “Fundamentals of Software Engineering”, Prentice Hall India, ISBN-13:9788-1203-4898-1