论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
大数据
›
数据仓库与分析
›
软件危机与软件过程模型
软件危机与软件过程模型
王國慶
金牌会员
|
2022-8-21 13:48:43
|
显示全部楼层
|
阅读模式
楼主
主题
682
|
帖子
682
|
积分
2050
1 前言
由于我的本科专业为计算机科学,软件工程不属于我的必修课程,导致我虽然是计算机科班学生,却缺乏软件工程相关的知识。在实习招聘过程中,软件工程知识,尤其是软件过程模型相关的知识,常被问及。因此正好借高级软件工程期末博客的机会,记录下自己课内外对于软件危机和软件过程模型的一些收获。
2 软件危机
软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。由于软件规模越来越大,软件复杂性越来越高,可靠性问题也越来越突出,软件概念结构的复杂性,无法达成软件概念的完整性和一致性,迫切需要改变软件生产方式,提高软件过程效率,软件危机随之爆发。
有关软件危机的争论是从1975年的《人月神话》开始的,Fred Brooks在书中指出大型项目中难以汇集众多软件过程参与人员的设计理念,从而使得大型软件项目往往会进展缓慢、成本暴涨及错误百出,这是软件危机的典型体现。
1986年,Brooks发表了一篇著名的论文“没有银弹(No Silver Bullet: Essence and Accidents of Software Engineering)”,断言“在10年内无法找到解决软件危机的杀手锏(银弹)。
1990年,面向对象分析与设计领域的大师Brad Cox,针对Brooks的观点,发表了一篇重要文章“有一个银弹(There Is a Silver Bullet)”,以说明他找到了应对软件危机的杀手锏,即经济上的利益诱导会促使人类将软件组件内的复杂结构包装起来,使得软件组件简单易用,由这些组件整合而成的大型软件,自然也简单易用,从而软件危机得以化解。
1995年初,Brooks的名著《人月神话》第二版出版,书中的文章里Brooks赞扬Brad Cox的文章,但他仍然认为杀手锏仍未出现。
1995年底,作为回应,Brad Cox发表了文章“No Silver Bullet Reconsidered”。文章里Brad Cox深刻探讨了文化和思维范式的变迁,从人类文化的观点阐释软件危机的原因,最终得到乐观的结论:解决软件危机的杀手锏(银弹)是可能的。简单来说,Brad Cox认为可以利用软件供应链来鼓励组织和个人生产、买卖软件组件以及更小的子子孙孙组件。如果买卖各层组件者皆有利可图,形成产业链,人们自然会想尽办法将组件封装得简单易用。
如今来看,Brooks的预测是千真万确的,软件危机的困境依然没有从根本上找到解决方法。
3 软件过程模型
作为软件工程延缓软件危机的努力,软件开发过程模型应运而生。软件开发过程模型是指软件开发全部过程、活动和任务的结构框架。软件开发包括分析、设计、实现、交付和维护阶段。 使用软件开发过程模型有以下几点好处:
让整个项目团队对软件开发过程有一致的理解(项目团队)
让我们审视软件过程中是否有活动上的冲突,是否有重复劳动和遗漏。(活动本身)
在规划软件过程时,方便我们为特定的目标评估合适的软件过程。(规划)
3-1 瀑布模型
瀑布模型(Waterfall) 是最简单的软件开发历史上第一个模型。瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。瀑布模型易于理解,但是这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:
各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;
早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果;
3-2 原型化的瀑布模型(快速原型)
由于瀑布模型在软件过程的后期才能看到结果,会将各种风险积攒到后期,为了尽早暴露风险进行风险控制,在瀑布模型的基础上增加一个原型化阶段,可以将风险前移。
原型就是根据需要完成的软件的一部分,完成哪一部分是根据开发原型的目标确定。例如需求分析阶段原型可以是用户接口原型,可以有效地整理需求,提供直观的反馈形式,有利于确认需求是否被准确理解;在设计阶段,原型可能是系统架构的一部分,有利于验证技术方案的可行性。
3-3 V模型
V模型也称为V模型或验证与验证模型,是瀑布方法的扩展。使用 V 模型时,进度并不会直线移动,而是在实施和开发后逐渐上升。
对于V型项目,早期测试介入是与瀑布模型相比的主要区别。每个开发阶段都有一个并行测试阶段,这有助于在继续下一步之前验证和验证每个步骤。单元测试、集成测试和系统测试在不同层面验证设计,交付测试确认需求是否得到满足。
3-4 迭代和增量模型
迭代和增量模型将迭代设计和工作流与增量构建模型结合在一起。在这种情况下,团队将按周期开发产品,并以渐进方式构建小零件。开发的交付策略分为两种,一是增量开发,二是迭代开发。增量开发就是从一个功能子系统开始交付,每次交付会增加一些功能,这样逐步扩展功能最终完成整个系统功能的开发。迭代开发是首先完成一个完整的系统或者完整系统的框架,然后每次交付会升级其中的某个功能子系统,这样反复迭代逐步细化最终完成系统开发。
迭代和增量模型的一个有价值的特点是可以在不知道所有需求的情况下开始开发。该模型包含其他模型的步骤——需求收集,设计,实施和测试,但要经过多次构建。开发团队可以利用先前构建中取得的成就来改善下一构建。迭代和增量模型可能看起来像一组微型瀑布模型或微型 V 形模型。
3-5 螺旋模型
螺旋模型是一种演化软件开发过程模型,兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型被认为是最灵活的 方法之一。它从迭代模型及其重复中获得启发。该项目以“螺旋式”的方式反复经历四个阶段,直到完成为止,从而可以进行多轮改进,在每个迭代阶段,构建原型是螺旋模型减小风险的基本策。迭代过程主要分为四个阶段:制定计划、风险分析、实施工程、客户评估。
螺旋模型主要用于大型项目,它允许构建高度定制的产品,并且用户反馈可以在项目的早期就被纳入。但可能有项目会形成永无止境的螺旋式发展的风险。
3-6 敏捷模型
敏捷模型是迭代和增量方法的组合,致力于通过早期交付工作软件来适应灵活的需求并满足用户和客户的需求。敏捷项目中的需求和解决方案可能会在开发过程中发展。
通过敏捷开发,该产品被分为小的增量构建,并以迭代方式交付。将所有任务划分为较小的时间范围,以便为每个版本准备工作功能。最终产品版本包含所有必需的功能。敏捷开发是技术行业中使用最广泛的。敏捷软件开发生命周期有许多成熟的方法,最受欢迎的两个是Scrum和看板。
4 总结
在我看来,软件危机从未被真正解决,当下一次应用需求和开发能力错位时可能还会出现(比如量子计算机的软件开发),但软件工程会通过不断地改进和优化软件开发过程来延缓这个危机。
高级软件工程课程让我受益颇多,课程内容十分实用。Vscode和Git命令大大提升了我平时的开发效率和编码体验,软件工程思想也给我带来了很多启发,让我在设计编码时能衡量代码架构的合理性。本文所述的软件开发过程模型知识补足了我在软件工程专业方面的短板,感谢老师一学期的陪伴和教导。
参考资料:代码中的软件工程
https://gitee.com/mengning997/se
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王國慶
金牌会员
这个人很懒什么都没写!
楼主热帖
webman
Jupyter Notebook,太强大了
React技巧之发出http请求
【Shashlik.EventBus】.NET 事件总线, ...
手记系列之四 ----- 关于使用MySql的经 ...
Bluecmsv1.6-代码审计
2022-08-16 数据库查询语言之-------D ...
【网络】https单向认证和双向认证 ...
导入例子体验鸿蒙开发工具的hello worl ...
【云原生架构】阿里云 —— 主要架构模 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表