(计算机基础 核心知识)软件工程

1.什么是软件工程

软件工程:将系统的、规范的、可度量的方法应用于软件的开发、运行和维护,也就是将工程化应用于软件

2.软件生命周期的过程

相对独立的几个阶段

1、问题的定义及规划

此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性

2、需求分析

在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。“唯一不变的是变化本身。”,同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。

3、软件设计

此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。

4、程序编码

此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。

5、软件测试

在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。

6、运行维护

软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。

3.软件工程开发模型

瀑布模型

  • 也称为生命周期法,是结构化方法中最常用的开发模型,它把软件开发的过程分为软件计划、需求分析、软件设计、程序编码、软件测试和运行维护6个阶段
  • 瀑布模型的优点:
  • 为项目提供了按阶段划分的检查点当前一个阶段完成后,只需要去关注后续阶段它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导
  • 瀑布模型的缺点:
  • 各个阶段之间产生大量的文档,极大地增加了工作量由于开发模型是线型的,用户只有等到整个过程的末期才能见到开发结果,从而增加了开发风险不适应用户需求的变化,并且在需求分析阶段不可能完全获取在软件开发前期未发现的错误传到后面的开发活动中时,可能会扩散,进而可能会导致整个软件项目开发失败
  • 所以,瀑布模型适用于需求明确或很少变更的项目

快速原型模型

  • 快速原型是利用原型辅助软件开发的一种新思想
  • 经过简单快速分析,快速建造一个可以运行的软件原型,以便理解和澄清问题,使开发人员与用户达成共识,最终在确定的用户需求基础上开发客户满意的软件产品
  • 它将原型的思想扩展到软件开发的全过程

增量模型

  • 融合了瀑布模型的基本成分和原型实现的迭代特征,是第三种原型化开发方法,但它不是“抛弃式”的,也不是“渐进式”的。增量模型把软件产品划分为一系列的增量构件,第一个增量往往是核心的产品,即第一个增量实现了基本的需求。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品
  • 增量模型与原型实现模型和其他演化方法一样,本质上是迭代的,但与原型实现不一样的是其强调每一个增量均发布一个可操作产品
  • 增量模型的优点:
  • 人员分配灵活,初期不用太大投入每隔一小段时间就提交用户部分功能,用户可以直观感受项目进展,及时试用产品功能有利于风险的把控
  • 增量模型将功能细化、分别开发的方法适应于需求经常改变的软件开发过程

螺旋模型

  • 将瀑布模型和演化模型相结合,综合了两者的优点,并增加了风险分析。它以原型为基础,沿着螺线自内向外旋转,每旋转一圈都要经过制订计划、风险分析、实施工程及客户评价等活动,并开发原型的一个新版本。经过若干次螺旋上升的过程,得到最终的系统
  • 螺旋模型的优点:
  • 设计上灵活,可以在项目的各个阶段进行变更以小的分段来构建大型系统,使成本计算变得简单容易客户始终参与每个阶段的开发,保证了项目不偏离正确方向随着项目推进,客户始终掌握项目的最新信息,从而能够和管理层有效地交互
  • 螺旋模型地缺点:
  • 需要具有相当丰富地风险评估经验和专门知识,如果未能够及时标识风险,势必造成重大损失过多地迭代次数会增加开发成本,延迟提交时间

喷泉模型

  • 是一种以用户需求为动力,以对象为驱动地模型,主要用于描述面向对象的软件开发过程,该模型认为软件开发过程自下而上的,各阶段是相互迭代和无间隙的
  • 无间隙是指在开发活动中,分析、设计和编码之间不存在明显的边界

敏捷开发:以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发,项目的规模较小,适用于较小的队伍(团队高度协作)敏捷开发的总体目标是通过“尽可能地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期增加或改变需求。敏捷过程的典型方法有很多,每一种方法基于一套原则,这些原则实现了敏捷方法所宣称的理念(敏捷宣言)。

4.UML

统一建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持。

类图

5.软件项目管理的流程

​ 做软件项目就是把用户的要求转化成需求,然后需求转化成设计,然后设计转化成代码。总的来说,就是把大的项目划分成小的项目,大的模块划分成小的模块。任何项目都是这样做的需求和设计,尤其是大的项目,总是要划分成小的模块,这样能让项目的不同参与者负责各自的模块,然后再集成起来进行测试。

