Ключевой момент: жизненный цикл разработки программного обеспечения – это многоступенчатый процесс, который включает в себя спецификацию требований, анализ, проектирование, внедрение, тестирование, развертывание и обслуживание.
Разработка программного продукта – это технический процесс. Программные продукты, независимо от того, насколько они велики или насколько малы, имеют один и тот же жизненный цикл: спецификация требований, анализ, проектирование, внедрение, тестирование, развертывание и обслуживание, как показано на рисунке:
На любом этапе жизненного цикла разработки программного обеспечения может потребоваться вернуться на предыдущий этап, чтобы исправить ошибки или решить другие проблемы, которые могут помешать работе программного обеспечения, как от него ожидалось.
Технические требования
Спецификация требований – это формальный процесс, который направлен на понимание проблемы, которую будет решать программное обеспечение, и подробного документирования того, что должна делать система программного обеспечения. Этот этап предполагает тесное взаимодействие между пользователями и разработчиками. Большинство примеров на этом сайте просты, и их требования четко сформулированы. Однако в реальном мире проблемы не всегда четко определены. Разработчики должны тесно сотрудничать со своими клиентами (физическими лицами или организациями, которые будут использовать программное обеспечение) и тщательно изучать проблему, чтобы определить, что нужно делать.
Системный анализ
Системный анализ направлен на анализ потока данных и идентификацию ввода и вывода системы. Когда вы проводите анализ, это помогает начать с определения, каким должен быть вывод, а затем выяснить, какие входные данные вам нужны для получения результата.
Системный дизайн
Системный дизайн – это разработка процесса получения выходных данных из ввода. Эта фаза предполагает использование множества уровней абстракции для разбивки проблемы на управляемые компоненты и стратегии разработки для реализации каждого компонента. Вы можете рассматривать каждый компонент как подсистему, которая выполняет определенную функцию системы. Суть системного анализа и дизайна — вход, процесс и выход (IPO).
Реализация
Реализация включает перевод дизайна системы в программы. Отдельные программы записываются для каждого компонента, а затем интегрируются для совместной работы. На этом этапе требуется использование языка программирования, такого как Java. Реализация включает в себя кодинг, самотестирование и отладку (то есть поиск ошибок, называемых багами, в коде).
Тестирование
Тестирование гарантирует, что код соответствует требованиям спецификации, а ошибки искоренены. Независимая команда разработчиков программного обеспечения, не участвующая в разработке и внедрении продукта, обычно проводит такое тестирование.
Развертывание
Развертывание делает программное обеспечение доступным для использования. В зависимости от типа программного обеспечения оно может быть установлено на компьютере каждого пользователя или установлено на сервере, доступном в Интернете.
Обслуживание
Техническое обслуживание связано с обновлением и улучшением продукта. Программный продукт должен продолжать работать и улучшаться в постоянно меняющейся среде. Это требует периодических обновлений продукта для исправления вновь обнаруженных ошибок и внесения изменений.
Чтобы увидеть процесс разработки программного обеспечения в действии, мы теперь создадим программу, которая вычисляет платежи по кредиту. Кредитом может быть ссуда на покупку автомобиля, студенческий кредит или ипотечный кредит на жилье. Для вводного курса программирования мы фокусируемся на спецификации требований, анализе, проектировании, внедрении и тестировании.
Этап 1: Спецификация требований
Программа должна удовлетворять следующим требованиям:
- Она должна позволить пользователю ввести процентную ставку, сумму кредита и количество лет, за которые будут производиться платежи.
- Она должна вычислять и отображать ежемесячные платежи и общую сумму платежа.
Этап 2: Системный анализ
Результатом является ежемесячный платеж и общий платеж, который можно получить по следующим формулам:
Для расчёта ежемесячного платежа:
Где:
- monthlyPayment – ежемесячный платёж,
- loanAmount – сумма кредита,
- monthlyInterestRate – ежемесячная процентная ставка,
- numberOfYears – число лет.
Для расчёта всего платежа:
Где:
- totalPayment – общий платёж,
- monthlyPayment – ежемесячный платёж,
- numberOfYears – число лет.
Таким образом, ввод, необходимый для программы, — это месячная процентная ставка, продолжительность кредита в годах и сумма кредита.
Примечание: в спецификации требований говорится, что пользователь должен ввести годовую процентную ставку, сумму кредита и количество лет, за которые будут производиться платежи. Однако во время анализа возможно, что вы обнаружите, что ввод недостаточен или некоторые значения не нужны для вывода. Если это произойдет, вы можете вернуться и изменить спецификацию требований.
Примечание: в реальном мире вы будете работать с клиентами из всех сфер жизни. Вы можете разрабатывать программное обеспечение для химиков, физиков, инженеров, экономистов и психологов, и, конечно же, у вас не будет (или недостаточно) полного знания всех этих областей. Поэтому вам не нужно знать, как получились эти формулы, но узнав ежемесячную процентную ставку, количество лет и сумму кредита вы можете вычислить ежемесячный платеж в этой программе. Однако вам нужно будет общаться с клиентами и понимать, как работает математическая модель для системы.
Этап 3: Проектирование системы
Во время проектирования системы вы определяете шаги в программе.
Шаг 1. Попросите пользователя ввести годовую процентную ставку, количество лет и сумму кредита.
(Процентная ставка обычно выражается в процентах от основной суммы в течение одного года. Это называется годовой процентной ставкой.)
Шаг 2. Ввод годовой процентной ставки — это число в процентах, например, 4,5%. Программа должна преобразовать ее в десятичную цифру, разделив ее на 100. Чтобы получить ежемесячную процентную ставку от годовой процентной ставки, разделите ее на 12, так как год составляет 12 месяцев. Таким образом, чтобы получить ежемесячную процентную ставку в десятичном формате, вам необходимо разделить процентную ставку в процентах на 1200. Например, если годовая процентная ставка составляет 4,5%, то ежемесячная процентная ставка составляет 4,5 / 1200 = 0,00375.
Шаг 3. Вычислите ежемесячный платеж, используя предыдущую формулу.
Шаг 4. Вычислите общий платеж, который представляет собой ежемесячный платеж, умноженный на 12 и умноженный на количество лет.
Шаг 5. Выведите ежемесячный платеж и общий платеж.
Этап 4: Реализация
Реализация также известна как кодирование (запись кода). В формуле вы должны вычислить (1 + monthlyInterestRate)numberOfYears * 12, это можно получить используя Math.pow(1 + monthlyInterestRate, numberOfYears * 12).
Полный код программы:
import java.util.Scanner; public class ComputeLoan { public static void main(String[] args) { // Создаём Scanner Scanner input = new Scanner(System.in); // Введите процентную ставку в процентах, например, 7,25% System.out.print("Введите процентную ставку в процентах, например, 7,25%: "); double annualInterestRate = input.nextDouble(); // Получаем ежемесячную процентную ставку double monthlyInterestRate = annualInterestRate / 1200; // Введите число лет System.out.print( "Введите число лет как целое число, например, 5: "); int numberOfYears = input.nextInt(); // Введите сумму кредита System.out.print("Введите сумму кредита, например, 120000,95: "); double loanAmount = input.nextDouble(); // Вычисление платежа double monthlyPayment = loanAmount * monthlyInterestRate / (1 - 1 / Math.pow(1 + monthlyInterestRate, numberOfYears * 12)); double totalPayment = monthlyPayment * numberOfYears * 12; // Display results System.out.println("Ежёмесяынй платёж составляет $" + (int) (monthlyPayment * 100) / 100.0); System.out.println("Общий платёж составляет $" + (int) (totalPayment * 100) / 100.0); } }
Строка 10 считывает годовую процентную ставку, которая конвертируется в ежемесячную процентную ставку в строке 13.
Выберите наиболее подходящий тип данных для переменной. Например, numberOfYears лучше всего объявлять как int (строка 18), хотя она может быть объявлен как long, float или double. Обратите внимание, что byte может быть наиболее подходящим для numberOfYears. Однако для простоты примеры на этом сайте будут использовать int для целых чисел и double для значений с плавающей запятой.
Формула для расчета ежемесячного платежа преобразуется в код Java в строках 25-27.
Явное изменение типа данных (кастинг) используется в строках 31 и 33 для получения нового monthlyPayment и totalPayment с двумя цифрами после десятичных точек.
Программа использует класс Scanner, импортированный в строку 1. Программа также использует класс Math, и вам может быть интересно, почему этот класс не импортируется в программу. Класс Math находится в пакете java.lang, и все классы в пакете java.lang импортируются неявно. Поэтому вам не нужно явно импортировать класс Math.
Этап 5: Тестирование
После реализации программы протестируйте ее с помощью некоторых выборочных входных данных и проверьте правильность вывода. Некоторые из проблем могут быть связаны со многими случаями, как вы увидите в последующих главах. Для этих типов проблем вам необходимо разработать тестовые данные, которые охватывают все случаи.
Подсказка: в этом примере этап системного проектирования разбит на несколько этапов. Это хороший подход к коду, постепенно тестируйте эти шаги, постепенно добавляя новые. Такой подход упрощает выявление проблем и отладку программы.
Проверь себя:
Как бы вы записали следующее арифметическое выражение?