【软件工程与UML】第1章 笔记和练习题
基本概念
软件 = 程序 + 数据 + 文档
软件的特点
- 抽象性:软件是一种逻辑实体
- 可复制性:软件是通过人们智力活动,把知识和技术转化为信息的一种产品。
- 不会磨损:
- 依赖性:软件的开发和运行经常收到计算机系统的限制。在软件开发中提出软件移植问题,软件的可移植性作为衡量软件质量的因素之一
- 开发效率低:软件开发尚未摆脱手工方式,依然有大量重复性劳动
- 开发费用高:
软件危机
在计算机软件开发和维护过程中遇到的一系列严重问题
- 开发出来的软件往往与用户的需求有偏差
- 往往在看到最终产品交付时,用户才真正明确自己的需求
- 软件没有最终交付时用户如何了解开发进展的情况
- 系统难以维护和扩展,经常重复开发类似功能
- 开发团队内部使用了不同的技术,在交流时常常有障碍
- 项目延期,实际成本高于高估成本
消除软件危机的途径
- 正确认识软件
- 加强管理
- 使用软件工具
软件工程的定义
软件工程 = 管理 + 技术
软件工程的目标
初级目标:在预算内如期完成
高级目标:良好的结构,较好的可维护性,扩展性,通用性,扩展性,重用性
软件工程基本原理
分阶段的生命周期计划严格管理
坚持进行阶段评审
严格实行产品控制
……
- 立项阶段(建设单位)
- 系统分析和设计(设计单位)
- 实现(施工单位)
- 测试(单位合作)
- 运行维护(维护人员)
软件开发生命周期
计划、设计、开发、运行维护 四大阶段
- 问题定义
- 可行性论证及其软件计划
- 需求分析
- 总体设计
- 详细设计
- 编码和单元测试
- 综合测试
- 运行/维护
练习题
一、 选择题
1.软件开发生命周期包括:(1)开发,(2)设计、(3)计划和(4)运行维护4个时期,其正确的执行顺序是( B )。
A. 1,2,3,4
B. 3,2,1,4
C. 2,3,4,1
D. 4,2,3,1
2、关于UML,下面说法正确的是( D )
A UML是一种面向对象的建模方法。
B UML是一种形式化的语言,使用UML建立的模型可被计算机编译执行。
C UML是一种面向对象的编程语言。
D UML是一种面向对象的建模语言,但不是建模方法。
二、简答题
1、请列举出至少四种常见的软件开发过程模型,并简述其核心思想,说明其优缺点。
(1)建造-修补模型
优点:项目完成速度快,设计编码过程简单,方便
缺点:没有开发文档,不利于后期维护,产品质量不能保证,进行维护相当困难,而且发生回归错误的机会也相当大
适用范围:适用于不用任何维护的小程序
(2)瀑布模型
核心思想:阶段性评审和验证
优点:每一阶段结束时都要给出完整文档(为项目提供按阶段划分的检查点)
缺点:缺乏灵活性,工作量繁琐,工期长(项目各个阶段之间极少有反馈,只有在项目生命周期后期才能看到结果)
适用范围:对于经常变化的项目而言,该模型不使用
(3)快速原型模型
核心思想:借用已有系统作为原型模型
优点:项目完成速度快(减少软件需求不明确带来的风险)
缺点:产品质量不会高(所选用的开发技术和工具不一定符合主流的发展,快速建立起来的系统结构加上连续的修改可能导致产品质量低下)
适用范围:需要迅速确定系统的基本需求,发现问题,消除误解,开发者与用户充分协调
(4)螺旋模型
核心思想:强调风险分析
优点:风险过大时能及时止损、开发出来的产品质量高(设计上灵活,可以在各个阶段变更。以小的分段构建大型系统,使成本计算变得简单容易,客户始终参与每个阶段的开发,保证项目不偏离正确方向及项目的可控性)
缺点:开发周期长,需要大量经费(建设周期长,经常出现软件开发完毕后与当前的技术水平有较大的差距,无法满足当前用户的需求问题)
适用范围:特别适合大型复杂系统,对于最近开发的项目,在需求不明确的情况下,便于风险控制和需求变更
(5)增量模型
核心思想:从核心(基本功能)开始开发
优点:用户可以跟进项目(增大投资的早期回报)
缺点:只是对构件迭代(要求开放的结构,可能退化为建造-修补模型)
适用范围:后期不确定因素很多的情况
(6)迭代模型
核心思想:渐进式模型
优点:每个环节都会迭代,风险更小,优化程度更高(降低了一个增量上的开发风险,如果开发人员重复某得迭代,损失的只有这一个迭代的花费)
缺点:开发周期长,需要大量经费(还未被广泛应用)
适用范围:适合于****用户需求容易有变化的高风险项目
(7)喷泉模型
核心思思:各开发步骤可以反复迭代,逐步深化
优点:各个阶段没有明显的界限,开发人员可以同步进行开发,可以提高软件的开发效率,节省开发时间
缺点:开发过程中需要投入大量的开发人员,因此不利于项目的管理。该模型要求严格管理文档,使得审核难度加大。随时可能加入各种信息、需求与资料的情况下,审核难度尤其大
适用范围:适合于面向对象的开发过程
2、什么是UML
(云记P43)UML:是统一建模语言(Unified Modeling Language)
这是一种通用的可视化面向对象的建模语言,适用于对任何面向对象的事物的建模。
3、什么是软件危机,软件危机的影响是什么
在计算机软件开发和维护过程中遇到的一系列严重问题
- 开发出来的软件往往与用户的需求有偏差
- 往往在看到最终产品交付时,用户才真正明确自己的需求
- 软件没有最终交付时用户如何了解开发进展的情况
- 系统难以维护和扩展,经常重复开发类似功能
- 开发团队内部使用了不同的技术,在交流时常常有障碍
- 项目延期,实际成本高于高估成本
4、结构化程序设计与面向对象的程序设计之间的关系
结构化程序设计是进行以 模块功能 和 处理过程设计 为主 的 详细设计的 基本原则
面向对象技术是对计算机的结构化方法的深入、发展和补充,在保障进行良好的计算机软件的需求设计的同时,也需要尽可能实现利用低成本来开发出高质量的应用软件的目标(面向对象的程序设计 的 设计原理)
面向对象出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。(面向对象的程序设计 的 设计优点)
三、 操作题
在自己的电脑上练习StarUML的安装和基本设置

