软件工程中的经济行为
1. 在传统财务概念下,软件公司或者商业公司IT部门的员工,是公司的成本中心。对于一个定额合同项目,员工工资成为项目中唯一的可变成本。
2. 因此,尽可能的缩短工期,减少人员投入就成为缩减成本的基本方式。
3. 软件的分工模式,以及传统的waterfall——流水线的工作方式,决定了问题发现的越早,修正的成本越低。
4. 有两种手段来减少工期,工程上采用迭代,并让迭代周期尽可能短,以及从技术上对于问题域进行分解,建立有效的边界。
5. 迭代周期减少的目的是减少分工环节中尤其是第一个环节的不确定性带来的问题,而对问题域的技术分解是解决开发环节的质量问题。因为通常维护成本是开发成本的3倍,提高质量可以减少项目后期对前期开发代码的维护成本。
6. 同时,分解的好坏将决定了是否可以在开发环节中引入测试环节的工作,从而提供质量;并减少修正缺陷以及测试的工作量。
7. 质量是难以衡量的,通常以能否工作为准。而通常意义上的高质量代码是可以较容易调整以及适应变化,但是不容易识别。
为保障质量,通常的手段是代码审查,但在工程中完全代码审查承保高昂,同时工作量大,并难以评估(评估结果有时因人而异)。而各种各样的代码规范检查工具只能保障最低要求。
8. 在进度落后于计划时,管理人员通常会下达行政指令——要求项目成员全力以赴赶上计划。在此情况下,工程人员通常牺牲质量换取开发进度,同时把质量问题推后发生。
9. 软件开发是脑力劳动 而非体力劳动;因此工程人员有很大的权利,他们有选择质量和进度的能力,工程人员的工作状况严重影响产出和进度。而上述情况的发生是人在利益环境下的自然选择,对于工程人员的指责无济于事。
10. 正确的工作方式是,为工程人员创造合适的条件以便工程人员做正确的事。
软件架构师的工作
软件工程的三要素:工具,方法和过程。然这所有的一切是规范人的分工和行为,提高人的生产效率,降低成本。
架构师的工作围绕这个三个要素进行。
1. 工具评估(包括开发平台,开发语言,开发工具以及辅助工具)。
A. 用好的工具提高生产效率,使人关注于有效工作内容,从而减少不必要工作量,减少成本。
特别对于分工下的团队开发尤为重要。典型的分工是流水线,一步接一步。减少上一个环节的工作量,如开发环节,不仅提前下一个环节——测试的时间。
B. 用好的工具保证质量——另一种生产效率。
保证质量有利于减少工作上的反复,尤其影响到测试工作量,从而减少成本。
提高生产效率的同时有利于保证士气。
2. 方法论选择
解决问题的办法就是分治。要被分解问题域是:数据(模型),计算和流程;而如何分解问题便是架构师的取舍啦,流行的有OOD和AOSD两种。
在大比例结构中必需考虑的是:抽象分层,技术分层以及模块切分。抽象分层(包括模型,计算以及流程抽象)以及模块切分是基于业务的纵向以及横向分解。而技术分层则是对于业务逻辑的技术分类,分类本身还可能涉及到平台技术限制。所有分解都涉及到上下文的边界建立——不仅仅是业务逻辑同时也是技术边界。
分解问题必需考虑人的因素,降低分解后的知识学习阻力,保持知识的内聚以及有效组织是保证分解成功的关键。这些工作将有效保证开发人员不做出破坏系统分解边界的行为。
考核分解的有效性:保证开发的效率。分解的目的是降低解决问题的难度,从而提高生产效率,如果分解方案增加了系统适应变化的能力,那么分解方案可能是错误的。
除了开发方法还有开发方式,已知的三种开发方式:编程式,声明式以及产生式。
开发方式的选择和技术分层有相当的联系,一般认为除了Service以及Model,其它的技术分层代码尽量使用声明式以及产生式开发方式来完成,减少建立以及维护成本,提高效率。
对于Domain Model还要分析model的生命周期,明确设计主题。
3. 过程选择
选择的过程,最重要的是让问题及早暴露(降低成本),尽早让用户使用(创造价值).
敏捷方法就是要让问题更快的暴露,让功能更快的实现。
文档,文档是过程的一个重要产物。文档也是保证知识传递的。
在问题分解情况下的开发角色分为三种:开发者,使用者以及维护者。开发者写的文档给后两者看,最最关键是写给使用者的文档。
所有的决定都是基于利益和成本考虑的
----------
[原文链接] http://tech.it168.com/KnowledgeBase/Articles/4/2/2/4225c088392dbb99a5b4ac3c1b4546e9.htm
分享到:
相关推荐
### 软考系统架构师案例分析知识点整理 #### 一、系统规划 - **系统项目的提出与预可行...以上内容涵盖了软考系统架构师案例分析中关键知识点的详细解析,旨在帮助考生全面理解和掌握系统架构设计的相关理论和技术。
- **软件架构师的工作特征** - 解释软件架构师的角色和责任,强调其在整个软件开发生命周期中的关键作用。 - **软件架构的规划方法** - 提出一套完整的规划流程,从需求收集到设计实现,确保每个环节都能得到妥善...
- **确定软件架构**: 选择合适的软件架构模式,如客户端-服务器、微服务等。 - **确定关键要素**: 明确项目的成功因素,比如性能指标、安全性要求等。 - **确定计算体系**: 选择适合项目的计算平台或技术栈,如...
41. **软件工程经济学**:研究软件开发和维护的成本效益分析。 42. **软件工程过程模型**:是软件开发过程的抽象模型,如瀑布模型、螺旋模型等。 43. **软件过程评估**:是对软件开发过程的有效性和效率进行评估...
在软件工程中,架构不仅涉及系统的结构和行为,还涉及到功能、性能、可维护性、可扩展性等多个方面。RATIONAL公司对软件架构的定义进一步强调了它在满足功能性、可用性、性能、重用、可理解性、经济和技术约束等方面...
### 软件工程与软件工效改进 #### 第1章 软件工程概述 **软件工程定义:** 软件工程是一种系统化的方法学,它应用于软件的设计、实现、测试和维护过程。其核心目标是构建高质量、高效率且可靠的软件产品。 **软件...
在实际工作中,除了这些核心文档,软件工程还会涉及到更多的文档,如系统设计文档、测试计划、项目进度报告等。每个文档都有其特定的目标和受众,它们共同构成了一个完整的软件开发过程。因此,熟练掌握并正确运用...
- **优秀软件架构师的重要性**:强调了在这个快速发展的技术时代中,优秀软件架构师的重要性和需求。 以上内容涵盖了高级系统架构设计的关键知识点,旨在为读者提供全面而深入的理解,帮助他们掌握先进的架构设计...
3. 方案的制订和改进:确定软件架构(如.NET或J2EE),识别关键要素,并制定计算体系。 4. 新旧系统分析和比较:根据技术水平和商业价值,选择合适的演化策略,如改造、集成、继承或淘汰。移植工作的五个阶段包括...
《2023年电大期末考试试题带答案软件工程》文档主要涵盖了软件工程领域的多个核心知识点,包括软件开发模型、可行性研究、软件设计原则、系统架构等方面。以下是相关知识点的详细说明: 1. **软件成熟度模型(SW-CMM...
根据Mary Shaw的观点,软件架构是计算组件及其交互的描述,而决策派则认为,架构涉及到关于软件组织、结构元素的选择、接口设计、行为表现以及一系列的技术和经济权衡。架构不仅是软件的结构和行为,还涉及功能、...
这份文档是2022年电大期末考试的软件工程试题,包含了选择题和应用题。以下是基于题目内容解析的一些关键知识点: 1. **软件成熟度模型(SW-CMM)**:美国卡内基·梅隆大学制定的SW-CMM是软件成熟度模型,它是一个...
接着,将专业领域进行细分,设定不同等级,比如咨询顾问、UI工程师、架构师等,并根据工作内容、任务数量、流程规范化程度和专业深度来设置等级标准。 每个等级应有明确的条件,包括项目经验、必备知识、学历要求和...
根据给定的“系统架构设计师考试大纲”,我们可以深入解析各个知识点及其重要性,为准备考试的人提供详尽的指导。 ### 1. 考试要求 #### (1) 具有系统工程的基础知识 系统工程是将工程原理应用于解决复杂问题的...
例如,某软件公司将其专业分为咨询顾问、UI工程师、架构师、研发工程师、实施工程师和测试技术支持等多个类别,并设定不同等级如新手、独立工作者、骨干和专家,每个等级又有进一步的细分。 在薪酬设计方面,应考虑...
UML是一种标准化的建模工具,用于软件工程中描述、可视化、构建和文档化系统。它提供了一种图形化的方式来表达系统的结构和行为,包括类图、对象图、用例图、序列图、协作图、状态图、活动图和组件图等。系统分析师...
全国计算机软件资格水平考试是针对IT专业人士的一项权威认证,旨在评估和证明个人在特定领域的专业...通过深入学习和实践这些知识点,系统分析员不仅能更好地准备考试,还能在实际工作中提升分析和解决复杂问题的能力。
3. **软件项目相关文档**:这些文档是软件工程的标准组成部分,对于确保项目的成功至关重要。 - **可行性研究报告**:分析项目的经济、技术、法律、操作和时间等方面的可行性,决定项目是否值得进行。 - **项目...