代码中的软件工程

本文详细介绍了软件工程的各个方面,包括软件工程的基本概念、开发工具的使用(如VScode、git、Vim和正则表达式)、代码规范与设计模式、模块化设计和接口定义、需求分析的重要性以及软件架构的设计和描述方法。同时,讨论了不同软件过程模型,如瀑布模型、螺旋模型和敏捷开发。通过深入探讨,读者将对软件工程的实践流程有更深刻的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

什么叫软件工程

工欲善其事必先利其器

VScode 

git

Vim

正则表达式

1、作用(正则表达式是一种字符串匹配的模式)

2、语法(普通字符+特殊字符)

代码中的软件工程

模块化的基本原理

模块化设计的常见方法

本地化外部接口的含义

接口的基本概念

接口的五个基本要素

通用接口定义的基本方法

可重入函数与线程安全

从需求分析到软件设计

什么是需求分析

为什么需求重要

获取高质量需求的方法

高质量需求的特点

需求类型

需求分析的两类基本方法

用例满足的四个必要条件

用例的抽象层级

用例建模的基本步骤

统一过程的核心要义

敏捷统一过程的四个关键步骤

形成软件设计方案的基本方法

软件科学基础概论

软件中的一些特殊机制

设计模式

常见的设计模式

设计原则

开闭原则(Open Closed Principle,OCP)

Liskov替换原则(Liskov Substitution Principle,LSP)

依赖倒置原则(Dependence Inversion Principle,DIP)

单一职责原则(Single Responsibility Principle,SRP)

迪米特法则(Law of Demeter,LoD)

合成复用原则(Composite Reuse Principle,CRP)

创建型模式

单例模式

原型模式

建造者模式

结构型模式

代理模式

适配器模式

行为型模式

策略模式

命令模式

模板方法模式

职责链模式

中介者模式

常见的软件架构举例

三层架构

MVC

MVVM

软件架构的描述方法

分解视图

依赖视图      

泛化视图

执行视图

实现视图

部署视图

工作分配视图

软件过程模型

瀑布模型

原型化的瀑布模型

v模型

螺旋模型

PSP、TSP

团队强度和项目特点的关系

团队项目的基本策略

CMM/CMMI

敏捷宣言的核心思想

DevOps

总结

参考资料



什么叫软件工程

        当软件的规模越来越大,复杂度不断增加,软件项目开发维护过程中的问题就逐步暴露出来:软件产品质量低劣、软件维护工作量大、成本不断上升、进度不可控、程序人员无限度地增加。所以在 60 年代,“软件危机”的概念被提出来。

        为解决软件危机,由此出现了一门新兴的工程学科:软件工程。软件工程就是要用工程化的方法去规范软件开发,让项目可以按时完成,成本可控,指令有保证

工欲善其事必先利其器

VScode 

        快捷键:Ctrl+Shift+P调出VS Code命令行,Ctrl+~ 调出VS Code的终端,Ctrl/⌘+Shift+E 文件资源管理器,Ctrl/⌘+Shift+G 源代码管理,Ctrl/⌘+Shift+F 跨文件搜索,Ctrl/⌘+Shift+D 启动和调试,Ctrl/⌘+Shift+M 查看错误和警告,Ctrl/⌘+Shift+X 管理扩展插件。

git

git init # 初始化一个本地版本库
git status # 查看当前工作区(workspace)的状态
git add [FILES] # 把文件添加到暂存区(Index
git commit -m "wrote a commit log infro ” # 把暂存区里的文件提交到仓库
git log # 查看当前HEAD之前的提交记录,便于回到过去
git reset —hard HEAD^^/HEAD~100/commit-id/commit- id的头几个字符 # 回退
git reflog # 可以查看当前HEAD之后的提交记录,便于回到未来
git reset —hard commit-id/commit- id的头几个字符 # 回退

Vim

