从知识视角理解软件开发

2024-09-07 06:28

本文主要是介绍从知识视角理解软件开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

软件构造中的核心知识:业务知识与架构知识

在软件构造过程中,最关键的两类知识是业务知识架构知识。业务知识回答“什么是正确的软件”,而架构知识解决“如何正确地构造软件”。从这两个方面深入理解软件构造,可以帮助我们在设计和开发过程中做出更明智的决策。

1. 业务知识:定义正确的软件

业务知识是关于如何解决现实问题的知识,包括业务的目标、规则、限制、和已有的解决方案。它定义了“正确的软件”是什么,即软件应实现哪些功能来满足业务需求。

  1. 业务知识的来源与特点

    • 问题驱动:业务知识源于对现实世界问题的理解,是为了在软件中解决这些问题。
    • 不等同于功能点:业务知识并非直接对应软件的功能点,而是表现为待解决的问题、规则和限制条件。在软件实现中,业务知识才映射为功能点。例如,同样的审批流程,现实中可能用邮件、微信群完成,而在软件中可能通过OA系统的特定工作流实现。
    • 组织与流程的影响:业务知识不仅存在于软件系统中,还嵌入在组织的流程与人员中。当软件接手部分业务知识或改变其范围时,往往伴随组织流程的变更,如从邮件办公模式切换到微信办公模式,组织的流程会相应调整。
  2. 业务知识在软件研发中的作用

    • 传递与学习过程:软件研发是业务知识的传递与学习过程,研发流程因此具备迭代特性。每次迭代包括:探测(构建软件)、感知(反馈验证)、响应(改进方案)。在产品生命周期内,这一过程类似于精益创业中的“构建-度量-学习”循环,持续验证软件是否满足业务需求。
    • 转化为软件需求:在研发之前,需要将业务知识转化为目标解决方案(如业务架构愿景)。根据这一解决方案,将业务知识分解为具体的软件需求,定义不同业务模块的功能。
  3. 复杂认知模式:业务知识的转化过程充满不确定性,体现为复杂的认知模式:

    • 感知:对业务问题的初步理解。
    • 分析:根据业务架构或解决方案进行问题处理。
    • 响应:生成软件需求,分配给不同的业务模块。
2. 架构知识:正确构造软件的方法

架构知识是关于如何有效构造软件的知识,涵盖技术决策和设计模式,解决软件的性能、可靠性、可扩展性等非功能性需求,保证软件能够正确实现业务需求。

  1. 架构知识的来源与特点

    • 技术视角的解决方案:架构知识从技术视角定义系统结构和组件交互方式,解决性能、扩展性、安全性等非功能性问题,是软件系统的技术蓝图。
    • 影响非功能性质量:架构知识直接影响系统的整体质量,如性能优化、可靠性保障和可扩展性设计。这些非功能性质量虽然用户不直接感知,但对用户体验至关重要。
    • 任务分解的指导:架构知识在任务分解过程中发挥指导作用,确保软件需求正确映射到架构组件,避免架构腐化(即任务划分错误导致的架构失效)。
  2. 架构知识在软件构造中的作用

    • 设计与决策依据:架构知识用于制定设计决策,如选择合适的技术栈、确定系统分层、定义服务接口等。这些决策影响软件的开发效率和质量。
    • 指导功能与非功能性质量平衡:架构知识帮助团队在构造过程中平衡功能性与非功能性质量,确保软件不仅满足业务功能,还具备良好的性能、安全性和可用性。
    • 任务分解与架构腐化:通过架构指导任务分解,将需求按架构规则分配到合适的组件。架构腐化往往源于分解过程中架构未能有效指导,导致持续的错误划分。
  3. 庞杂认知模式:架构知识的应用也遵循庞杂模式:

    • 感知:对软件问题的初步理解。
    • 分析:根据架构处理问题,进行技术分析和设计。
    • 响应:分解任务到架构组件,确保系统整体协调。
3. 功能性与非功能性质量的平衡

在软件构造过程中,功能性质量非功能性质量相辅相成,软件既要实现其核心任务,又需在性能、安全性、可用性等方面表现出色。为了实现这一平衡,需采用综合的质量保证措施:

  1. 代码审查:建立在反馈基础上的复杂模式措施,主要包括探测(成员实现功能)、感知(团队反馈评估)、响应(改进方向)。

  2. 测试策略:基于分析的庞杂模式措施,包括感知(理解需求边界)、分析(分解为不同种类测试)、响应(完成测试)。

总结

业务知识与架构知识在软件构造中的作用分别回答了“什么是正确的软件”和“如何正确构造软件”这两个核心问题。通过理解这两类知识及其应用场景,可以有效指导软件研发的每一个环节,确保软件既符合业务需求,又能在技术上稳定、高效地运行。

这篇关于从知识视角理解软件开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144307

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