软件项目的整个流程:

一、项目立项

项目的开始需要进行立项。项目经理要跟项目客户谈整个项目的内容及需求。在这个阶段,项目需要进行市场调研,可行性分析等一系列的活动,保证项目的价值是可取的、可行的。一般来说,每个项目都有它的可行性和价值,但是对于企业项目来说,基本上每个项目都是可取的,都是为了某个业务领域而做的业务系统。对于互联网项目来说,比如电商项目,这个就得做市场调查,以确定该项目在当前是具有一定价值的。

二、项目启动会

在项目立项之后,就得召开项目启动会了。项目启动会,主要是确定项目的项目招标方和项目投标方。项目招标方确定项目的客户方的负责人和用户;项目投标方确定项目经理、产品经理、技术经理、项目开发人员等项目组成员。项目启动会也是项目的一个里程碑,说明项目要开始了,确定了双方的负责人和责任人

三、项目需求调研

项目启动会开过之后,项目经理就要开始和项目客户方进行沟通,对项目的需求进行调研了。项目经理需要让自己对项目领域知识有一定的了解,这样在进行需求调研的时候与客户谈起来就能更快地理解需求。同时,项目组内部也要举行项目领域知识的培训,让项目成员了解要做什么。并且项目经理需要将总结下来的需求与客户进行确认,以保证项目需求的正确性和稳定性。

四、项目的设计

在掌握了一定的项目领域知识,且项目经理已经将项目需求总体的确定下来之后,项目就进入了设计阶段。这时候,项目组需要对项目进行架构选型、设计,开发工具,开发语言,开发平台以及项目的运行平台进行选择确定。在该阶段,需要对项目的各个设计进行审查,以确定由需求到设计的正确性。

五、项目的开发

在项目的设计阶段部分或总体结束之后,就进入到了项目的代码开发阶段。在该阶段,技术经理负责对项目的整体代码进行把控,软件工程师对项目设计转化为代码进行开发。项目经理在该阶段需要不断的调整项目计划,以让项目整体能够跟上进度,同时要让开发出来的系统让客户方进行试用,以不断调整项目开发上的问题,同时要防止需求的大变更。

六、项目的测试

在项目系统开发出部分或总体功能之后,项目的测试人员就需要介入对项目系统进行测试了。单元测试和集成测试等等。以保证系统对需求的和设计上的开发的正确性。

七、项目试运行

在项目系统进行了总体测试通过之后,项目经理要联系项目客户方进行系统的试运行了。保证系统的功能的正确性。同时也是需求变更比较大的阶段,在这个阶段,项目经理要把控好和计划好时间,尽量避免需求大的变更出现。

八、项目验收

项目在进行试运行结束后,就到了项目验收阶段了。项目验收

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

曾获多国内大厂的 ssp 秋招 offer,且是Java5年的沉淀老兵(不是)。专注后端高频面试与八股知识点,内容系统详实,覆盖约 30 万字面试真题解析、近 400 个热点问题(包含大量场景题),60 万字后端核心知识(含计网、操作系统、数据库、性能调优等)。同时提供简历优化、HR 问题应对、自我介绍等通用能力。考虑到历史格式混乱、质量较低、也在本地积累了大量资料,故准备从头重构专栏全部内容

全部评论

相关推荐

