软件工程之基本概念
一、前言
最近在准备系统架构师软考高项的备考,把高项的教材粗略的过了一遍,发现好多不了解的概念和名称。虽然,每天的工作都是软件开发,学习的也是软件工程相关的专业,但是相关软件工程的概念都不是很清楚。主要原因还是在学习阶段都在关注编程语言、数据库、计算机基础、算法,对于偏向于软件工程的课程对日常的开发似乎没有实际作用,还记得是一个印度的外籍老师教授了这门课程。
结合在备考系统架构师的软考,重新学习软件工程,在实践的基础上学习一遍与照搬课程学习体会不一样。原来实践过程就是这个理论描述的一样,只是我们都是先进行大量的实践,研究各种开发技术、具体的语言、实际的项目上线等过程。所以本章就结合学习的内容和平时开发的总结对相关的概念做一个说明和对比。开发从实践中来,同时要结合理论,理解理论方法,更好的支持实践。
二、概念
软件工程中包含很多概念和理论,很多概念名词可能相差几个字的区别,意思完全不一样。比如软件架构风格、软件设计模式、软件开发模式(开发模型、开发过程)、软件开发规范、软件建模方法、软件开发方法、软件架构评估等基于软件工程的理论。
1、软件架构风格
定义:描述系统整体结构的高层抽象模式,定义了系统的组件类型、连接方式及交互规则。它决定了系统的组织方式,是系统设计的“骨架”。
特点:关注系统的整体结构(分层、微服务、事件驱动)、通用的解决方案(分布式系统、高并发场景)、影响非功能性需求(性能、扩展性、可维护性)、独立于具体的技术。
分类:5大经典风格包括数据流、调用/返回、独立构件、以数据为中心(仓库)、虚拟机的体系结构风格、其它风格。
表现:数据流风格(批处理、管道-过滤器)、调用/返回风格(主程序-子程序、面向对象、层次结构如两层CS/三层CS/三层BS/MVC/MVP/MVVM/RIA)、独立构件(进程通信、事件驱动)、虚拟风格(解释器、规则系统)、仓库风格(数据库、超文本系统、黑板)、其它风格(闭环控制风格、C2风格、面向服务的架构风格SOA、微服务架构风格)。
2、软件设计模式
定义:设计模式是针对具体编程问题的标准化解决方案,描述了如何组织类和对象之间的关系。它是代码级别的最佳实践,用于提高代码的可重用性、可读性和可维护性。
原则:6大原则包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖倒置原则(DIP)、迪米特法则(LoD)。
分类:3大类包括创建型模式、结构型模式、行为型模式。
表现:23种设计模式包括单例模式(Singleton)、原型模式(Prototype)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)、责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、模板方法模式(Template Method)、访问者模式(Visitor)。
3、软件开发模式
定义:描述软件开发流程的框架,定义了从需求到交付的各个阶段及其活动顺序。它关注的是 如何组织开发工作,而非系统的结构或代码设计。
表现:传统的瀑布模型、原型模型、螺旋模型、基于构件的开发模型(CBSD 微软的COM/DCOM、Corba、JAVA的EJB)、快速应用开发模型(RAD 瀑布模型+CBSD)、统一过程(UP/RUP)、敏捷开发(极限编程XP、SCRUM、特性驱动FDD、水晶方法、精益软件开发、开放式源码、动态系统开发DSDM等)、逆向工程(重构、逆向工程、设计恢复、正向工程、再工程)、增量模型等。
4、软件开发规范
定义:开发规范是指导软件开发整个生命周期的一套规则、标准和约定,涵盖代码编写、版本控制、测试、文档、安全等方面,确保团队一致性、质量和效率。
表现:代码规范(命名规则、格式化规则、注释规则)、接口设计规范(API设计原则、版本管理)、测试规范、文档规范(需求文档、API文档、数据库文档、设计文档),比如JAVA的阿里开发规范手册、.NET的最佳实践要求。
5、软件建模方法
定义:通过模型描述系统结构、行为和交互,辅助设计、分析和沟通。
表现:UML(统一建模语言)、DFD(数据流图)、E-R图(实体关系图)、状态图、模型驱动开发(MDD)。
6、软件开发方法
定义:软件开发方法是指导软件开发过程的技术和流程体系,涵盖需求分析、设计、编码、测试、维护等阶段。它关注如何系统化地组织开发活动。
表现:结构化法(自顶向下、逐步分解)、面向对象法OOP(自底向上开发方法)、面向服务的方法(SOA、微服务)、原型法(水平原型界面、垂直原型复杂算法、抛弃式原型、演化式原型)、形式化软件开发(净室工程)、统一过程方法(UP)、敏捷方法、基于架构的开发方法(ABSD)、DevOps方法(云原生、微服务架构)、模型驱动开发(MDD)。
7、软件架构评估
定义:软件架构评估是对系统架构的设计进行分析和验证,确保其满足功能性、非功能性需求(如性能、安全性、可扩展性)的过程。
方法:基于调查问卷/检查表的方式、基于场景的方式、基于度量的方式。
表现:基于场景的方式包括ATAM(架构权衡分析法):专注于性能、实用性、安全性和可修改性;SAAM(软件架构分析法):评估架构的可修改性和可维护性;CBAM(成本效益分析法):量化架构改进的成本与收益。
三、总结
上述7个概念,从解决软件工程的问题上,软件架构风格解决系统结构设计的问题;软件设计模式解决代码复用和可维护性的问题;软件开发模式解决项目管理和流程控制、团队协作和需求变更的问题;软件开发规范解决代码质量和一致性的问题;软件建模方法解决需求分析、系统设计阶段的系统描述和视觉化;软件开发方法解决技术与流程体系,软件开发全生命周期问题;软件架构评估解决架构质量验证问题。
在项目开发中,对于软件工程的内容在实践过程中都涉及到,从项目的开始到项目的结束无形中运用上述理论知识。通过系统的总结来记录相关概念,概念主要内容来来源于AI问答的结果。

浙公网安备 33010602011771号