浅谈对软件工程的认识与理解

2023-11-17

数据结构与算法、计算机组成原理、计算机操作系统、计算机网络- 软件工程需重视的。。

  软件工程涉及的资源有:人力、资金、时间的合理分配,涉及到文化与管理等,及各种规划化

  软件开发是一个把用户需要转化为软件需求,把软件需求转化为软件设计,用软件代码来实现软件设计,对软件代码进行测试,并签署确认它可以投入运行使用的过程。在这个过程中的每一阶段,都包含有相应的文档编制工作。
    软件开发过程当中,遵循一定的流程,主要包括系统分析、系统设计、系统编码、系统测试以及系统的维护等几个阶段。依次概述如下:
  1、系统分析
    系统分析包括软件需求分析和系统可行性分析。软件需求分析就是回答做什么的问题。它是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用软件工程开发语言(形式功能规约,即需求规格说明书)表达出来的过程。系统可行性分析就是通过需求调查来确定此系统是否具有可行性。
  2、系统设计
    系统设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块。概要设计就是结构设计,其主要目标就是给出软件的模块结构,用软件结构图表示。详细设计的首要任务就是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库,常用方法还是结构化程序设计方法。
  3、系统编码
    系统编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的"源程序清单"。
  4、系统测试
    系统测试的目的不是验证软件的正确性,而是以较小的代价发现尽可能多的错误。测试从需求阶段开始,此后与整个开发过程并行,换句话说,伴随着开发过程的每一个阶段,都有一个重要的测试活动,它是预期内按时交付高质量的软件的保证。
  5、系统维护
    系统维护是指在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。在实际开发过程中,软件开发并不是从第一步进行到最后一步,而是在任何阶段,在进入下一阶段前一般都有一步或几步的回溯。在测试过程中的问题可能要求修改设计,用户可能会提出一些需要来修改需求说明书等。
    总的说来,软件开发是一个环环相扣的设计和实施过程,整个系统开发的过程当中,系统分析和设计是重中之重。只有把握好系统分析,才能使后续改动尽可能多的减少;只有把握好系统设计,才能保证软件的根基比较稳固。也即是它们很大程度上决定着软件开发的周期以及寿命。另外,完美的开发团队和开发过程的合理控制是软件成功开发关键要素之一。
>> 软件工程
  过去几十年,软件技术经历了一系列重要的变化和发展,构成软件的软件实体的粒度不断增大,软件基本模型越来越符合人类的思维模式;软件运行平台的能力不断增强,越来越多地屏蔽掉计算机底层的复杂性;软件支撑平台的能力不断增强,越来越多地屏蔽了软件开发过程的复杂性;软件技术的应用范围不断扩大,越来越广地渗透到人类生活的各个方面。网络技术的发展日新月异,基于新一代网络技术的各种应用的融合是大势所趋。网络新技术与软件新技术的相互促进必将为人类创造一个更为灿烂多彩的IT世界。
  这世上同时存在着两种对立的声音:本质决定成败和细节决定成败。偏好本质的人喜欢说本质论。偏好细节的人则喜欢说精细化管理。但如果在较长的时间轴上考量这两种观点,就会发现他们之间并不真的对立。

----------------------------
程序员几个发展方向:
    走向管理:有两种原因会使部分程序员走上管理的道路,一是与生俱来的对  权力的欲望;一是在程序员的岗位上对自我价值重新认知。对于前者如果欲望过去强烈就会急功进利,很容易走捷径,会出现不能服众的情况。对于后者自我价值的重新认知是一个缓慢的过程,一个程序员在长期的开发过程中会慢慢发现一个人的力量是有限的,做一件事情必须要借助其他人的帮助,如果需要别人的帮助就必须能影响他人。从而认识到一个人的价值对公司来说几乎是不值一文,如果想让自己的价值得到提升必须要影响到他人,借助他人的力量使自己的价值得到最大提升。
    走向行业:即成为某个行业的行业专家。一般来说走这个方面需要机遇,需 要长时间的从事某一个领域的开发与管理工作,对某个行业无论是大局还是细节都了如指掌。
    走向专业:即成为架构师。一般来说这些人对开发有狂热的兴趣,逐渐的从代码的编写中认识到设计与软件架构的重要性,并对软件设计乐此不疲。
    自已干:这些人是野心家,也是风险最大的一条路。好多程序员都认为软件开发不需要什么成本,只要能接到单子完全可以自己干,自己当老板。然而很少了解只有长期持续的订单才是一个企业不断稳定发展的最重要因素。

