6APPDEV-Midterm Lecture.pdf
Document Details
Uploaded by SuperiorHelium
Full Transcript
# Application Development ## Software Development Roles and Responsibilities - Apart from developers, a software development project involves other roles in order to succeed. - Software projects only move forward when the key team members are in the right place. - No one is more important than th...
# Application Development ## Software Development Roles and Responsibilities - Apart from developers, a software development project involves other roles in order to succeed. - Software projects only move forward when the key team members are in the right place. - No one is more important than the others; everyone matters when it comes to software development projects. - When roles are poorly selected and the responsibilities are not clear and wrongly defined, mistakes can happen. - It is essential to build the perfect team to get perfect results. ### Business Analyst - Responsible for translating _business needs into requirements_ and ensuring they are documented correctly. - Acts as a bridge between the product owner and developers, monitoring the project status and communicating technical requirements. #### Main Responsibilities: - Define, analyze, and manage technical and business requirements throughout the whole project cycle. - Accompany the customer throughout the entire software development process to clear up any questions, propose improvements, define the scope and prioritize it, and provide technological solutions. - Make decisions and guide the team in the software development process based on priorities previously agreed on with the client. - Carry out team meetings. - Be the guardians of the project's methodology and main promoters of quality. ### Product Owner - Represents the client or end users. - Responsible for setting and communicating the requirements and features of the product to be released. - Acts as the main point of contact for all decisions concerning the project. #### Main Responsibilities: - Establish effective communication between the client/end users and the development team. - Set and communicate work priorities, updates, and issues that emerge during the development process. - Document user stories or requirements for the software project. - Maintain and update the product backlog. - Maximize the return on investment (ROI) of the software project. - Make the final decision on all scope-related decisions. ### Project Manager - Mainly focused on controlling the software project. - Responsible for knowing the "who, what, where, when and why" of the software plan and ensuring that the project goals are achieved. - In charge of supervising the development team and effectively communicating with the stakeholders. #### Main Responsibilities: - Develop a project plan. - Develop functional specifications. - Plan, estimate, and manage resources and the project budget. - Keep track of the project. - Identify necessary adjustments to the plan. - Provide regular updates to the senior management ### Team Lead - Usually taken by experienced senior developers, architects or lead testers, with leadership qualities to help the team keep focused on the tasks, deliver work on time and meet the project goals. - Take the role of a coach or mentor. - Ensure that the development team has all the resources it needs to complete the project, as well as to quickly address any challenges and issues that might arise. #### Main Responsibilities: - Guide the team development towards successful project delivery. - Provide technical leadership to team members through coaching and mentorship. - Prevent and solve any conflict or issue that may arise. ### Software Architect - Responsible for defining the complete architecture system of a project. - Makes high-level design choices based on non-functional requirements and dictates coding standards together with tools and platforms. - Responsible for reviewing the code and guaranteeing the design's quality. #### Main Responsibilities: - Define the technical and functional architecture of the overall system. - Guide developers in the design and implementation of the solution. - Develop the most critical components of the system. - Make suggestions about the best alternatives, considering engineering and business aspects. ### Scrum Master - One of the key roles of the Agile methodology. - Acts like a team facilitator and are responsible for addressing any problems that may hinder the development team from delivering on product goals. - In charge of ensuring that team members follow the Scrum methodology. #### Main Responsibilities: - Be a facilitator to serve the team to make sure that they follow Agile values and implement the correct methodology. - Lead, plan, and follow up all Agile meetings. - Teach the team about all the best practices and concepts of Agile. - Be the buffer between the team and the Product Owner or any outside participator. - Follow up on team impediments and facilitate clear obstacles. - Help the product owner maintain product backlogs. - Help the team to focus on the most valuable activities and results avoiding external interruptions and distractions. ### Developers - In charge of writing the code and developing the software products. - Apart from coding, they are responsible for sending regular updates to the Project Manager. - Work closely with other team members, such as designers, the QA team, and testers. - There are three kinds of developers: - **Full-stack Developer:** Not specialized in any particular area of the software architecture. Thanks to a broad range of knowledge and skills, they can implement a solution on every architectural layer of the system. - **Front-end Developer:** Act as a bridge between the end client (user) and the delivered business solution. They focus mainly on the view layer of the software product (i.e, the interface), and they are responsible for the communication within the business logic layers. - **Back-end Developer:** A programmer who writes code for the business logic and data layers. #### Main Responsibilities: - Develop the features laid out in the Sprint. - Update the status of the software project to the Project Manager or Tech Lead. - Estimate the amount of time needed to deliver a given task. ### QA Team - Provides support to projects to confirm that adequate practices are used during the development process. - Ensure quality at the process level in projects. - Includes a Quality Assurance Lead, who is responsible for establishing a proper relationship between QA team members, helping mitigate any conflict and encouraging good teamwork. - Also includes the QA Engineer, a person responsible for preparing tools that allow for automating processes. #### Main Responsibilities: - Evaluate the execution of processes and production of deliverables according to the defined software process. - Identify and document deviations in the use of standards and procedures. - Provide feedback about the results of the quality assurance tasks to take corrective actions. ### UX/UI Designers - Responsible for designing the user interfaces for the application or software product that may be developed. - Analyze the functionality the product should have, as well as characteristics intended for final users. - Propose the interface design and define its navigation model, interaction sequences, visual organization of contents, and graphic style. - There are two kinds of designers, although there are often those who specialize in both areas: - **UI Designer:** Focus on designing the user interface. This means transferring content, style and graphics that connect a client or product to a system presentation layer. - **UX Designer:** Responsible for making certain that end users have the best possible experience while using an application. They analyze user behavior and take into consideration what the competition is doing. #### Main Responsibilities: - Analyze functional requirements intended for the users. - Define the information architecture and navigation model. - Generate prototypes for the validation of the proposal throughout the design process. - Participate in the implementation of web and desktop interfaces. - Document every interface design decision. ### Testers - Responsible for making sure that the software solution meets the business requirements, and for identifying possible bugs, defects, or weaknesses of the implementations. - Confirm the quality or usability of a program, and guaranteeing that the product complies with the quality standards. - Implement the right testing protocols, as well as collecting the data from various tests. #### Main Responsibilities: - Understand what the system's requirements are in order to create and review adequate test cases. - Alert functional consultants about inconsistencies in the specifications. - Create and execute test cases to detect bugs and report them in the tracking tool. - Use automation tools to facilitate regression tasks. ## History of Mobile Phones - **1973:** Martin Cooper is the first inventor of the Mobile Phone & The phone was manufactured by Motorola Company. - **2000:** The all-conquering Nokia 3310 was released. - **2007:** The iPhone debuted. - **2008:** The first Android phone turned up, in the form of the T-Mobile G1 - **2010:** Samsung launched its first Galaxy S smartphone - **To Present:** Many revolutionary smartphones have come to market. Gaming Phone, Camera on the phones are now extra ordinary, Foldable Phones and many more. ## Introduction to Mobile Application - Mobile applications like Tiktok, Instagram, Facebook, etc that we use in our everyday life. - There are three different ways to develop Mobile apps: ### Native App Development - Apps normally run in the native devices. - Run only in the OS that it is specifically designed for. - Cannot be used on different devices using a different OS. - Apps that are developed for android are normally coded using Java or Kotlin languages. - The IDE normally used for android app development is Android Studio which provides all features. - Apps that are developed for IOS are generally coded in Swift language or Objective-C. - The IDE suggested for IOS App Development is XCode. ### Progressive Web Application - Essentially a website which runs locally on your device. - Technologies used are Microsoft Blazor, React, Angular JS, Native Script, Iconic. - These technologies are normally used for web development. - The app's UI is developed the same way as they are developed while developing the Website. ### Cross-Platform Application - Frameworks that allow developing total native applications. - Access to all the native features of IOS and Android but with the same code base. - **Xamarin** is Microsoft cross-platform solution that uses the programming languages like .NET, C#, F#. - The IDE preferred is Visual Studio. - The UI/UX is very native giving access to all features. - **React Native** is Facebook's cross-platform solution, which uses the language JavaScript, and the preferred IDE is WebStrome & Visual Studio Code. - **Flutter** is Google's cross-platform solution, which uses the language Dart. - The IDE preferred is Android Studio, IntelliJ IDE, and Visual Studio Code. ## There are two dominant platforms in the modern smartphone market. ### iOS Platform - From Apple Inc. - Powers Apple's popular line of iPhone smartphones. ### Android - From Google. - Used not only by Google devices but also by many other OEMs to built their own smartphones and other smart devices. - Google acquired Android in August 2005. ## Difference between iOS and Android OS | Feature | iOS | Android | |---|---|---| | Developed by | Apple Incorporation | Google and Open Handset Alliance and owned by Google LLC | | Initial release | July 29, 2007 | 23 September 2008 | | First version | iPhone OS 1 before named IOS | Android 1.0, Alpha | | Launched | 2007 | 2008 | | Target system types | smartphones, music players, and tablet computers | smartphones and tablets | | Designed for | Apple iphones and ipads | smartphones of all companies | | Kernel type | Hybrid | Linux-based | | Kernel license | Proprietary, APSL, and GNU GPL | Apache 2.0 and GNU GPLv2 | | Main programming languages | C, C++, Objective-C, assembly language, and Swift | C, C++, Java, and other languages | | Update Management | Software Update | System Software Update | | Majorly used programming languages | Swift | Java and Kotlin | | Source model | Commercial Based Source model with open source components | Open Source based Source model | | Default Web Browser | Safari | Google Chrome but one can install any Internet Browser | | Voice Assistant | Siri | Google Assistance | | Block 3rd party app stores | Yes | No | | Available languages | 34 | 100+ | | Customizability | Limited unless jailbroken | High | | File transfer | Easier than in android | More difficult than in iOS | ## Application Development Methodologies - The process of planning, designing, creating, testing, and deploying a software application to perform various business operations. - Can be done by massive organizations with large teams working on projects, or by a single freelance developer. - Defines the process of how the application is made and generally follows a standard methodology. - Many factors go into how application development. Factors include: - The size of the project - How specific the requirements are - How much the customer will want to change things - How large the development team is - How experienced the development team is - The deadline for the project. - The basic stages of software development life cycle (SDLC): - Planning - Analysis - Design - Construction - Testing - Implementation - Support - Application development methodologies can be group into one of three categories: ### Waterfall Methodology - Key words are planning and sequence. - The development team works together over a set of time, building exactly what is lined out according to the specifications. - The architecture is designed, then only can the construction begin. - The entire application is built, and then it is all tested to make sure that it is working properly. - Shown to the customer and ready to be implemented. - Assumes that the project requirements are clear and the customer and project manager have a unified and clear vision of the result. ### Rapid Application Development (RAD) Methodology - Based mostly on prototypes, meaning that the goal is to produce a working version of the application as quickly as possible, and then to continuously iterate after that. - The application development team and the customer work very closely with each other throughout the process. - RAD teams are usually small and only involve experienced developers who are skilled in many disciplines. - If a project needs to divert from the original plan, RAD should be able to accommodate that easily. ### Agile Methodology - Iterative, like RAD, but focuses on building features one at a time. - Each feature is built in a methodical way in the team. - Customer is involved to see the features and sign off on them before the next feature is developed. - Uses sprints, or set of time when a certain feature should be built, tested, and presented. - Tries to incorporate the entire SDLC for a feature into each sprint. - Helps to stick to a planned schedule, but also allow for frequent reviews. - Does not focus on prototypes, but only deliver completed work after the sprint is over. - The customer is inform more often than waterfall. - The customer only ever sees finished work, unlike RAD. ## What is Android and History - Operating system for cellular telephones and tablet computers. - Began in 2003 as a project of the American technology company Android Inc., to develop an operating system for digital cameras. - In 2004, the project changed to become an operating system for smartphones. - In 2005, Android Inc., was bought by the American search engine company Google Inc.. - At Google, the Android team decided to base their project on Linux, an open source operating system for personal computers. ## Android Platform - System Apps - Java API Framework - Native C/C++ Libraries - Android Runtime - Hardware Abstraction Layer (HAL) - Linux Kernel - **Apps:** Live at this level, along with core system apps for email, SMS messaging, calendars, internet browsing, and contacts. - **Java API framework:** All features for Android development, such as UI components, resource management, and lifecycle management, are available through application programming interfaces (APIs). - **Libraries and Android runtime:** Each app runs in its own process, with its own instance of the Android runtime. Android includes a set of core runtime libraries that provide most of the functionality of the Java programming language. Many core Android system components and services are built from native code that require native libraries written in C and C++. These native libraries are available to apps through the Java API framework. - **Hardware abstraction layer (HAL):** Provides standard interfaces that expose device hardware capabilities to the higher-level Java API framework. - **Linux kernel:** The foundation of the Android platform is the Linux kernel. The layers above the Linux kernel rely on the Linux kernel for threading, low-level memory management, and other underlying functionality. ## Android Application Components - **Activities:** An activity is a class that is considered as an entry point for users that represents a single screen. - **Services:** A service is a component that runs in the background, it acts as an invisible worker of our application. ## What is Android Studio? - The official Integrated Development Environment (IDE) for Android app development. - Based on the powerful code editor and developer tools from IntelliJ IDEA, Android Studio offers even more features that enhance your productivity when building Android apps. ### Features: - A flexible Gradle-based build system - A fast and feature-rich emulator - A unified environment where you can develop for all Android devices - Apply Changes to push code and resource changes to your running app without restarting your app - Code templates and GitHub integration to help you build common app features and import sample code - Extensive testing tools and frameworks - Lint tools to catch performance, usability, version compatibility, and other problems - C++ and NDK support - Built-in support for Google Cloud Platform, making it easy to integrate Google Cloud Messaging and App Engine. ## Project Structure - Each project in Android Studio contains one or more modules with source code files and resource files. The types of modules include: - Android app modules - Library modules - Google App Engine modules - Each app module contains the following folders: - **manifests:** Contains the AndroidManifest.xml file. - **java:** Contains the Java source code files, including JUnit test code. - **res:** Contains all non-code resources such as XML layouts, UI strings, and bitmap images. - **Android Studio User Interface:** - **Toolbar:** Carry out a wide range of actions, including running your app and launching Android tools. - **Navigation bar:** Navigate through your project and open files for editing. It provides a more compact view of the structure visible in the Project window. - **Editor window:** Create and modify code. Depending on the current file type, the editor can change. For example, when viewing a layout file, the editor displays the Layout Editor. - **Tool window bar:** Use the buttons on the outside of the IDE window to expand or collapse individual tool windows. - **Tool windows:** Access specific tasks like project management, search, version control, and more. You can expand them and collapse them. - **Status bar:** Display the status of your project and the IDE itself, as well as any warnings or messages. ## Android Studio Walkthrough - Creation of Project - Android Studio makes it easy to create Android apps for various form factors, such as phones, tablets, TVs, and Wear devices. ### Creating a New Project: 1. **Create Project:** Select **File** > **New** > **New Project** from the main menu. 2. **Choose your project type:** In the **New Project** screen that appears, you can select the type of project you want to create from categories of device form factors, shown in the **Templates** pane. 3. **Configure your project:** - Specify the **Name** of your project. - Specify the **Package name**. By default, this package name becomes your project's namespace (used to access your project resources) and your project's application ID (used as the ID for publishing). - Specify the **Save location** where you want to locally store your project. - Select the **Language**, Kotlin or Java, you want Android Studio to use when creating sample code for your new project. - Select the **Minimum API level** you want your app to support. - When you are ready to create your project, click **Finish**. ## Android Layout Types - **Linear Layout:** A view group that aligns all children in a single direction, vertically or horizontally. - **Relative Layout:** A view group that displays child views in relative positions. - **Table Layout:** A view that groups views into rows and columns. - **Absolute Layout:** Enables you to specify the exact location of its children. - **Frame Layout:** A placeholder on screen that you can use to display a single view. - **List View Layout:** A view group that displays a list of scrollable items. - **Grid Layout:** A ViewGroup that displays items in a two-dimensional, scrollable grid. ## Android Event Handling - Events are a useful way to collect data about a users interaction with interactive components of Applications. - Like button presses or screen touch etc. - The Android framework maintains an event queue as first-in, first-out (FIFO) basis. - You can capture these events in our program and take appropriate action as per requirements. ### Android Event Management Concepts: 1. **Event Listeners:** An event listener is an interface in the View class that contains a single callback method. These methods will be called by the Android framework when the View to which the listener has been registered is triggered by user interaction with the item in the UI. 2. **Event Listeners Registration:** Event Registration is the process by which an Event Handler gets registered with an Event Listener so that the handler is called when the Event Listener fires the event. 3. **Event Handlers:** When an event happens and we have registered an event listener for the event, the event listener calls the Event Handlers, which is the method that actually handles the event. ## Reference - https://www.geeksforgeeks.org/difference-between-ios-and-android/ - https://www.diffen.com/difference/Android_vs_iOS - https://selleo.com/blog/agile-software-development-process-everything-you-need-to-know/ - https://kissflow.com/application-development/types-of-application-development-methodologies/ - https://www.tangentia.com/an-introduction-to-mobile-application-development/ - https://media.istockphoto.com/id/1166595589/vector/waterfall-development-process.jpg?s=612x612&w=0&k=20&c=-4fUe7t3ohLcAc36V0qxG7NIRU7aB0QgFPO34bQOM= - https://www.britannica.com/technology/Android-operating-system - https://developer.android.com/studio/projects/create-project - https://google-developer-training.github.io/android-developer-fundamentals-course-concepts-v2/unit-1-get-started/lesson-1-build-your-first-app/1-0-c-introduction-to-android/1-0-c-introduction-to-android.html - https://www.hexacta.com/infographic-software-development-project-roles-and-responsibilities/