reality. Destroy complexly maneuvering targets, improve combat performance for air-to-air missiles.
References
Paul Zarchan (2012), Tactical and Strategic Missile Guidance, six edition, Vol.2, Progress in Astronautics and Aeronautics, American Institute of Aeronautics and Astronautics, Inc., Washington, D.C.
Neil F. Palumbo, Ross A. Blauwkamp, and Justin M. Lloyd (2010), Modern Homing Missile Guidance Theory and Techniques, Johns Hopkins APL Technical Digest, Volume 29, Number 1.
H. Jin Kim and Min-Jea Tahk (2015), Fast Adaptive Guidance Against Highly Maneuvering Targets, Korea Advanced Institute of Science and Technology (KAIST) Daejeon, Korea.
K. Ravindra Babu, I.G.Sarma and K. N.Swamy (2006), Switched Bias ProportionalNavigation for
Homing Guidance Against Highly Maneuvering Targets, Journal of guidance, control, and dynamics, Vol. 17, No. 6, Indian Institute of Science, Bangalore 560 012, India.
Ming-Hsiung Hsueh, Chin-I Huang, Li-Chen Fu (2017), A Differential Game Based Guidance Law for the Interceptor Missiles, Industrial Electronics Society, IECON, 33rd Annual Conference of the IEEE, pp.665670.
Kadriye Tiryaki Kutluay (2019), Adaptive control of guided missiles, A Thesis Submitted to The Graduate School of Natural and Applied Sciences of Middle East Technical University.
Koren A, Idan M, Golan OM (2018), Integrated sliding mode guidance and control for a missile with on-off actuators, J Guid Control. Dyn;31(1):204-14.
Grigoryan David
senior mobile software engineer, Ozon Holdings PLC
APPLICATION OF AGILE APPROACHES IN TECHNICAL DEVELOPMENT AND SUPPORT OF MOBILE APPLICATIONS ON ANDROID AND IOS OPERATING SYSTEMS OF A CORPORATE
INFORMATION SYSTEM
DOI: 10.31618/ESSA.2782-1994.2023.1.86.314
Abstract. The article is devoted to solving an important topical scientific and applied problem, namely, the formation of the theoretical basis of agile-transformation of technical development and support of mobile applications on Android and IOS operating systems of a corporate information system.
The purpose of the study is to increase the effectiveness of technical development and support of mobile applications on Android and IOS operating systems of a corporate information system through the development and practical use of models and methods of project management for their development in the framework of agile-transformation.
The object of research is the processes of project management of technical development and support of mobile applications on Android and IOS operating systems of a corporate information system in the framework of agile-transformation.
The subject of the study is the technical development and support of mobile applications on Android and IOS operating systems of a corporate information system in the framework of agile-transformation.
As a result of research the actual scientific and applied problem is solved, namely, the theoretical basis of agile-transformation of management of projects of methodology of Agile approaches in the technical development and support of mobile applications on Android and IOS operating systems of a corporate information system is formed.
Key words: agile-transformation, mobile applications, Android, IOS, operating systems, scrum, flutter, development, technical support of corporate information systems, waterfall.
1 Introduction
Agile methods allow for the orderly process of project management, such as the transfer of part of the revision and adaptation, to the command robot, self-organization and soundness [1]. There are a number of advanced methods of development and support of mobile applications on Android and IOS operating systems, which are intended for a quick release of high-quality software security, and business-related processes, which link the development of the product to the customers' needs and the goals of the company [2]. Agile development can be used within iterative processes that can be used with the Agile Manifesto concepts. The Manifest of a group of seventeen software security experts and a presentation of the idea
that we will use in the field of software security technical support.
Poorly chosen process methodology leads to the risk of increasing costs or process time, which ultimately leads to significant losses at an early stage of development.
The purpose of the study is to research application of the methodology of Agile approaches in the technical development and support of mobile applications on Android and IOS operating systems of a corporate information system.
As a result of research the actual scientific and applied problem is solved, namely, the theoretical basis of agile-transformation of management of projects of development and support of mobile applications on Android and IOS operating systems is formed.
It is established that the use of agile-methodology in combination with project-oriented management is one of the main options for gaining competitive advantage in a dynamic competitive environment for technical development and support of mobile applications on Android and IOS operating systems of a corporate information system.
2 The concept of agile-methodology and agile-transformation
Agile-methodologies, initially used for the first time in projects related to information and software, are rapidly penetrating into other areas of activity both at the project level and in the organization of operations, including in the service sector.
Translated from English, "agile" means "alive, mobile", but is often translated as "flexible". In the field of software development, this term appeared in the early 2000s, when the "Agile Manifesto" was issued in Utah [8]. Since then, "agile" is understood as a set of
approaches to "flexible" software development. The essence of agile approaches is stated in the "manifesto", but they can be summarized as follows [7]:
- development is carried out in short cycles -iterations(sprints);
- at the end of each iteration, the customer receives a valuable application (or part of it);
- the development team cooperates with the customer throughout the project;
- changes in the project are welcome and quickly incorporated into the work.
Currently, agile principles are used in the work of tens of thousands of teams around the world.
The flexible management methodology or Agile is a set of work stages limited by strict time frames (the duration of iterations (sprints)) (Fig. 1) at each segment of the activity, the results are evaluated, the results are searched for and the necessary additional changes are made, stated in the form of additional requirements.
Figure 1 - The essence of the agile approach [3]
Many flexible management systems are built on the Agile methodology, for example: Scrum; Lean; Kanban; Six Sigma; PRINCE2. All these management systems have their advantages and disadvantages, but they are all united by common ideas that can, when properly implemented, increase the efficiency of the project team and the company as a whole. Presented systems form a powerful mechanism of project management. Yes, Agile requires small work on the way to a great result, Scrum teaches to form processes and procedures, Lean encourages to perform all operations with the same quality, and shows how. Agile is a methodology that can be applied in organizations that are able to work in a rapidly changing environment, accepting the flexible thinking of project teams.
According to modern understanding, agile (agile software development, from English agile - smart, fast, dynamic) is a set of principles and approaches that direct the organization's resources to quickly create
products needed by customers. Agile-philosophy - an approach to project and product management, focused on the dynamic formation of requirements and ensuring their implementation as a result of constant interaction within working groups consisting of specialists of different profiles. Agile's methodology makes it clear that professionals work for a single goal - a quality product or service for the consumer. With the introduction of Agile there is a change in the business culture of the enterprise.
Let's describe in more detail the reasons that justified the need to use Agile project management processes. The traditional approach to projects is based on a cascading model of life cycle stages ("waterfall"), which was the most common method of project management, based on the so-called "waterfall" or cascade cycle, in which the task is transmitted sequentially in stages, reminiscent of flow.
This approach is focused on projects that have strict restrictions on the sequence of tasks. The main disadvantage of the waterfall model is the high risk of creating a product that does not meet the needs of users. Practical experience shows that at the initial stage of the project it is not possible to accurately formulate all the requirements for the future product. This is due to two reasons:
1) customers are not able to set out all their requirements at once and can not predict how they will change during the project;
2) changes may occur in the external environment during the project that will affect the system requirements.
As a rule, according to the cascade model, the requirements are fixed in the form terms of reference for the entire period of its creation, and coordination of the results with users is made only at points planned after the completion of each stage (it is possible to adjust the results according to customer comments, if they do not meet the requirements of the terms of reference). Therefore, customers can make important comments only after the work on the product is fully completed. In case of inaccurate statement of requirements or their change after a long period of product development, customers will receive what does not meet their needs [10].
Therefore, in the process of software development in the framework of projects based on the cascade model on a global scale, the same unresolved issues were observed [5]:
- projects have always exceeded budgets;
- project implementation has always exceeded the stipulated deadlines;
- the final product ineffectively solved the task assigned to it;
- the final result was of low quality;
- projects were poorly managed;
- in the end, the ordered product was used inefficiently or not used at all.
In an effort to reduce uncertainty at the outset, systems analysts were required to develop requirements and design, who needed to be thoroughly familiar with the existing system in order to describe the requirements for change. However, in practice, when developing complex systems, there are always limiting conditions and problems that no system analyst can foresee, and they are solved only by a programmer in the implementation process. However, entails a new "cascade cycle" and new costs.
The so-called "program crisis" took place in the 1980s. In [7], the author cites the fact: "One of the well-documented examples of this crisis was the IBM project to develop the operating system (OS) IBM OS / 360 for the line of computers System / 360. The development of this OS at IBM took 5,000 people. years (not hours!), and the peak value of the number of people involved in the development of this system is 1,000 developers. This operating system was a very large, monolithic program, each change in one part of which was immediately reflected in another part. In addition, there were a lot of problems with the consistency of so many developers on one project. "
The cascade model was replaced by the "spiral model", which for some time solved the problem of the cascade model.
Figure 2 - Comparison of cascade model and agile
In the spiral model, the life path of a product under next step. However, due to the presence of such development is depicted as a spiral, which, starting at shortcomings as the difficulty in defining goals and the planning stage, unwinds with the passage of each stages indicating a willingness to continue the
development process at the next iteration and the rather high cost of the model due to high costs with constant risk assessment after each spiral, this model did not completely solve the problems of effective software development. That is why, as a result of further research, the Agile methodology emerged.
Note that modern publications use the terms "agile methodology" [8], "agile approach" [6], or "agile project management" [5], but the essence of what the authors invest in these terms, almost identical. This situation is explained by the fact that today agile-methodology as a universal methodology of project
management is just being formed. Therefore, in fact, research on this topic uses a certain view / concept / approach in accordance with the idea of agile.
The main advantages of the Agile approaches are: reduction of the time period before receiving the project product, clearer compliance of the product with the expectations of customers, especially in situations where the customer is not ready to fully articulate all requirements for the final product. This is typical, in particular, for the technical development and support of mobile applications on Android and IOS operating systems of a corporate information system.
60%
50%
40%
30°%
20°%
10%
0%
53%
50%
42%
I
21%
Agile Waterfall
Success Problems
Failure
Figure 3 - Comparison of the results of IT projects based on the cascade model (waterfall) and agile [5]
Most publications and existing research related to agile project management are devoted to IT projects, for example [7]. These works summarize the practical experience of using the Agile approach in the implementation of this category of projects. The advantages of Agile-based project management are presented in [6], in [9] the advantages of agile in non-IT areas are specified. [5] substantiates the effectiveness of agile "customer orientation" in principle for project management, regardless of the industry specifics of the project.
The possibility of using agile project management in various fields was discussed in [8]. Agile methodology is also widely used in the development of roadmaps for the creation and development of mobile applications on Android and IOS operating systems [9] within specific strategic guidelines.
Since today's world is a world where the boundaries between different fields of knowledge are blurred and results from different sciences are transferred, it is natural that agile project management ideas have begun to be tested in areas where it previously seemed impractical and the project approach was not used in principle.
For example, agile-based construction project management issues have been studied in [3], in the public sector in [1], and in distance learning in [4]. The
specifics of changing the emphasis in the development process of mobile applications on Android and IOS operating systems and in building goals with an agile approach to infrastructure project management are presented in [9].
Risks within agile project management were identified in [10] and in comparison with the traditional (NOT agile) approach to project management.
The introduction of agile in practice also requires a certain scheme, and these issues have been addressed in [2].
Thus, today, on the one hand, there is a significant theoretical basis for project management, set out in international standards (eg, [3]), including for technical development and support of mobile applications on Android and IOS operating systems of a corporate information system, and in publications of domestic and foreign scientists. The advantages of practical use of project methodology and related methods in "traditional project areas" have become prerequisites for development and dissemination in various fields, including for technical development and support of mobile applications on Android and IOS operating systems of a corporate information system, the idea of project-oriented management [3], according to which, companies and organizations are structured in the form of a portfolio of projects.
3 Project management based on agile transformation methodologies
The development of science and the results of the practical use of agile form the essence of a new stage in the development of project management - agile project management.
A few years ago, the term "agile project management" appeared - an iterative approach to project implementation throughout its life cycle. The iterative life cycle consists of several iterations or step-by-step to complete the project. One of the goals of an iterative approach is to identify hidden benefits during development, rather than at the very end of it [11].
Figure 4 - Agile transformation process
According to [6], agile transformation allows organizations to be more efficient in terms of creating more value with less use of resources and better serving the interests of their customers. Successful agile transformation can change the way a company manages projects, meets the needs of consumers and grows its business, which is why some organizations are ready to make the effort necessary to implement it.
In [10] the author presents agile-transformation in the form of several levels, in the foundation of the pyramid - thinking and values with a focus on people; the second level is behavior and practice, at this level you need a scale of success, i.e. its measurement and evaluation, etc.
Thus, the Agile methodology, which has long been used in the technical development and support of mobile applications on Android and IOS operating systems of a corporate information system has gained wide practical application since the publication of the Agile Manifesto [8], today is developing rapidly, being one of the most successful in practical terms, which determines the intensity of agile transformation to "rebirth" companies in a new capacity that provides them with success and sustainability in today's turbulent environment in search of innovative benefits.
Thus, today many companies in various fields of activity are involved in the processes of agile transformation, in which all their activities are restructured in accordance with the principles of agile. The use of the term "transformation" reflects the
essence of this process - it is not just the implementation of a project or projects aimed at achieving the goals of transformation, it is a gradual change in all aspects of enterprises in terms of organization and corporate thinking.
4 Features of the agile Scrum and Flutter frameworks
The Agile family of frameworks includes Extreme Programming, DSDM, Scrum, FDD, BDD, etc. Most of them are mostly applicable to development and support of mobile applications on Android and IOS operating systems (for which, in fact, they were developed). But Scrum and Kanban are the most widely used today because of their universal nature for projects of different content. This study is based on the Scrum framework, the essence of which is that all work is divided into sprints - time intervals. As soon as the sprint is performed, the work performed is evaluated and analyzed to understand what can be improved.
We briefly describe the scrum framework of the agile family. Scrum is a framework or "framework", one of the Agile processes, a practical embodiment of its values, designed to develop, deliver and maintain complex products. In today's world, the speed of product release is a priority. At the same time the quality should not suffer. Using Scrum allows project teams to release a functional part of a product over and over again in specific time frames (from two weeks to a month) called sprints. Sprint is the core of Scrum, its main component, a project in miniature. The new sprint
begins immediately after the previous one. Based on the results of each of them, a decision is made: to release this really working product as it is, or to continue to improve at the next stage [6]. It is important to note here that decision making is a rather complex task, therefore, in order to streamline the process of finding a solution in the early 2000s at IBM, Dave Snowden developed a methodology and called it the Cynefin Framework. Cynefin framework distinguishes 4 areas, or domains of systems: Simple, Intricate, Complex and Chaotic.
Simple systems are systems in which cause-and-effect relationships are obvious from the outset. The only thing to do is to categorize the problem and choose a solution from known solutions. Therefore, the order of actions in simple systems: problem recognition -categorization - decision, for example: to improve code maintainability, you can apply best practices for testing, documenting, code versioning.
Entangled systems are systems in which there is a causal relationship, but it is not obvious. Although, in fact, there is a general idea of the problem and most likely the questions that need to be answered and how to get answers are already known.
To solve complicated problems, you need to either conduct an analysis or involve an expert. There are no best practices in this class of problems, there are good practices. The difference is that there are several solutions, there is no one best, all of which are suitable and the solution is chosen through analysis. The order of actions in entangled systems: problem recognition -analysis - solution. An example of obfuscated systems would be to improve the performance of an application. It is not always obvious why the application is running slowly, you either need to sit and figure it out yourself, or invite an expert to help determine the cause. There are usually several correct solutions, all of them will work, you need to choose one, the most suitable one.
Complex systems are systems in which there is no causal relationship. Rather, a causal relationship can only be determined retrospectively. There are no right answers, the solution must be sought by trial and error, accumulating knowledge and building emerging
practices step by step. The order of actions in complex systems: research - recognition - decision.
Chaotic systems are systems in which events are so overwhelming that there is no time to look for connections. We need to stabilize the situation as soon as possible. The order of actions in chaotic systems: action - recognition - decision.
Scrum uses iterative (regular repetition of the full cycle of product work with continuous analysis of the results of the previous stage, adjustment of requirements and process) and incremental approaches (increasing the results of the previous stage) to manage risks and improve predictability. Thanks to iterative development, the product can be released quickly, with high frequency, and its quality can be constantly improved by making some improvements and adjustments. Thus, a workable and potentially useful version of the product is available at any time.
According to the essence of Scrum, there are 3 basic roles: Product owner, Scrum master, Development team. The product owner (PO) is the link between the development team and the customer. The task of PO is to maximize the value of the product being developed and the work of the team. One of the main tools of PO is Product Backlog. Product Backlog contains the necessary work tasks (such as Story, Bug, Task, etc.). Scrum master (SM) is a "servant-leader". The task of Scrum Master is to help the team maximize its effectiveness by removing obstacles, helping, training and motivating the team, helping PO. The development team (DT) consists of specialists who work directly on the product [10].
According to [11] Sprint is always limited in time and has the same lifespan. Each Sprint is preceded by a Sprint Planning, which assesses the content of the Product Backlog and generates a Sprint Backlog that contains the tasks (Story, Bugs, Tasks) to be completed in the current sprint. After Sprint, Sprint Review and Sprint Retrospective are performed to assess the team's past performance, predict expected performance in the next sprint, identify problems, assess the likelihood of completing all necessary product work, and more" [12].
Schematic representation of the Scrum process is shown in Fig. 5.
Figure 5 - Scrum process [11]
The study of the specifics of scrum allowed us to adapt this approach to projects of technical development and support of mobile applications on Android and IOS operating systems of a corporate information system.
In 2018, Google introduced a new cross-platform software development tool that does not use intermediaries, bridges, or browser technologies - the Flutter framework. In fact, Google has introduced a very different approach to building such applications [13]. Flutter does not use the system components of mobile operating systems (such as buttons, text fields, and others), but is fully engaged in reproducing each pixel on the screen. That is, the Flutter framework uses its engine to render the user interface [14]. This approach makes it much easier to use UI elements that behave the same on all platforms, in contrast to frameworks like React Native, where you often have to add behavior and / or styles of visual elements for each operating system separately, since binding is used on each platform for visual elements. Flutter also does not use intermediaries to run applications, but is compiled using Ahead-of-Time (AOT) compilation into ARM, x86 and other architectures [15]. When launched on the system, the application loads this native Flutter library and starts using it to play the program.
Ahead-of-Time (AOT) is a kind of translator that uses a compilation method before the program is executed. The AOT method does not require additional memory allocation and AOT compilation occurs with a minimum load on the system. The compilation process is done completely before the program is executed. As the main programming language, Flutter uses the Dart language running on a virtual machine and DartVM, which is presented as a Dart code execution system inside precompiled native libraries. That is, this Dart runtime is part of the native library that Flutter is compiled into [4]. This approach allows you to create fast applications that can play at 60 FPS (frames per second) on all Android and iOS devices without additional settings. Work is also ongoing to implement
Flutter support for creating web applications and software for Windows, Macos and Linux. The visualization of the image on the screen is provided by the hardware (display), regularly (usually 60 times per second, but there are modern screens that are updated 120 times per second) updates the display. This is called the "refresh rate" and is expressed in Hz (Hertz). The display receives information for display from the GPU (Graphics Processing Unit), which is a specialized electronic circuit, optimized and designed to quickly form an image from some data (polygons and textures). The number of times per second that the GPU can generate an "image" (=framebuffer) to display and send to the hardware is called the frame rate. This is measured in units of frames per second (for example, 60 fps or 60 fps). Together with the framework, Flutter provides an extensive built-in library of widgets (UI elements), animations, gestures, and more. A variety of third-party libraries are also supported [16].
But Flutter also has a few drawbacks. One of the disadvantages of Flutter is that the interfaces built on it look about the same on all platforms if you use one set of widgets (visual elements) when developing software. This makes it difficult to create unique interfaces for each system separately, according to their design patterns. But this problem can be solved by using an additional abstraction layer for UI widgets, which will reproduce different visual appearance of elements for different platforms. But, unlike React Native, these components will have uniform standards of behavior, and they will not need any additional settings. Another problem with Flutter is the use of the rather unpopular programming language Dart, which was not widely represented on the market before the appearance of this framework. Although Dart is similar enough to other C-style programming languages like Java, Kotlin, C++, or Swift, it doesn't take long to master if the developer has previously programmed in any C-style language. So, according to Google Trends, since November 2019, users began to search for Flutter more often than React Native [5].
5 Research methodology of Agile approaches in technical development and support of mobile applications on Android and iOS operating systems and of corporate information systems using Flutter framework.
The agile model of technical technical development and support of mobile applications on Android and IOS operating systems of a corporate information system will be understood as a scheme and corresponding description of the essence of the sprint sequence and the corresponding exchange of information with the customer in the process of organizing corporate information system technical support, as well as a system of indicators determining the maximum sprint duration.
Thus, the agile model of the work of technical development and support of mobile applications on Android and IOS operating systems of a corporate information system with a customer involves consistent detailing and concretization, on the one hand, of information from the customer, on the other hand, proposals for optimizing the processes of technical development and support of mobile applications on Android and IOS operating systems of a corporate information system. Practical implementation of this model is possible in the presence of a virtual project management office. It provides not only access to the information base for technical development and support of mobile applications on Android and IOS operating systems of a corporate information system, but also the integration of information on implemented or planned projects in order to form the maximum synergistic effect.
The practical implementation of agile methodologies requires appropriate project time management tools, since without setting some time limits [17] for each "cycle" of this model, it is impossible to timely achieve an effective technical development and support of mobile applications on Android and IOS operating systems of a corporate information system process. In this case, the time constraints of each cycle must take into account the specifics of the project.
Such an assessment is necessary, on the one hand, to manage project time and, on the other hand, to manage human resources.
Projects relevant to operational activities, however, like any other project, in addition to traditional indicators can be evaluated from two positions - from the standpoint of complexity and uniqueness.
Under the complexity of the operational project we will understand the number of elements and their alternatives. "Work" acts as an element of the project -a unit of the classic grid schedule of the project is formed.
Under the uniqueness of the operational project we will understand the difference between the project from others, implemented or those implemented in the company.
As part of project time management, regardless of whether it is an operations project or a development
project, the duration of conceptual and organizational activities (for example, development of the project concept, coordination of issues with suppliers, etc.) should be determined based on the degree and complexity of the project . For this, a certain basis of comparison can be used - for example, the experience in terms of time of work of already implemented or already implemented similar projects, which can be proportionally increased / decreased taking into account these indicators.
For different agile frameworks (not just the agile model developed), complexity and uniqueness indicators can be used to estimate the duration of the sprints, ie each cycle of the model / framework. Naturally, for more complex and unique projects, at least the initial sprints should be compared in duration with already implemented projects and experience gained on them.
The formation of the project schedule is the result of the evaluation of sprints or project work, taking into account its complexity and uniqueness. In this aspect, it is important to understand the essence of the product roadmap and the fact that the product in technical development and support of mobile applications on Android and IOS operating systems of a corporate information system is an effective process of technical support itself.
Human resource management. The composition of the project team both in terms of the number of members and in terms of their quality characteristics must correspond to the complexity and uniqueness of the project. Naturally, for a more complex and unique project, more experienced specialists should be involved, for a more "typical" project, you can attract a number of interns from the company who have already "worked out" work on standard projects. Thus, indicators of the degree of complexity and uniqueness can be used at the company level to allocate human resources by project. As part of the implementation process, staff is selected for projects based on the above, and if the project requires team development, such as attracting additional members with certain competencies, this should also be done taking into account the complexity and uniqueness of the project.
Project risks. Risk identification, quantitative and qualitative analysis is carried out regardless of the complexity and uniqueness of the project. But it is "complexity" and "uniqueness" that are risk factors that need to be assessed separately. Thus, the complexity and uniqueness of the project affects the assessment of project risks and their possible consequences. This should be used in risk monitoring and management processes.
These indicators are important not just in the context of additional project characteristics. Their level is proposed to be used in the processes of estimating the time of individual project periods and cycles agile -models in the initial stage - the creation of a concept model of the product and preparation for implementation. In addition, these indicators can be effectively used in the formation of employee remuneration.
Thus, the degree of complexity and uniqueness determines the number of members of the project team, the size of their rewards, which in combination with the time of execution of individual works on the project on the project costs for the customer.
On the other hand, the costs of the project and the time of execution of works on the project cause possible deviations of these values, which forms the corresponding values of risks. The company's profit is formed as a composition of value project for the customer and the company's costs. The value of the project for the customer is formed under the influence of the cost of the project and deviations of its characteristics (eg, time). The value of the project for the company is not only the profit of a certain level, but also the experience gained by the company's employees, including reducing the degree of uniqueness for future projects. Thus, the more unique projects the company implements, the higher its competence in implementing similar projects, and the lower the degree of uniqueness for subsequent projects. And this, in turn, leads to a reduction in time, etc. for them.
Thus, the obtained results can be used not only for technical development and support of mobile applications on Android and IOS operating systems of a corporate information system, but also in various areas of activity, taking into account the appropriate adjustments to the parameters of the project product. The scope of indicators of complexity and uniqueness of projects is wider, and, in particular, they can be used for various projects as a basis for the formation of a system of remuneration of personnel.
The disadvantage of the proposed results is that their connection with the next stage of technical
development and support of mobile applications on Android and IOS operating systems of a corporate information system was ignored. Despite the fact that the main interaction and all agreements with the customer take place at the stage before the start of direct technical development and support of mobile applications on Android and IOS operating systems of a corporate information system, however, in the future such models can interact with different service providers (shipping, trucking, transhipment, paperwork, etc.). This is the direction of development of the proposed results for the formation of agile-model, covering all stages of technical development and support of mobile applications on Android and IOS operating systems of a corporate information system.
For a more visual demonstration of the capabilities of Flutter and Dart, it was decided to develop an application on the android and ios operating systems of a corporate information system. The main goal is to write a cross-platform application (using the same codebase, because this is one of the key advantages of Flutter), to demonstrate the work of various widgets, their varieties (different platforms), visual component, the ability to combine widgets and create your own. It is also important that our application is adaptive and easy to use.
To demonstrate the capabilities of Flutter, it was decided to create an intuitively simple, but at the same time useful application that would at least interest users. That is why it was decided to develop the "Company Finance" application, which will help calculate the financial expenses of users of the corporate information system.
Application layout is shown in fig. 6 [13]:
Figure 6 - Diagram of the application "Finance of the company
The figure schematically shows the future application. We will have a bar that will contain each of the last seven days of the week and will show the spending level as a ratio of the current day to the total spending. Below this bar, all of our expenses (which we
have already entered into the application) will be listed, we will have the amount, date and name of each purchase that we have made. Also, on the top panel and at the bottom of the screen, there will be a + button that allows you to add a new purchase from the list, where
it will appear, and the costs will be calculated and the Below are Screenshots of the implemented
appearance of the bar of the corresponding day will application - figure7 [14]. visually change.
Figure 7 - "Company Finance " application
In the first figure, we can see the application in its default state, when nothing has been added yet.
In the second picture, we can see how our "bar" works, and how it is filled in accordance with the added purchases.
In the third picture, we can see how we can add a new purchase to our list. Mandatory elements of our application: we have a bar that has a "counter" that shows the expenses for the last seven days (this is calculated from the moment of launch, the algorithm works so that it displays the last seven days, starting from the current day of the week when it was started Appendix), if there are no expenses, then all bars are empty, and there is no list of expenses. If we have expenses added, then we can see the list of expenses
below the block with our bars, we can see the date, price and name of each of the purchases, also, we have the ability to delete an existing purchase that has been added. The + button, located at the bottom of the screen and on the top panel in the right corner, is responsible for adding new purchases to our list. The result of her work can be seen in the third figure, after you click it, a panel will appear where you must enter the name of the purchase, price, and also select the day it was made. This purchase will only be added if all fields are completed.
To better understand how Flutter works and how it helps build our application, let's look at examples of building some of the elements of our application (fig. 8-9) [15].
idget build(BuildCorrtext context) { return Card< elevation: 6,
margin: Edgelnsets.all(20), child: Padding(
padding: Edgelnsets.all(10), child: Row(
mainAxisAlignnent: MainAxtsA]ignment.spaceAround, children: weekPurchase.map((data) {
return Flexible( fit: FlexFit.tight, child: IndicatorBar( data[ day'], data[ amount'], totalSun — 8.0 ? 0.0
: (data['amount'] as double) / totalSum,
>, // If»
); // Flex }).toList(), ), // Row ), // Padding )i // Card
Figure 8 - Listing of the "IndicatorsChart" widget
Figure 9 - The result of the code
Our entire chart is a Card widget, let's look at all the parameters and widgets defined in it. Elevation is a shadow defined as 6 pixels.
Margin is our margin, which, in our case, is defined for all sides equally, at a size of 20 pixels, which is why our map is delimited on all sides.
The descendant (child) of our Card widget is the Padding widget, it has padding elements defined (removing "bar indicators" from the edges of our card on all sides). The child of our Padding widget is the Row widget (this widget was chosen because all of our bars are in a row, one after the other). The following
elements are defined for this widget: mainAxisAligment parameters (namely, the spaceAround variant, which allows to form equal distances between each widget). The child of our Row widget is the Flexible widget. Why was this particular widget chosen? It helps to visually aesthetically beautifully place all its components using the fit: FlexFit.tight parameter. list map, where pairs are stored: the day of the week and the expenses incurred on that day. The child of this widget is another widget - ChartBar. It is also a custom widget defined by us -fig. 10.
IndicatorBar
$0 1 $0 I $0 I $0 I $0 1 $0 I $0 I
II Tue Wed Thu Fri Sat Sun 1 Mon
Figure 10 - Widget "IndicatorBar" Consider the components of the "IndicatorBar" widget - fig. 11.
foverrinc
Widget build(BuildContcxt context) { return LayoutBuilder(
builder: fct*p constraints) { return Caluiin(
children: <Uidgct>[ Container(
height: const raints.raxHcight * €.15. child: FittedBC'x(
child:, lest(" tctalisLr. toEtri ngAsf ixcd( B J}1 // FittedBox ), // Container Sized &«{
height: constraints.raxHcight * €.B5.
), // SizedBox Containcr(
height: const raints.raxHcight * <a..&, width: 13, child: Stack(
children: iHidgct>|[ Container(
decoration: BoMDecoration^
border: Border.all(colar: Colors.greyr width: l.B). color: Color.#ro[TP.E3D< 22Qr 22B, I.ZB, 1). borderRadius: EordcrRadius _circular(!.BJ.
if BoxDccoration ff Container FractionallySizcdBox(
heightFactor: pcrccntagcQfTotal,, child: Container(
decoration: BoiDcceraiticfif
color: Thiffl-c. of £ cantejft J ..priaaryCalor „ borderEad ius: BorderRadius.circular(IB), ) j // BoxDe-coration // Container } „ // FractionallySiicdBoM: Ij. // iNidget>[] // Stack ), // Container Sized Boor{
height: constraints.raxHcight * e.BS.
), // SizcdBox Container(
height: constraints.raxHcight * €.15. child: FittedBox(
child: Text(text), ta // FittedBox )f ff Container ff iHidget>[] if Coliinn
j; // Layout Builder
>
Figure 11 - Listing of the "IndicatorBar" widget
First of all, our entire widget is a built-in LayoutBuilder widget, which is handy in this situation in that it allows you to set parameters that will adjust the size of the content of this widget depending on the size of its parent element (i.e. widget (Flexible) , which is set as follows builder: (ctx, constrains); these parameters set the constraints that were mentioned earlier for the following Column widget. Why do we use this widget? [16].
Recall that now we are building a bar for each of the last 7 days of the week, counting from the current one. As we can see in the screenshot, our bar includes: the amount spent on that day, an indicator (an indicator of spending from the total amount for the week), and the name of the day of the week. Since all these elements are located on the same level, it is most convenient to use the Column widget, because it allows you to save the position of the elements.
The Column widget has several children (arrays) that were mentioned above. The first of these is a
container widget containing a child of the FittedBox widget, which in turn contains a child of the Text widget, into which we pass the total amount of expenses for the current day. Why wrap text with multiple widgets instead of displaying it all at once? It's simple, we want to control the placement on the screen and how much space a certain widget will take, which is why the following height parameter is defined in the Container widget: constrains.maxHeight * 0.15, which determines that the current widget and all its components (we have this text with the amount of costs) will take up only 15% of the total size of the widget, and we start from constraints, because this is exactly the constraint that determines the size depending on the parent widget. This is exactly what will ensure the dynamic rendering of our application (in this particular place - a specific ChartBar widget) regardless of the size of the device on which it will be used - fig. 12.
Figure 12 - Container Widget
The next child is a SizedBox widget that is only it's empty space, an invisible widget that's only added defined to take up 5% of the total size of the entire to make it nicely demarcated the components of our widget: height: constraints.maxHeight* 0.05, meaning Column widget - fig. 13.
I
Tue
1
' $0 1 $0 I $0 I $0 I $0 I $0 I
1 Wed Thu Ffj Sal Sun 1 Mon
Figure 13 - SizeBox Widget
The next child is the Container widget. We use the that the bar will take up 60% of our Column widget -wrapper method again to determine in the same way fig. 14.
Figure 14 - Widget Container - 1
A child of this widget is a Stack widget. Why stack? At the heart of this widget, too, is a stack data structure, where each new element is stacked on top of the other until the stack is full. Also here, we have two bars, which are defined by two Container widgets and
some style parameters that are known to us by CSS. In case the expense =! 0, then a new (colored) bar is overlaid on top of the empty one to reflect spending per day - fig. 15.
Figure 15 - Widget Container - 2
The next descendant of the SizedBox, which, again, is for
widget is another a beautiful visual
display; it also occupies only 5% of the total free space - fig. 16.
Figure 16 - SizeBox Widget
The last child is again the Container widget, which Text child, which accepts the text - the name of the specifies that this widget will occupy 15% of the total day- fig. 17. area. And its child is a FittedBox widget containing a
Container
Tue
$0 1 $0 I $0 I $11 1 $0 I $0 I
1 Wed Thu Frj 1 Sat Sun Mon
Figure 17 - Container widget - day of the week
If we now look carefully, then adding the sizes of all defined widgets, we get 100% in general, that is, we dynamically determined the size of each of the widgets in accordance with the screen sizes provided by our device, this will allow us to render our application on a device of any size and at the same time maintain an attractive visual component. For example, our Chart widget will be a Stateless widget since it will constantly redraw on our screen. With the addition of each new purchase, our indicator will change, the amount for spending will increase or decrease if an existing purchase has been deleted. To tell Flutter that a certain widget needs to be redrawn, you need to use the SetState method, in which we inform Flutter about new changes [17].
Having dealt with the principle of building widgets, you can see that building an application in Flutter is easy and interesting, we use both built-in widgets and define our own, which, in turn, use both built-in widgets and those defined by us. This process can be repeated as long as we need. It's good practice in Flutter to split all elements into smaller widgets in
order to provide more flexibility in managing the application, as well as to be able to better track the behavior of our application. Also, this practice is good because it is easy for us to track changes and re-render only certain elements on the screen again, if necessary, instead of rendering all applications from the very beginning (we take care of optimization).
The main advantage in using Flutter is that by writing only one code, we can create an application for both Android and iOS. However, so far our application is written only for the Android platform (in its usual form). Of course, we can run this application for iOS as well, but this view is somewhat unusual for iOS applications. That is why we use the Cupertino package, which contains widgets that are native to iOS applications. Now in places where we need to insert our widgets, we will make minor changes. Using the Platform.isIOS method, we will check how our application is running on the platform, if it is Android, we will use the widget from the Material package, if it is iOS, then with Cupertino. Consider our application that will be launched on the iOS platform - fig. 18:
Figure 18 - Application on the iOS platform
We can see that the application now has the look and feel of the iOS platform. There is no top bar, no button at the bottom (which is inherent only to Android), all buttons and fields, respectively, are the same as we used to see them on the iPhone screen.
We can assume that our application is ready and working, however, there is one more thing that we will improve a little so that our application can be used a little differently, more conveniently and more universally - fig. 19.
Figure 19 -Application in landscape mode
Visually perceived well, but the page looks using the built-in functionality, we will determine what cluttered, only two purchases fit, and scrolling through orientation this device has, and, accordingly, display all the purchases is very inconvenient. That is why, different content on the screen - fig. 20.
Figure 20 - Changes on the device at different screen positions
A check has been added that actually determines the position of the screen, if the device is in a vertical position, then a chart with indicators and all purchases are displayed on the screen. If the screen is in a horizontal position, then a lever appears that displays the content on the screen depending on its position. If the lever is on, then we can only see a chart with our indicators that occupy the entire tap, if the lever is off, then only a list of purchases will be displayed on the screen. Of course, at any time you can switch to any of
the modes, this was done to more conveniently display the application content in horizontal mode, so there is more information and it is better displayed on the screen.
In Flutter, it is very easy to customize all the settings regarding styles: text color, buttons, font, size, and more. The whole process is very similar to CSS, but instead of defining it all in a separate file and including it, it's all done in the main file of our application - fig. 21.
theme: ThemeData(
primarySwatch: Colors.green, accentColor: Colors.yellow, fontFamily: 'TypeSauce',
textTheme: ThemeData.light().textTheme.copyWith( title: TextStyle(
fontFamily: "TypeSauce", fontSize: 18,
), // TextStyle
button: TextStyle(color: Colors.white),
),
appBarTheme: AppBarTheme(
textTheme: ThemeData.1ight().textTheme.copyWith( title: TextStyle(
fontFamily: "TypeSauce", fontSize: 20, ), // TextStyle
))> // AppBarTheme // ThemeData
Figure 21 - Code listing where styles are set
It is in this part that the main settings are set in a matter of seconds. For example, we want our regarding the graphic component. This is very application to be in red and black colors. Let's replace convenient, because if we suddenly want to change the two lines - table 1 and fig. 22. color scheme of our application, then this can be done
Table 2
Changes ^ in the code
Was Became
primarySwatch: Color.green, primarySwatch: Color.red,
accentColor: Colors.yellow. accentColor: Colors.black.
0 D a • ti I ;.as
MY WALLET +
OB«* I
MV WALLET +
Figure 22 - Application after certain code changes
Like all programming languages, Dart also has a debug mode. This tool is quite interesting, it provides a set of tools to help you track down bugs. A special tool number of advantages when developing an application for debugging is Dart: DevTools. You can run it in - fig. 23.
4 Dan Of« loots X +
< С 88 I ES О 127ЛД1-9100
О Aumouripwai-CM
V _ □ X 11 я • ± m
^H^E Flutter Inspector
♦ Q <x> P A
о MM WW* Mo* О II
llMta*. v>
ЩШ dependences L mhentedThenw MedöOuery J
U Ted U 4 Icon Button
i icon d Care * О Let Tie
■ 1£
BE
BE
□Я BE
'¿ЗЯСХ ш
duration 200m» * bQ BaxOecoraton
dependence* [ Effective TicfcerModel
erOCject RenoerConsftamedE
Figure 23 - Dart: DevTools
By enabling the Select Widget Mode, when you click on any widget on the screen, you get to the corresponding widget in the widget tree. On the left, you will have the widget and its tree selected (its parent and children, if any), as well as its position in the general tree, and on the right, you can see all the properties of this widget.
By selecting the Debug Point and Paint Baselin mode, you can see the "markup" of the application, borders and widgets and generally better understand how widgets are rendered to the screen. Also, a nice bonus is that you can remove the annoying Debug Banner line. In general, this tool is unique, it helps to better understand how Flutter uses widgets, what widgets are, how they are built and how widgets are displayed on the screen. Also, you can easily explore the properties and behavior of any of the widgets. It is very useful to be able to debug not only the logic of the application, but also its graphical component, which is what Dart: DevTools allows you to do.
5 Conclusions
Thus, based on the idea of the scrum and flutter framework, the agile model of technical development and support of mobile applications on Android and IOS operating systems of a corporate information system is considered. This model identifies the content of each sprint (cycle) and the structure of information exchange. Its basis is the varied parameters of the project - the characteristics of future technical development and support of mobile applications on Android and IOS operating systems of a corporate information system, namely, cost, time, possible deviations of time and cost. At a certain stage, these parameters are supplemented by ports of departure and destination. The model is tied to the stage of conceptual design of the project life cycle. Two indicators are proposed - the degree of uniqueness of the project and the degree of complexity of the project, which reflect the relevant characteristics of the project. The complexity of the operational project is the number of
elements and their alternatives. As an element of the project is the "work", which forms a unit of the classic grid schedule of the project. The uniqueness of the operational project is the difference between the project from others, implemented or those implemented in the company.
As a result of the study, within the framework of using the methodology of Agile approaches in the technical development and support of mobile applications on the Android and IOS operating systems of the corporate information system, a comprehensive application "Company Finance" was developed. The principles of constructing widgets are also considered, "nested" widgets are used and it is clearly demonstrated what a widget tree is. The conclusion is made about how easy it is to make the application adaptive, user-friendly and easy to change its style. The debugging capabilities that Flutter provides in case of difficulties were also demonstrated by applying the methodology of Agile approaches in the technical development and support of mobile applications on the Android and IOS operating systems of the corporate information system.
References
Cohn, M. Agile Distributed Teams - Scaling Agile / M. Cohn. - Текст : электронный // Mountain Goat Software. - URL:
http://www.mountaingoatsoftware.com/system/present ation/file/133/ Scaling-Distributed-Agile-Cohn-NDC2010.pdf (visited on 03/03/2022).
Agile project management, and team collaboration made for Google Workspace / Kanbanchi. - URL : https://www.kanbanchi.com/. (visited on 03/03/2022).
James A. Crowder and Shelli Friess, Agile Project Management: Managing for Success (New York: Springer, 2015), 1.
Манокин М.А., Ожегова А.Р., Шенкман Е.А. Методология agile в образовательной среде // Университетское управление: практика и анализ. 2018. №4 (116). URL:
https^/cyberleninka.ru/article/n/metodologiya-agile-v-obrazovatelnoy-srede (дата обращения: 13.02.2022).
Kenneth S. Rubin Essential Scrum: A Practical Guide to the Most Popular Agile Process / Kenneth S. Rubin. - Boston : Addison-Wesley Professional, 2016. - 500 р.
«Manifesto for Agile Software Development»-: URL: https://agilemanifesto.org/(visited on 03/03/2022).
Mario E. Moreira, M., The Agile Enterprise: Building and Running Agile Organizations (New York: Apress, 2017), 22. doi:10.1007/978-1-4842-2391-8.
Product development. What is Agile methodology. - URL: https://luis-goncalves.com/what-is-agile-methodology/.(visited on 03/03/2022).
Schwaber, K. The Definitive Guide to Scrum: The Rules of the Game: Creative Commons / K. Schwaber, D. Sutherland. - Text : electronic // ScrumAlliance. -2017. - URL:
https://scrumguides.org/docs/scrumguide/v2017/2017-Scrum-Guide-US.pdf (visited on 03/03/2022).
Авдонин В.С. Трансфер знаний в эволюционных исследованиях. послесловие к проекту "Трансфер знаний и конвергенция методологических традиций в биологических, лингвистических и политических исследованиях" // МЕТОД: Московский ежегодник трудов из обществоведческих дисциплин. 2021. №11. URL: https://cyberleninka.ru/article/n7transfer-znaniy-v-
УДК 556+551.794
evolyutsionnyh-issledovaniyah-posleslovie-k-proektu-transfer-znaniy-i-konvergentsiya-metodologicheskih-traditsiy (дата обращения: 13.02.2022).
What is Agile. What is Scrum? URL: https://www.cprime.com/resources/what-is-agile-what-is-scrum.
Agile and Lean Applied to Construction by A. Smith. Ennova. URL:
http://ennova.com.au/blog/2011/09/agile-lean-compared-applied-construction.
Hackernoon, Wm Leler, 2018, Why Flutter Uses Dart. URL: https://hackernoon.com/whyflutter-uses-dart-dd635a054ebf
Flutter G. (2020). Faq flutter. URL: https://flutter. dev/docs/resources/faq (visited on 03/03/2022).
Google. (2020). Dart. URL: https://dart.dev/ (visited on 03/03/2022).
Griffith C. (2019). What is cross-platform app development. URL:
https://ionicframework.com/resources/articles/whatis-cross-platform-app-development (visited on 03/03/2022).
Heitkotter H., Hanschke S., Majchrzak T. A. Comparing crossplatform development approaches for mobile applications. Department of Information systems, University of M'unster, 2012, p. 13. URL: Scitpress.org,
https://www.scitepress.org/Papers/2012/39045/39045. pdf: (visited on 03/03/2022).
Федотов В.П.
Международная Академия информационных технологий,
Санкт-Петербург, Россия
МАРШРУТЫ СТОКА ИЗ ОЗЕРА САЙМА В БАЛТИЙСКОЕ МОРЕ
Phedotov (Fedotov) V. P.
International Academy of Information Technology, Saint-Petersburg, Russia
FLOW ROUTES FROM LAKE SAIMAA TO THE BALTIC SEA
DOI: 10.31618/ESSA.2782-1994.2023.1.86.315 Вуоксинская и Сайменская системы образуют единый стрём, в который для его полноты следует включить Ладожское озеро вместе с бассейнами Волхова и Свири, а также Неву и Балтийское море. В составе Вуоксинской системы выделены и поименованы 19 рукавов, каждый из которых в какое-то время оказывался на направлении главного стока, либо служил морским проливом.
На протяжении длительного времени озеро Сайма и Ладожское озеро находились на уровне мирового океана и были заливами Балтийского моря. За последние пять тысяч лет в истории Вуоксы произошли не менее пяти крупных экологических катастроф. В том числе, три в историческое время: в 1230, 1818 и 1857 годах. Река Нева в её нынешнем виде появилась только в 1230 году. Причиной резкого падения уровня Ладожского озера около 3100 лет назад был прорыв стока через Хейнйокский порог.
The Vuoksi and Saimaa systems form a single stream, which for its completeness should include Lake Ladoga together with the Volkhov and Svir basins, as well as the Neva and the Baltic Sea. As part of the Vuoksi system, 19 branches were identified and named, each of which at some time turned out to be in the direction of the main flow, or served as a sea strait.
For a long time, Lake Saimaa and Lake Ladoga were at the level of the world ocean and were bays of the Baltic Sea. Over the past five thousand years, at least five major environmental disasters have occurred in the history of Vuoksa. Three of them took place in historical times: in 1230, 1818 and 1857. The Neva River in its current form appeared only in 1230. The reason for the sharp drop in the level of Lake Ladoga about 3,100 years ago was the breakthrough of the Vuoksa water to the Heinjoki way.