命令模式(Command mode), 用户刚刚启动vi /vim,便进入了命令模式。此状态下敲击键盘动作会被vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令
输入模式(Insert mode), 在命令模式下按下i就进入了输入模式,按ESC退出输入模式,切换到命令模式
底线命令模式(Last line mode), 在命令模式下按下 :( 英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。基本的命令有q(退出程序 )、 w(保存文件)等。按ESC键可随时退出底线命令模式

正则表达式

1、作用(正则表达式是一种字符串匹配的模式)

数据验证:比如电话号码、邮箱等

替换文本:快速找到特定文本,用于替换

快速提取字符串:基于匹配原则,快速从文档中查找或提取子字符串

2、语法(普通字符+特殊字符)

普通字符

[abc] 匹配[...]的所有字符

[^abc] 取反,除了[...]的其他字符

[A-Z] 区间字母A到Z

. 匹配除(\n换行符 \r 回车符)的任何单个字符

\s \S 匹配所有,\s所有空白符,包括换行 \S非空白符,不包括换行

\w 匹配字母、数字、下划线

特殊字符

$ 结尾位置 (匹配$字符----\$)

^ 开始位置(匹配$字符----\^)

() 子表达式开始和结束(匹配字符----\(   和  \))

* 匹配零次或多次(匹配字符----\*)

+ 匹配一次或多次(匹配字符----\+)

? 匹配零次或一次(匹配字符----\?)

代码中的软件工程

什么样的代码是好代码?

一是规范整洁。遵守常规语言规范,合理使用空格、空行、缩进、注释等

二是逻辑清晰。没有代码冗余、重复,让人清晰明了的命名规则。做到逻辑清晰不仅要求程序员的编程能力,更重要的是提高设计能力,选用合适的设计模式、软件架构风格可以有效改善代码的逻辑结构,会让代码简洁清晰;

三是优雅。优雅的代码是设计的艺术,是编码的艺术,是编程的最高追求

模块化的基本原理

关注点的分离,每一个软件模块都将只有一个单一的功能目标,并相对独立于其他软件模块,使得每一个软件模块都容易理解容易开发,从而整个软件系统也更容易定位软件缺陷bug,整个系统的变更和维护也更容易

模块化设计的常见方法

KISS原则:一个函数或方法只做一件事 使用本地化外部接口来提高代码的适应能力 不要和陌生人说话 先写伪代码 设计通常为每一个程序组件提供一个框架,然后用专业知识来编写代码实现设计 一定要有错误处理

本地化外部接口的含义

我们的代码不是通过API直接调用外部的代码,而是在我们的代码中调用本地的外部接口,本地的外部接口再去调用外部代码

接口的基本概念

接口就是互相联系的双方共同遵守的一种协议规范,通常是通过定义一组API函数来约定软件模块之间的沟通方式

接口的五个基本要素

目的;前置条件;使用接口的双方遵守的协议规范;后置条件;隐含的质量属性

通用接口定义的基本方法

参数化上下文;移除前置条件;简化后置条件

可重入函数与线程安全

可重入的函数可能是线程安全的也可能不是线程安全的;在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题 不可重入的函数一定不是线程安全的

从需求分析到软件设计

什么是需求分析

需求分析是在获取需求的基础上进一步对软件涉及的对象或实体的状态、特征和行为进行准确描述或建模的工作

为什么需求重要

不完整的需求是导致项目失败的主要因素,需求过程的某些部分设计是大部分项目失败的原因,如果不尽早检测到需求错误,代价可能会很高

获取高质量需求的方法

采访利益相关者、回顾文档、研究当前系统、了解用户的任务、使用特定领域的策略、与当前和潜在用户进行头脑风暴

高质量需求的特点

Correct正确的、Consistent一致的、Unambigious无二义性的、Complete完整的、Feasible可行的、Relevant和主要目标相关、Testable可测试的、Traceable可追踪的

需求类型

功能要求:根据所需活动描述所需行为

质量要求或非功能性要求:描述软件必须具备的一些质量特征</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值