【软件工程与UML】第1章 笔记和练习题的更多相关文章
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
- uml大战需求分析阅读笔记01
<<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
- 《APUE》第四章笔记(1)
1.引言 本章介绍文件系统的特征和文件的性质.从stat函数开始,逐个说明stat结构的每一个成员以了解文件的所有属性.在此过程中,还将会说明修改这些属性的各个函数,并更详细地查看UNIX文件系统的结 ...
- 《APUE》第三章笔记(3)
文件共享 UNIX系统支持在不同进程中共享打开的文件,首先先用一幅apue的图来介绍一下内核用于I/O文件的数据结构: 如图所见,一个进程都会有一个记录项,记录项中包含有一张打开文件描述符表,每个描述 ...
- 《APUE》第三章笔记(2)
read函数 调用read函数从打开的文件中读数据. #include <unistd.h> ssize_t read(int filedes, void *buf, size_t nby ...
- 《APUE》第三章笔记(1)
以下内容是我看<APUE>第二版第三章的笔记,有错还希望指出来,谢谢. unbuffered I/O,跟buffered I/O相对,buffered I/O就是 ISO C标准下的标准输 ...
- 《大象UML》看书笔记2:
<大象UML>看书笔记2 抽象角度: 在为现实世界建模的时候,首先要搞清楚有多 ...
- #Python编程从入门到实践#第四章笔记
#Python编程从入门到实践#第四章笔记 操作列表 1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...
- 鸟哥linux私房菜第6章笔记
鸟哥linux私房菜第6章笔记 文件权限 修改 chgrp [-R] groupname filename //修改文件所属组 chown [-R] ownername[:groupname] fil ...
- Java程序设计(2021春)——第二章笔记与思考
Java程序设计(2021春)--第二章笔记与思考 本章概览: 面向对象方法的特征 抽象:从同类型对象中抽象出共同属性 封装:把数据和处理数据的方法封到一个类中 继承:在已有的类的基础上开发新的类 多 ...
随机推荐
- 直播预告 | 字节跳动云原生大数据分析引擎 ByConity 与 ClickHouse 有何差异?
ByContiy 是字节跳动开源的一款云原生的大数据分析引擎,擅长交互式查询和即席查询,具有支持多表关联复杂查询.集群扩容无感.离线批数据和实时数据流统一汇总等特点. ByConity 从1月份发布开 ...
- vue前端开发仿钉图系列(3)右侧画点线面的开发详解
项目开发是完全仿照钉图的功能,参照钉图的逻辑和高德地图的参考手册以及aip文档,一点点的把功能做出来并呈现最后的效果.选中画点,在地图上获取经纬度并进行反地理编码,添加marker并弹出右侧编辑页面, ...
- 什么是SQL注入并解决
' or ' 1 ' = ' 1 原理:通过违规的字符串改变原来的SQL语句 :[将敏感字符进行转义] // 包名 package com.zhulx.JDBC; // 导入实例类 import co ...
- 全局和局部混入 mixins
使用 mixins 混入 的目的 :复用代码,维护代码 : 局部混入: 全局混入 + 按钮权限控制 : ps:定义一个方法 ,checkPermission (str) str 是按钮的权限标识 , ...
- 征服 Docker 镜像访问限制:KubeSphere v3.4.1 成功部署全攻略
近期,KubeSphere 社区的讨论中频繁出现关于 Docker 官方镜像仓库访问受限的问题. 本文旨在为您提供一个详细的指南, 展示在 Docker 官方镜像访问受限的情况下,如何通过 KubeK ...
- 云原生爱好者周刊:炫酷的 Grafana 监控面板集合
开源项目推荐 grafana-dashboards-kubernetes 这个项目提供了一系列比较炫酷的用于监控 Kubernetes 的 Grafana 监控面板,灵感来源于 kubernetes- ...
- 【小记】Docker容器间SSH公钥自动交换实现免密登录的一次尝试
咋想到这茬了 最近开始忙毕设的事儿了,想部署个伪分布式的Spark + Hadoop集群来进行测试.思来考去,最终咱把目光放在了Docker上. 盘了两天,发现这玩意意外的有趣,镜像构建好后开箱即用, ...
- LeetCode题目练习记录 _数组和链表01 _20211007
LeetCode题目练习记录 _数组和链表01 _20211007 26. 删除有序数组中的重复项 难度简单2247 给你一个有序数组 nums ,请你原地 删除重复出现的元素,使每个元素 只出现一次 ...
- mac 系统使用vscode 创建c/c++ 工程项目 并配置断点调试
mac 使用vsCode 创建c/c++ 工程项目 并配置断点调试 使用vscode 创建c/c++工程项目 准备工作 使用 vscode 下载插件 C/C++ Project Generator 开 ...
- 局部加权回归(Lowess)
代码示例:(源自:https://blog.csdn.net/weixin_71158509/article/details/136060826) import numpy as np import ...