------------------------------
程序员具备:恒心、耐心、细心
  兴趣决定一切:当一个人把自己的职业仅当成谋生的手段时,那他的人生将会失去很多乐趣。如果你不喜欢软件开发,那最好离开这个职业,没有兴趣只会让你一事无成。
  自我学习:做程序员就是这样,走上了一条永无止境的学习之路,不学习新知就会被淘汰。然而学习也是有方法的:1)拿来主义;2)知其然也要知其所以然,细细分析与研究别人的优秀框架会对你大有好处。
  自我修复:不断的重构与完善你的代码,是对所学知识的达到溶汇贯通的最简捷的途径。
  找到一个圈子或老师:有时别人的一句话会对你的点拨很大。对于知识点有时只是一层窗户纸,看似玄妙,也许你差的只是那灵光一现或是换一个角度思考,这并不难。难的是将你所了解的知识点串接起来,使其能上下贯通运用自如,而在这点上通过一己之力会变得非常的漫长与痛苦。

---------------------------
    软件开发要融入工程化的思想,要有高度的设计能力,关注更多的软件运行属性和设计质量属性,同样的系统,不同的软件人员会做出完全不同的软件,正规,高效的开发团队要比游击队开发团队不只高出几十倍。软件开发,不仅仅关注功能,性能,更应该去研究可维护性,可扩展性等质量属性,不仅仅只关注代码,而更要上升为设计,复用等。
还有更高层次的设计开发,软件重构,模块化,系统构架,搭建统一软件平台,度量软件质量等.软件开发人员,要作的事情太多了,软件实在是一个浩大的脑力工程,甚至会让人觉得这是一个投入/产出比最低的行业,因为要学习的知识实在太多了,每时每刻都要处于不断的学习和更新当中.

   这是指导整个软件开发的指南,这里包括软件从开始到结束的整个过程,包括制定计划、需求分析和定义、软件设计、程序编写、软件测试、运行/维护,这六个步骤每一步的执行是保证项目成功完成的保证,以后将对这六个过程进行一一的分析。
软件生命周期
   其中包括:瀑布模型、演化模型、螺旋模型、喷泉模型、智能模型。
模型特点:
   瀑布模型:周期长,跟用户见面比较晚,从计划到和用户一起计划外,其他的部分用户和开发人员是分离的,用户不能直接把问题直接反应过去。
   演化模型:由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。做两次第一次只是实验开发,其目标只是在于探索可行性,弄清软件需求第二次则再此基础上获得较为满意的软件产品
   螺旋模型:多次原型反复并增加风险评估的开发模型
喷泉模型:有严格的数学理论和形式化的技术支持,但目前在所研究试验阶段,不能实现
   智能模型:1.通过领域的专家系统,可使需求说明更加完善、准确和无二义性。2.通过软件工程的专家系统,提供一个设计库支持,在开发过程中成为设计者的助手。3.通过软件工程知识和特定应用领域的知识和规则的应用来提供对开发的帮助。但是,要建立适合于软件设计的专家系统,或建立一个即适合软件工程又适合应用领域的知识库都是非常困难的。

--------------------------------
对软件的基本认识
    i.开发软件为什么要工程化
有很多人,尤其是很多学生存在这样的误区,平时感觉自己能用语言写一个闹钟,写一个记事本等一些小东西,就以为自己一个人就可以完成一个小的项目,所以很不理解为什么开发软件有时候不能让一个人独立完成,也有个人英雄主义在作怪。其实原因很简单,比如说,高中我们做题应该很有体会,感觉一张卷子一点问题也没有,但是等成绩下来的时候总不是一百分,为什么,因为我们很难发现自己的错误,哪怕是重复很多次,这是思维定势。
    ii.软件开发与其说是技术活,不如说是规范活.
软件开发是程序员奇思妙想的时候,用什么方法都是随心所欲的,有的人则为了追求速度或者说是彰显个性而用一些很不大众的算法,以为这是体现自己高明的地方,恰恰相反,这真是不懂编程的表现,一般的项目一般都不是一个人来完成的,它分为开发阶段和维护阶段,然而维护阶段一般又非开发人员所为,所以如果代码技术性过于高,反而对后面的维护不利,另外,IT是个跳槽率很高的职业,如果一项工程没有完成就离开,剩下高明的算法要让谁看呢,出于对公司的考虑,最好还是规规矩矩,符合大众的口味。
    iii.文档的重要性
