程序设计及软件工程(选学)

官方信息技术老师·11 页·深入(追求细节与边界)·0 次浏览·3 天前
软件工程设计原则开发模型工程实践

程序设计及软件工程(选学

看懂软件从需求到维护的全周期,掌握设计原则背后的工程边界与失效判断

按 空格/→ 演示下一步

1 / 11 页

全部页面点击任意一页,跳回舞台从这页播放

软件工程设计原则开发模型工程实践

程序设计及软件工程(选学

看懂软件从需求到维护的全周期,掌握设计原则背后的工程边界与失效判断

1第 1 页 · 程序设计及软件工程(选学

程序设计方法与风格

接手别人项目最头疼的常不是逻辑看不懂,而是「这代码怎么写的这么别扭」——命名随意、嵌套五层、一个函数八百行。背后其实是两件事:方法没选对,还是风格没养成。

方法范式
组织程序的根本思路:结构化(过程分解)、面向对象(对象封装)、面向服务/函数式(职责组合)
风格目标
可读性(人看懂)、可维护性(改得动)、可重用性(搬得走)、可靠性(少出错)
风格抓手
命名一致、函数短小、注释恰当、模块边界清晰、控制圈复杂度
二者关系
方法决定骨架,风格决定血肉;选错方法是设计问题,风格差是工程素养问题
写文章对应 →程序设计

方法对应文体(论文/小说),风格对应笔法(用词/句式/节奏)

2第 2 页 · 程序设计方法与风格

面向对象的程序设计

上节谈了程序设计方法与风格——结构化、模块化、自顶向下。但程序膨胀到几十万行后,数据和函数散落各处,改一处要追十几个调用。OO 把数据与对它的操作绑成一个整体,改变组织单位。

类与对象
类是模板,规定有什么数据、能做什么事;对象是模板的实例
封装
把数据和方法打包,隐藏内部细节,只对外暴露必要的接口
继承
子类复用父类的属性与方法,并能扩展或重写
多态
同一接口在不同对象上有不同实现,调用时自动分派到具体版本
汽车制造模具图纸对应 →类与对象

图纸规定车的属性与方法,每台实车就是一个对象;改一处图纸,所有新车跟着变——这就是改类

3第 3 页 · 面向对象的程序设计

软件工程基本概念

你写一个 100 行的程序,一个人随性发挥没问题。可当代码涨到 10 万行、十几人协作、还要用上五年——光靠「风格」就远远不够,需要把开发过程当成工程来管。这就是软件工程。

定义
将工程化的原理、方法和工具系统地应用于软件的开发与维护
核心目标
在限定时间与成本下,交付满足需求、可靠且可维护的高质量软件
软件生命周期
需求分析→设计→编码→测试→运行维护的完整阶段划分
过程模型
瀑布、迭代、敏捷等组织开发节奏的不同方式
典型应用场景
大型团队协作、长生命周期产品、高可靠性关键系统
盖一栋大楼对应 →软件工程

设计图/施工队/监理/验收,对应需求/开发团队/测试/维护

4第 4 页 · 软件工程基本概念

结构化设计方法

前面讲软件工程时说过,大型软件要"可控"。结构化设计就是那个年代给出的答案:把庞大系统像切蛋糕一样层层分解,每切一刀都有讲究。

自顶向下分解
从系统目标起,逐层拆为子系统、模块、子模块
模块独立性
模块功能单一、接口明确,可独立编、测、改
高内聚低耦合
模块内元素紧密相关,模块间尽量少牵扯
三种基本结构
顺序、选择、循环,任意算法都由它们组合
数据流分析法
按数据流向分变换型与事务型,分别设计模块
公司组织架构图对应 →模块层次结构

CEO对应系统总目标,部门→子系统,团队→模块;每层只看直接下属,下层细节对上层透明

5第 5 页 · 结构化设计方法

结构化分析方法

结构化分析方法:定义、要点与典型应用

结构化分析方法
结构化分析方法:定义、要点与典型应用
6第 6 页 · 结构化分析方法

软件测试

前几页讲了怎么分析、怎么设计,程序写完了,但能直接上线吗?不行——还要过一道关:软件测试。

测试的目的
验证(V&V)软件符合规格;目标是发现缺陷,而非证明正确
测试层次
单元→集成→系统→验收,四级由小到大、由内向外逐层验证
测试方法
黑盒看输入输出;白盒审视内部代码逻辑
核心原则
测试只能证错不能证无;尽早测试;缺陷聚集成群;测试依赖上下文
汽车出厂前的质检对应 →软件测试

零件=单元;装配=集成;整车路测=系统;用户试驾=验收

缺陷密度=缺陷数KLOC(千行代码)\text{缺陷密度}=\dfrac{\text{缺陷数}}{\text{KLOC}}\,(\text{千行代码})
7第 7 页 · 软件测试

二级C考点解析之程序设计

代码写出来是给机器执行的,但维护时是给人读的。二级C常考'程序设计方法与风格',核心是结构化三大基本结构和良好的编码习惯。

结构化程序设计
Dijkstra提出:任何程序都由顺序、选择、循环三种基本结构组合而成
面向对象方法
以对象为核心,通过类、封装、继承、多态等机制组织程序
源程序文档化
标识符命名见名知意、注释充分合理、程序视觉组织清晰
数据说明与语句
数据说明顺序规范、语句简单直接、避免滥用goto转移
输入输出风格
提示输入、格式对齐、对输入数据合法性进行检查
写菜谱给新手对应 →程序设计与风格

菜谱逻辑决定能不能做出来,命名/注释/排版决定新手能不能照着做对

8第 8 页 · 二级C考点解析之程序设计

二级C考点解析之面向对象

上页我们梳理了程序设计方法与风格,知道结构化程序设计把任务拆成函数执行。面向对象则换了思路——把'数据'和'操作数据的方法'打包成一个整体。考试考的就是这套思路的关键词。

三大特性
封装、继承、多态,面向对象的核心支柱
类与对象
类是抽象模板,对象是具体实例(一对多)
消息传递
对象间通过发送消息通信,而非直接调用
继承与派生
子类复用父类属性与方法,支持代码复用
手机设计图纸与量产机对应 →类与对象

图纸就是'类',每台出厂手机就是一个'对象'

9第 9 页 · 二级C考点解析之面向对象

本节要点

  • 方法选择看规模:小型用结构化,大型用面向对象
  • 软件工程核心是分而治之:分析→设计→测试各管一段
  • 结构化分析回答做什么,设计回答怎么做
  • 面向对象的三大特性,本质都为了应对需求变化
  • 二级C侧重概念辨析和代码阅读,非大型项目开发
延伸主题:软件开发模型与生命周期UML面向对象建模软件项目管理实践
10第 10 页 · 本节要点

课后思考

先合上书自己想一想,再点开参考答案对照思路。

1软件测试中黑盒与白盒各自关注什么?为什么说两者都不能互相替代?

参考答案黑盒关注输入输出功能,不看内部代码;白盒基于内部逻辑设计用例。功能正确不代表所有路径都被覆盖,所以两者互补,缺一不可。

2开发一个小型图书馆管理系统,你会先用结构化方法还是面向对象方法建模?为什么?

参考答案看场景。流程固定、数据驱动选结构化;业务多变、需扩展选面向对象。也可先用结构化梳理流程,再识别对象过渡到OO。

3在微服务架构下,传统意义上的'模块'还清晰吗?'高内聚低耦合'是否仍然适用?

参考答案微服务把'模块'推到进程/容器级别,独立部署更强。但跨服务耦合(接口契约、数据一致性)更复杂,原则仍适用,只是粒度变了。

11第 11 页 · 课后思考