目录
引言
一、软件工程
1.1软件的定义及特点
1.2软件危机
1.2.1产生原因
1.2.2典型表现
1.3软件工程概述
1.3.1软件工程方法学
1.3.2软件工程的基本原则
二、软件过程
2.1软件生命周期
2.2软件过程的定义
2.3软件过程模型
2.3.1瀑布模型
2.3.2螺旋模型
2.3.3喷泉模型
2.3.4快速原型模型
2.3.5增量模型
三、参考答案
3.1第一章课后参考答案
3.1.1练练手
3.1.2动动脑
3.2第二章课后参考答案
3.2.1练练手
3.2.2动动脑
引言
尊敬的读者:
您好!在此次博客中,我将分享一些有关软件工程导论的重要观点和理论。这些内容均摘自清华出版社出版的《软件工程导论》一书。在此,我郑重声明,本次分享的目的是为了传播和普及软件工程领域的知识,绝非抄袭或剽窃。以下为本书的相关信息,以兹证明:
书名:《软件工程导论》
编著:吴艳 曹平
出版社:清华大学出版社
出版日期:2021.2(2022.7重印)
希望本次分享能够为您带来收获,并激发您对软件工程领域更深入的研究。再次感谢您的关注与支持!
敬请期待后续内容,我们将一同探索软件工程的奥秘。
顺祝商祺!
一、软件工程
1.1软件的定义及特点
定义:
? ? ? ? 软件是计算机中硬件相互依存的部分,它不仅包括程序,还包括数据和相关文档,是三者的完整集合。
- 程序:按事先设计好的功能和性能要求执行的指令序列。
- 数据:程序处理、加工的对象和处理信息的数据结构。
- 文档:与程序开发、维护和使用相关的各类资料总称。
特点:
- 软件是一种逻辑产品,具有抽象性,更多地带有个人智慧因素,这使得软件与其他的机械制造、建筑工程有许多不同。
- 软件没有明显的制造过程,不会损坏,但会因为质量和不可维护性被废弃。因此,软件产品数量和质量在相当长的实践中还得依靠技术人员和管理人员。
- 软件的开发和维护成本高,且涉及诸多社会因素。
1.2软件危机
? ? ? ? 软件危机是指在计算机软件开发和维护过程中遇到的一系列严重问题。
1.2.1产生原因
- 与软件自身特点有关,逻辑产品,缺乏可见性,规模大且复杂;修改、维护困难。
- 软件开发与维护的方法不当:忽视需求分析;重视现,轻设计;轻视软件维护。
- 供求矛盾是永恒的主题:需求的增长和变更,使得开发者力不从心。
1.2.2典型表现
- 软件开发成本和进度不可控。
- 软件产品不能满足用户的需求。
- 软件产品的质量难以保证。
- 软件可维护性差。
- 软件缺乏适当的软件文档支持。
- 软件成本在计算机系统总成本中所占的比例逐年上升。
- 软件生产率跟不上计算机应用普及和深入的趋势。
1.3软件工程概述
1.3.1软件工程方法学
? ? ? ? 软件工程方法学包括三个要素,即方法、工具和过程。
- 方法:完成软件工程项目的技术手段,回答“怎么做”的问题。
- 工具:为运用方法提供自动或半自动的支撑环境。
- 过程:为了获取高质量软件所需完成的一系列任务框架,包括支持软件开发各个环节的控制和管理。
????????目前使用最广泛的软件工程方法学为传统方法学和面向对象方法学。
1.3.2软件工程的基本原则
- 采用适宜的开发模型
- 采取合适的设计方法
- 提供高质量的工程支持
- 重视开发过程的管理
二、软件过程
2.1软件生命周期
(1)软件定义 | ①问题定义 | |
| ②可行性分析 | |
| ③需求分析 | |
(2)软件开发 | Ⅰ系统设计 | ④总体设计 |
| | ⑤详细设计 |
| Ⅱ系统实现 | ⑥编码和单元测试 |
| | ⑦综合测试 |
(3)运行维护 | ⑧软件维护 | |
2.2软件过程的定义
? ? ? ? 软件过程(Software Produce)是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。概括地说,软件过程描述为了开发出用户需要的软件,什么人(Who)在什么时候(When)做什么事(What)以及怎么做(How)这些事,以实现某一个特定的具体目标。
2.3软件过程模型
2.3.1瀑布模型
? ? ? ? 1970年,温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到20世纪80年代早期,它一直是唯一被广泛采用的软件开发模型。
? ? ? ? 按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为可行性研究,需求分析,设计,编码,综合测试,运行维护六个部分,并且规定了这些活动自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落。
? ? ? ? 从上一项活动接受该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容,给出该项活动的工作成果,并作为输出传给下一项活动,甚至更前面的活动。
? ? ? ? 因此,对于需求经常变化的项目而言,瀑布模型毫无价值。
瀑布模型如图1图2所示(实线代表开发过程,虚线表示维护过程)
- 可强迫开发人员采用规范的方法。
- 严格地规定了每个阶段必须提交的文档。
- 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
- 只能通过文档谅解产品,不能经过实践的需求是不切实际的。
- 固定的顺序导致纠正前期错误的代价越来越高。
- 需求变动带来很大风险。
- 需求是预知的。
- 软件实现方法是成熟的。
- 项目周期较短。
2.3.2螺旋模型
? ? ? ? 1988年,巴利·玻姆(Barry Boebm)正式发表了软件系统开发的“螺旋模型”,强调了其他模型忽视的风险分析,特别适合于大型复杂且昂贵的系统级应用软件。
? ? ? ? 螺旋模型沿着螺旋线进行若干次迭代,图3中的四个象限分别代表了制定计划、风险分析、实施工程、客户评估。
? ? ? ? 在“瀑布模型”的每个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成为一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。
- 螺旋模型是一个风险驱动的模型,强调可选方案和约束条件,从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发中。
- 设计上的灵活性,可以在项目的各个阶段进行变更。
- 以小的分段构建大型系统,使成本计算变得简单容易。
- 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
- 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
- 维护只是模型的另一个周期,维护和开发之间没有本质区别。
- 采用螺旋模型需要有相当丰富的风险评估经验和专业知识,在风险较大的项目开发中如果未及时标识风险,势必造成重大损失。
- 建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户的需求。
- 过多的迭代次数会增加开发成本,延迟提交时间。
- 就近开发,需求不明确的情况,便于风险控制和需求变更。
- 大规模软件的项目开发。
2.3.3喷泉模型
? ? ? ? 喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
? ? ? ? 该模型中,软件开发过程自上而下周期的各个阶段是相互迭代和无间隙的。
? ? ? ? 喷泉模型如图4所示
? ? ? ? 无间隙指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界限。
- 该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。
- 多次反复地增加或明确目标系统,而不是本质性的改动,降低错误的可能性。
- 可以提高软件项目的开发效率,节省开发时间。
- 由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,这样很不利于项目管理。
- 要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
2.3.4快速原型模型
????????略(想了解可查看《软件工程导论》一书)
2.3.5增量模型
????????略(想了解可查看《软件工程导论》一书)
三、参考答案
3.1第一章课后参考答案
3.1.1练练手
(1) | (2) | (3) | (4) | (5) |
B | B | A | B | C |
(6) | (7) | (8) | (9) | (10) |
A | C | C | A | D |
3.1.2动动脑
1.简述结构化方法与面向对象方法的主要特点,如何将两种方法结合在一起,有效开发软件项目?
- 结构化方法:
- 适合小型项目开发
- 数据和功能分离
- 文档驱动(瀑布模型)
- 模块化(功能)
- 软件结构:自顶向下,逐层分解
- 便于测试和维护
- SA?SD?SP(数据流程图)
- 数据模型、功能模型、行为模型(ER、DFD、SC)
面向对象方法:
- 适合中大型项目开发
- 数据和功能封装à对象
- UML驱动(UP)
- 模块化(对象)
- 软件结构:对象之间交互(6种关系)
- 便于维护和扩展
- OOA?OOD?OOP(类图)
- 对象模型、功能模型、动态模型(Class、User Case、Statement)
无论使用哪种开发方法,或者是混合哪几种开发方法,都要因地制宜,依据需求分析和系统要求,做出最好的选择或组合。
2.软件工程教材中,经常会叙述发现并改正错误的重要性,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,怎么能在设计阶段就清楚它?”,判断这个观点是否正确,并且给出理由。
【解答】
- 设计也能发现Bug:
- 设计过程本身就应该设计校验。
- 在软件开发流程中,TDD是解决这个问题的方式。
- 减少问题不是直接不产生Bug,而是能够及时发现并消除Bug。
- 编码之前,先编写测试单元。
- 每次编码结束,都应该运行测试单元,确保代码能够通过。
3.2第二章课后参考答案
3.2.1练练手
(1) | (2) | (3) | (4) | (5) |
D | D | B | D | D |
(6) | (7) | (8) | (9) | (10) |
A | A | B | B | C |
说明:螺旋模型适用于内部开发的大型软件(开发周期长、比较容易受到社会因素影响的软件项目),因此,并不适用全部的大型软件。
3.2.2动动脑
(1)研究下XP,理解测试如何驱动开发,并举例说明。
【解答】
- 测试驱动开发的基本过程
- 明确当前要完成的功能。可以记录成一个 TODO 列表。
- 快速完成针对此功能的测试用例编写。
- 测试代码编译不通过。
- 编写对应的功能代码。
- 测试通过。
- 对代码进行重构,并保证测试通过。
- 循环完成所有功能的开发。
(2)为什么说喷泉模型较好地体现了面向对象软件开发过程无缝和迭代的特点,并举例说明。
【解答】
- 喷泉模型特点
- 使用面向对象方法学开发软件时,各个阶段都使用统一的概念和表示符号。
- 用建模工具描绘的模型贯穿在开发各个阶段。
- 整个开发过程都是吻合一致的,或者说是无缝连接的。
- 容易实现各个开发步骤反复多次迭代,达到认识的逐步深化。
- 喷泉模型则体现了面向对象软件开发过程迭代和无缝的特性。
续后文:软件工程导论学习笔记——(2)项目启动阶段(含三四五章课后题答案)
https://blog.csdn.net/Prayer41/article/details/135378751