很多人,尤其是大学生,刚开始学习编程的时候,难免会有一些急功近利的想法,想快点做出点成绩,但是往往欲速则不达,就想前段时间做的机房收费系统一样,在一种完全没有文档的情况下,虽然最后做完了,而且也跑起来了,问题似乎也没有想象的那么多,但是其中的过程只有自己知道,代码啦,数据库啦都不忍心看,可以说是乱七八糟的,想加个数据库就加,想加个功能就加,很有文档,就像没有目的的去雕塑,雕成什么样,算什么样,而且很多情况是中途发现需要这个样子了,才发现,那部分材料已经被自己给去掉了,所做的程序自然没有规律可言,如果现在有人说那个机房收费系统那个功能要修改一下,我估计我的得全盘改动.
    iv.开发软件为什么时间总是那么紧,开发的人总是那么累
曾经有过单纯的想法,为什么工作非要加班呢,多用些人不就行了吗,人多力量大嘛,但是自从软工看完后便觉得这种想法荡然无存了,其实,原因并不是说老板多黑心,而是取决于软件开发工作的性质,这是一项需要智慧的工作,首先,这不是工厂,没有机器,只有手工;其次,这里需要残杂很大一部分人文因素,比如说个人习惯,同样输出一个结果,两个人的算法往往就有很大的区别,所以参加人数越多,在项目中的不同因素就越多,因为各个模块之间的衔接问题就越大,所以参加人数应该是少而精,所以这也是为什么蓝精灵体中说程序员是“聪明而辛苦”,聪明在他们每个人都是一个设计师,辛苦在一项任务,自己又无可取代的位置,只能是自己的事情自己干。
    v.如果自己无法适应社会中的潜规则,那么就学编程吧(不知道这样说对不对)
从我目前的认识来看,突然发现软件行业是整个社会的一片净土,这里不像其他行业一样靠嘴吃饭,更多的是需要能力,除非老板想赔钱,不然绝对不会用一个靠关系而不是靠技术的人来当项目经理,因为这个关系到整个项目生存的决定性因素;虽然同事之间保持着微妙的竞争关系,但是一个项目要想如期完成必须要和同事上司好好合作;做软件开发的每个项目的每个功能,无处不能体现全心全意为人民服务的宗旨,所以开发软件的人无疑又是心细如丝,必定是善良的,体贴的,嫁人就嫁程序员哦。所以,以此可见,这里的确是一片净土。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈对软件工程的认识与理解 的相关文章

  • 永磁同步电机矢量控制到无速度传感器控制学习教程(PMSM)(一)

    一个阶段的学习结束了 整理了之前的过程中的学习成果 已经过了工作的年纪 在这里稍微出一下自己做的一套永磁同步电机的教程 从基础的矢量控制 到应用性较强的MTPA 弱磁控制等 最后深入到无速度传感器的控制 搜集了三种无速度的方法 足够大家从基
  • html/css笔记 table表格文本垂直水平居中对齐方法

    简介 平时工作中开发经常会遇到html网页样式设计 这里记录一下笔记方便后期查看 也顺便给其他人提供一个参考 HTML 文本垂直水平居中对齐方法 一 css样式 水平居中 text align 应用于块级元素的文本水平居中 text ali
  • React 中ref的几种用法

    React 中ref的几种用法 1 字符串 通过 this refs a 来引用真实dom的节点 dom 节点上使用
  • 结构光相机国产、非国产统计参数对比分析

    结构光相机国产 非国产统计参数对比分析 1 Kinect v1 Kinect v1深度相机拥有一个RGB彩色摄像头 一个红外线CMOS摄像机和一个红外发射器 相机的红外线CMOS摄像机和红外发射器以左右水平的方式分布 该相机采用的是以结构光
  • Unix环境下Oracle数据库完全优化详解

    Unix环境下Oracle数据库完全优化详解 2007 04 19 12 54 02 作者 changelive 浏览次数 14 文字大小 大 中 小 进入论坛 如今的优化己经向优化等待 waits 转型了 实际中性能优化最根本的出现点也都
  • Windows驱动开发第11课(R3与R0通信交换数据第二节)

    在上一节课我们证实了在用户层调用CreateFile函数时 相应的在驱动层会响应一个IRP MJ CREATE的事件 这节课我们来看看用户层和驱动层是怎么交换数据的 首先来介绍一下控制码 由CTL CODE宏创建 是一个唯一的32位系统I
  • 数据库系统原理(第二版)知识点总结

    目录 第一章 概述 基本知识 数据模型 数据模型的组成要素 数据模型的分类 数据库系统的结构 第二章 关系运算 2 1 关系运算语言 1 关系代数语言 第三章 数据完整性 实体完整性 主属性的取值不能为空值 主属性的候选键的取值要非空且唯一
  • Python中的一些特殊函数

    https www cnblogs com maybe2030 p 4678920 html
  • centos7系统启动流程

    开机自检 gt 查找第一启动项设备 gt 加载第一启动项设备上的bootloader 存在于MBR中 gt 加载内核 initramfs gt 只读加载rootfs gt sbin init 即systemd
  • Flask 数据库 连接池、DBUtils、http 连接池

    1 DBUtils 简介 使用 DBUtils 简介 DBUtils 是一套用于管理 数据库 连接池 的Python包 为 高频度 高并发 的数据库访问提供更好的性能 可以自动管理连接对象的创建和释放 并允许对非线程安全的数据库接口进行线程
  • vector 查找_怎么写出无bug的二分查找算法代码

    封面图来自 geeksforgeeks 1 简介 二分查找算法是一类比较基础的算法 然而想要短时间内 写出二分查找的无 bug 版本 也不是很容易的 为此我查找了一些资料 终于弄清了二分查找算法的套路 在此分享给大家 也算是对自己学习知识的
  • Chisel3实践用例,安装

    新建SBT工程 sbt version 1 2 8 name ScalaExample version 0 1 scalaVersion 2 12 8
  • @Transient 理解

    transient使用小结 1 一旦变量被transient修饰 变量将不再是对象持久化的一部分 该变量内容在序列化后无法获得访问 2 transient关键字只能修饰变量 而不能修饰方法和类 注意 本地变量是不能被transient关键字
  • YOLOV2个人理解总结

    YOLOv2框架图 YOLOv2改进之处 1 Batch Normalization BN Batch Normalization 层简单讲就是对网络的每一层的输入都做了归一化 这样网络就不需要每层都去学数据的分布 收敛会快点 原来的YOL
  • 面试题:如何测试登录功能

    最近在做一个创新项目 这个项目有二个平台 每个平台都有前后端 故有四个系统 每个系统都有登录功能 而且不同系统代码设计方式都有所差异 所以就这个登录功能而言就要测试四次 看似一个简单的登录功能其中设计的测试点也是相当复杂 今天就讲讲如何测试
  • php scp跨服器拷贝文件到sftp

    一般要装php的ssh2扩展 比较麻烦 所以转念一想 为什么不用我们经常用的scp 但是scp跨服务器拷贝需要输入密码 这里就用到了一个工具试试sshpass 可以指定密码 1 工具安装 ubuntu安装 sudo apt get inst
  • 【问题解决】org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io

    1 出现问题异常 核心错误输出 org springframework dao QueryTimeoutException Redis command timed out nested exception is io lettuce cor
  • B站马士兵python入门基础版详细笔记(3)

    一 input函数的使用 他的返回值类型一定是str类型 m1 input please input the first word m2 input please input the second word print int m1 int

