发布时间:2026/7/6 2:00:56
计算机导论_第9章_笔记
第9章 软件工程主要内容软件工程的概念软件开发模型软件开发方法软件测试一、软件工程的概念1.1 软件及其特性软件是什么软件是计算机系统中与硬件相互依存的另一部分它是包括程序、数据及其相关文档的完整集合。程序按事先设计的功能和性能要求执行的指令序列数据使程序能正常操纵信息的数据结构文档与程序开发、维护和使用有关的图文材料软件的特性软件是一种逻辑实体而不是具体的物理实体因而它具有抽象性软件的生产与硬件不同在它的开发过程中没有明显的制造过程在软件的运行和使用期间没有硬件那样的机械磨损、老化问题软件的开发和运行常受到计算机系统的限制对计算机系统有着不同程度的依赖性软件本身是复杂的实际问题的复杂性程序逻辑结构的复杂性虽然整个工业向着基于构件的构造模式发展但是大多数软件是根据实际的顾客需求定制的软件的发展历程时期特点早期“Software” 将一系列指令组合在一起让计算机做有用的事1950年代后期计算机变得更便宜和普遍高级语言被发明1960年代早期只有少数专家完成大型软件项目1960年代中后期真正的大型软件系统开始尝试1968年以后软件工程Software Engineering诞生1.2 软件危机Software Crisis典型案例IBM 360操作系统美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人/年的工作量最多时有1000人投入开发工作写出了近100万行源程序。据统计这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。该项目负责人F. D. Brooks事后总结“正像一只逃亡的野兽落到泥潭中做垂死的挣扎越是挣扎陷得越深最后无法逃脱灭顶的灾难。程序设计工作正像这样一个泥潭……”软件危机的表现项目没有被很好地理解计划不周最终导致进度拖延没有充分的文档资料documentation软件可靠性reliability缺少度量的标准质量无法保证软件难以维护maintainability不易升级evolvability软件危机的根源与解决思路问题原因解决方法开发周期过长软件行业发展太快经验总结不足多实践积累成功和失败案例开发成本过高对自身处理能力认识不清总结、思考、提取经验难以发现所有错误——建立软件的模型和模式开发过程难以度量——更好的管理、团队组织、语言与工具、统一编码规范核心认识“软件” ≠ 编程它有自己的生命周期life cycle。大型软件系统的开发与建造桥梁、制造飞机、轮船等工程项目的开发同理。1.3 软件工程定义“软件工程”Software Engineering一词于1968年 NATO 会议德国 Garmisch上正式提出。定义软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。提出者/机构定义Boehm运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料IEEE软件工程是开发、运行、维护和修复软件的系统方法Fritz Bauer建立并使用完善的工程化原则以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法软件工程三要素要素说明方法完成软件开发各项任务的技术方法工具为方法的运用提供自动或半自动的支撑环境过程为开发高质量软件所规定的各项任务的工作步骤1.4 软件生存周期软件生存周期是指从用户需求开始经过开发、交付使用在使用中不断地增补修订直至让位于新的软件的全过程。一般包括阶段概念阶段 → 需求阶段 → 设计阶段 → 实现阶段 → 测试阶段 → 安装阶段 → 交付使用阶段 → 运行阶段 → 维护阶段注意软件成本应以软件生存期的全部费用作为计算标准。二、软件开发模型软件开发模型是软件开发全部过程、活动和任务的结构框架。它清晰、直观地表达软件开发全过程明确规定了要完成的主要活动和任务。2.1 瀑布模型Waterfall Model问题定义 → 可行性研究 → 需求分析 → 设计 → 编码 → 测试 → 运行与维护各阶段产出阶段产出物问题定义目标与范围说明书可行性研究可行性论证报告需求分析需求说明书设计设计文档编码程序测试测试报告运行与维护维护报告特点属于整体开发模型规定在开始下一个阶段的工作之前必须完成前一阶段的所有细节。2.2 增量模型Incremental Model定义概要需求 → 把需求分配给增量 → 设计系统结构 → 开发系统增量 → 验证增量 → 组装增量 → 验证系统 → 最终系统特点属于非整体开发模型推迟某些阶段或所有阶段中的细节从而较早地产生工作软件。瀑布模型 vs 增量模型对比维度瀑布模型增量模型开发方式整体开发非整体开发阶段推进前阶段完成所有细节后才能进入下一阶段推迟部分细节早期就能交付可用软件交付节奏晚期一次性交付早期逐步交付2.3 演化模型Evolutionary Model第一次试验性开发出的软件称为原型prototype。流程R1需求1→ D设计→ C/T编码/测试→ I/AS安装和验收支持→ 工作版本1 ↓ R2需求2→ D → C/T → I/AS → 工作版本2 ↓ …… ↓ Rn → 工作版本n逐步细化2.4 螺旋模型Spiral Model对于大型软件只开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来并加入了风险分析。每个螺旋周期的4个工作步骤确定目标、方案和限制条件评估方案、标识风险和解决风险开发确认产品客户评估计划下一周期工作三、软件开发方法3.1 评价软件开发方法的四个特征特征维度具体内容技术特征层次性、抽象性、并行性、安全性、正确性等使用特征易理解性、易修改性、可移植性、工具的支持、可复用性、任务范围、使用频度等管理特征易管理性、成本估算、配置管理等经济特征各种效益与代价3.2 软件开发方法分类注意由于软件与程序是不同的概念软件开发方法与程序设计方法是两个不同的概念。软件开发方法可以是针对局部的也可以是针对全局的。分类说明面向过程的开发方法典型包含分析、设计、实现、确认测试、演化维护等活动面向对象的开发方法以数据或信息为主线把数据和处理结合构成统一体——对象基于构件的开发方法使用可复用的软件构件构建系统3.3 面向过程的开发方法这类开发方法都典型地包含了分析、设计、实现、确认测试、演化维护等活动。典型的传统开发方法Jackson方法、结构化开发方法、原型化方法、HIPO法、IDEF法等。3.4 面向对象的开发方法OOSDOOSDObject-Oriented Software Development是80年代推出的一种全新的软件开发方法被誉为90年代软件的核心技术之一。核心概念对象Object 数据Attribute 操作Method对象内部的属性不允许外部用户直接改动只有当它提供了相应的**服务method时用户才能通过发送消息message**来提请它执行。面向对象方法OOM的四大要素要素说明例对象Object世界由对象构成一个邮局对象有 location、employee 等属性和 send、sell 等方法类Class物以类聚具有相同数据结构和相同操作的对象的集合class Post_office { ... }定义邮局类的模板继承Inheritance类可分层下层子类与上层父类有相同特征子类复用父类的定义无需修改父类消息Message对象间只能通过发送消息进行联系My_PO.Send(My_request, My_payment)代码示例classPost_office{private:loc_type location;emp_type employee;// ……public:voidsend(req_type request,money_type payment);voidsell(intgoods,money_type payment);// ……};main(){Post_office My_PO;req_type My_request;money_type My_payment;// ……My_PO.Send(My_request,My_payment);// ……}OOM 公式OOM Object Class Inheritance Communication with messages3.5 统一建模语言UMLUMLUnified Modeling Language诞生的初衷是统一面向对象领域中的多种方法形成大家一致认可的一套建模方法。UML 五大视图视图关注点包含模型图用例视图Use Case View系统外部功能描述、需求分析交互图、状态图、活动图逻辑视图Logical View设计词汇的逻辑结构、类/接口及其关系相当于电路原理图类图、对象图、交互图、状态图、活动图实现视图Implementation View物理部件组合成可运行系统部件图、交互图、状态图、活动图分布视图Deployment View软件在硬件和网络上的安装、分发、分布分布图、交互图、状态图、活动图进程视图Process View性能、稳定性、吞吐率——设计视图和进程视图又可被统一称为逻辑视图Logical View。3.6 软件复用和构件技术软件重用/复用Software Reuse将已有的软件成分用于构造新的软件系统。该技术是提高软件生产率和质量、降低成本的有效方法。软件构件软件构件是指在软件系统设计中能够重复使用的建构模块构件包装了一系列相互关联的操作和服务。与其他可复用软件模块的区别构件既能在设计时使用修改也能在二进制执行模块时使用或修改。构件特点构件优点高层对象技术独立于语言和面向应用程序提高开发速度只规定构件外部表现和接口不关心内部实现降低开发成本使用构件开发软件变得简单、快速和成本低廉增强应用程序灵活性使用构件必须解决复用和互操作问题降低软件维护费用四、软件测试4.1 软件测试的意义在软件开发的一系列阶段和步骤中出现错误的时机很多软件需求的描述可能有错和不完善软件的设计可能有错软件的编码可能有错结论为了发现软件缺陷软件测试必不可少。4.2 什么是软件测试定义一IEEE 标准使用人工或自动的手段来运行或测定某个系统的过程其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。定义二G.J. Myers《软件测试之艺术》“程序测试是为了发现错误而执行程序的过程。”测试的三个核心观点观点内容①测试是为了证明程序有错而不是证明程序无错误②一个好的测试用例在于它能发现至今未发现的错误③一个成功的测试是发现了至今未发现的错误的测试重要认识测试只能表明软件中存在错误不能表明软件中不存在错误。软件测试的目的是发现问题、对质量或可接受性做出判断。4.3 软件测试的流程测试需求分析 → 制定测试计划 → 设计测试用例 → 执行测试 → 提交缺陷报告 → 生成测试总结和报告步骤内容测试需求分析确定测试对象、测试范围等制定测试计划测试工作量估算、资源估算、进度安排、风险评估、制定策略等设计测试用例核心步骤针对要测试的内容设计一组测试用例执行测试——提交缺陷报告——生成测试总结和报告——4.4 测试用例测试用例 输入 预期输出组成部分说明输入输入和前提前置条件在测试用例执行之前已经存在的环境预期输出输出和后果后置条件在测试用例执行之后将产生的环境测试结果实际执行结果与预期结果是否一致4.5 测试方法按是否执行程序划分类型说明动态测试通过运行被测试程序来达到测试的目的静态测试不运行被测试程序仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性按是否查看代码划分类型别称说明黑盒测试功能性测试、基于规格说明的测试不关心内部结构只关注输入输出白盒测试结构性测试、透明盒测试、玻璃盒测试、基于程序的测试利用程序内部逻辑结构设计测试用例灰盒测试介于白盒与黑盒之间通过反编译等手段获得部分代码结构信息进行测试4.6 黑盒测试 —— 边界值测试示例三角形问题题目输入三个整数 a、b、c作为三角形三边的边长取值范围 [1, 200]输出由这三条边所确定的三角形类型等边三角形、等腰三角形、普通三角形或非三角形输入条件1 ≤ a ≤ 200 a b c 1 ≤ b ≤ 200 b a c 1 ≤ c ≤ 200 c a b变量的边界值设计取边界及附近值a {1, 2, 100, 199, 200}b {1, 2, 100, 199, 200}c {1, 2, 100, 199, 200}4.7 白盒测试利用程序内部的逻辑结构及有关信息设计或选择测试用例。一般原则保证模块中所有的独立路径至少被执行一次保证条件语句的每一个分支至少被执行一次保证循环语句都在边界条件和一般条件下至少被执行一次验证所有内部数据结构的有效性逻辑覆盖示例代码Procedure example(A, B: real; Var X: real) begin if (A 1) and (B 0) then X X / A; if (A 2) or (X 1) then X X 1; end程序包含4条路径路径路径走向L1a → c → eL2a → b → dL3a → b → eL4a → c → d语句覆盖SC — Statement Coverage定义保证被测试程序中的每一个语句至少执行一次特点语句覆盖是最弱的覆盖准则例满足语句覆盖的测试用例【(2, 0, 4)(2, 0, 3)】覆盖路径 L1a→c→e。因为所有可执行语句都在 L1 上选择 L1 设计测试用例即可覆盖所有语句。测试用例格式【输入的(A, B, X)预期输出的(A, B, X)】判定覆盖DC — Decision Coverage定义又称分支覆盖保证程序中每一个判断的取真分支至少经历一次取假分支至少经历一次例选择路径 L1 和 L2即可满足判定覆盖【(2, 0, 4)(2, 0, 3)】覆盖 L1a→c→e—— 真分支【(1, 1, 1)(1, 1, 1)】覆盖 L2a→b→d—— 假分支

相关新闻

Windows LTSC 与常规版本对比:5个关键维度解析稳定性与功能取舍
2026/7/6 2:00:56

Windows LTSC 与常规版本对比:5个关键维度解析稳定性与功能取舍

Windows LTSC 与常规版本对比:5个关键维度解析稳定性与功能取舍在技术选型的十字路口,Windows LTSC(长期服务频道)与常规版本(如Windows 11 Pro/Home)的抉择往往让决策者陷入两难。本文将深入剖析两者的核心…

阅读更多
Haiwell Cloud SCADA 3 与主流 PLC 协议对比:支持 3 类设备驱动的连接实测
2026/7/6 2:00:56

Haiwell Cloud SCADA 3 与主流 PLC 协议对比:支持 3 类设备驱动的连接实测

Haiwell Cloud SCADA 3 与主流 PLC 协议深度兼容性实测报告在工业自动化系统集成领域,多品牌PLC设备的互联互通一直是工程师面临的现实挑战。海为科技最新发布的Cloud SCADA 3版本以"内置多种工业设备驱动"为核心卖点,宣称能够无缝对接西门子、…

阅读更多
数字通信同步技术:3种载波同步方法对比与低信噪比场景实战
2026/7/6 2:00:56

数字通信同步技术:3种载波同步方法对比与低信噪比场景实战

数字通信同步技术:3种载波同步方法对比与低信噪比场景实战在数字通信系统中,载波同步是实现可靠数据传输的核心技术之一。当信号经过信道传输后,接收端需要精确恢复发送端的载波频率和相位,才能正确解调出原始信息。尤其在低信噪比…

阅读更多
AI大模型应用开发实战:从零构建RAG智能问答系统
2026/7/6 3:00:56

AI大模型应用开发实战:从零构建RAG智能问答系统

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在技术社区里,一个名为“AI大模型入门教程”的项目获得了惊人的80K星标,这背后反映了一个普遍现象&#x…

阅读更多
从概念到落地:主流开源AI Agent开发平台选型与工程实践指南
2026/7/6 3:00:56

从概念到落地:主流开源AI Agent开发平台选型与工程实践指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在尝试把一些重复性的数据处理、信息搜集和文档整理工作交给 AI Agent 去跑,结果发现一个挺有意思的现象:…

阅读更多
AI时代,B2B公司官网应交给市场部维护
2026/7/6 3:00:56

AI时代,B2B公司官网应交给市场部维护

很多B2B公司,对官网的理解还停留在十多年前。 在早期的理解里,官网就是一个展示窗口。公司介绍、产品列表、联系方式,放上去就行。如果有余力,再做一个SEM落地页,配合竞价广告承接流量。至于维护——找个研发搭个框架&…

阅读更多
110题 智能功率模块驱动保护一体化设计
2026/7/6 3:00:56

110题 智能功率模块驱动保护一体化设计

2026年国家级科研痛点 智能功率模块驱动保护一体化设计 痛点直陈 智能功率模块(IPM)的核心矛盾在于:驱动电路与保护功能的深度集成与芯片面积、响应速度之间的死结。传统IPM将栅极驱动、自举二极管、欠压/过温/短路保护等分立功能集成在同一…

阅读更多
SONiC 移植实战:Broadcom ASIC平台驱动与Platform API适配的5个关键步骤
2026/7/6 3:00:56

SONiC 移植实战:Broadcom ASIC平台驱动与Platform API适配的5个关键步骤

SONiC移植实战:Broadcom ASIC平台驱动与Platform API适配的5个关键步骤当工程师首次接触将SONiC移植到Broadcom ASIC平台的任务时,往往会被复杂的驱动集成和API适配流程所困扰。不同于传统网络操作系统的封闭式开发模式,SONiC的开放架构既带来…

阅读更多
计算机导论_第9章_笔记
2026/7/6 2:00:56

计算机导论_第9章_笔记

第9章 软件工程主要内容 软件工程的概念软件开发模型软件开发方法软件测试一、软件工程的概念 1.1 软件及其特性 软件是什么? 软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。 程序:按事先设计的功能…

阅读更多
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御
2026/7/5 0:00:50

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

阅读更多
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略
2026/7/5 0:00:50

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…

阅读更多
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复
2026/7/5 0:00:50

GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复

如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…

阅读更多
星露谷物语终极MOD指南:5个步骤打造智能自动化农场
2026/7/6 0:00:56

星露谷物语终极MOD指南:5个步骤打造智能自动化农场

星露谷物语终极MOD指南:5个步骤打造智能自动化农场 【免费下载链接】StardewMods Mods for Stardew Valley using SMAPI. 项目地址: https://gitcode.com/gh_mirrors/st/StardewMods 你是否厌倦了在星露谷物语中重复收割、加工、存储的繁琐操作?梦…

阅读更多
免费二维码修复工具终极指南:三步拯救损坏二维码
2026/7/6 0:00:56

免费二维码修复工具终极指南:三步拯救损坏二维码

免费二维码修复工具终极指南:三步拯救损坏二维码 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾经面对一个损坏的二维码束手无策?模糊、破损、打印质量差的二…

阅读更多
acme.sh私钥加密存储:基于OpenSSL的自动化证书安全管理方案
2026/7/6 0:00:56

acme.sh私钥加密存储:基于OpenSSL的自动化证书安全管理方案

1. 项目概述:为什么我们需要加密存储私钥?在运维和开发领域,使用 Let‘s Encrypt 等免费 CA 通过 ACME 协议自动化签发和管理 SSL/TLS 证书,已经成为标准实践。acme.sh作为这个领域的佼佼者,以其轻量、强大和脚本化的特…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/4 11:17:16

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/4 5:24:16

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/5 15:33:35

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多