各位好,我是客户端劝退第二人。曾经,我也是一名客户端开发,如今则是一名全职滴滴快送骑手,穿梭在这座城市的街头巷尾,靠双手和车轮谋生。看到被暴力裁员的一鸣,勾起了我无数痛苦回忆。沉寂了半年多,我一直在修复自己残破的生活、麻木的心灵和早已偏离航向的人生。如今终于能稍微平静一些,讲讲我自己的故事。2024年7月25日,我被挖到开水团,入职了海外SaaS业务组。在接下来的几个月里,和其他同事不一样,我的主管马某从未与我沟通过试用期目标,似乎我天生就是一届炮灰。前几个月我一直按部就班地完成自己手头的工作,需要加班就默不作声地加班。在这个“以嫡系为中心,长期且有耐心”的工作环境中,我不再是《摩登时代》里的卓别林,而是一条日夜不停的流水线。那时候的我觉得,能忍,还不至于滚的程度。真正的转折点发生在一位从Tiktok跳槽过来的资深研发同事,试用期没通过,被光速离职。这时,压力就落在了我身上。我成为了继任者,作为小组里唯一的客户端开发,一面要完成新的需求开发,一面要解决前人光速离职留下的问题。在有限的时间内,一遍又一遍地让我逆向分析Toast的源代码,写方案、出文档、开发,同时还要遭受质疑、否定、打压和不认可。那是我人生最黑暗、也最酗酒的一段日子。我几乎走遍了杨浦大学城附近所有能叫得上名号的酒吧,试图靠酒精麻痹自己,去抵御职场里的苟且和内心的绝望。在试用期的第六个月,我的主管马某第一次找我谈话,直接表示试用期不会让我通过了,也没说明原因,只是说“不符合预期”,希望我在三天内提离职走。我提出疑问:“没有缓冲期吗?没有赔偿吗?”对方表示越快越好,对我、对团队都是好事,也不存在赔偿这一说。对方同时表示,如果我觉得自己行,也可以在这几天内争取转岗。期间我试图与我们的HRBP杨某沟通。杨某表示,主管马某没有跟我沟通试用期目标,确实是他的问题,但我也没有主动去约他沟通,这是我的主动性不足,需要改进。其次,职级的能力范畴不能只看内部能力模型,要根据实际情况来定。我的主管马某之所以让我承担更高级的工作,是因为对我有所期待,而我也要承担这份期待落空的代价。后来我表示,主动离职需要一个明确的理由,公司应就我是否造成资产损失以及所有相关问题以书面形式通知我,并按照劳动法规章制度处理。但后续进程就是一直没有给我类似文件,只是说我可以去争取转岗。2025年1月14日,我通过内部系统约到一位北京Base的部门主管,约好第二天上午在办公楼一楼会议室面试。面试结束后,杨某问我在哪里、在做什么,我如实告知正在一楼面试间转岗面试。对方立即表示我这是“擅离职守”,因为面试前没有向主管马某报备。2025年1月15日下午,HRBP杨某给我打电话沟通。第一,要么立刻提离职;第二,将单方解除我的劳动合同,并在背景调查中如实告知有劳动纠纷和争议。1月16日下午,我被叫进小会议室,当场收到《违纪行为处理决定》《试用期解除劳动合同通知书》。我明确表示不认同“擅离职守”这一指控,但他们根本不给申辩的机会,收走了设备、权限,草草了事。仲裁时他们更是颠倒黑白,伪造打卡记录证明我某天“擅离职守”,记录里我从三楼出门又从一楼出门,期间消失了两个多小时,时间线漏洞百出。更荒唐的是,公司死咬着我参加的转岗面试不是“同一家公司”的面试,因为该部门属“不同主体”。可面试是通过内部系统预约,地点是公司办公楼,流程也是内部流程,就因为主体不同,我败诉了。我没有像爽文男主那样逆袭。尽管我带着尽可能全的证据去仲裁,依然输得干干净净,甚至还被HRBP和主管践行了“秋后算账”的承诺。之后我几乎每一次背调,都能听到他们在背后释放的负面言论,直接让我在互联网行业彻底被封杀。如今,我依然在一审上诉的路上,看透了职场的人性丑恶、尔虞我诈和利己至上。走出办公室,我选择做一名快送骑手,每天骑车奔波在大街小巷,感受久违的阳光和新鲜空气。我不再迷茫,也不指望奇迹,只想把握当下,凭本事好好活着。这,就是我当下的真实人生。其实到最后,这件事我图的根本就不是赔偿金。那些钱早就不重要了。为了这场官司,我付出的时间、精力、金钱早已远远超过他们本该赔给我的数额。有人笑我不值,有人劝我算了,可我从来不觉得这有什么好笑或者后悔。我要的,是以后别再有哪个兄弟姐妹,在职场里碰上这帮吃人不吐骨头的傻逼领导,明面一套、背后一套,试用期不定目标、不沟通,半年后一句“你不符合预期”就让你滚蛋。我要的,是别再有哪个HR装聋作哑、和稀泥,面对职场PUA、阴阳怪气、打压挤兑的时候,动不动一句“是你主动性不够”“是你自己没去约主管”,站在裁人那一方,跟刽子手一个德性。我要的,是这操蛋的职场里少一点这些傻逼,多一点公道,哪怕只是一点点。
Java抽象小篮子:因为自己淋过雨,所以也不想别人淋雨,太伟大了劝退侠
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务