随机推荐

  • c++库 Android调用

    如果您想在Android应用程序中使用C 库 您可以通过以下几个步骤封装C 库以供Android调用 创建一个新的Android项目并设置C 支持 在Android Studio中创建一个新的Android项目 并选择包含C 支持的选项 将
  • [学C日记]---递归

    递归 自己调用自己 大事化小 必要条件 1 有限制条件 当满足限制条件时 递归便不继续 2 每次递归调用之后越来越接近这个限制条件 3 递归层次不能太深 太深容易栈溢出 每次递归调用都要给函数分栈区 次数过多容易空间不足 1 一串数字挨个输
  • 深聊自动化测试之:小鱼整理21条避坑指南,让你完美运行自动化

    自动化测试避坑总结 1 引言 2 避坑内容总结 2 1无法定位到元素 2 2 Indentation Error 2 3 PO设计模式类 2 4 页面封装类中没有已定义函数的问题 2 4 1 提示没有该方法 2 4 2 没有定义好的函数 2
  • Android Netd

    一 概述 所谓 Netd 就是Network Daemon 的缩写 表示Network守护进程 类似的命名还有很多 例如 Vold Volumn Deamon Rild Radio Interface Layer Deamon Netd负责
  • 根据面试的过程修正2022年学习规划

    上周由于全员降薪 所以对于在招聘网站上这30天内主动给我打招呼的hr和猎头 我都投了简历 结果是投简历16家公司 给与面试机会的七家 斩获了两家offer 一家七百多人的军事仿真类的公司 一家小到不能再小的ue4公司 好的方面是还能找到工作
  • python爬虫-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目 整理的原因是 爬虫入门简单快速 也非常适合新入门的小伙伴培养信心 所有链接指向GitHub 祝大家玩的愉快 O O WechatSogou 1 微信公众号爬虫 基于搜狗微信搜索的微信公众号爬虫接口
  • Redis6.2/5.0 集群两种快速搭建方式

    一 集群常识 1 redis在3 0之前是集群 仅支持单实例的 3 0以后开始支持集群 2 3 0的集群命令也不是那么亲和 需要用ruby编写的脚本 而且需要登录redis客户端操作 启动 增删节点 移动槽位等 redis 5 0以后 可以
  • 楚留香获取服务器信息卡住了,楚留香手游角色卡住不动怎么办 卡死解决办法...

    楚留香手游角色卡住不动怎么办 来看看卡死解决办法 由于手机 网络和服务器等等原因 玩家会出现角色卡住动不了 操作界面消失 无法切换场景等等情况 非常影响游戏体验 来看看怎么解决吧 楚留香手游角色卡住不动怎么办 如果您在游戏中遇到角色卡住 无
  • 建立docker私有hub

    docker是一个非常好用的虚拟化工具 下面给出建立私有docker hub的方法 docker将私有hub的环境打包在registry image中 执行指令 docker run p 5000 5000 registry 这条指令启动一
  • F - LIS on Tree

    F LIS on Tree atcoder jp 问题描述 树上LIS 普通LIS O n n void solve int n cin gt gt n vector
  • 【Allegro 17.4软件操作保姆级教程二】布局前准备

    由于Allegro 17 2软件出了故障 干脆新安装了17 4版本 后续的教程截图都用17 4的 操作逻辑是差不多的 1 生成和导入网表 1 原理图绘制完成 导出网表 在Capture中 选中原理图dsn文件 tools create ne
  • 企业服务端接口认证案例

    接口认证方式 调用方要向管理员获取 appkey 和 secret appkey 调用方唯一标识 方便 HTTP API 统计与维护 secret 密钥 用于生成 HTTP API 校验所需的 token 值 调用方每次请求都需要带上当前时
  • PPP协议、PPPoE协议、L2TP协议的关系

    1 简述 首先对这3中协议做一个简单的描述 协议 协议类型 描述 PPP 点对点链路层协议 应用最广泛的点对点协议 可应用在多种网络 改善了SLIP协议的不足 PPPoE 点对点链路层协议 对PPP协议进行扩展 将PPP用于以太网上 L2T
  • CNN,Transformer,MLP三分天下

    title 论文列表 1 MLP Mixer MLP Mixer An all MLP Architecture for Vision 2 MetaFormer MetaFormer is Actually What You Need fo
  • 原生JS实现贪吃蛇游戏

    原生JS实现贪吃蛇游戏 贪吃蛇游戏 原生JavaScript 贪吃蛇游戏思路分析 游戏思想 面向对象的思想 三个js文件分别代表三个对象 三个对象相互独立 在HTML中控制全局 使用面向对象思想的好处 贪吃蛇游戏采用面向对象的思想去实现 我
  • 2023年第七届航空航天、机械与机电工程国际会议(CAMME 2023)

    2023年第七届航空航天 机械与机电工程国际会议 CAMME 2023 重要信息 会议网址 www camme org 会议时间 2023年2月18 20日 召开地点 中国广州 截稿时间 2023年12月30日 录用通知 投稿后2周内 收录
  • 微信公众号开发笔记6(WEUI组件实现图片上传、预览、删除)

    没有废话直接上代码 1 新建HTML5 样式自行百度下载
  • 数学篇(二) 方差、标准差、协方差

    1 均值 均值就是将所有的数据相加求平均 求得一个样本数据的中间值 2 标准差 标准差也被称为标准偏差 公式如下所示 简单来说 标准差是一组数平均值分散成都的一种度量 一个较大的标准差 代表大部分数值和其平均值之间差异较大 一个较小的标准差
  • 方差分析 / 主成分分析 / 因子分析 / 聚类分析

    一 方差分析 水平 因素的不同状态 分组是按照因素的不同水平划分的 因变量 在分组试验中 对试验对象所观测记录的变量 它是受各因素影响的变量 常见的方差分析类型 单因素方差分析 多因素方差分析 单因素方差分析 是指检验由单一因素影响一个因变
  • 浅谈对软件工程的认识与理解

    数据结构与算法 计算机组成原理 计算机操作系统 计算机网络 软件工程需重视的 软件工程涉及的资源有 人力 资金 时间的合理分配 涉及到文化与管理等 及各种规划化 软件开发是一个把用户需要转化为软件需求 把软件需求转化为软件设计 用软件代码来