搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Cpp五条
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
python代码用递归函数解决汉诺塔移动步骤的深度详解_用python写汉诺塔(1)每次只能移动一个圆盘 (2)圆盘只能从一个柱子的顶端移动到
2
【Redis缓存】主从、哨兵、 Cluster集群一锅端,一文带你全了解_redis集群是哨兵用的多还是cluster
3
[工业自动化-18]:西门子S7-15xxx编程 - 软件编程 - PLC用于工业领域的嵌入式系统:硬件原理图、指令系统、系统软件架构、开发架构等_西门子plc简单编程
4
7小时就能写完论文的ChatGPT论文指令大全,赶紧用起来_chatgpt写作指令大全
5
JVM学习-监控工具(二)
6
C++ | Leetcode C++题解之第2题两数相加
7
Java源码解析第31讲:如何保证接口的幂等性?常见的实现方案有哪些?_java幂等性接口设计
8
NLP实战之–螺蛳粉评论情感分析和建模分类
9
Swift Compiler Error Cannot assign to the result of this expression_[compile result] the regular property 'isswitchdat
10
javascript常见数据结构与算法_js常用的数据结构和算法
当前位置:
article
> 正文
浅谈对软件工程的认识与理解_谈谈你对软件工程的理解和认识
作者:Cpp五条 | 2024-06-08 19:52:03
赞
踩
谈谈你对软件工程的理解和认识
数据结构与算法、计算机组成原理、计算机操作系统、计算机网络- 软件工程需重视的。。
软件工程涉及的资源有:
人力、资金、时间
的合理分配,涉及到
文化与管理
等,及各种
规划化
。
软件开发是一个把用户需要转化为软件需求,把软件需求转化为软件设计,用软件代码来实现软件设计,对软件代码进行测试,并签署确认它可以投入运行使用的过程。在这个过程中的每一阶段,都包含有相应的文档编制工作。
软件开发过程当中,遵循一定的流程,主要包括系统分析、系统设计、系统编码、系统测试以及系统的维护等几个阶段。依次概述如下:
1、系统分析
系统分析包括软件需求分析和系统可行性分析。软件需求分析就是回答做什么的问题。它是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用软件工程开发语言(形式功能规约,即需求规格说明书)表达出来的过程。系统可行性分析就是通过需求调查来确定此系统是否具有可行性。
2、系统设计
系统设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块。概要设计就是结构设计,其主要目标就是给出软件的模块结构,用软件结构图表示。详细设计的首要任务就是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库,常用方法还是结构化程序设计方法。
3、系统编码
系统编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的"源程序清单"。
4、系统测试
系统测试的目的不是验证软件的正确性,而是以较小的代价发现尽可能多的错误。测试从需求阶段开始,此后与整个开发过程并行,换句话说,伴随着开发过程的每一个阶段,都有一个重要的测试活动,它是预期内按时交付高质量的软件的保证。
5、系统维护
系统维护是指在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。在实际开发过程中,软件开发并不是从第一步进行到最后一步,而是在任何阶段,在进入下一阶段前一般都有一步或几步的回溯。在测试过程中的问题可能要求修改设计,用户可能会提出一些需要来修改需求说明书等。
总的说来,软件开发是一个环环相扣的设计和实施过程,整个系统开发的过程当中,系统分析和设计是重中之重。只有把握好系统分析,才能使后续改动尽可能多的减少;只有把握好系统设计,才能保证软件的根基比较稳固。也即是它们很大程度上决定着软件开发的周期以及寿命。另外,完美的开发团队和开发过程的合理控制是软件成功开发关键要素之一。
>> 软件工程
过去几十年,软件技术经历了一系列重要的变化和发展,构成软件的软件实体的粒度不断增大,软件基本模型越来越符合人类的思维模式;软件运行平台的能力不断增强,越来越多地屏蔽掉计算机底层的复杂性;软件支撑平台的能力不断增强,越来越多地屏蔽了软件开发过程的复杂性;软件技术的应用范围不断扩大,越来越广地渗透到人类生活的各个方面。网络技术的发展日新月异,基于新一代网络技术的各种应用的融合是大势所趋。网络新技术与软件新技术的相互促进必将为人类创造一个更为灿烂多彩的IT世界。
这世上同时存在着两种对立的声音:本质决定成败和细节决定成败。偏好本质的人喜欢说本质论。偏好细节的人则喜欢说精细化管理。但如果在较长的时间轴上考量这两种观点,就会发现他们之间并不真的对立。
----------------------------
程序员几个发展方向:
走向管理:有两种原因会使部分程序员走上管理的道路,一是与生俱来的对 权力的欲望;一是在程序员的岗位上对自我价值重新认知。对于前者如果欲望过去强烈就会急功进利,很容易走捷径,会出现不能服众的情况。对于后者自我价值的重新认知是一个缓慢的过程,一个程序员在长期的开发过程中会慢慢发现一个人的力量是有限的,做一件事情必须要借助其他人的帮助,如果需要别人的帮助就必须能影响他人。从而认识到一个人的价值对公司来说几乎是不值一文,如果想让自己的价值得到提升必须要影响到他人,借助他人的力量使自己的价值得到最大提升。
走向行业:即成为某个行业的行业专家。一般来说走这个方面需要机遇,需 要长时间的从事某一个领域的开发与管理工作,对某个行业无论是大局还是细节都了如指掌。
走向专业:即成为架构师。一般来说这些人对开发有狂热的兴趣,逐渐的从代码的编写中认识到设计与软件架构的重要性,并对软件设计乐此不疲。
自已干:这些人是野心家,也是风险最大的一条路。好多程序员都认为软件开发不需要什么成本,只要能接到单子完全可以自己干,自己当老板。然而很少了解只有长期持续的订单才是一个企业不断稳定发展的最重要因素。
------------------------------
程序员具备:恒心、耐心、细心
兴趣决定一切:当一个人把自己的职业仅当成谋生的手段时,那他的人生将会失去很多乐趣。如果你不喜欢软件开发,那最好离开这个职业,没有兴趣只会让你一事无成。
自我学习:做程序员就是这样,走上了一条永无止境的学习之路,不学习新知就会被淘汰。然而学习也是有方法的:1)拿来主义;2)知其然也要知其所以然,细细分析与研究别人的优秀框架会对你大有好处。
自我修复:不断的重构与完善你的代码,是对所学知识的达到溶汇贯通的最简捷的途径。
找到一个圈子或老师:有时别人的一句话会对你的点拨很大。对于知识点有时只是一层窗户纸,看似玄妙,也许你差的只是那灵光一现或是换一个角度思考,这并不难。难的是将你所了解的知识点串接起来,使其能上下贯通运用自如,而在这点上通过一己之力会变得非常的漫长与痛苦。
---------------------------
软件开发要融入工程化的思想,要有高度的设计能力,关注更多的软件运行属性和设计质量属性,同样的系统,不同的软件人员会做出完全不同的软件,正规,高效的开发团队要比游击队开发团队不只高出几十倍。软件开发,不仅仅关注功能,性能,更应该去研究可维护性,可扩展性等质量属性,不仅仅只关注代码,而更要上升为设计,复用等。
还有更高层次的设计开发,软件重构,模块化,系统构架,搭建统一软件平台,度量软件质量等.软件开发人员,要作的事情太多了,软件实在是一个浩大的脑力工程,甚至会让人觉得这是一个投入/产出比最低的行业,因为要学习的知识实在太多了,每时每刻都要处于不断的学习和更新当中.
这是指导整个软件开发的指南,这里包括软件从开始到结束的整个过程,包括制定计划、需求分析和定义、软件设计、程序编写、软件测试、运行/维护,这六个步骤每一步的执行是保证项目成功完成的保证,以后将对这六个过程进行一一的分析。
软件生命周期
其中包括:瀑布模型、演化模型、螺旋模型、喷泉模型、智能模型。
模型特点:
瀑布模型:周期长,跟用户见面比较晚,从计划到和用户一起计划外,其他的部分用户和开发人员是分离的,用户不能直接把问题直接反应过去。
演化模型:由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。做两次第一次只是实验开发,其目标只是在于探索可行性,弄清软件需求第二次则再此基础上获得较为满意的软件产品
螺旋模型:多次原型反复并增加风险评估的开发模型
喷泉模型:有严格的数学理论和形式化的技术支持,但目前在所研究试验阶段,不能实现
智能模型:1.通过领域的专家系统,可使需求说明更加完善、准确和无二义性。2.通过软件工程的专家系统,提供一个设计库支持,在开发过程中成为设计者的助手。3.通过软件工程知识和特定应用领域的知识和规则的应用来提供对开发的帮助。但是,要建立适合于软件设计的专家系统,或建立一个即适合软件工程又适合应用领域的知识库都是非常困难的。
--------------------------------
对软件的基本认识
i.开发软件为什么要工程化
有很多人,尤其是很多学生存在这样的误区,平时感觉自己能用语言写一个闹钟,写一个记事本等一些小东西,就以为自己一个人就可以完成一个小的项目,所以很不理解为什么开发软件有时候不能让一个人独立完成,也有个人英雄主义在作怪。其实原因很简单,比如说,高中我们做题应该很有体会,感觉一张卷子一点问题也没有,但是等成绩下来的时候总不是一百分,为什么,因为我们很难发现自己的错误,哪怕是重复很多次,这是思维定势。
ii.软件开发与其说是技术活,不如说是规范活.
软件开发是程序员奇思妙想的时候,用什么方法都是随心所欲的,有的人则为了追求速度或者说是彰显个性而用一些很不大众的算法,以为这是体现自己高明的地方,恰恰相反,这真是不懂编程的表现,一般的项目一般都不是一个人来完成的,它分为开发阶段和维护阶段,然而维护阶段一般又非开发人员所为,所以如果代码技术性过于高,反而对后面的维护不利,另外,IT是个跳槽率很高的职业,如果一项工程没有完成就离开,剩下高明的算法要让谁看呢,出于对公司的考虑,最好还是规规矩矩,符合大众的口味。
iii.文档的重要性
很多人,尤其是大学生,刚开始学习编程的时候,难免会有一些急功近利的想法,想快点做出点成绩,但是往往欲速则不达,就想前段时间做的机房收费系统一样,在一种完全没有文档的情况下,虽然最后做完了,而且也跑起来了,问题似乎也没有想象的那么多,但是其中的过程只有自己知道,代码啦,数据库啦都不忍心看,可以说是乱七八糟的,想加个数据库就加,想加个功能就加,很有文档,就像没有目的的去雕塑,雕成什么样,算什么样,而且很多情况是中途发现需要这个样子了,才发现,那部分材料已经被自己给去掉了,所做的程序自然没有规律可言,如果现在有人说那个机房收费系统那个功能要修改一下,我估计我的得全盘改动.
iv.开发软件为什么时间总是那么紧,开发的人总是那么累
曾经有过单纯的想法,为什么工作非要加班呢,多用些人不就行了吗,人多力量大嘛,但是自从软工看完后便觉得这种想法荡然无存了,其实,原因并不是说老板多黑心,而是取决于软件开发工作的性质,这是一项需要智慧的工作,首先,这不是工厂,没有机器,只有手工;其次,这里需要残杂很大一部分人文因素,比如说个人习惯,同样输出一个结果,两个人的算法往往就有很大的区别,所以参加人数越多,在项目中的不同因素就越多,因为各个模块之间的衔接问题就越大,所以参加人数应该是少而精,所以这也是为什么蓝精灵体中说程序员是“聪明而辛苦”,聪明在他们每个人都是一个设计师,辛苦在一项任务,自己又无可取代的位置,只能是自己的事情自己干。
v.如果自己无法适应社会中的潜规则,那么就学编程吧(不知道这样说对不对)
从我目前的认识来看,突然发现软件行业是整个社会的一片净土,这里不像其他行业一样靠嘴吃饭,更多的是需要能力,除非老板想赔钱,不然绝对不会用一个靠关系而不是靠技术的人来当项目经理,因为这个关系到整个项目生存的决定性因素;虽然同事之间保持着微妙的竞争关系,但是一个项目要想如期完成必须要和同事上司好好合作;做软件开发的每个项目的每个功能,无处不能体现全心全意为人民服务的宗旨,所以开发软件的人无疑又是心细如丝,必定是善良的,体贴的,嫁人就嫁程序员哦。所以,以此可见,这里的确是一片净土。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Cpp五条/article/detail/690932
推荐阅读
article
2024 第三届
AIGC
中国开发者大会:多
模态
大
模型
的
发展
与趋势_大
模型
技术
的
发展
趋势 多
模态
...
多
模态
大
模型
发展
_大
模型
技术
的
发展
趋势 多
模态
大
模型
技术
的
发展
趋势 多
模态
...
赞
踩
article
哈
尔滨
工程
大
学
考研
经验分享(上):择校问题、
夏令营
问题。_
哈
工程
夏令营
竞争
大
吗...
有幸有时间想把20年
考研
的辛酸史写下来,致敬所有
考研
人,致敬我自己。不管是在准备初试那会,还是说之后准备漫长的复试备考过...
赞
踩
article
git
撤销
修改
命令
_
git
取消
修改
...
git
撤销
修改
命令
_
git
取消
修改
git
取消
修改
要撤销Git中尚未提交的所有
修改
,可以使用...
赞
踩
article
springboot
数据库
连接_
springboot
hana...
springboot
2.3.1与
springboot
1.5连接
数据库
的差别1.Spring Boot 2.3.1与Spr...
赞
踩
article
5.31
.
ZeroMQ
...
# yum install zeromq-devel# pecl install zmq-beta cat > /...
赞
踩
article
Image
-
to
-
Image
任务的
终结者
:详解
ControlNet
原理与代码_
controlnet
源...
condition diffusion是最火爆的应用方向,2023年效果最好的几种条件diffusion models,...
赞
踩
article
【
数据
结构
】
二叉
树
的
存储
结构
(顺序
存储
和链式
存储
)_
二叉
树
可以
采用两种方式
存储
,其中经常使用
的
是
二叉
...
二叉
树
是由根节点和左右子树组成
的
有序树,可用链表或数组
存储
。
掌握基础知识对后续学习至关重要
。
二叉
树
可以
采用两种方式
存储
,...
赞
踩
article
SpringBoot
三种拦截
http
请求方式
Filter
,
Interceptor
和
AOP
_spri...
Filter
Interceptor
ControllerAdvice
AOP
_
springboot
http
filtersp...
赞
踩
article
SMBCrack2
的口令破解与ps
exe
c.
exe
的
使用
...
SMBCrack2
的口令破解与ps
exe
c.
exe
的
使用
实验环境:Windows XP:192.168.124.128W...
赞
踩
article
手撕
力
扣
:
对称
二叉树
;
二叉树
的前序、中序、后序
遍历
的
递归
/迭代解法_
力
扣
101
.
对称
二叉树
递归
顺序...
力
扣
101
.
对称
二叉树
给定一个
二叉树
,检查它是否是镜像
对称
的。
对称
二叉树
(
递归
法)class Solution {pub...
赞
踩
article
CCF
-
GESP
2024 四级T1
相似
字符串
...
变成 bpple ,因此 apple 和 applee 、 appe 、 bpple 都是
相似
的。比如 apple 可以...
赞
踩
article
Typescrip
t
高级: 深入理解
ex
t
ends
k
eyof
语法
_
k
ex
t
ends
k
eyof
...
在TypeScrip
t
中,
ex
t
ends
关键字是类型系统中一个极其重要的组成部分它不仅用于类的继承,也是类型兼容性检查和...
赞
踩
article
看看
原力值
_
csdn
原力值
...
几天前无意中发现APP上有这个签到领取
原力值
的,就想玩玩看看结局,每天来签到,今天已经是第五天了,继续坚持看看五天后悔有...
赞
踩
article
CORS
跨域解决方案_
cros
...
复杂请求则需要2次,先发起options请求,确认目标资源是否支持跨域,浏览器会根据服务端响应的header自动处理剩余...
赞
踩
article
IDEA
自动
补全
&
提示
功能消失的几种解决方案_
idea
不
提示
代码
补全
问题...
此外,智能
补全
功能还可以提供关于
代码
的上下文信息,帮助开发人员更好地理解
代码
结构和功能。我也是最近才遇到的一个情况,在编...
赞
踩
article
MacOS-use-
Stable
-
Diffusion
...
导航 (返回顶部)1.
Stable
Diffusion
1.1 用法和争议1.2 许可证1.3 不可控性1.4 一点想法...
赞
踩
article
别再说你不会!
java
web
开发
实例大全
代码
_
java
web
实操
代码
...
第一篇:SpringBoot面试篇1.1 35常见SpringBoot知识点问题一:Spring Boot、Spring...
赞
踩
article
人工智能
终究会
抢了
我们
程序员
的
饭碗_
ai
抢
程序员
工作...
人工智能
会不会取代开发它
的
人_
ai
抢
程序员
工作
ai
抢
程序员
工作
人工智能
会不会取代开发它
的
人 ...
赞
踩
article
探索
AI
大
语言
模型
Prompt
(
提示
词
)的力量_
提示
词
工程
...
AI
提示
词
在指导
AI
系统生成所需的输出结果中扮演着关键角色。它们定义了任务的范围和要求,确保输出结果满足用户的需求和期望...
赞
踩
article
linux
查找
hadoop
安装
路径,
Linux
安装
hadoop
...
前提:下载
hadoop
2.8.5wget下载
hadoop
,或如果是虚拟机,也可以使用sftp从windows上传hado...
赞
踩
相关标签
AIGC
深度学习
人工智能
嵌入式硬件
chatgpt
哈工程
考研
夏令营
git
jdbc
mysql
spring boot
java
php
diffusion model
扩散模型
controlnet
数据结构
算法
http
后端
网络
SMBCrack2
psexec
网络安全