Назовите наиболее важные качества программных продуктов

Если идет речь о характеристиках, свойствах и качествах ПО, всегда необходимо уточнять, какого рода и с какой точки зрения рассматриваются характеристики программ. Пользовательская и "девелоперская" точки зрения на наиболее важные характеристики программ различаются.

С точки зрения пользователя наиболее важны следующие качества программ:

- Работоспособность, полезность: программа должна прежде всего работать и выполнять то, что от нее требуется;

- Дружественный к пользователю интерфейс (преимущественно – Web-интерфейс): программой должно быть удобно пользоваться, причем, наиболее желательно, - с минимальной нагрузкой на пользовательскую компьютерную систему и минимальными требованиями к пользователю по ресурсам; с данной последней точки зрения как раз и удобны облачные вычисления;

- Надежность, безопасность, защита конфиденциальных данных (соблюдение принципов Trustworthy Computing - TWC): программа должна надежно и стабильно работать и обеспечивать защиту от возможных внешних угроз и атак, как на саму программу, так и на используемые, создаваемые и обрабатываемые ею данные.

С точки зрения разработчика наиболее важными признаются следующие качества программы:

  • Повторная используемость модулей (reusability); компонентно-ориентированное программирование (component-oriented programming): не следует программировать однотипный код (например, поиск по списку) повторно, вместо этого следует использовать на каждом этапе разработки уже готовый и проверенный код. в виде программных компонент (модулей), предпочтительнее – из стандартных (встроенных в платформу) библиотек. Кстати, это один из принципов trustworthy computing: используйте проверенный готовый код, так как дублирование похожего кода может ухудшить надежность и безопасность программы;
  • Модульность (modularity) – разработка программы в виде взаимосвязанной совокупности относительно независимых программных компонент – модулей, каждый из которых решает свою четко определенную задачу и которые могут быть представлены в виде классов и их методов, процедур и функций, макросов, аспектов, сопрограмм и др.
  • Эффективность (efficiency) – оптимальность программы, согласно тому или иному критерию (например, минимальность времени выполнения; минимальность объема используемой памяти). При оценке эффективности программы необходимо четко сформулировать критерий; всем критериям одновременно удовлетворить невозможно. Говорить об абстрактно понимаемой "эффективности вообще" не имеет смысла. Природа и поведение программ диалектичны. Например, если программа оптимальна по времени, то для этого оказывается необходимым использование дополнительной памяти (например, индексной таблицы для ускорения поиска) и т.д.
  • Переносимость (portability) – возможность переноса программы без изменения ее кода на другую платформу и ее последующего использования на другой платформе без каких-либо ее изменений. Переносимости программ могут помешать неявно используемых в них предположения о свойствах целевой платформы, например, различная разрядность чисел на различных процессорах. С этой точки зрения, наиболее предпочтительна Java-технология, предоставляющая единый высокоуровневый язык Java и единую виртуальную среду выполнения и реализованная на всех наиболее распространенных платформах (Windows / x86 / x64; Linux; MacOS и др.).
  • Познаваемость (читаемость - readability); легкость сопровождения (maintainability; sustainability) – ясность, понятность, самодокументируемость кода программы, использование единых стандартов его оформления, которые способствуют последующему изучению и изменению кода (как правило, другими программистами), с целью исправления ошибок в программе или расширения ее функциональности. К сожалению, не всегда программисты или даже фирмы-разработчики следуют этому принципу, в результате чего затраты на сопровождение оказываются недопустимо высокими.
  • Применение принципов TWC (trustworthy computing)и SDLC (Security Development Life Cycle) при проектировании и реализации. Об этом уже говорилось. Необходимо учитывать требования безопасности и надежности, начиная с самых ранних этапов цикла разработки программы и на всех этапах ее разработки, иначе серьезные проблемы безопасности возникнут при эксплуатации и сопровождении программы, что в конечном счете может вообще привести к невозможности дальнейшего использования программы